MemoryEvasion
レッドチーマー向けのCobalt Strikeメモリ回避ローダー。x86/x64のステージャー/ステージャーレスペイロードをプロファイル付きでサポート(Windows7/10、Windows Server 2012でテスト済み)
回避の仕組み
- シェルコードがメモリに読み込まれる前に、Sleep、CreateProcessA、CreateHeap、GetProcessHeap関数をフックします。
- beaconのプロファイル用に新しいヒープを作成します。beaconがGetProcessHeapまたはCreateHeap関数を呼び出すと、新しいヒープのハンドルを返します。
- beaconがsleep関数を呼び出すと、beaconとプロファイルが配置されているメモリを暗号化し、sleepが終了すると復号化します。
GetProcessHeapとCreateHeapをフックする理由
- 64ビットのbeaconはGetProcessHeapを呼び出してbeaconのプロファイル用のメモリを取得します。
- 32ビットのbeaconはGetProcessHeapを呼び出してbeaconのプロファイル用のメモリを取得しません。CreateHeapを使用して新しいヒープを作成し、そのヒープからbeaconのプロファイルを格納するメモリを取得します。
デモ

参考
このプロジェクトは以下のものなしでは実現できませんでした: