猛威のマルウェア「Emotet」の解析 ホワイトハッカー脆弱性Lab

2020年11月4日

Emotetの脅威

2014年頃からEmotetが確認されてから進化しつづけており、現在に至っても進化し続けています。
2020年の本コラムの執筆時点においても、Emotet感染を狙った不審メールは配信され続けており、被害報道は散見されます。
2020年9月頃に入手したEmotet(PEファイル)について、マルウェア解析を実施しましたので、被害時の参考になればと考え、本コラムを執筆します。

なお、Office文書からPowerShell実行部分については、割愛します。
全容については、以下のコラムを参考にしてください。

Emotetの解析内容

現在確認できている手法として、暗号化やメモリ展開をすることで、隠蔽処理が施されており、C2サーバへの通信部分などが安易に把握できないようになっています。
特に、メモリ上に一部のバイナリコードが存在するため、検体解析やログ等の証拠取得が困難になります。

なお、現在も弊社で解析を進めていますので、本内容は推論も含まれている場合があります。
今後の解析結果でアップデートがありましたら、続編として公開予定です。

・Emotetは実行用のライブラリをロード
デバッガで初期ロードされたライブラリを確認したところ、C2サーバに通信をするようなライブラリは確認されませんでした。

参考)読み込まれるLibrary一覧:ADVAPI32、COMCTL32、GDI32、KERNEL32、SHELL32、SHLWAPI、USER32、WINSPOOL、comdlg32、ole32、oledlg、OLEACC

・Exportリストとファイル生成の不整合
EmotetがExportしているリストの中で、start以外に不審な処理(y6ithgrhhytt)があることを確認しました。
対象の処理は、ファイルを生成していると考えられますが、ファイルを生成するパス等を確認できませんでした。

・新たにロードされたライブラリの確認
Emotetの動的解析として、デバッガで検体を実行すると、初期ロードされていなかったライブラリがロードされることが判明しました。
つまり、静的解析では安易に確認できない部分に、何かしらのプログラムが隠蔽されていることがわかります。


例)wininet.dll:FTP、HTTPなどのプロトコルを使用して、ネットワークを介して情報にアクセスできるようにするDLL

・隠蔽手段を確認
隠蔽手段を詳しく掘り下げます。
Emotetの処理をアセンブリで順に追っていくと、見覚えのないFunction(CryptAcquireContextA)がロードされようとしているところが確認できました。
当該Functionは初期ロードライブラリのADVAPI32に含まれているものの、静的解析の時にはロードされていなかったFunctionです。(動的解析でロードされました)

このFunctionは、暗号化・復号化に利用されるものであり、ここでは実害のあるコードを復号するために利用されていると推測できます。


※レジスタを参照している部分があるのは、コンパイラが重複文字列をレジスタに書き込んでいるため。(0x43,0x74,0x41等)

・不審なリストの処理部分の特定
上記の処理後、静的解析の時に確認できたExportリスト上の不審な処理(y6ithgrhhytt)がpushされています。
すなわち、隠蔽されたコードを復号する時に使われるコードと推測できます。

・不審なメモリ確保の特定
不審な処理(y6ithgrhhytt)は、隠蔽されたデータを復号化に用いられます。
Emotetは、その処理結果をメモリ上に展開するため、VirtualAllocを用いて事前にメモリ領域を確保しています。
dwSizeが0x3d33であるため、バイナリコードのサイズが15667バイトであると判断できます。
また、lpAddressが0であるため、バイナリコードのメモリアドレスは動的に割り当てられることが分かります。

・復号化処理の実施
復号化のFunction(CryptAcquireContextA)の引数として、Emotetにハードコードされている暗号化キーの文字列をセットしコールすることで、暗号化されたバイナリコードを復号化し、確保したメモリにコミットしています。

・メモリ上でのバイナリコード実行
レジスタ(edi)に登録されている、バイナリコードのアドレスを参照し、実行します。
それからは、このコードのみが実行されます。

・コミットされたメモリ上のデータ確認
レジスタ(edi)のアドレスを参照すると、以下のデータがコミットされることを確認できます。
データの最初に存在するhexの値がE8であることから、バイナリコードであると考えられるので、アセンブリ表示を試してみます。

・データをアセンブリで表示
想定通り、アセンブリの構造になっていることが確認できます。
このコードを実行すると、情報窃取に悪用される可能性があるAPI(通信、暗号化など)をロードしていることが判明しました。

ここまでの解析で、Emotet(PEファイル)から暗号化されたデータを復号化し、メモリ展開した上で、実行するという挙動が確認できました。
C2サーバへの通信や、情報取得の部分は現時点では想定ですが、以下挙動で情報が取得されると考えられます。

まとめ

Emotetは、通信機能などのない一見安全そうなファイルを土台として、自分自身の内部から危険な通信可能なコードを生み出してメモリに展開します。
そして、そのコードから情報取得を行うため、最初の検体だけを静的解析しても、どのような情報が取得されたかはおろか、自らをアップデートを行いますので、通信機能を有することさえ簡単には判断できないでしょう。
非常に巧妙に作られたマルウェアであると考えます。

また、Emotetは実際のメールの返信を装う手口などで、メールを受け取った人が開封しやすい状況を作り出しています。

これらから、組織として十分と思われるセキュリティ対策をとっていたとしても、誰もがこの攻撃の被害者となりえる状況であり、他の解析情報などでアップデート機能を有することが報告されていることから、Emotetに対する恒久的な対策は困難と考えます。

端末に重要情報を持たないようにするなど、感染してしまったことを前提にした対策が求めれると考えます。
セキュリティ対策におけるパラダイムシフトの機会ととらえましょう。


このように検知が難しい構造を持つEmotetですが、この検体は弊社の取り扱うProtectCat(Cylance)では当時からアブノーマル(異常)と判定されていました。
ご利用のウィルス対策ソフトでは検知の精度が異なったり、運用での設定状況によって、隔離されないケースもあると思います。
利用しているアンチウィルスソフトの情報を注意深く収集し、必要に応じて設定の見直しをしてください。

著者プロフィール
曺 炯旭(チョウ ヒョンウク)

2020年、京セラコミュニケーションシステム 入社
Webアプリケーションやスマートフォンにおいて、脆弱性診断業務に従事。
現在は、機械学習を踏まえた新たなビジネス開発などを担当。
CTFにも参加しており、バイナリ解析を担当。趣味は勉強!

西井 晃

2012年、京セラコミュニケーションシステム 入社
データセンターサービスやクラウドサービスにおいて、運用保守やサービス開発業務に従事。
2016年、SecureOWL Center(SOC)に配属後、セキュリティ監視運用やセキュリティサービス立ち上げを担当。
現在は、セキュリティアナリストとして、セキュリティインシデントレスポンス業務に従事。
KCCS-CSIRTの活動に参加し、世界平和を目指す。

掲載されている情報は、発表日現在の情報です。最新の情報と異なる場合がありますのでご了承ください。

ページトップへ