2021/01/29 NAT Slipstreaming v2が公開されたので、追加記事を書きました
https://asnokaze.hatenablog.com/entry/2021/01/29/014759
2020年10月31日に「NAT Slipstreaming」という攻撃手法が発見されてます
samy.pl
これは簡単に言うと
罠サイトを踏ませることで、SIPのApplication Level Gateway機能を持つNATの内側に居るクライアントに対して、外側からそのクライアントの任意のTCP/UDPポートに接続できる。という攻撃のようです。
この攻撃はさまざなテクニックを使用しており大変面白いです。調査過程も含め詳細は上記のサイトに書かれているので、そちらを読むことを強く推奨します。
ざっくり
登場人物
- victim(攻撃対象): ブラウザで攻撃者のサイトにアクセスすr
- attacker (攻撃者): 罠サイトを準備し、最終的にNAT内側のvictimの任意ポートにアクセスする
- Application Level Gateway NAT: NATの機能を持つが、5060ポートで送信されるSIPメッセージを見つけると、そのSIPメッセージ内に含まれるIP/Portもちゃんと外向きに書き換え、マッピングを行い通信を中継する。
(解説サイトより引用)
- 1. victimが、直接もしくは広告を通してattackerのサイトを訪れます
- 2. attackerはWebRTCやタイミング攻撃を通してvictimのinternal IPを取得します(後のSIPメッセージを構築時に使用します)
- 3. attackerは、Hidden Formを通して大きなデータを送信させ victim のIPスタックの最大MTUサイズを検出します(後のSIPメッセージをパケット境界に合わせるために使用します)
- 4. attackerは、Hidden Formを通してvictimに下記のようなPOSTをport5060でattackerサイト宛に送信させます。HTTPボディにはSIPのRegisterメッセージが格納されていますが、このSIPメッセージがちょうどパケット境界になるように途中にデータを埋め込み調整します。(このSIPメッセージのContactヘッダが最終的に攻撃者が通信を行いたい先です)
POST / HTTP/1.1 Host: samy.pl:5060 Connection: keep-alive Content-Length: 191 Cache-Control: max-age=0 Origin: http://samy.pl (中略) ------WebKitFormBoundaryhcoAd2iSAx3TJA7A Content-Disposition: form-data; name="textname" REGISTER sip:samy.pl;transport=TCP SIP/2.0 Contact: <sip:samy@192.168.0.109:1234;transport=TCP> ------WebKitFormBoundaryhcoAd2iSAx3TJA7A--
ブラウザの対策
これはブラウザ側の脆弱性というわけではないが、ワークアラウンドとして対策されている。
具体的には5060/5061のポートへのリクエストはブラウザによってブロックされる変更が入っている。
- Firefox: Intent to Ship: Block HTTP(s) requests to SIP ports 5060, 5061
- Chrome: FYI: Ports 5060 and 5061 to be added to the restricted list
- safari: 218557 – Consider blocking ports 5060 and 5061
同様に、whatwgの仕様上もブロックポートに加えられている
https://github.com/whatwg/fetch/pull/1109