Petyaランサムワームの技術分析

昨日、新しいランサムウェアで世界中が大混乱しました。ランサムウェアの機能とワームの挙動を併せ持った、この新しいマルウェア亜種は、標的とされたマシンのマスターブートレコードを変更する機能がPetyaマルウェアファミリーと共通するものであるかどうかを研究者が調査中であるため、Petya、Petrwrap、あるいはNotPetyaと様々な名前で呼ばれています。フォーティネットはこの新しいハイブリッド型マルウェアをランサムワームに指定しており、このランサムウェアはWannaCryと同じワームのメカニズムを使って世界中に拡大したと報告されています。

この記事では、FortiGuard Labsによる調査で明らかになった、このランサムワームのいくつかの技術的側面を説明します。このブログではこのランサムワームをPetyaと呼ぶこととします。また、このランサムワームはW32/Petya.EOB!trとして検知されます。Petya関連の最新ブログ記事は、ここからお読みいただけます。

このマルウェアはDLLとして送り込まれますが、最初にエクスポートされる関数に不正行動が見つかりました。

このマルウェアは、実行開始後の最初の手順として、3つのトークン特権、SeShutdownPrivilegeSeDebugPrivilege、およびSeTcbPrivilegeを有効にします。


図1:トークン特権の調整

次に、プロセス名のハッシュを実行することで、実行中のプロセスをチェックします。ハッシュアルゴリズムの一部を以下に示します。


図2:プロセス名のハッシュアルゴリズム

次に、結果値が次のいずれかであるかどうかをチェックし、それぞれに対応するフラグを設定します。

  • 0x2E2A4B44
  • 0x6403527E
  • 0x651B3005

この分析を実施した段階では、どのプロセス名がどのハッシュ値に対応するのかを確定できなかったため、この件については、今後も調査を継続します。

実行中のプロセスをチェックした後に、このランサムウェアは、固有ファイル名を取得します。


図3:固有ファイル名の取得

このファイル名は、後で一種のキルスイッチとして使用されるため、とても重要です。

Petyaはこの後に、コマンドラインをチェックします。現段階では、この部分の詳しい調査が完了していないため、このマルウェアが使用している引数の詳細は不明ですが、引数が不明であっても、分析を続けることは可能です。

このマルウェアは次に、調整済みトークン特権のフラグが2であるかどうかをチェックします。これは、SeDebugPrivilegeが有効であることを意味します。そして、この条件に該当すると、2つの関数呼び出し(後述)を中止して、システムをシャットダウンします。


図4:特権フラグのチェック

上図に示すように、フラグが2でない場合、Petyaは2つの関数を呼び出します。

最初のMsub_CreateWindowsFileと我々が呼んでいる関数を見ると、(PathFileExistsWを使って)ファイルの存在チェックを実行しているのがわかります。ファイルが存在すると、ExitProcessを呼び出すコードに分岐し、マルウェアは終了します。研究者は、この関数が「キルスイッチ」となる可能性があると指摘しています。


図5:「キルスイッチ」

このマルウェアがExitProcessを呼び出すように強制するには、チェックしているファイルの名前を見つける必要があります。そこで、コードを再確認してみると、ファイル名がpszPathと呼ばれるメモリロケーションに格納されていることがわかります。


図6:チェックするパス

このメモリロケーションの内容を確認するには、我々がMsub_AppendToWindirと名付けた関数を調べる必要があります。


図7:Msub_AppendToWindir関数の内容

上記のスクリーンショットに示すように、我々がテストで使用したDLLの完全パスとファイル名はC:\_Virus\Petya.dllであり、これは、図3のコードで返されたものです。上記の図7のコードを順番に確認してみましょう。

  • 1つ目のAPI呼び出し、PathFindFileNameWは、Petya.dll(ディレクトリ名を削除)を返します。
  • 2つ目のAPI呼び出し、PathCombineWによって、ハードコーディングされたパスC:\Windowsとこのファイル名が連結され、C:\Windows\Petya.dllという結果が得られます。
  • 3つ目のAPIコール、PathFindExtensionWは、C:\Windows\Petya.dllをパラメータとして使用し、拡張子名(.dll)を返します。このアドレスは、レジスタEAXに格納されます。
  • このマルウェアは、上記の下線付きコードで値0x00をこのアドレスに格納することで、文字列を終端させています。ここまでの処理で、文字列がC:\Windows\Petyaに変更されました。

上記の処理の後に、関数を抜けます。図5を戻ってみると、PathFileExistsWの呼び出しでチェックする内容が分かります(我々の例では、C:\Windows\Petya)。このファイルが存在すると、このマルウェアは、ExitProcessのコールへと進みます。

WannaCryのようなわかりやすいキルスイッチではありませんが、これは、標的である被害者が受け取るファイル名が変更される可能性があるためです。

以上は、新しい活動中の脅威を対象とする現段階での分析であるため、FortiGuard Labsは今後も調査を継続し、最新情報を本ブログで随時ご紹介する予定です。

  • MD5: 71b6a493388e7d0b40c83ce903bc6b04

フォーティネットによる保護

AVシグネチャ:
W32/Petya.EOB!tr
W32/Agent.YXH!tr
その他のシグネチャについては調査中です。
IPSシグネチャ:
MS.SMB.Server.SMB1.Trans2.Secondary.Handling.Code.Execution
作成日 2017年3月14日
最終更新日 2017年6月5日

また、フォーティネットのWannaCry IPSルールは、上記の脆弱性を標的としたエクスプロイトを阻止すると考えられます。フォーティネットのチームが現在この主張を検証しています。
サンドボックス検出:
フォーティネットのサンドボックス(FortiSandbox)はこの攻撃を検出します。
TOR通信:
AppControlシグネチャを介してTOR送信トラフィックをブロックします。