本サイトは、快適にご利用いただくためにクッキー(Cookie)を使用しております。
Cookieの使用に同意いただける場合は「同意する」ボタンを押してください。
なお本サイトのCookie使用については、「個人情報保護方針」をご覧ください。

最新情報

2017.10.27

ランサムウェア「Bad Rabbit」の内部構造を紐解く

2017年10月24日頃からウクライナやロシアを中心に「Bad Rabbit」と呼ばれている新たなMBR破壊型かつワーム型ランサムウェアの脅威が拡大しています。


結論から述べると、「Bad Rabbit」はNotPetyaのように横展開を行うワーム挙動を持ち、ファイルの暗号化の他、ディスクも暗号化対象に含むランサムウェアとなります。この、ディスクの暗号化や、認証情報/パスワードを利用して横展開するワーム活動を行う挙動を持つ点等はNotPetyaと同じであり、NotPetyaと同様の注意や対策が必要です。また、ネットワークを介したワーム活動の範囲は、NotPetyaと同じくローカルネットワークの範囲に限定されるため、WannaCryほどの全世界的な被害拡大は発生しないものと想定しています。

NotPetyaと異なる点としては、ワーム本体であるDLLをドロップする親検体(EXEファイル)が存在し拡散に使用されていることが挙げられます。現在のところ、感染の初期経路としてはWebからのダウンロードおよび手動実行による感染であると報道されていますが、大元がEXEファイルである以上、展開方法は従来までの脅威と同様、様々な手口が利用可能であるため、引き続きメールやその他経路についても十分に注意が必要です。また、「Bad Rabbit」は横展開を行うワーム活動の際、マルウェア内部にハードコーディングされたユーザー名とパスワードの組み合わせを総当りで試行します。そのため、アクセスログの確認や、ログイン施行の上限数の設定、脆弱なパスワードの設定や運用は行わないよう徹底することが、組織内における被害拡大を考える上で予防策の一つとなるでしょう。


※なお、ローカルネットワークにおける横展開時にEternalRomanceと呼ばれる脆弱性を利用しているという情報が一部出てきており、弊社ではその点について引き続き調査を実施中ですが、EternalRomance の脆弱性に対しては、すでに今年3月の修正プログラム「MS17-010」が公開されていますので、今一度適用状況の確認が必要です。


以下からは、弊社マルウェア解析チームによるBad Rabbitの解析結果のうち、現時点までに判明した詳細情報について記載しています。



■「Bad Rabbit」の構造と各ファイルの主な目的


「Bad Rabbit」を構成するファイルの全体関連図は以下のようになります。大元となるドロッパーを始めとし、数多くのファイルが関連し攻撃に利用されていることがわかります。


図1
図1 「Bad Rabbit」を構成するファイルの全体図

上記の全体構成図において、主なファイルを目的別に表すと以下のようになります。

(マルウェアの特徴を黄色文字で表しています)


図2
図2 上記図において「Bad Rabbit」の主なファイルを目的別に表した図


■感染の流れと各ファイルの挙動


「Bad Rabbit」はWebサイトからダウンロードされ、ユーザーが手動で実行することにより感染します。

「Bad Rabbit」の大元の本体となる実行ファイル(※以降ドロッパーと記載)はアイコン偽装が施されており、以下の図のようにAdobe Flash Playerのインストーラーを装っています。


図3
図3 Adobe Flash Playerのインストーラーを装った「Bad Rabbit」のドロッパー
(図のファイル名はハッシュ値に変更したもの)

このドロッパーのバイナリには、実行時にUACを必要とすることを示すマニフェストファイルが埋め込まれており、実行時に管理者権限が必要となります。そのため、実行時に表示されるUACをユーザーが許可しない場合「Bad Rabbit」は動作しません。


大元となるドロッパーは実行されると以下のパスに不正なDLLを作成します。


C:\Windows\infpub.dat (「Bad Rabbit」のドロッパーがドロップするDLLファイル)


図4
図4 「Bad Rabbit」が「infpub.dat」を作成するコード

このDLL「infpub.dat」には2つのエクスポート関数が用意されていますが、本来一般的なDLLに存在し呼び出し時に利用されるはずのエクスポート関数名が存在しません。そのため、ドロッパーはDLLのエクスポート関数を呼び出す際に「序数」という値を指定することで名前のないエクスポート関数の呼び出しを実現させています。この関数名が付与されていないという特徴は、6月に話題となった「NotPetya」に類似する部分の一つであり、解析を困難にさせるテクニックの一つと考えられます。


図5
図5 「Bad Rabbit」のエクスポートテーブル

その後、ドロッパーは正規プログラムであるRUNDLL32.EXEに対し、以下の実行引数を付与することでDLLのエクスポート関数(序数1)を呼び出し実行します。


C:\Windows\System32\rundll32.exe C:\Windows\infpub.dat,<序数> <整数値>
(例:C:\Windows\System32\rundll32.exe C:\Windows\infpub.dat,#1 15)




図6
図6 「infpub.dat」が序数を引数に呼び出される様子(デバッガによる確認)

「infpub.dat」(DLL形式)のリソースセクションの文字列テーブル内には以下の図の通り複数のバイナリデータが暗号化された状態で格納されています。

なお、この文字列テーブルは本来アプリケーションが利用する文字列を格納するための領域であり、バイナリを隠蔽するために利用されることは基本的にないため、検知回避や解析妨害の目的と考えられます。


図7
図7 「infpub.dat」(DLL形式)の構成図

図8
図8 リソースセクションの文字列テーブルに格納されたバイナリデータ

上記の構成図にある通り、「infpub.dat」(DLL形式)のリソースセクションにはオープンソースのパスワードダンプツールである「Mimikatz」に類似するパスワードダンプツールが64ビット版/32ビット版それぞれ個別で暗号化された状態のまま含まれており、感染環境のビット数に併せて一時的に復号・作成され利用されます。なお、このパスワードダンプツールは用済みになり次第削除されるため、感染環境には残りません。作成される際は、GetTempFileNameWというAPIを利用し次のようなランダムな一時ファイル名でWindowsフォルダ内に作成されます。


C:\Windows\<ランダムな4文字の英数字>.tmp
(例:C:\Windows\683B.tmp)


なお、Bad Rabbitは作成したパスワードダンプツールと名前付きパイプによりプロセス間通信を行います。この点も「NotPetya」と類似する挙動の一つとなります。


図9
図9 名前付きパイプの情報を引数に渡してプロセスを起動している様子

Bad Rabbitは、上記の窃取したパスワードのほか、以下に挙げるハードコーディングされた文字列を辞書攻撃のユーザー名/パスワードとして使用します。


図10
図10 Bad Rabbitが辞書攻撃で利用するログイン文字列リスト(上記はユーザー名)

続いてBad Rabbitは、「infpub.dat」(DLL形式)のリソースセクションから以下のファイルを作成し、フィルタドライバとしてシステムに登録します。


C:\Windows\cscc.dat ・・・正規のディスク暗号化ツールのフィルタドライバ


この「cscc.dat」は調査の結果、正規のオープンソースソフトウェアのディスク暗号化ツール「DiskCryptor」のコンポーネントとなるフィルタドライバであり、調査時点(2017/10/25)で公式サイトから入手可能な「DiskCryptor」の「dcrypt.sys」という正規ファイルとハッシュ値が同じであることがわかりました。つまり、Bad Rabbitはディスクの暗号化を正規アプリケーションの機能を利用して間接的に実現させており、アンチウイルス対策製品によるランサムウェアの挙動検知を困難とさせる非常に効果的なテクニックを利用しているといえるでしょう。


Bad Rabbitはこのフィルタドライバのインストール処理において、まずWin32APIによるフィルタドライバの登録を試み、それが失敗した場合、レジストリを直接操作することで再度システムへの登録を試みます。こうした慎重な処理の進め方は、「NotPetya」が行っていた慎重なシャットダウンの処理方法とやはり重なるところがあると感じます。


図11
図11 いくつかの手段を用意する慎重さが伺える処理(サービスの登録処理)

なお、Bad Rabbitの一部である「infpub.dat」は、特定のファイルが存在すると処理の継続を終了する、いわゆる「ローカルキルスイッチ」が存在します。具体的には以下のファイルが存在した場合、自身を終了する動作があります。


C:\Windows\cscc.dat・・・「infpub.dat」が存在を確認するファイル(ローカルキルスイッチ)


図12
図12 ローカルキルスイッチとなる挙動

また、「infpub.dat」はリソースセクションから以下の不正ファイルを作成し、サービスとして自動起動されるようにシステムに登録します。


C:\Windows\dispci.exe ・・・「infpub.dat」によって作成されサービスに登録される不正ファイル


この実行ファイル「dispci.exe」は、正規のディスク暗号化フィルタドライバである「cscc.dat」を利用しディスクの暗号化を行うことを主な目的としたランサムウェアです。タスクによって再起動時に起動するように設定されるため、感染時は再起動するまで動作しません。(なお後述の通り、「dispci.exe」は復号ツールの役割も担っています。)


「infpub.dat」は、以下に挙げるようないくつかのタスクをシステムに登録する挙動があります。


次のタスクにより、感染後一定の時間が経過すると再起動が行われます。


図13
図13 一定時間後に再起動するタスクを作成する処理

次のタスクにより、システム起動時に「dispci.exe」が自動起動されるようになります。


図14
図14 システム起動時に「dispci.exe」が自動起動するタスク

また「infpub.dat」は以下のように、イベントログおよびUSNジャーナルの削除を行います。


図15
図15 「dispci.exe」によるイベントログ・USNジャーナルの削除に関するコード

Bad Rubbitのコンポーネントである「infpub.dat」にはワーム活動を行う挙動があり、自身のコピーを配布するために、列挙された範囲のローカルネットワークアドレスを持つ端末への侵入を試みます。

以下は「infpub.dat」がDhcpGetSubnetInfo APIおよびDhcpEnumSubnetClients APIを利用し、DHCPサーバで定義されたサブネットの列挙を行う際のコードです。


図16
図16 DHCPサーバで定義されたサブネットの列挙を行うコード

以下も同じく「infpub.dat」が持つワーム活動の挙動の一つであり、リモート先の別端末における管理共有に「cscc.dat」(ローカルキルスイッチ)が存在するかどうかを確認し、存在しなければ自身のコピーを配置します。


図17
図17 リモート先の別端末における管理共有へ配置するコード

「infpub.dat」はCredEnumerateWを利用することによりWindows資格情報を利用した接続も試みます。


図18
図18 CredEnumerateWを利用することによりWindows資格情報を利用

Bad Rabbitは、暗号化対象によって以下の2つのプログラムを使い分けて暗号化を行います。


「infpub.dat」・・・感染直後のファイル暗号化処理を担当(ドロッパーにより起動)

「dispci.exe」・・・感染後再起動された後のディスク暗号化処理を担当(タスクにより起動)


ファイルを暗号化する際は、以下の拡張子を持つファイルを対象に暗号化を実施します。


図19
図19 暗号化対象となるファイルの拡張子一覧

なお、「dispci.exe」はディスクの暗号化を行う挙動が主な役割ですが、実行時に引数を与えられない場合、復号処理を行う挙動が用意されています。ただし、通常の感染経路であるタスクによる実行時は、引数が与えられた状態で起動するため、本来はディスクの暗号化のみを行います。


つまりここから、「dispci.exe」は単体で(引数無しで)実行された場合、復号ツールの役割を併せ持つことが伺えます。実際に「dispci.exe」を単体で実行すると、以下のようにパスワードの入力を促す画面が表示されます。


図20
図20 「dispci.exe」を単体で実行した際に表示されるパスワード入力画面

以下は、上記で入力されたパスワードが正しい場合に表示する、復号を完了した旨のメッセージが格納されたコード領域となります。


図21
図21 復号メッセージが用意されている様子

ディスクの暗号化が行われた場合、ブートローダーにより以下の画像が表示されます。


図22
図22 ディスクの暗号化後にBad Rabbitにより表示される脅迫メッセージ

上記脅迫メッセージで表示されるTorサイトは、以下のように手の込んだアニメーションの表現が施されている点が印象的です。


図23
図23 脅迫メッセージで表示されるTorサイトにアクセスした様子

以上、Bad Rabbitの挙動を一部ご紹介しましたが、その他の挙動も含めて現時点までに判明している挙動の一覧は以下となります。


  • ローカルキルスイッチのチェック
  • 複数のタスクスケジュールの作成(シャットダウン、自動起動等)
  • 一般ファイルの暗号化(ランサムウェア)
  • ディスクの暗号化(ランサムウェア)
  • セキュリティ製品プロセスの検索
  • イベントログの削除
  • USNジャーナルの削除
  • ネットワーク関連情報の取得
  • ハードコーディングされたユーザー名/パスワードを用いたローカルネットワークへの辞書攻撃によるワーム活動
  • 保存されている認証情報の奪取(一時的に作成するパスワードダンプツールの利用)とそれを利用したワーム活動
  • 保存されている資格情報の奪取 (CRedEnumerate関数の利用) とそれを利用したワーム活動


■「NotPetya」との比較


Bad Rabbitは調査の結果、6月に話題となったMBR暗号化ランサムウェア「NotPetya」との類似点が数多く存在することがわかりました。


多くの類似コードの中から一部をピックアップし、以下にご紹介します。


以下は自身に特権を付与するコードにおいて「Bad Rabbit」と「NotPetya」を比較した様子ですが、処理の構成がほぼ同じであることがわかります。


図24
図24 自身に特権を付与するコードの「Bad Rabbit」と「NotPetya」の比較

以下は一時的に作成したパスワードダンプツールと名前付きパイプでプロセス間通信を行う挙動について「Bad Rabbit」と「NotPetya」を比較した様子ですが、プロセス間通信の実現方法やパイプ名の生成方法までが同一であることがわかります。


図25
図25 パスワードダンプツールとプロセス間通信を行う挙動の比較

以下は、特定のファイルが存在した場合は処理の継続を終了する「ローカルキルスイッチ」のコード部分ですが、ファイルの存在有無で判断させるという実現方法に加え、処理の記載方法まで酷似しています。


図26
図26 「Bad Rabbit」と「NotPetya」におけるローカルキルスイッチのコード比較

次のコードは、セキュリティ対策製品のプロセスを検索する挙動のコードですが、単純にプロセス名同士を比較せず、独自のハッシュ値に変換した上でハッシュ値同士を比較するという、他のランサムウェアには見られない特徴的な手法が一致しています。


図27
図27「Bad Rabbit」と「NotPetya」におけるハッシュによるプロセス比較のコード

これら以外にも、例えば以下のような箇所も類似しています。


  • 無効なデジタル署名を各バイナリに付与している点
  • ファイルの暗号化処理にファイルマッピング手法を利用している点
  • ワーム活動により拡散させるバイナリにDLL形式を採用している点
  • DLLのエクスポート関数を呼び出す際に整数値を引数末尾に付与している点
  • パスワードダンプツールを利用したローカルネットワークでのワーム活動

等々


こうした挙動や内部処理の観点から見て「NotPeya」と「Bad Rabbit」はとても類似度が高く、何らかの関連性があるといえそうです。ただし、当然第3者がコードを真似て作成することは可能ですので、攻撃者が同一であると断定できるものではありません。


どちらにしても、ある脅威が大きく話題となったとき、類似する新たな脅威が追って発生するのは常であり、一つの脅威やインシデントが過ぎ去ったからといって過去のことと捉えず、そこで得た教訓を常に意識するように心がけることが重要です。



吉川 孝志 の他のブログ記事を読む


関連ブログ記事

コンサルティングサービス事業本部
サイバーレジリエンス事業部
サイバーインテリジェンスグループ
吉川孝志