
GRAT2 C2
(c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
/ ._. \ / ._. \ / ._. \ / ._. \ / ._. \
\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/
(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
|| G || || R || || A || || T || || 2 ||
_.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._
(.-./`-'\.-.)(.-./`-`\.-.)(.-./`-'\.-.)(.-./`-'\.-.)(.-./`-'\.-.)
`-' `-' `-' `-' `-' `-' `-' `-' `-' `-'
v1.1 beta!
GRAT2について
GRAT2は、python3で記述されたC2(コマンドアンドコントロール)ツールであり、クライアントは.NET 4.5で記述されています。主なアイデアは、このプロジェクトを開始したGeorgios Koumettou氏から来ています。
なぜGRAT2を開発したのか?
世の中には多数のC2ツールが存在することは認識していますが、私たちはC2やその他の難読化手法がどのように動作するかへの好奇心からこのツールを開発しました。それだけです!;-)
現在の機能:
回避手法:
- Sandbox(マシンがドメインに参加しているかチェックし、していなければ終了)。
- ETW(Event Tracing for Windows)ログのパッチ。
- AMSI(Antimalware Scan Interface)のパッチ。
- caretrun - explorer.exeを親PIDとして使用し、キャレット形式(^i^p^c^o^n^f^i^g)でcmd.exeを介してコマンドを実行(一部のAV/EDRを回避)。
通信:
- HTTP and HTTPS
- DNS - 現在はTXTレコードのみ対応。
- XORとbase64を使用したエンコード通信。
- プロキシ対応。
モジュール:
- startdns - DNSリスナーサーバーを起動。
- listagents - 現在のエージェントを一覧表示。
- localip - マシンのローカルIPアドレスを取得。
- uac - 親PIDスプーフィング手法を使用したサイレントディスククリーンアップによるUACバイパスを試行。
- maketoken - 現在のトークンを削除し、指定された資格情報(ドメインまたはローカル)を使用して新しいトークンを作成。
- revtoself - 現在のトークンを削除。
- stealtoken - 実行中のプロセスからトークンを盗み、ユーザーを偽装する試行(管理者権限が必要)。
- rportfwd - リバースポートフォワードの作成を試行。
- whoami - 現在のユーザーを表示。
- hostname - マシンのホスト名を表示。
- domain - ドメインのFQDNを表示。
- screenshot - スクリーンショットを撮影。
- download - ファイルをダウンロード。
- upload - ファイルをアップロード。
- cd - ディレクトリを変更。
- run - explorer.exeを親PIDとして使用し、cmd.exeを介してコマンドを実行。
- caretrun - explorer.exeを親PIDとして使用し、キャレット形式(^i^p^c^o^n^f^i^g)でcmd.exeを介してコマンドを実行(一部のAV/EDRを回避)。
- sleep - 新しいスリープ時間を設定。
- exit - 終了。
- shell - cmd.exeを介してコマンドを実行。
- powershell - アンマネージドPowerShellを使用してPowerShellコマンドを実行。
- powerscript - アンマネージドPowerShellを使用してPowerShellスクリプトを実行。
- executeassembly - メモリ内で.NETアセンブリの実行を試行。
- ps - 現在のプロセスを表示。
- pwd - 現在のディレクトリを表示。
- ls - ディレクトリ一覧。
- pid - 現在のプロセスIDを表示。
プロセスインジェクション手法:
- dynamic_injectcrt - Dynamic Invokeを使用してシェルコードをプロセスに注入する試行。
- ppid_processhollow - Process Hollowingと親PIDスプーフィング(explorer.exe)手法を使用してシェルコードをプロセスに注入する試行。
- processhollow - Process Hollowing手法を使用してシェルコードをプロセスに注入する試行。
- injectppidapc - QueueUserAPCと親PIDスプーフィング(explorer.exe)手法を使用してシェルコードをプロセスに注入する試行。
- injectapc - QueueUserAPC手法を使用してシェルコードをプロセスに注入する試行。
- injectcrt - Create Remote Thread手法を使用してリモートプロセスにシェルコードを注入する試行。
位置非依存シェルコードをDonutを使用して生成するには、GRAT2_Shellcodesを参照してください。
TODO:
- SMBリスナー。
- DNSリスナーを改善(Aレコードの追加、DNSからHTTPへの切り替えなど)。
- ログ機能の追加。
- SOCKS5の実装。
- 既知の問題の修正。
クライアントプロファイルの設定:

一般設定とHTTP/sリスナー:
-
c2 - GRAT2サーバーのIPアドレスまたはホスト名(必須)。
-
sandboxEvasion - 有効(1)の場合、GRAT2はドメイン参加コンピューター上でのみ実行され、それ以外では終了します。無効(0)の場合、GRAT2はドメイン非参加コンピューター上でのみ実行され、それ以外では終了します(デフォルト:無効)。
-
patchEtw - 有効(1)の場合、ETWがパッチされます(デフォルト:有効)。
-
patchAmsi - 有効(1)の場合、AMSIがパッチされます(デフォルト:有効)。
-
sleep - スリープ時間を設定(デフォルト:3秒)。
-
UserAgent - UserAgentを設定(デフォルト:"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko")。
-
initialUrl - 初期GRAT2 HTTP GETリクエスト(デフォルト:jquery.js)。
-
sendResults - GRAT2 HTTP POST結果リクエスト(デフォルト:login.aspx)。
注記 initialUrlまたはsendResultsの文字列を変更する場合は、GRAT2_Server/handlers.pyの49行目と84行目の文字列をそれぞれ更新する必要があります。
DNSリスナー:
- DNSListener - 有効(1)または無効(0)。有効の場合は、GRAT2サーバーを(下記参照)に従って設定してください。
- DNSServer - GRAT2 DNSサーバー。
- dnsMaxTXT - TXTレコードの最大長(デフォルト:255)。
- maxDNSChar - 各DNSサブドメインの最大文字数(デフォルト:63)。
サーバープロファイルの設定:

HTTP/sおよびDNSリスナー:
- HOST_NAME - GRAT2サーバーのIPアドレスまたはホスト名。
- PORT_NUMBER - リスニングポート(80または443)。
- server_pem - PEMファイルの場所。
- dnsDomainName - GRAT2 DNSサーバー。
使用方法:
- Visual Studioを使用してGRAT2クライアントプロジェクト(GRAT2_Client.sln)を開き、ソリューション構成をDebugからReleaseに変更してから、ソリューションをビルドします。
- GRAT2サーバーに**2つの依存関係(dnslibとtermcolor)**をインストールします:pip3 install -r requirements.txt
- GRAT2サーバーを起動:

- GRAT2クライアント実行可能ファイル(GRAT2_Client\bin\Release\GRAT2_Client.exe)を実行します。
- エージェントと対話:

リリースノート:
バージョン1.0 - 2020年9月5日
バージョン1.1 - 2020年12月13日
- DNSリスナーを追加
- HTTPSリスナーを追加
- エージェント一覧機能を追加
- localipモジュールを追加(マシンのローカルIPアドレスを取得可能)
- アンマネージドPowerShellを書き直し
- .NET 4.0から.NET 4.5に変更
クレジット:
また、各作者への謝辞と参照リンクはソースコード内で強調表示されています。
免責事項:
このプロジェクトは、許可されたテストまたは教育目的でのみ使用できます。事前の許可なく対象システムに対してこのソフトウェアを使用することは違法であり、このソフトウェアの誤使用によるいかなる損害についても著者は責任を負いません。