DllNotificationInection は、ローカルおよびリモートプロセスにおける DLL 通知コールバックの概念を利用した、新しい「スレッドレス」プロセスインジェクション技術の POC です。
詳細は以下のブログ記事をご覧ください:
https://shorsec.io/blog/dll-notification-injection/
DllNotificationInection は、リモートプロセス内に新しい LDR_DLL_NOTIFICATION_ENTRY を作成することで動作します。リストヘッドの List.Flink とリストの最初のエントリ(現在は2番目)の List.Blink をパッチすることで、手動でリモートの LdrpDllNotificationList に挿入します。
新しい LDR_DLL_NOTIFICATION_ENTRY は、カスタムトランポリンシェルコード(@C5pider の ShellcodeTemplate プロジェクトで作成)を指します。このシェルコードは変更を復元し、TpWorkCallback を使用して新しいスレッドで悪意のあるシェルコードを実行します。
リモートプロセスに新しいエントリを手動で登録した後は、リモートプロセスが DLL をロードまたはアンロードして DLL 通知コールバックをトリガーするのを待つだけです。明らかにこれはすべてのプロセスで定期的に発生するわけではないため、このインジェクション技術に適した候補を事前に見つける作業が必要です。簡単に調査した限りでは、RuntimeBroker.exe と explorer.exe が適切な候補と思われますが、他のプロセスも探してみることをお勧めします。
これは POC です。OPSEC 安全で AV/EDR 製品を回避するには、いくつかの修正が必要です。例えば、シェルコード用のメモリを割り当てる際に RWX を使用しましたが、怠けずに変更してください。また、OpenProcess、ReadProcessMemory、WriteProcessMemory をより低レベルの API に置き換え、Indirect Syscalls や(恥知らずですが)HWSyscalls を使用することも検討してください。シェルコードを暗号化したり、さらに一歩進んでトランポリンシェルコードをニーズに合わせて修正したり、少なくともトランポリンシェルコードの作成に利用した @C5pider の ShellcodeTemplate プロジェクトのデフォルトのハッシュ値を変更してください。