TrollDump
- x64マネージドDLLをx64マネージド/アンマネージドプロセスに注入します(ウィンドウハンドルを取得するため、プロセスにGUIが必要です)。setwindowshookを使用します。
- ここではTROLLとして、非表示ウィンドウのtaskmgrに注入して、lsassダンプを検出されずに実行します(以下のテストケースセクションを参照)。
- インジェクターDLLと注入されるDLLは同じDLLであるため、追加のDLLは不要です。
- ターゲットプロセスの整合性レベルは、インジェクタープロセスと同等以下である必要があります。
クレジット(プロジェクトのアップグレード/リライト)
元のプロジェクト: https://github.com/enkomio/ManagedInjector
- 64ビットバイナリに注入するためのコードを移植 ---> 元のプロジェクトは32ビットバイナリへのDLL注入のみ許可しています
- 過剰だったIPCロジックを削除
- 以前の複雑な方法の代わりに、RunOnRemoteProcess()関数内でペイロードを直接実行するだけのボイラープレートコードを作成
- プロジェクトは依然としてDLLExportを使用して、.NET DLLが関数をエクスポートするようにしています
コンパイル
- プロジェクトをダウンロードし、ソリューションをX64、Releaseとしてコンパイル
- 外部依存関係は不要
使用法
> Requires High Integrity depending on use case
> [System.Reflection.Assembly]::LoadFrom("C:\Users\public\TrollDump.dll")
> [TrollDump.ForFun]::Main("C:\windows\system32\taskmgr.exe")
- このPOCでは、lsassダンプを実行します。RunOnRemoteProcess()関数を変更して再コンパイルすることで、任意の「DLLエクスポート関数ロジック」を実行できます。
- 前述のとおり、このコードはDLLインジェクションのボイラープレートとして機能し、その後に何をするかはC#マネージドコードで簡単に記述できます。
テストケース
- Win 2019 build 17763.737 に最新のwindefenderパッチを適用
- 他のAV(未公表)
- DLLインジェクションは正常に動作
- lsassダンプが機能するかどうかは、AVがtaskmgrによるlsassダンプを許可するかどうかに依存するのは明らかです
- どのEDRでもテストしていません -> 特定のEDRではDLLインジェクションは依然として機能するはずです
OPSEC
- DLLはディスク上に存在する必要があるため、難読化する必要があります
- DLLはインジェクションにのみ使用すべきであり、実際のペイロードはDLLに埋め込むべきではなく、リフレクティブにロードする必要があります
- 当然、CLRをアンマネージドプロセスに注入するのは疑わしいですが、まあいいでしょう!
- setwindowshookは古典的な手法ですが、ほとんどの場合キーロギングと関連付けられます。私たちのユースケースではありません。
- どのGUIプロセスに注入するかは非常に創造的になります(systemとして実行している場合は、dwm.exeにも注入できます)
ウィッシュリスト - このプロジェクトは週末に作成したもので、以下を追求する時間も意図もありません:
- GUIなしプロセスへの注入
- 現在、setwindowshookはWH_CALLWNDPROCを使用しています。WH_GETMESSAGEを使用するように変更できますが、ターゲットプロセスがメッセージループ(GetMessage())を実行している必要があります。
- メッセージループを実装した非GUIバイナリを見つけられるなら(おそらく無理だと思いますが)、GUIなしバイナリにも注入できます。
- GUIプロセスがGetMessage()を実行するのは一般的です
- 完全リフレクティブで、ディスクにドロップする必要がない
- setwindowshookに基づくと、DLLは*ディスク上になければならない?*ようです
- エクスポートされたDLL関数の代わりに実行する関数ポインタを渡すためにc#デリゲートを使用してみましたが、機能しませんでした(これはローカルプロセスに対する古典的なc#キーロガー手法ですが、私たちはリモートプロセスで行っています)
- 他のテクニックを組み込んで試してみてください。実現可能だと思います。
- 現在のプロセスがMediumでも、Taskmgrは自動的にHigh Integrityとして起動します(つまり、技術的にはDLLを注入すればUACバイパスになります)
- WIN APIの戻り結果によると、インジェクションは正常に動作しているようです
- しかし、Taskmgrはエクスポートされた関数を呼び出せません。
免責事項
教育目的でのみ使用してください!