内部ネットワーク上の単一の侵害ホストは、信頼性の高いピボットパスがなければ無価値です。SOCKS5 over SSHトンネルは、低遅延で最もツールに依存しない横展開の方法を提供しますが、ほとんどのオペレーターは設定を誤ったり、有能なブルーチームが数秒で発見するフォレンジックの痕跡を残したりします。2024年においても、適切に設定されたSOCKS5プロキシは、生のTCPスループットにおいてHTTP CONNECTプロキシより優れており、proxychains-ngやChiselなどのツールを使えば、ターゲットのファイアウォールルールに触れることなく、単一のSSHセッションを通じてnmap、Metasploit、カスタムスクリプトをルーティングできます。
なぜSOCKS5 over SSHがポートフォワーディングより優れているのか
静的ローカルポートフォワーディング(-L)では、リモートサービスごとにローカルポートをマッピングしてからでないと操作できません。/24サブネットをスキャンする必要がある場合、254個の個別のフォワードを作成しなければなりません。SOCKS5動的フォワーディング(-D)は、SSHトンネルを介して任意のTCP接続をリモートホストにルーティングするローカルSOCKS5プロキシを公開することでこれを解決します。このプロトコルはRFC 1928で定義されており、認証、UDP(オプション)、IPv6を扱います。実際には、単一のローカルリスナー(通常は127.0.0.1:1080)を取得し、SOCKSプロキシをサポートするすべてのツールが使用できます。オーバーヘッドは無視できる程度です。SSHの暗号化によりCPU使用率が5~10%増加する程度ですが、レイテンシはVPNやWebシェル経由のリバースポートフォワーディングよりもはるかに低くなります。
Linuxの足場にSOCKS5リスナーをセットアップする
ターゲットネットワーク内のLinuxホストでシェルを取得したとします。ピボットを確立する最速の方法は、侵害したホストから攻撃マシンに向けてssh -D 1080 -N -f user@your-listenerを実行することです。しかし、それにはアウトバウンドSSHアクセスが必要であり、ブロックされている可能性があります。代わりに、攻撃マシンから侵害したホストへの動的フォワードを実行します。
ssh -D 1080 -N -f compromised_user@compromised_host
これにより、ローカルポート1080にSOCKS5プロキシが開きます。次に、proxychains-ng(/etc/proxychains.conf)を設定してそのプロキシを使用します。
socks5 127.0.0.1 1080
その後、任意のTCPツールをトンネル経由で実行します。
proxychains4 nmap -sT -Pn -p 445,3389 10.10.10.0/24
nmapは-sT(TCPコネクトスキャン)を必要とすることに注意してください。SOCKS5は生のSYNパケットをサポートしていないためです。Metasploitの場合は、setg Proxies socks5:127.0.0.1:1080を設定すると、すべての補助モジュールとエクスプロイトモジュールがピボット経由でルーティングされます。この手法は、Hack The BoxやProving GroundsのようなCTF環境で、第2のサブネットに到達することが目標の場合に有効です。
Chisel、Ligolo-ng、およびトレードオフ
SSHが利用できない場合(ターゲットがWindowsを実行している、またはSSHサーバーがない場合など)、代替のトンネリングツールがそのギャップを埋めます。Chiselは、Goベースのクライアントとサーバーを使用し、TCPをHTTP/HTTPS経由でトンネリングします。攻撃ボックスでサーバーを実行します: chisel server -p 8000 --reverse。侵害したホストでクライアントを実行します: chisel client your_ip:8000 R:socks。これにより、サーバー側にSOCKS5リスナーが得られます。Chiselは高速で、制限の厳しいエグレスフィルターを通過できますが、デフォルトではトラフィックが暗号化されていません。運用セキュリティを気にする場合は、TLSでラップするかSSHを使用してください。
Ligolo-ngは異なるアプローチを採用しています。TUN/TAPインターフェースを使用してレイヤ3でネットワークトンネルを作成します。SOCKS5の代わりに、IP範囲全体をピボット経由でルーティングします。つまり、proxychainsなしでnmap -sS(SYNスキャン)を実行できます。トレードオフは管理オーバーヘッドです。両端でroot権限が必要であり、トンネル設定には攻撃マシンにルートを追加する必要があります。両側を制御できるCTFでは、Ligolo-ngの方が高速です。実際のエンゲージメントでは、SOCKS5アプローチの方が移植性が高く、ピボットホストで昇格した権限がなくても機能します。
攻撃者が残す検知シグナル
すべてのピボット手法は痕跡を残します。SSH動的フォワードは、侵害したホスト上にリスニングソケットを作成します。ss -tlnpは127.0.0.1:1080にバインドされたsshプロセスを示します。ブルーチームはこれを外部IPへのアウトバウンドSSH接続と関連付けることができます。Chiselのクライアントプロセスはデフォルトでchiselという名前です。プロセスモニタリングで簡単に検出できます。Ligolo-ngはTUNデバイス(ip link show)を必要とし、サーバー上では異常です。
さらに悪いことに、多くのオペレーターは後片付けを忘れます。SSHセッションは、リモートホストが強制終了するか接続が切断されるまで残ります。Proxychainsはローカルに痕跡を残しませんが、nmapトラフィック自体(通常はスキャンしないホストからの異常なポートスキャン)がIDSアラートを引き起こします。最も一般的なミスは、デフォルトのSOCKS5ポート1080を再利用することです。高いエフェメラルポート(例:ssh -D 53421)に変更し、proxychains設定にエイリアスを付けてデフォルトの設定ファイルを残さないようにします。CTFではこれらは問題になりません。実際のペネトレーションテストでは、これらのシグナルが捕まる原因となります。