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

最新情報

2017.06.07

WannaCryのキルスイッチに見えた2次攻撃者の影

弊社では、前回のブログ記事において、一連のWannaCry攻撃の中で利用されたワーム型マルウェアのリソースファイルを改変した亜種の出現可能性について注意喚起を行っていましたが、今回、それに該当する亜種を確認しました。


(WannaCryは前回のブログで言及した通り、ワーム機能とランサムウェアの機能が分離していることから、ワーム機能を持つバイナリをドロッパー①、ランサムウェアの機能を持つバイナリをドロッパー②として以降記載します)


今回確認された亜種は以下の点がこれまでのWannaCryと異なります。


  1. キルスイッチが無効化されている
  2. ランサムウェアの機能が欠如している(暗号化に関わる挙動が動作しない)

そして、以下の点がこれまでと同じです。


  1. SMBの脆弱性を利用して横展開の拡散を行う(ワーム活動)
  2. ドロッパー①がサービスとして登録される
  3. WannaCryとしての壁紙や脅迫文のリソースデータを一部保有している(ただし、使用しない)

では実際に従来の検体とどう異なるのでしょうか。

以下で詳細を確認していきます。


従来のドロッパー①は、動作を開始するや否や即時、特定のURLへ接続を行う動作がありました。

このURLはキルスイッチと呼ばれており、接続が成功すると不正動作を停止し、接続が失敗すると不正動作を継続するという動きがすでに知られています。


なお、各社の報道の中でこのキルスイッチが無効になった検体が出現したという情報を目にした方も少なくないと思われますが、具体的にどう無効になっているのかという点についてはあまり情報がなく、細かく言及もされていません。


今回は、そうした他社で明確に言及されていない情報を中心にフォーカスし、解説を行っていきます。



■キルスイッチが無効化されている点に関して


以下は、新旧のドロッパー①のプログラム開始地点の逆アセンブル画面を比較した様子です。


図1
図1 新旧のドロッパー①のプログラム開始地点の逆アセンブル画面を比較した様子

図1を見るとわかりますが、赤点線枠内のコードが完全に一致しています。この領域はキルスイッチへの接続に関わるコードが並んでいます。しかし、下方の青点線部分では、大きくコードが異なることがわかります。

左側(当初のWannaCryにおけるドロッパー①)は、条件分岐していることがわかりますが、右側(今回確認したWannaCryにおけるドロッパー①)は特に分岐している様子はうかがえません。


上記の異なる部分をより拡大した図が以下となります。


図2
図2 図1から条件分岐に関する領域(青点線領域)を拡大した様子

条件ジャンプ命令による分岐が、nop命令(何もしない)に変更されていることがわかります。


より理解しやすいように、上記図2のアセンブリをC++のコードへ逆コンパイルしたものが以下となります。


図3
図3 キルスイッチに関わる領域をC++のコードへ逆コンパイルした様子

図3を見ると一目瞭然ですが、左側の検体にあるIF文がなくなっており、右側の検体は関数の呼び出しが上から下へと継続されており順に呼び出されるように変化しています。


ここで重要なポイントは、一部の報道にあるように“キルスイッチが無効になった検体”と一言で言われると誤解されがちですが、こうして具体的に確認してみると、従来の検体からキルスイッチの確認機能がすべて削除されているわけではないということです。

今回確認した検体は、キルスイッチのURLへの接続を行った後、接続が成功したか失敗したかに関わらず、処理を継続します。つまり、キルスイッチへの接続リクエストはどちらにしても発生するのです。


したがって、社内ネットワーク等の通信ログを見て「キルスイッチへの接続が成功していたから(WannaCryが動作を停止していることになり)ひとまず安心」、というわけではないことが、このことからわかります。


さらに、我々が2つのバイナリを比較した結果、以下のことが判明しました。


次の図は、これまで説明した変更の確認された領域をバイナリレベルで確認した結果ですが、2バイトしか変更されていないことがわかります。(カラーマーキングされている箇所が異なる部分)


図4
図4 変更の確認された領域をバイナリレベルで確認した結果

また、変更前のもう一方の条件分岐先と思われるコード(どこからも呼び出されない状態)がバイナリ内に残っていることもわかりました。


このことから、今回の検体は、ソースコードから修正され再コンパイルされた検体ではなく、すでにコンパイル済みの既存検体をバイナリエディタ等でピンポイントに修正したという事実がわかります。(もしソースコードから修正されている場合、もとの条件分岐先データがバイナリから消えているはずであり、加えて、上記のように2バイトしか差異が生まれないという結果にはなりません)


つまり、この事実から、ソースコードを保有していない「第三者」が改変したWannaCryであると推測することが可能です。またその場合、この第三者の攻撃者は、少なくとも条件分岐の箇所を特定し改変するプログラム解析のスキルを持っていることが伺えます。



■ランサムウェアの機能が欠如している(暗号化挙動が削除されている)点について


さらに今回の検体は、ランサムウェアとしての暗号化挙動が欠如していることも判明しました。


従来のWannaCryでは、ドロッパー①が作成するドロッパー②に暗号化挙動があり、ドロッパー②が作成するEXEにGUI(ウインドウ画面)の機能が分離していましたが、今回確認された検体では、ドロッパー②のバイナリの後半領域が欠如しており、ドロッパー②のリソース領域にあるZIPファイルについても一部が削除されたように欠損していました。


以下は、今回確認された検体の関連をまとめた全体図となります。


図5
図5 今回確認された検体の構成図

なお、今回のドロッパー①は、これまでと同様にドロッパー②をファイルとして作成し実行します。

しかしながら、今回のドロッパー②のEXEファイルは破損しており、正常動作することなくプロセスの起動処理中に異常終了します。このとき、デスクトップ上に目立ったエラーメッセージは表示されません。


ドロッパー②が実行されると、イベントログには「SideBySide」のエラーに以下の情報が記録されます。

これはEXEファイルの末尾に埋め込まれたマニフェストファイルが正常に読み込めないことを意味します。


図5-A
図5-A ドロッパー②が実行されると記録されるイベントログ

以下は、従来の正常動作するドロッパー②と、今回の異常終了するドロッパー②のEXEファイルの末尾をバイナリエディタで比較した様子ですが、マニフェストファイルの領域が破損していることがわかります。


図5-B
図5-B ドロッパー②のマニフェストファイルが破損している様子

また、以下は、ドロッパー②のリソース領域から抽出したパスワードZIPを一般の解凍ソフトで閲覧した様子ですが、多くのファイルが欠落していることがわかります。

ただし、ランサムウェアとしての「WannaCry」といえる、いくつかの証拠が残っています。

例えば、「b.wnry」は脅迫文の記載された壁紙の画像であり、「r.wnry」は脅迫文のテキストファイルです。


図6
図6 ドロッパー②のリソースセクションのZIP内を解凍ソフトで閲覧した様子

ドロッパー①が動作する間において、目立ったエラーは確認されておらず、サービスとして正常に機能(ワーム活動を行う)することも確認されました。


以下は、今回の確認したドロッパー①に感染した端末と同一セグメント上の別端末に流れてくるネットワークパケットを調査した様子ですが、SMBプロトコルでエクスプロイトが送り込まれる様子がわかります。


図7
図7 ドロッパー①に感染した端末と同一セグメント上の別端末でパケットを調査した様子

ドロッパー①には、「192.168.56.20」という固定のIPアドレスがハードコーディングされており、その特定IPへのSMB Tree Connect AndXリクエストが送信されることが、WannaCryの拡散トラフィックの特徴とされています。

この後、実際に別端末上でエクスプロイトを受けた結果lsass.exeがmssecsvc.exeを作成しサービスとして登録し動作し始めたことを確認済みです。


つまり、今回の検体に確認された状況を端的にまとめると、まるで「横展開を行うワーム機能だけを残したWannaCry2.0」のように見受けられます。


これらのことから、今回の検体について少なくとも以下の2つが考えられます。


  1. 第三者がキルスイッチと暗号化挙動を排除したワームとして改変し拡散させている
    理由の一つには、Double Pulsarの拡散を狙っている背景も考えられなくもありません。
    また、あえてWannaCryである証拠となる画像や脅迫文をバイナリ内に残すことで、調査・捜査を撹乱させる目的や捜査の手が及んだ際の責任転嫁を目論んでいるとも言えなくはありません。

  2. 第三者がキルスイッチ部分を改変して拡散したものが拡散の中でファイル破損した
    この可能性も十分ありえますが、もっとも破損するはずのドロッパー①がエラーを発生することなくワームとして正常に動作している点を偶然で片付けるのは少々無理を感じます。

今回の検体からはいろいろな推測ができますが、どちらにしても、感染活動を広めるワームであることに違いはなく、ユーザーにとって脅威であることに変わりはないため、注意が必要です。



■注意すべきポイントについて


今回の検体から言える注意すべきポイントは、以下の2点となります。


1)ログ上でキルスイッチへの接続が成功していても安心しないこと。

今回の調査で、キルスイッチへの接続が成功しても動作することが実際に確認されました。


2)暗号化挙動というわかりやすい変化がPCに発生しなくてもWannaCryに感染している可能性があること。

ファイルが暗号化されていなくても今回のようなWannaCryに感染している可能性があります。

また、同様の方法を用いて完全に異なる別のマルウェアが配布されている可能性もありえるでしょう。その場合、見た目で感染を判別しやすいランサムウェアではなく、RATやバックドアなどが利用されていることも考慮し、更新プログラムを当てていなかった環境においては、今一度、確認が必要です。


なお、従来および今回のブログでご紹介したWannaCryの感染有無の確認方法の一つは、以下のサービスが動作しているかどうかで確認ができます。


  • サービス名:mssecsvc 2.0
  • 実行コマンドライン:C:\WINDOWS\mssecsvc.exe -m security

引き続き、弊社では最新の脅威について分析し情報発信を行っていきます。



※以下、2017/6/9追記※


なお、今回の検体はインターネット上に公開している弊社ハニーポットで取得した検体であり、一般に拡散している事実を確認したものです。


また、脆弱性攻撃により送り込まれるバイナリデータにはDLL(launcher.dll)が含まれており、該当DLLのエクスポート関数「PlayGame」が呼び出されることで、ドロッパー①がリソースセクションからドロップされサービスとして登録・感染します。


図8
図8 脆弱性攻撃で送り込まれるLauncher.dllのエクスポート関数「PlayGame」

以下は、本記事の執筆にあたり使用した検体のハッシュ値となります。


 ●脆弱性攻撃により送り込まれるDLL(Launcher.dll)のSHA256値:
  C05E2DAB77349CD639AA837E7E121710B8A0718D8FC93FB4CC6458AE90E5C597


 ●Lancher.dllからドロップされるドロッパー①のSHA256値:
  DBF3890B782AC04136C3336814EEF97E3C0F4133F9592E882C131C179161B27B



※以下、2017/6/22追記※


本記事において、当初ドロッパー②は実行されないとしていましたが、正しくは、ドロッパー②は実行されるが正常動作しない、となります。関連する図5と一部の文面を修正し、補足情報を追記いたしました。


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


関連ブログ記事

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