
よりステルス性の高いModule StompingおよびModule Overloadingインジェクション技術のバリエーションで、メモリIoCsを低減します。Python ctypesで実装されています。
このツールは、2023 x33fconトーク: 「メモリインジェクション技術のステルス性向上」 [ビデオ] [ブログ記事] で発表されました。
ModuleShiftingは、Module StompingおよびModule overloading注入技法のステルス性を高めた亜種です。
Python ctypesで実装されているため、PythonインタプリタとPyramidを介して完全にメモリ内で実行でき、コンパイル済みローダーの使用を回避できます。
この技法はPEまたはシェルコードペイロードと一緒に使用できますが、よりステルス性の高い亜種は、シェルコードがロードする最終的なペイロードから機能的に独立している必要があるシェルコードペイロードで使用するためのものです。
シェルコードペイロードと一緒に使用する場合、ModuleShiftingは次の操作を実行します。
LoadLibraryを介して正当なホストDLLをロードする
PEペイロードを使用する場合、ModuleShiftingは次の操作を実行します。
LoadLibraryを介して正当なホストDLLをロードするModuleShiftingは、メモリを動的に割り当てずに(つまりVirtualAllocを使用せずに)ペイロードを注入するために使用できます。Module StompingやModule Overloadingと比較して、注入技法自体によって生成されるIoCの数を減らすため、よりステルス性が高くなります。
Module Shiftingと、Module Stompingの一般的な実装(Bobby CookeやWithSecureによるもの)との間には、主に3つの違いがあります。
.textセクションにxバイトを書き込むなど)にうまく溶け込むことができます。Module ShiftingとModule Overloadingの違いは以下の通りです。
.textセクションの上書きバイト数が少なくなるなど)。機能的に独立したシェルコードペイロード(例:AceLdr Beacon Stagelessシェルコードペイロード)を使用することで、ModuleShiftingはメモリを動的に割り当てずにローカル注入を実行でき、現時点ではMonetaおよびPE-SieveスキャンでゼロIoCを生成します。AceLdrのスリープペイロードはHunt-Sleeping-Beaconなどの優れたツールで検出される可能性があることを認識していますが、ここでの焦点はペイロードそのものではなく、注入技法にあります。この場合、ステルス性を高めているのはシェルコードの機能的独立性であり、書き込まれた悪意のあるバイトを元のコンテンツに復元することで、注入の痕跡を効果的に消去できます。
すべての情報とコンテンツは教育目的のみで提供されています。指示はご自身の責任で実行してください。著者もその雇用主も、個人または組織が被った直接的または間接的な損害や損失について一切責任を負いません。
この研究は、Aleksandra Doniec(@hasherezade)、Forest Orr、Kyle Averyといった素晴らしい人々が共有してくれた知識とツールのおかげで可能になりました。学習プロセス全体を通じてMoneta、PeSieve、PE-Bear、AceLdrを頻繁に使用し、このトピックの理解に不可欠でした。
ModuleShiftingはPyramidとPythonインタプリタと一緒に使用することで、ローカルプロセス注入を完全にメモリ内で実行し、コンパイル済みローダーを回避できます。
Pyramidリポジトリをクローンします:
git clone https://github.com/naksyn/Pyramid
好みのC2でシェルコードペイロードを生成し、PyramidのDelivery_filesフォルダに配置します。ペイロードの要件については注意事項セクションを参照してください。
Pyramid Modulesフォルダ内のmoduleshifting.pyスクリプトのパラメータを変更します。
Pyramidサーバーを起動します:
python3 pyramid.py -u testuser -pass testpass -p 443 -enc chacha20 -passenc superpass -generate -server 192.168.1.2 -setcradle moduleshifting.py
生成されたクレードルコードをPythonインタプリタで実行します。
https://github.com/naksyn/ModuleShifting/assets/59816245/67fcf888-3385-47da-b828-8a2dafeeb1e2
この技法を正常に実行するには、自己持続可能な追加ペイロードをメモリの別の領域にロードできるシェルコードペイロードを使用する必要があります。ModuleShiftingはAceLdrペイロードでテストされています。これはBeaconの完全なコピーをヒープ上にロードできるため、初期シェルコードとの機能的依存関係を断ち切ります。この技法は、同様の機能を持つ任意のシェルコードペイロードで機能します。したがって、初期シェルコードは実行後は不要になり、IoCとしてメモリに保持する理由はありません。
また、対象セクションにシェルコードを格納するのに十分なスペースがあるホストDLLを選択する必要があります。そうしないと技法は失敗します。
Module StompingとModule Shiftingは、正当なDLLのメモリ空間にシェルコードを書き込む必要があります。ModuleShiftingはクリーンアップフェーズ後にこのIoCを排除しますが、リアルタイム検査機能を備えたスキャナーによって指標が検出される可能性があります。
