WMIを悪用したマルウェアの永続化

攻撃者がWindowsシステムにおいて、マルウェアや悪意のあるペイロードを永続化させて定期的に実行させたい場合、以下の仕組みを利用するのが定番です。

  • スケジュールタスク
  • Windowsサービス
  • Run/RunOnceなどの各種レジストリキー
  • Startupフォルダ
上記に加えてWMIを利用した永続化の方法もあります。個人的には、上述した永続化テクニックに比べると目にすることが少ないので、「そんな手法もある」という程度の認識だったのですが、最近このWMIを悪用した永続化のパターンを調査する機会があったので、ポイントをまとめておきます。

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)

https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-start-page
https://docs.microsoft.com/en-us/windows/win32/wmisdk/monitoring-and-responding-to-events-with-standard-consumers
https://www.cybereason.com/blog/wmi-lateral-movement-win32

Leave a Reply

Your email address will not be published. Required fields are marked *