
シェルコードインジェクション手法。C++ヘッダ、スタンドアロンのRustプログラムまたはライブラリとして提供。
これは、AVやEDRを回避するためのシェルコードインジェクションの新しい手法です。この手法はModule Stompingに触発され、いくつかの類似点があります。この日付(2022年1月23日)現在、hollows-hunterでも検出されません。
この手法の最大の利点は、モジュール全体やPEを上書きするのではなく、1つの関数だけを上書きするため、対象プロセスがターゲットモジュールの他の関数を引き続き使用できることです。
欠点は、すべての関数に対して機能するわけではないことです(ただし、ほとんどの関数では機能します)。正確な説明は私のブログにあります:The Good, The Bad And The Stomped Function。
注:AVがこれをフラグする可能性がありますが、署名がmsfvenom/metasploitの署名であれば問題ありません!シェルコードを変更するか、暗号化する必要があるだけです。
更新: どうやらこれが最初のPoCではなく、RastaMouseがC#で同様のことを行うブログ記事を書いていたようです。
ヘッダーをプログラムにインクルードする方法は以下の通りです:
#include "functionstomping.hpp"
int main() {
// 任意の方法でPIDを取得し、関数に渡すだけです。
DWORD pid = 3110;
FunctionStomping(pid);
return 0;
}
または、Rustプログラムを使用します:
cd functionstomping
cargo b
functionstomping.exe <pid>
このプログラムを実行した後、必ずリモートプロセスから関数を呼び出さなければなりません!(デフォルトの関数CreateFileを使用した場合は、リモートプロセスからそれを呼び出す必要があります!)。
現在、実行されるシェルコードは単に電卓を表示するものですが、unsigned char shellcode[]を自分のシェルコードで置き換えるだけで済みます。C++ 17とVS2019を使用してC++ヘッダー付きプログラムをコンパイルし、Rustバージョン2021を使用してRustプログラムをコンパイルしました(依存関係はCargo.tomlで確認できます)。
私は、このプロジェクトが原因でコンピュータやプログラムに生じたあらゆる種類の損害について一切の責任を負いません。コントリビューションは歓迎します。プルリクエストを作成してください。確認します!