Windowsの永続化メカニズムのメモ

Windowsの永続化メカニズムについてのメモ。
Windowsの永続化メカニズムは多岐に渡るが、個人的に押さえておきたいものをまとめた。

Run / RunOnce キー

以下のレジストリ・キーを編集することによって任意のプログラムやコマンドをユーザーのログオン時に実行できる。

HKLM\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKLMのRun/RunOnceキーに登録された処理は、そのコンピュータを利用する全てのユーザーのログオン時に実行される。HKCUのRun/RunOnceキーに登録された処理は、特定のユーザーのログオン時のみ実行される。
Runキーと異なりRunOnceキーに登録された処理は一度実行されると削除されるが、スクリプトなどによってRunOnceキーの削除後に、再度同様のRunOnceキーを作成することによって処理を永続化させることが出来る。

Winlogon Shell / Winlogon Userinit キー

以下のレジストリ・キーを編集することによって任意のプログラムやコマンドをユーザーのログオン時に実行できる。

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
HKEY_USERS\< SID >\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit

Active Setup キー

以下のレジストリ・キーを編集することによって任意のプログラムやコマンドをユーザーのログオン時またはシステム起動時に実行できる。

HKLM\Software\Microsoft\Active Setup\Installed Components\< GUID >\StubPath
HKEY_USERS\< SID >\Software\Microsoft\Active Setup\Installed Components\< GUID >\StubPath

スケジュールタスク

スケジュールタスクを作成して指定した日時や曜日に任意のプログラムやコマンドを実行できる。At.exeSchtasks.exeによってスケジュールタスクを作成できる。

Windows サービス

Windows サービスを作成し起動条件をAutomaticにすることによって、システムの起動時に任意のプログラムやDLLやコマンドを実行できる。Sc.exeによってWindows サービスを作成できる。サービスの設定は以下のレジストリ・キーに保存される。

HKLM\System\CurrentControlSet\services\<service name>

Startup フォルダ

\Start Menu\Programs\Startup フォルダにファイルを配置することによって、任意のファイルをユーザーのログオン時に実行できる。

WMI イベント

WMI イベントを作成し、Event Filterにイベント発生の条件を、Event Consumerにイベント発生の条件が満たされたときに実行するアクションの内容を指定して、任意のファイルやペイロードを永続的に実行できる。詳しくはこちら

COMオブジェクト・ハイジャック

既存のCOMオブジェクトをハイジャックすることによって任意のファイルを永続的に実行できる。COMオブジェクト・ハイジャックについてはこちら

BITS ジョブ

Background Intelligent Transfer Service (BITS)のジョブを作成し、/SetNotifyCmdLine スイッチに任意のファイルやコマンドを指定することによってBITS ジョブの完了後にそれらのファイルやコマンドを実行できる。

具体的には

  • BITSジョブを作成する。その際、必ずジョブが失敗するような処理を記述する。例えば存在しないURLへのファイル・ダウンロード要求など。
  • /SetNotifyCmdLine スイッチに任意のファイルやコマンドを指定する。

/SetNotifyCmdLineはジョブの完了後に任意のコマンドを実行するためのスイッチである。ジョブが何のエラーもなく完了すれば/SetNotifyCmdLineは一回実行されるだけだが、上記のジョブは存在しないURLへのファイル・ダウンロード要求を行うため、必ず失敗する。そのためシステムはファイルのダウンロードが成功するまで定期的にジョブを実行し、その都度/SetNotifyCmdLineで指定されたコマンドが実行される (ドキュメントによるとジョブが失敗した場合、BITSは失敗したジョブを定期的に再実行する)。詳しくはこちら

参考
McGraw-Hill Education発行 Incident Response & Computer Forensics Third Edition P.324 - 334

Leave a Reply

Your email address will not be published.