セキュリティ
NAT Slipstreaming v2.0により、攻撃者は任意のTCP/UDPサービスにリモートからアクセス可能
Nat Slipstreaming v2.0 allows an attacker to remotely access any TCP/UDP service (sa.my)
要約
NAT Slipstreaming v2.0は、ユーザーがウェブサイトを訪問するだけで、攻撃者が被害者のNAT/ファイアウォールをバイパスし、NATの背後にある任意のシステム上のTCP/UDPサービスにリモートからアクセスできる脆弱性です。v1は2020年にSamy Kamkar氏によって開発され、v2はArmis社のBen Seri氏とGregory Vishnipolsky氏によってアップデートされました。この攻撃は、ブラウザの機能とNAT/ファイアウォールに組み込まれたALG(Application Level Gateway)の仕組みを悪用し、IPアドレスの抽出、MTUやパケットサイズの操作、プロトコルの混同などを組み合わせて、任意のポートを開放させます。
全文翻訳
NAT Slipstreaming v2.0
NAT Slipstreamingにより、攻撃者は被害者がウェブサイトを訪問するだけで、被害者のNAT/ファイアウォールをバイパスし、被害者のNATの背後にある任意のシステム上の任意のTCP/UDPサービスにリモートからアクセスできます(リモートからの任意のファイアウォールピンホール制御)。
v1開発者:@samykamkar // https://sa.my
v2開発者:samy kamkar && (Ben Seri && Gregory Vishnipolsky of Armis)。v2のアップデートに関するBen & Gregoryの優れた技術的解説はこちらで、さらに詳細な情報が豊富に含まれています。
v1リリース:2020年10月31日 👻
v2リリース:2021年1月26日
ソースコード:https://github.com/samyk/slipstream
アニメーションは、エッジコンテキストフローとアニメーションの制御をエクスポート可能な私のdraw.ioフォークで生成しました。
目次
概要
詳細
ネットワークアドレス変換(NAT)
コネクショントラッキング
アプリケーションレベルゲートウェイ
ルーター調査 / ファームウェアダンプ
ファームウェアのリバースエンジニアリング
興味深いファイルの探索
興味深い関数の探索
調査対象のポート/サービス
カーネルオブジェクトのリバースエンジニアリング
HTTP POSTでのSIPパケット試行
カーネルオブジェクトのリバースエンジニアリングの続行
さらなるコネクショントラッキング / アプリケーションレベルゲートウェイ調査
Linux Netfilterパケット境界 / フラグメンテーション制御
TCPタイミング攻撃 / 内部サブネットとIP発見
タイミング攻撃
ブラウザプロトコル混同
ライブブラウザパケット改変
その他の発見
例 / ダウンロード
連絡先
概要
NAT Slipstreamingは、ユーザーのブラウザと、NAT、ルーター、ファイアウォールに組み込まれたアプリケーションレベルゲートウェイ(ALG)のコネクショントラッキングメカニズムを悪用します。これは、タイミング攻撃またはWebRTCによる内部IP抽出、自動化されたリモートMTUとIPフラグメンテーションの発見、TCPパケットサイズの調整、TURN認証の誤用、正確なパケット境界制御、およびブラウザの悪用を通じたプロトコルの混同を連鎖させることで実現されます。宛先ポートを開くのはNATまたはファイアウォールであるため、ブラウザベースのポート制限を回避します。この攻撃は、HTTPやその他のヘッダーを含めることなく、一部のTCPおよびUDPパケットのデータ部分を任意に制御することを活用しています。この攻撃は、すべての主要な最新(および古い)ブラウザでこの新しいパケット注入技術を実行し、2010年の私のオリジナルのNAT Pinning技術(DEFCON 18 + Black Hat 2010で発表)の近代化されたバージョンです。さらに、ローカルIPアドレス発見のための新しい技術も含まれています。
この攻撃には、ALG(Application Level Gateways)をサポートするNAT/ファイアウォールが必要です。これは、SIPやH323(VoIPプロトコル)、FTP、IRC DCCなど、複数のポート(制御チャネル+データチャネル)を使用できるプロトコルに必須です。
大まかに言うと、NAT Slipstreamingは次のように機能します。
被害者が悪意のあるサイト(または悪意のある広告を含むサイト)を訪問する
被害者の内部IPが最初にブラウザによって抽出され、サーバーに送信される必要がある
WebRTCデータチャネルをHTTPS経由で内部IPを抽出する
一部のブラウザ(Chrome)はWebRTC経由でHTTPSでのみローカルIPを開示しますが、攻撃の一部はHTTPを必要とするため、まず攻撃ソフトウェアのHTTPSバージョンにリダイレクトしてローカルIPを抽出します。
その後、他のクロスオリジン保護メカニズムをバイパスするために、ローカルIPをURLに含めてHTTPバージョンにリダイレクトします(.local mDNS/Bonjourアドレスは攻撃には役立ちません)。
WebRTC(Safari)で内部IPが開示されない場合、またはWebRTCがない場合(IE11以前)、WebベースのTCPタイミング攻撃が実行されます。
一般的なゲートウェイ(例:192.168.0.1)すべてに対して、非表示のimgタグがバックグラウンドでロードされます。
imgタグにonerror/onsuccessイベントがアタッチされます。
ゲートウェイからTCP RST(onerror)が返されるか、SYN + HTTP応答(onsuccess)が数秒以内(TCPタイムアウトがonerrorをトリガーする前)に発生した場合、有効なサブネットが検出されたと判断します。
検出されたサブネット(/24)上のすべてのIPに対してタイミング攻撃を再実行し、onerror/onsuccessの発火までの時間を測定します。
最も速い応答が内部IPである可能性が高いですが、すべての応答が被害者の内部IP候補と見なされ、攻撃されます。
攻撃者の「HTTPサーバー」にバインドされた非標準ポートへの自動HTTP POSTを伴う大きなTCPビーコンが、TCPセグメンテーションと最大MTUサイズを強制するために送信されます。
攻撃者のTCPサーバーは、最大セグメントサイズTCPオプションを送信して、被害者のアウトバウンドパケットサイズを調整します(RFC 793 x3.1)。これにより、ブラウザTCPパケットのサイズを制御できます。
WebRTC TURN認証メカニズムを介して攻撃者のサーバー上の非標準ポートへの大きなUDPビーコンがブラウザから送信され、TURNユーザー名フィールドに詰め込まれたデータでIPフラグメンテーションを強制します。
TCPセグメンテーションと同様の攻撃を実行しますが、UDP経由で実行します。IPフラグメンテーションが発生し、TCPセグメンテーションとは異なる値を提供します。
被害者のMTUサイズ、IPヘッダーサイズ、IPパケットサイズ、TCPヘッダーサイズ、TCPセグメントサイズがサーバーによって検出され、パケットスタッフィングに使用するために被害者のブラウザに送り返されます(v1)。
「SIPパケット」が新しい非表示フォームで生成され、内部IPを含んでアプリケーションレベルゲートウェイのコネクショントラッキングをトリガーします。
TCPポート5060(SIPポート)のサーバーへの「HTTP POST」が開始され、制限されたブラウザポートを回避します。
POSTデータは正確なTCPセグメントサイズ/パケット境界に「スタッフィング」され、次に「SIPパケット」が追加されてWebフォーム経由で投稿されます。
被害者のIPスタックはPOSTを複数のTCPパケットに分割し、「SIPパケット」(POSTデータの一部)をHTTPヘッダーなしの独自のTCPパケットに残します。
ブラウザがmultipart/form-data境界のサイズを変更した場合(Firefox)、またはパケットサイズがその他の理由で変更された場合、サイズ変更がクライアントに通知され、クライアントは新しいサイズで自動的に再送信します。
UDPポートを開く際、SIPパケットはTURNプロトコルを介して特別に作成されたユーザー名フィールド内で送信され、IPフラグメンテーションと正確な境界制御を強制します(v2)。
「H.323パケット」がTCPベースのSTUNを使用して生成され(v1のパッチとブラウザポート制限をバイパス)、アプリケーションレベルゲートウェイのコネクショントラッキングをトリガーする内部IPを含んでいますが、任意の他のホストへのリダイレクトを「コールフォワーディング」パケットで強制します。
TCPポート1720(H.323ポート)のサーバーへの「H.323コールフォワード」が開始され、ポートがブロックされているにもかかわらず、WebRTC STUN機能を使用して制限されたブラウザポートを回避します。ポート回避は、制限されたポートリストを尊重しないSTUN機能の使用によって行われます。
ユーザー名フィールドは正確なTCPセグメントサイズ/パケット境界に「スタッフィング」され、次に「H.323パケット」が追加されてWebフォーム経由で投稿されます。
被害者のIPスタックはPOSTを複数のTCPパケットに分割し、「H.323パケット」(STUNデータの一部)をHTTPヘッダーなしの独自のTCPパケットに残します。
ブラウザがmultipart/form-data境界のサイズを変更した場合(Firefox)、またはパケットサイズがその他の理由で変更された場合、サイズ変更がクライアントに通知され、クライアントは新しいサイズで自動的に再送信します。
被害者のNATは、SIPポートで正規のSIP REGISTERパケット、または(HTTPデータなしの)正規のH.323コールフォワードパケットを認識し、ALGにパケット内の任意のTCP/UDPポートをネットワーク上の任意の被害者ホストに開放させます。
被害者のNATはSIPまたはH.323パケットを書き換え、内部IPをパブリックIPに置き換えます。これにより、攻撃が成功したことを攻撃者にヒントします(v2)。
H.323コールフォワーディングは任意の他のIPにリダイレクトできるため、パケットはネットワーク上の任意の他のホストの内部IPを含むことができ、NATにネットワーク上の任意のシステムへのポートフォワーディングを強制します。たとえ被害者のNATが通常ソースポートを書き換えるとしても、ALGは被害者マシン(またはネットワーク上の別のマシン、攻撃者が完全に決定)がそのポートを開いたと信じているため、ポートフォワーディングを強制し、攻撃者は到着したSIP/H.323パケットで新しいソースポートを確認します。
攻撃者はこれで被害者のNATをバイパスし、ネットワーク上の任意のホスト上の任意のポートに直接接続できるようになり、以前は保護されていた/隠されていたサービスやシステムが調査のために公開されます...おそらくあなたによって?
非悪意のある使用法:この技術は、基本的にブラウザにローカルシステム上の任意のプロトコルと通信するための完全なTCPおよびUDPソケット機能を提供します。接続は、接続し直すクラウドサーバーを介して抽象化できますが、ブラウザはソケットであるかのようにクラウドサーバーと通信するだけです。