サポート情報 | フォーカスシステムズ サイバーフォレンジックセンター

メールでのお問い合わせ
お問い合わせはこちら
東京証券取引所 プライバシーマーク ISMS JUSE

サポート情報

ホーム > サポート情報一覧 > イベントの登録と別プロセスの起動

イベントの登録と別プロセスの起動

目次へ

 さらに処理を追跡していきます。

 まず、ハッシュ値を求めた後に、NtCreateEventとNtOpenEventを行っている処理がありました。このイベントを何に利用するかまでは十分解析していませんが、何かイベントに関する処理が見つかったときに追跡することとしましょう。

 まず、NtCreateEventを行っている様子です(【図71】参照)。結果として、WinObjでイベントが追加されていることが確認できます。なお、Eevnt名の「3993CFEF」は、「PC毎固有の「ハッシュ値」の計算」で求めた2回目のハッシュ値のUnicode文字列の16バイト目から8文字を引用しています。

IDA_Cryptowall_CreateEvent1

IDA_Cryptowall_CreateEvent2

【図71】イベントの作成

 

 さらに、NtOpenEventを行っている様子です(【図72】参照)。パスのハッシュ値は、「PC毎固有の「ハッシュ値」の計算」で求めた1回目のハッシュ値の算出を再度行って求めています。

IDA_Cryptowall_OpenEvent1

【図72】イベントの作成

 

 さらに解析を進めて行き、0x00413C93がcallする0x0040A670を見ると、初期処理で特徴のある文字列を生成していました。一文字ごとに格納することで、Unicodeの文字列にしています。結果を見ると、「explorer.exe」の文字が浮かび上がってきました(【図73】参照)。「マルウェア動作時のメモリ解析」で、explorerのプロセスが複数あるのが不自然であることと、そのうち一つがすぐに終了していた、ということが分かっています。ということは、これはexplorerのプロセスを立ち上げる処理なのではないでしょうか?

IDA_Cryptowall_CreateProcess1

【図73】スタック上に「explorer.exe」の文字列を生成

 

 実際にexplorer.exeが実行されるまでを追跡してみましょう。まず、実行プログラムのフルパスの生成を行っています。まず、OSのインストールされているパスを取得するために、「RtlQueryEnvironmentVariable_U」を用いて、「systemroot」を検索して「C:\Windows」を取得しています(【図74】参照)。そして、その後ろに「\explorer.exe」を結合し、「C:\Windows\explorer.exe」のコマンドラインを作成しています(【図75】参照)。

IDA_Cryptowall_CreateProcess2

IDA_Cryptowall_CreateProcess3

【図74】systemrootの取得

 

IDA_Cryptowall_CreateProcess4

【図75】Explorerの実行フルパス名の作成

 

 こうして得られたexplorerの実行パスを用いて、「CreateProcessInternalW」を実行してexplorerプロセスを起動します(【図76】参照)。タスクマネージャのプロセスリストを見ると、実行時にリターンされたプロセスIDと一致するexplorer.exeが起動していることが確認できます(【図76】参照)。

IDA_Cryptowall_CreateProcess5

【図76-1】Explorerの実行(CreateProcessInternalWのパラメータ)

 

IDA_Cryptowall_CreateProcess6

【図76-2】Explorerの実行(CreateProcessInternalWの実行後)

 

IDA_Cryptowall_CreateProcess7

【図76-3】Explorerの実行(タスクマネージャで確認:0x09E8=2536)

 

 しかし、これではexplorerが一つ起動しただけに過ぎません。この上でマルウェアが動作するために、スレッドを実行する必要があります。今回調査したCryptoWallの亜種のランサムウェアでは、セクションのマップ機能を利用し、メモリの情報をコピーして実現していました。

 詳しい処理は長くなるため省きますが、大まかな流れは、セクションに自プロセスに紐づくMapを作成し、マルウェア本体をメモリ上にコピーして準備した上で、「NtMapViewOfSection」を行い、Explorer上のメモリにマルウェアのコードを埋め込んでいたのです。さらに、そのメモリ上のアドレスに対しスレッドをキューして情報を設定し、「NtResumeThread」でスレッドを実行していたのです(【図77】参照)。

(※不正プログラム作成で模倣される可能性もあるため、詳細な技法の記述は控えさせていただきます。正規の研究機関等の方で詳しく知りたい場合は、別途お問い合わせいただければ、検討の上回答させていただきます。)

IDA_Cryptowall_CreateProcess8

【図77-1】Explorer上のメモリにランサムウェアのコードをマップ

 

IDA_Cryptowall_CreateProcess9

【図77-2】explorer上のMap先のアドレス

 

IDA_Cryptowall_CreateProcess10

【図77-3】explorer上のスレッドの開始位置

 

IDA_Cryptowall_CreateProcess11

【図77-4】Explorer上のメモリにマップされたランサムウェアのスレッド実行

 

 この処理のうち、「CreateProcessInternalW」で得られるプロセスIDと、「NtQueueApcThread」で設定されるexplorer上のスレッドの開始アドレスは、explorer上のCryptoWallの追跡のために非常に重要になります。

 これで、explorerの起動と、その上でマルウェアが動作する仕組みが分かりました。「マルウェア動作時のメモリ解析」の結果から、このプロセスがさらにsvchostを起動していることは容易に想像できます。また、起動の手法も同様である疑いが濃厚です。

 では、svchostを起動する際、どのようなパラメータ等を設定しているのでしょうか?また、svchostの起動以外に、何か行っていないでしょうか?この追跡のためには、起動されたexplorerのプロセスに対して調査を行う必要があります。では、explorerのプロセスにアタッチして追跡してみましょう。

 

< PC毎固有の「ハッシュ値」の計算 目 次 作成されたプロセス上のランサムウェアの追跡 >