NAT Slipstreaming
NAT Slipstreaming を使用すると、攻撃者は被害者のNAT/ファイアウォールをバイパスして(リモート任意ファイアウォールピンホール制御)、被害者がWebサイトを訪問するだけで、被害者のNATの背後にある任意のシステムにバインドされた任意のTCP/UDPサービスにリモートアクセスできます。
v1 開発者: @SamyKamkar // https://samy.pl
v2 開発者: Samy Kamkar && (Ben Seri && Gregory Vishnipolsky、Armis 所属)
詳細は Ben & Gregory による v2 の優れた技術解説 をお読みください。ここでは v2 の更新内容を深く掘り下げ、多くの追加詳細を提供しています。
v1 公開: 2020年10月31日 👻
v2 公開: 2021年1月26日
ソースコード: https://github.com/samyk/slipstream
アニメーション版はこちら 、私のフォーク の draw.io で生成。アニメーション内でエッジコンテキストフローと制御をエクスポート可能
目次
概要
NAT Slipstreaming は、タイミング攻撃またはWebRTCによる内部IP抽出、自動リモートMTUおよびIPフラグメンテーション発見、TCPパケットサイズの調整、TURN認証の悪用、正確なパケット境界制御、およびブラウザ悪用によるプロトコル混乱を連鎖させることで、NAT、ルータ、ファイアウォールに組み込まれたアプリケーションレベルゲートウェイ(ALG)コネクショントラッキング機構とユーザーのブラウザを悪用します。宛先ポートを開くのはNATまたはファイアウォールであるため、ブラウザベースのポート制限をすべて回避します。
この攻撃は、一部のTCPおよびUDPパケットのデータ部分を、HTTPやその他のヘッダーを含めずに任意に制御できることを利用します。この攻撃は、すべての主要な最新(および旧来の)ブラウザにわたってこの新しいパケットインジェクション技術を実行するものであり、私のオリジナルの2010年のNATピニング技術(DEFCON 18 + Black Hat 2010で発表)の最新版です。さらに、ローカルIPアドレス発見の新しい技術も含まれています。
この攻撃には、NAT/ファイアウォールがALG(アプリケーションレベルゲートウェイ)をサポートしている必要があります。ALGは、SIPやH323(VoIPプロトコル)、FTP、IRC DCCなど、複数のポート(制御チャネル+データチャネル)を使用するプロトコルに必須です。
高レベルでは、NAT Slipstreaming は次のように動作します:
- 被害者が悪意のあるサイト(または悪意のある広告のあるサイト)を訪問
- まず、被害者の内部IPをブラウザから抽出し、サーバーに送信する必要がある
- 内部IPの抽出は、WebRTC データチャネルを介してhttps上で試みられる
- 一部のブラウザ(Chrome)は、HTTPS上のWebRTCを介してのみローカルIPを開示するが、攻撃の一部にはHTTPが必要なため、最初に攻撃ソフトウェアのHTTPSバージョンにリダイレクトしてローカルIPを抽出する
- その後、ローカルIPを取得できた場合はURLに含めたHTTPバージョンにリダイレクトし、他のクロスオリジン保護メカニズムをバイパスする(提示される
.local mDNS/Bonjour アドレスは攻撃に有用ではない)
- WebRTCで内部IPが開示されない場合(Safari)やWebRTCがない場合(<= IE11)は、WebベースのTCPタイミング攻撃が実行される
- すべての一般的なゲートウェイ(例:
192.168.0.1)への隠し img タグがバックグラウンドで読み込まれる
onerror/onsuccess イベントが img タグにアタッチされる
- ゲートウェイからTCP RST(またはSYN + HTTP応答)が返された場合、有効なサブネットが検出されたことになる
- 検出されたサブネット上のすべてのIP(/24)に対してタイミング攻撃を再実行し、onerror/onsuccess 発火までの時間を測定する
- 最速の応答が内部IPである可能性が高いが、すべての応答が被害者の内部IP候補とみなされ、攻撃される
- 隠しフォームと自動HTTP POSTを介して、攻撃者の「HTTPサーバー」(非標準ポートにバインド)に大きなTCPビーコンが送信され、TCPセグメンテーションと被害者のIPスタックの最大MTUサイズ発見を強制する
- ブラウザからWebRTC TURN認証メカニズムを介して、攻撃者のサーバーの非標準ポートに大きなUDPビーコンが送信され、TURN
username フィールドを詰め込んでIPフラグメンテーションを強制する
- TCPセグメンテーションと同様の攻撃をUDPでも実行するが、IPフラグメンテーションが発生し、TCPセグメンテーションとは異なる値を提供する
- 被害者のMTUサイズ、IPヘッダーサイズ、IPパケットサイズ、TCPヘッダーサイズ、TCPセグメントサイズがサーバーで検出され、被害者のブラウザに返送され、後でパケット詰め込みに使用される
- (v1) 内部IPを含む「SIPパケット」が新しい隠しフォームで生成され、アプリケーションレベルゲートウェイのコネクショントラッキングをトリガーする
- TCPポート5060(SIPポート)上のサーバーへの「HTTP POST」が開始され、ブラウザの制限ポートを回避する
- POSTデータは正確なTCPセグメントサイズ/パケット境界に「詰め込まれ」、次に「SIPパケット」が追加され、Webフォームを介して投稿される
- 被害者のIPスタックはPOSTを複数のTCPパケットに分割し、「SIPパケット」(POSTデータの一部として)がHTTPヘッダーを伴わずに独自のTCPパケットに残る
- ブラウザがマルチパート/フォーム境界のサイズを変更した場合(Firefox)、またはその他の理由でパケットサイズが変更された場合、サイズ変更がクライアントに通知され、クライアントは新しいサイズで自動的に再送信する
- UDPポートを開く場合、SIPパケットはTURNプロトコルを介して特別に細工された
username フィールド内で送信され、IPフラグメンテーションと正確な境界制御を強制する
- (v2) TCPベースのSTUN(v1のパッチとブラウザのポート制限をバイパス)接続を使用した「H.323パケット」が生成され、内部IPを含んでアプリケーションレベルゲートウェイのコネクショントラッキングをトリガーするが、「コールフォワーディング」パケットでネットワーク上の他の任意のホストへのリダイレクトを強制する
- TCPポート1720(H.323ポート)上のサーバーへの「H.323コールフォワード」が開始され、ブラウザの制限ポートを回避する。ポートがブロックされているにもかかわらず、WebRTC STUN機能を使用してポート回避を実行する。この機能は制限ポートリストを尊重しない
username フィールドは正確なTCPセグメントサイズ/パケット境界に「詰め込まれ」、次に「H.323パケット」が追加され、Webフォームを介して投稿される
- 被害者のIPスタックはPOSTを複数のTCPパケットに分割し、「H.323パケット」(STUNデータの一部として)がHTTPヘッダーを伴わずに独自のTCPパケットに残る
- ブラウザがマルチパート/フォーム境界のサイズを変更した場合(Firefox)、またはその他の理由でパケットサイズが変更された場合、サイズ変更がクライアントに通知され、クライアントは新しいサイズで自動的に再送信する
- 被害者のNATは、SIPポート上の適切なSIP REGISTERパケット、または適切なH.323コールフォワードパケット(HTTPデータなし)を認識し、ALGがパケットで定義された任意のTCP/UDPポートをネットワーク上の任意の被害者ホストに開くようにトリガーする
- 被害者のNATはSIPまたはH.323パケットを書き換え、内部IPをパブリックIPに置き換える。これにより攻撃者にエクスプロイトが成功したことが示される
- (v2) H.323コールフォワーディングは他の任意のIPに転送できるため、パケットには被害者のネットワーク上の他の任意のホストの内部IPを含めることができ、NATがネットワーク上の任意のシステムにポート転送するようにトリガーする
- 被害者のNATが通常ソースポートを書き換える場合でも、攻撃者が選択したポートにALGが強制的にポート転送される。なぜなら、被害マシン(またはネットワーク上の他のマシン、完全に攻撃者が決定)がそのポートを開いたと認識し、攻撃者は到着するSIP/H.323パケット内の新しいソースポートを確認するため
- 攻撃者は被害者のNATをバイパスし、ネットワーク上の任意のマシンの任意のポートに直接接続できるようになり、以前は保護/隠蔽されていたサービスやシステムが露出する
- 調査対象…おそらくあなた次第?
- 悪意のない使用法: この技術は基本的にブラウザに完全なTCPおよびUDPソケット機能を提供し、システム上の任意のプロトコルとローカルで通信できるようにする。接続はクラウドサーバーを介して抽象化され、ブラウザはソケットであるかのようにクラウドサーバーと通信するため、ブラウザはWebフレンドリーでないプロトコルと通信するためのより強力なツールになる
- 仮想マシン(VM)で共有ネットワーキング(ホストを攻撃から保護するためにトラフィックをホスト経由でルーティングし、ネットワークに直接接続させない)を使用してテストする場合、パケットが外部に送出されると、ポートが開かれるのはVMではなく親ホストマシンになる ;)
- IPフラグメンテーションにより、IPデータセクション内のすべてのデータを完全に制御できる。つまり、オーバーフローパケット内のUDPヘッダー(ソース/宛先ポートを含む)を完全に制御できる…これ以外にどのような悪用が可能だろうか?

詳細
ネットワークアドレス変換 (NAT)
NAT(ネットワークアドレス変換)はいくつかの理由で使用されます。NATの最も有用な機能は、単一のパブリックIPアドレスを複数のシステムで共有できることです。これは、ローカルネットワークを作成し、接続するすべてのマシンにローカルIPアドレスを提供し、それらのシステムの1つがインターネットに接続するときに、送信パケットをパブリックIPを使用するように書き換えて応答がNATに戻るようにし、逆に宛先IPを特定のクライアントのIPに書き換えることで実現します。
同じアドレス/ポート(google.com:443)への接続を内部ホスト間で区別するのはNATの責任です。なぜなら、最終的にそれらの送信ポート、宛先IP、送信元IPはすべて同じになるからです。2つの異なる内部ピアが同じ送信元ポートから接続しようとした場合、最新のNATは一方の送信元ポートを変更します(一部のネットワークはすべてのTCP/UDP送信元ポートに対してこれを行います)。

コネクショントラッキング