弊社では、前回のブログ記事において、一連のWannaCry攻撃の中で利用されたワーム型マルウェアのリソースファイルを改変した亜種の出現可能性について注意喚起を行っていましたが、今回、それに該当する亜種を確認しました。(WannaCryは前回のブログで言及した通り、ワーム機能とランサムウェアの機能が分離していることから、ワーム機能を持つバイナリをドロッパー1、ランサムウェアの機能を持つバイナリをドロッパー2として以降記載します)今回確認された亜種は以下の点がこれまでのWannaCryと異なります。1キルスイッチが無効化されている2ランサムウェアの機能が欠如している(暗号化に関わる挙動が動作しない)そして、以下の点がこれまでと同じです。1SMBの脆弱性を利用して横展開の拡散を行う(ワーム活動)2ドロッパー1がサービスとして登録される3WannaCryとしての壁紙や脅迫文のリソースデータを一部保有している(ただし、使用しない)では実際に従来の検体とどう異なるのでしょうか。以下で詳細を確認していきます。従来のドロッパー1は、動作を開始するや否や即時、特定のURLへ接続を行う動作がありました。このURLはキルスイッチと呼ばれており、接続が成功すると不正動作を停止し、接続が失敗すると不正動作を継続するという動きがすでに知られています。各社の報道の中でこのキルスイッチが無効になった検体が出現したという情報を目にした方も少なくないと思われますが、具体的にどう無効になっているのかという点についてはあまり情報がなく、細かく言及もされていません。今回は、そうした他社で明確に言及されていない情報を中心にフォーカスし、解説を行っていきます。■キルスイッチが無効化されている点に関して以下は、新旧のドロッパー1のプログラム開始地点の逆アセンブル画面を比較した様子です。図1を見るとわかりますが、赤点線枠内のコードが完全に一致しています。この領域はキルスイッチへの接続に関わるコードが並んでいます。下方の青点線部分では、大きくコードが異なることがわかります。左側(当初のWannaCryにおけるドロッパー1)は、条件分岐していることがわかりますが、右側(今回確認したWannaCryにおけるドロッパー1)は特に分岐している様子はうかがえません。上記の異なる部分をより拡大した図が以下となります。条件ジャンプ命令による分岐が、nop命令(何もしない)に変更されていることがわかります。理解しやすいように、上記図2のアセンブリをC++のコードへ逆コンパイルしたものが以下となります。図3を見ると一目瞭然ですが、左側の検体にあるIF文がなくなっており、右側の検体は関数の呼び出しが上から下へと継続されており順に呼び出されるように変化しています。ここで重要なポイントは、一部の報道にあるように“キルスイッチが無効になった検体”と一言で言われると誤解されがちですが、こうして具体的に確認してみると、従来の検体からキルスイッチの確認機能がすべて削除されているわけではないということです。今回確認した検体は、キルスイッチのURLへの接続を行った後、接続が成功したか失敗したかに関わらず、処理を継続します。キルスイッチへの接続リクエストはどちらにしても発生するのです。したがって、社内ネットワーク等の通信ログを見て「キルスイッチへの接続が成功していたから(WannaCryが動作を停止していることになり)ひとまず安心」、というわけではないことが、このことからわかります。我々が2つのバイナリを比較した結果、以下のことが判明しました。次の図は、これまで説明した変更の確認された領域をバイナリレベルで確認した結果ですが、2バイトしか変更されていないことがわかります。変更の確認された領域をバイナリレベルで確認した結果また、変更前のもう一方の条件分岐先と思われるコード(どこからも呼び出されない状態)がバイナリ内に残っていることもわかりました。このことから、今回の検体は、ソースコードから修正され再コンパイルされた検体ではなく、すでにコンパイル済みの既存検体をバイナリエディタ等でピンポイントに修正したという事実がわかります。(もしソースコードから修正されている場合、もとの条件分岐先データがバイナリから消えているはずであり、加えて、上記のように2バイトしか差異が生まれないという結果にはなりません)つまり、この事実から、ソースコードを保有していない「第三者」が改変したWannaCryであると推測することが可能です。その場合、この第三者の攻撃者は、少なくとも条件分岐の箇所を特定し改変するプログラム解析のスキルを持っていることが伺えます。■ランサムウェアの機能が欠如している(暗号化挙動が削除されている)点についてさらに今回の検体は、ランサムウェアとしての暗号化挙動が欠如していることも判明しました。従来のWannaCryでは、ドロッパー1が作成するドロッパー2に暗号化挙動があり、ドロッパー2が作成するEXEにGUI(ウインドウ画面)の機能が分離していましたが、今回確認された検体では、ドロッパー2のバイナリの後半領域が欠如しており、ドロッパー2のリソース領域にあるZIPファイルについても一部が削除されたように欠損していました。以下は、今回確認された検体の関連をまとめた全体図となります。今回確認された検体の構成図なお、今回のドロッパー1は、これまでと同様にドロッパー2をファイルとして作成し実行します。今回のドロッパー2のEXEファイルは破損しており、正常動作することなくプロセスの起動処理中に異常終了します。このとき、デスクトップ上に目立ったエラーメッセージは表示されません。ドロッパー2が実行されると、イベントログには「SideBySide」のエラーに以下の情報が記録されます。これはEXEファイルの末尾に埋め込まれたマニフェストファイルが正常に読み込めないことを意味します。ドロッパー2が実行されると記録されるイベントログ以下は、従来の正常動作するドロッパー2と、今回の異常終了するドロッパー2のEXEファイルの末尾をバイナリエディタで比較した様子ですが、マニフェストファイルの領域が破損していることがわかります。ドロッパー2のマニフェストファイルが破損している様子また、以下は、ドロッパー2のリソース領域から抽出したパスワードZIPを一般の解凍ソフトで閲覧した様子ですが、多くのファイルが欠落していることがわかります。ランサムウェアとしての「WannaCry」といえる、いくつかの証拠が残っています。「b.wnry」は脅迫文の記載された壁紙の画像であり、「r.wnry」は脅迫文のテキストファイルです。ドロッパー2のリソースセクションのZIP内を解凍ソフトで閲覧した様子ドロッパー1が動作する間において、目立ったエラーは確認されておらず、サービスとして正常に機能(ワーム活動を行う)することも確認されました。以下は、今回の確認したドロッパー1に感染した端末と同一セグメント上の別端末に流れてくるネットワークパケットを調査した様子ですが、SMBプロトコルでエクスプロイトが送り込まれる様子がわかります。AndXリクエストが送信されることが、WannaCryの拡散トラフィックの特徴とされています。この後、実際に別端末上でエクスプロイトを受けた結果lsass.exeがmssecsvc.exeを作成しサービスとして登録し動作し始めたことを確認済みです。今回の検体に確認された状況を端的にまとめると、まるで「横展開を行うワーム機能だけを残したWannaCry2.0」のように見受けられます。これらのことから、今回の検体について少なくとも以下の2つが考えられます。Pulsarの拡散を狙っている背景も考えられなくもありません。WannaCryである証拠となる画像や脅迫文をバイナリ内に残すことで、調査・捜査を撹乱させる目的や捜査の手が及んだ際の責任転嫁を目論んでいるとも言えなくはありません。2第三者がキルスイッチ部分を改変して拡散したものが拡散の中でファイル破損したこの可能性も十分ありえますが、もっとも破損するはずのドロッパー1がエラーを発生することなくワームとして正常に動作している点を偶然で片付けるのは少々無理を感じます。今回の検体からはいろいろな推測ができますが、どちらにしても、感染活動を広めるワームであることに違いはなく、ユーザーにとって脅威であることに変わりはないため、注意が必要です。■注意すべきポイントについて今回の検体から言える注意すべきポイントは、以下の2点となります。1)ログ上でキルスイッチへの接続が成功していても安心しないこと。今回の調査で、キルスイッチへの接続が成功しても動作することが実際に確認されました。2)暗号化挙動というわかりやすい変化がPCに発生しなくてもWannaCryに感染している可能性があること。ファイルが暗号化されていなくても今回のようなWannaCryに感染している可能性があります。同様の方法を用いて完全に異なる別のマルウェアが配布されている可能性もありえるでしょう。その場合、見た目で感染を判別しやすいランサムウェアではなく、RATやバックドアなどが利用されていることも考慮し、更新プログラムを当てていなかった環境においては、今一度、確認が必要です。従来および今回のブログでご紹介したWannaCryの感染有無の確認方法の一つは、以下のサービスが動作しているかどうかで確認ができます。security引き続き、弊社では最新の脅威について分析し情報発信を行っていきます。※以下、2017/6/9追記※なお、今回の検体はインターネット上に公開している弊社ハニーポットで取得した検体であり、一般に拡散している事実を確認したものです。脆弱性攻撃により送り込まれるバイナリデータにはDLL(launcher.dll)が含まれており、該当DLLのエクスポート関数「PlayGame」が呼び出されることで、ドロッパー1がリソースセクションからドロップされサービスとして登録・感染します。以下は、本記事の執筆にあたり使用した検体のハッシュ値となります。本記事において、当初ドロッパー2は実行されないとしていましたが、正しくは、ドロッパー2は実行されるが正常動作しない、となります。関連する図5と一部の文面を修正し、補足情報を追記いたしました。