![画像](https://habrastorage.org/getpro/habr/post_images/69a/7d5/574/69a7d5574321f3d1af4016ac2bdafeef.gif)
WiFi 802.11nは、フレーム集約メカニズムを使用して、データ転送のオーバーヘッドを削減します。
これを行うには、複数のフレームを1つに結合されます。 この場合、フレーム区切りマーカーはデータとともに送信されます。
これにより、WiFiデバイスを通過するときに別のフレームとして解釈されるデータを生成できます。
つまり、サーバーからクライアントに送信されるデータのフロー(攻撃者のサーバーからファイルをダウンロードする場合など)またはクライアントからサーバーに送信されるデータの流れを制御することで、すべてのOSIレベルで任意のパケットを生成できます。
- RadioTapヘッダーを含むパッケージ: ビーコン、プローブ要求/応答、認証解除
- L2レベル:パケットヘッダーで任意のMACアドレスを指定、ARPスプーフィングを実行可能
- L3 / L4レベル: 任意のTCP / UDP / ICMPパケットとIPヘッダーの作成
- 等々
この脆弱性は、 唯一のオープンなネットワーク標準の802.11nです。
注入とSchemeのPHYフレーム
![画像](https://habrastorage.org/getpro/habr/post_images/127/fa0/aa5/127fa0aa575159167e5662cbcc53049c.png)
ご覧のとおり、フレームセパレーター(A-MPDYデリミター)はユーザーデータと共にペイロードに直接配置されるため、受信側がそのようなフレームを受信すると、そのフレームは分解され、シーケンスはオペレーティングシステムによって別のパッケージとして認識されます。
レポート「 802.11n MACフレーム集約でのインジェクション攻撃」の脆弱性について詳しく読む
脆弱性github.com/rpp0/aggr-injectを悪用するコード
ペイロードを生成するスクリプトはaggr-inject.pyです。
アクセスポイントからクライアントにフレームを挿入するには、被害者がダウンロードするjpgファイルを生成することをお勧めします(投稿ヘッダーの写真のように)。 逆方向では、クライアントからポイントまで、特別に生成されたPOST要求を攻撃者のWebサーバーに送信することが提案されています。
転送されるデータの種類は重要ではありません。攻撃者主導のデータストリームを作成するには十分です。 この場合、HTTPが最も単純な例として採用されます。 データを変更せずにWi-Fiチップ自体に転送することが重要です。そのため、データはオープンチャネル(HTTPSは適切ではありません)を介して送信され、処理されず、圧縮されます。
脆弱性デモンストレーションの最も単純な例:ブロードキャストビーコンフレームの送信。 ネットワーク名(SSID)を報告する、アクセスポイントが送信するビーコン。
ネットワーク名「 injected SSID」のビーコンを挿入するファイルaggr_beacon.jpg 250MB
ほとんどのオペレーティングシステムはアクティブスキャンを使用し、プローブ要求で応答したネットワークのみを表示するため、WiFiの接続に使用できるネットワークのリストに新しいネットワークは表示されない可能性があります。 したがって、パケットの注入を確認するには、パッシブスキャンを使用する必要があります。
ところで、Mac OSを使用している場合は、ネイティブの空港カードでWiFiトラフィックをダンプできます。 私は私のタルサにこれをお勧め空港-スニファ 。 ダンプは/tmp/airportXXXX.capにあります
私のテストベンチは、投稿タイトルの写真と同じです。 悪意のあるファイルはタブレットによってダウンロードされ、ダンパーはopenwrt 12.09ファームウェアを備えた同じTL-MR3020アクセスポイントに接続されたラップトップで実行されています。 また、注入はtl-wn821n USBアダプターを使用して正常に再現されます。
ラップトップでキャッチされたパケットは次のようになります。
tcpdump -e -r /tmp/airport.pcap type mgt subtype beacon
13:33:11.317916 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:11.317916 4269971522us tsft bad-fcs -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [1.0* 35.0 23.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:11.317917 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:11.317918 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:11.317919 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:11.317921 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:11.317922 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:11.317923 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1 13:33:12.876472 4271529509us tsft bad-fcs -85dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:18:00:00:00:00:00 (oui Unknown) DA:Broadcast SA:1c:e9:87:8a:54:36 (oui Unknown) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
タイミングは、注射が非常に明るいことを示しています。
実際の攻撃を行うには、L2およびL3レベルに上げる必要があります。つまり、アクセスポイントのMACアドレス、場合によってはクライアントのMACアドレス、NATの背後にあるクライアントのIPアドレスを知る必要があります。 したがって、実際の状況で脆弱性を悪用することは非常に困難です。 最大値は、認証解除パケットを送信し、ネットワークからすべてのクライアントを切断することです。
TCPパケットを正常に挿入できたので、NATの背後にあるクライアントをTCPポートにクロールし、nf_conntrackでクライアントにパケットを渡すことができる変換を作成しようとしました。 しかし、私は成功しませんでした。 リモートホストの代わりにクライアントにSYNを送信した場合、そのSYN-ACK応答はブロードキャストを作成せず、世界中から返信することはできません。 クライアントからワールドにSYNを送信して返信すると、ESTABLISHED状態のルーターでブロードキャストを作成しても、ワールドからクライアントに送信された新しいSYNは破棄されます。 このトピックに関する空想でさえ、シーケンス番号を推測する問題については壊れています。 でも、たぶん私はただのロシャラで、あなたは成功するでしょう。
UDPでこれを正常に行うことができます。 また、例には、icmpを送信してNATのホストをスキャンする方法があります。