29
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ポート10080がつながらないんだけど

Posted at

「先輩、あのサーバーにアクセスできないんですけど...」
「え、できるけど?」
「もしかして、Google Chromeのベータ版に変えたからですかね?」
「仕事でベータ版を使うのはやめまし(略」
「そういえば火狐使ってる同僚も数か月前にそんなこといってて、どこかの設定をいじったとか...」
「呼んだ?」
「はい、さっきChrome更新したら鯖につながらなくなって」
「もしかして、あのポート10080?」

NAT Slipstreaming

「実はな、去年「NAT Slipstreaming」という攻撃手段が見つかってな... 要はウェブサイトがブラウザー経由でLAN内のサーバーにアクセスして、ファイアウォールの設定を変更するっていうものだ。しかもこの攻撃はCSRFとかと違って、攻撃先がHTTPリクエストを受け付ける必要はないんだ...」

NAT Slipstreamingの攻撃方法は、仕組み上はクロスサイトリクエストフォージェリ(CSRF)と似ています。

  • 攻撃者がウェブサイトを設置する。
  • 被害者がそれを閲覧する。
  • 被害者のブラウザーが、攻撃先のサーバーにアクセスする。
  • 攻撃先のサーバーの設定が変更される。

NAT Slipstreaming: v1

古典的なCSRFは、HTTP(ポート80と443が主)サーバーを攻撃しましたが、NAT Slipstreamingは、これに限られていません。たとえば、「Session Initiation Protocol方式のリクエストをNATのポート5060に送信して、ポートを開放する」というものがあります。

しかし、ブラウザーはSIP形式のリクエストを送信できません。そのため、攻撃者のウェブサイトはHTTP POST形式のリクエストを送信します。(これは、通常のCSRFと同じです。)被害者のOSの実装側で、このリクエストが分割され、NATにはゴミと「本当のSIP形式リクエスト(のようなもの)」2つが送信されます。

なお、この攻撃ではCSRFとは違い、攻撃先のポート番号はわかっても、IPアドレスはわかりません。そのため、事前にimgタグ等を利用したタイミング攻撃で、あるポート番号が利用可能なIPアドレスを探す「逆ポートスキャン」が行われます。

NAT Slipstreaming: v2

実はさっき述べた攻撃方法は、「バージョン1」というものです。バージョン2ももちろんあります。このバージョンでは、HTTP POSTではなくWebRTCを利用します。この方式は少しわかりにくいので、説明は省略しますが、結果は同様です。

対策

NAT Slipstreamingの対策は、「特定のポートへのアクセスをブラウザー側で遮断する」ことでした。Firefoxは対応に素早く、12月リリースのFirefox 84ではすでに対応されました。Firefox 85ではそれが強化され、Firefox 87ではNAT Slipstreaming v2対策も追加されました。

「特定のポート」は、fetch()の仕様書に記載されています。その中に最近、ポート10080が追加されました。

「ってことは、サーバーにアクセスできるのも...」
「初期設定では、Chrome 91がリリースされるまで、ですね。その後は隣の部署からMac借りてSafariでつなぐか、それとも...」
「あ、Firefoxなら設定一個変えれば大丈夫です。」

回避策

ポート番号を決める側

ポート番号に10080などの遮断される番号を使わないようにしましょう。

アクセスする側

方法は4つあります:

  1. requestsとかnode-fetchとかでアクセスする。この仕様はウェブブラウザー以外には影響しない。
  2. 古いバージョンのブラウザーを使う。(やめましょう。)
  3. Safariが実装するまでそっちに移行する。
  4. ポート遮断を無効化する。

Firefoxでは、この対策をポート単位で無効化できます。といっても、安易な無効化はセキュリティ上の問題になるのでやめましょう。

  1. (必要な場合は)上司に決裁を取ります。
  2. about:configに行きます。お説教されても続行します。
  3. 検索欄にnetwork.security.ports.banned.overrideを入力し、文字列の規則を作成します。+ボタンを押し、「10080」と入力します。(他のポートもある場合は、10080,6666のようにカンマ区切り。)
  4. これでアクセスできるようになります。以上。

参考資料

29
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?