攻撃者がWindowsシステムにおいて、マルウェアや悪意のあるペイロードを永続化させて定期的に実行させたい場合、以下の仕組みを利用するのが定番です。
- スケジュールタスク
- Windowsサービス
- Run/RunOnceなどの各種レジストリキー
- Startupフォルダ
WMIとは
Windows Management Instrumentationの略で、OSやコンピュータの設定・状態を参照したり変更したりするための仕組みのこと。
WMIを利用した永続化
WMIを利用して永続化を行うには以下の3つの要素を定義してsubscriptionする。
- Event Filter: イベント発生の条件。システム起動後のN秒後にトリガーする、特定の名前のプロセスが実行されたときにトリガーする、外部メディアが挿入された時にトリガーする、など色々な条件を指定できる。Event Filterの設定にはWQLというSQLに似た言語を用いる。
- Event Consumer: イベント発生の条件が満たされたときに実行するアクションの内容。任意のファイルやペイロードの実行を指定できる。
- Filter to Consumer Binding: 上記のEvent FilterクラスとEvent Consumerクラスのバインド(紐付け)を行う。
Event Consumerには以下の標準タイプがある。
- LogFileEventConsumer: イベント・データを特定のログ・ファイルに書き込む
- ActiveScriptEventConsumer: VBScript / JScriptで記述されたペイロードを実行する
- NTEventLogEventConsumer: イベント・データを含んだイベント・ログを作成する
- SMTPEventConsumer: イベント・データを含んだEメールを送信する
- CommandLineEventConsumer: 任意のプログラムを実行する
上記のうち攻撃者が多用するのがActiveScriptEventConsumerとCommandLineEventConsumer。自分が以前調査したケースでもEvent ConsumerにActiveScriptEventConsumerを指定して悪意のあるJScriptを実行していた。
WMI常駐オブジェクトはC:\Windows\System32\wbem\Repository\OBJECTS.DATA
(Windows XPではC:\WINDOWS\system32\wbem\Repository\FS\OBJECTS.DATA
)をパースすることで確認できる。 参考
https://www.mandiant.com/resources/windows-management-instrumentation-wmi-offense-defense-and-forensics (P.17~P.20, P.71~P.73, P.75~P.78, P.79~P.89)