世界を動かす技術を、日本語で。

IPv6はNATがないからといって安全でないわけではない

概要

  • IPv6 はNATがなくても 安全性に問題はない という誤解の指摘
  • NAT は本来 アドレス節約 のための技術
  • セキュリティ効果の大半は ファイアウォール によるもの
  • 現代のルーター はNATなしでも デフォルト拒否 の設定
  • IPv6 でも明示的設定がなければ 外部からの通信は遮断

IPv6はNATがなくても安全

  • IPv4NAT によってデフォルト拒否のセキュリティを得ているという誤解
  • NAT は本来 アドレス不足 への対応策
  • NAT は複数端末が 1つのグローバルIP を共有するための仕組み
  • パケットの 宛先IPとポート を書き換えるアドレス変換機能
  • ポートマッピングポートフォワード により通信先を制御
  • 未設定のポート への着信は 内部ネットワークに到達しない

セキュリティの本質はファイアウォール

  • NAT に付随する ステートフルファイアウォール がセキュリティの主役
  • 現代のルーター はNATの有無に関わらず 着信拒否 がデフォルト
  • ファイアウォール が予期しない着信パケットを 破棄
  • 例: UniFiルーター のIPv6ファイアウォール初期設定
    • 確立済み通信の許可 (アウトバウンド通信の戻りのみ許可)
    • 不正な通信の遮断
    • その他すべての通信の遮断
  • IPv6 環境でも 明示的な許可ルール がない限り、 外部からの通信は遮断
  • NATの有無 でセキュリティが左右されるわけではない

まとめ

  • NAT はセキュリティ機能ではなく アドレス節約策
  • ファイアウォール こそが デフォルト拒否 の根拠
  • IPv6 でも 適切な初期設定 があれば、 NATなしでも安全性は維持

Hackerたちの意見

ネットワークエンジニアとして最初に教わったことだし、受けたセキュリティの正式なクラス(だいたいCiscoのやつで、コースはめっちゃいい)でも同じことを繰り返し言われたよ。一般的な知識は、みんなが思ってるよりも少し複雑だと思う。ここに、IPアドレスが漏れた2つの高価値ターゲットを紹介するね。 IPv4ターゲット: 192.168.0.1 IPv6ターゲット: 2001:1868:209:FFFD:0013:50FF:FE12:3456 ターゲット#1は、ルーティング方法を考えないといけないから、追加のセキュリティレベルがあるし、そもそも誰のものかもわからない。ターゲット#2は、攻撃する際の90%の情報を与えてしまう(デバイス特有の情報も漏れてるから、弱点がどこかもわかっちゃう)。それに、IPv6にはNATがないけど、非常に効果的なプレフィックス変換メカニズムがあって、両方の良いとこ取りだよ。 実際のターゲットはこれだよ: FDC2:1045:3216:0001:0013:50FF:FE12:3456 これにルーティングするのは難しいけど、インターネット上のどんなものにも透過的にアクセスできるんだ。ネイティブでも、プレフィックス変換ターゲットを通じてもね。

Ciscoがこれを教えるのは皮肉だよね。NATを導入したときに言ってたこととは真逆だし。

そうそう、デフォルトではLinuxベースのルーターは、IPv6ホストにトラフィックを転送しないよ。明示的にプログラムを動かして、カーネルにそれを伝えないといけない。

IPアドレスが漏れたら、標準ゲートウェイじゃなくてNAT変換を行っているユニットのアドレスになるんじゃないの?

192.168.0.1にアクセスするのに1秒もかからなかったよ!そんなに難しくなかった。 (;-)

「高価値ターゲットのアドレスが漏れたけど、インターネット経由でルーティングできるかはわからないし、漏れたのは内部アドレスで、誰がその高価値ターゲットを持ってるかもわからない」って話はちょっと信じられないな。実際に心配なら、NAT66を使ってプレフィックスを隠すことができるけど、公共の攻撃ポイントが最初に公開アドレスを変換しているファイアウォールだとしたら、これがセキュリティを達成するとは思えない。それに、もし本当に漏れたIPv6アドレスなら、一時的な形式になっていて期限切れになってるはずだよ。もしインバウンドが許可されるべき静的サービスのことを言ってるなら、結局「攻撃ポイントはインターネットのエッジがインバウンドを公開するところであって、内部アドレスじゃない」ってことになる。

あなたの例で言うと、2つの「プライベート」IPアドレスを提示するべきじゃない?その場合、IPv6アドレスは自動設定されたリンクローカルアドレスに置き換えるべきだし(ULAアドレスも有効だけど)、または外部から見える2つのIPアドレスを提示するべきで、その場合はIPv4アドレスを192.168.0.1がNATされる「パブリック」アドレスに置き換えるべきだよね?そうすれば、言ってる違いはあまり際立たなくなる。最初のケースでは、ローカルIPv6アドレスはローカルIPv4アドレスと同じくらい無駄だし(ただし、ユニークである可能性は高いけど、どうやってアクセスするかはわからない)。2番目のケースでは、ターゲットが巨大なIPv4 NAT(キャリアグレードNATかも)に隠れていない限り、すぐにルーティング方法がわかるはずだよ。でも、IPv4のローカルIPとIPv6のグローバルIPを提示するのはちょっと不公平だと思う。パブリックIPv4アドレスと自動設定されたリンクローカルアドレスを提示して同じ質問をするのも同じくらいおかしいよ。キャリアグレードNATが結果を変えるのは認めるけど、それにはキャリアグレードNATの持つすべての欠点が伴うんだ。つまり、NATピアシングなしではインバウンド接続を受けることが完全にできないし、IPv6でもキャリアグレードNATを使えば同じことができるけど(ただし、私たちはそれを望んでないし、IPv4 CGNATを使いたいのも他に選択肢があまりないからだよね)。

ごめん、これはただの「不明確さをセキュリティとして扱う」ための複雑な議論に過ぎないよ。プライバシーをセキュリティのようにしがみついてるけど、ケルクホフの原則を完全に無視してるよね。

面白い事実なんだけど、デフォルトのパスワードを変えなかったせいで、実際にSBCがハッキングされたことがあるんだ。VLANにはNATと関連するファイアウォールルールがあって、アウトバウンドなしではインバウンドパケットを拒否するから、数日間はそれなりに安全だと思ってたんだけど、実はそのVLANでIPv6も有効になっててファイアウォールがなかったんだ。10年以上経った今でも、設定ミスのファイアウォールだったとはいえ、あの時のことは嫌な思い出だよ。

…まさか、IPv6アドレスを本当に推測したの?IPv6アドレス空間のフルスキャンは現実的じゃないと思うけど。もしかして、SBCがインターネットに接続してアドレスが露出したのかな?それとも、膨大なアドレス数があるからIPv6は「より安全」だと思うんだけど。

それはちょっと恥ずかしいね(笑)

NATもセキュリティの問題を引き起こすよね。エンドポイントとネットワークアドレスが切り離されてると、リフレクション攻撃を止めるのがすごく難しくなる。いろんなループや絡まりを引き起こせるし、同じプロトコルレベルのものもあれば、上下に行き来するものもある。記憶が曖昧だけど、AOLが特定のトラフィックのために十数個の出口アドレスを共有してた時代があったような気がする。今のNATや「PAT」とは違って、プロキシだったかもしれない。つまり、一つをブロックするとAOLのユーザーの1/12をブロックすることになっちゃう。IPアドレス(NATのものもあればそうでないものもあって、ISPによって異なる)がどのモデムバンクにダイヤルしたかによって変わってた時代の記憶が強い。これが特定のコンピュータやユーザーにとってのIPのアイデンティティ価値を薄めてたんだよね。

NATを導入するRFC、RFC 1631にはこう書いてあるよ:> 残念ながら、NATはセキュリティを提供するための選択肢を減らす [1] みんなそれを忘れちゃったみたいで、1990年代のネットワーク制限をクラウドにまで持ち込むようなカルト的なセキュリティプラクティスに変わっちゃったんだよね。 [1] https://www.rfc-editor.org/rfc/rfc1631.html

こういうスレッドに出てくる自称ハッカーの多くが、NATとファイアウォールの違いを全然理解してないのが怖いわ。NATはセキュリティのためのものじゃないし、セキュリティを提供しない。ファイアウォールと一緒に使われることが多いけど、セキュリティを提供するのはファイアウォールの方だよ。ファイアウォール≠NAT

これはハイラムの法則に反してるよ。NATは99.9%のユーザーが望む動作を、通常はデフォルトで提供してる。真のファイアウォールも同じことができるけど、必ずしもデフォルトではないし、ファイアウォールがデフォルトでオンになってるとも限らない。設定ミスの余地も大きい。IPv6は、多くの人にとってはセキュリティの後退だと思うよ。アーキテクチャ的なメリットやファイアウォールの意味に関係なくね。

もちろん、対称型やキャリアグレードのNATはファイアウォールじゃないけど、IPv4だけの展開シナリオでその現実的な影響を無視するのは本当に馬鹿げてる。ファイアウォールは完璧じゃないし、実際のところ、平均的なNATはそれに近いことが多いよ。

アヒルみたいに鳴くけどね。

「NAT」と言うとき、私たちは特に消費者向けIPv4ハードウェアに見られるステートフルな一対多のNAT実装について話してるんだ。そういうNATは、受信接続に対してデフォルトで拒否、送信接続に対してデフォルトで許可するセマンティクスを持つファイアウォールと大体同じだよ。他にもファイアウォールとはあまり似ていないNATの実装もあるけど、NATがセキュリティを提供しないと言うのは、用語の使い方を誤解してるよ。特に君がそうだとは言わないけど、他のスレッドではUPnPを根拠にNATがセキュリティを提供しないって言ってる人もいるね。もしUPnPの存在がNATがセキュリティを提供しないことを意味するなら、PCPの存在はファイアウォールもセキュリティを提供しないことを意味することになるよ。

君は過度に細かいことを言ってるから間違ってるよ。NATは通常、外部のアクターが内部のリソースにアクセスするのを許さないから、セキュリティを提供してるんだ。NATが機能するためにファイアウォールは必要ないけど、多くのファイアウォールにはNATが組み込まれてるよ。実際、ファイアウォールがオフでもNATは機能する(NATが別の場合)。君のセキュリティの定義は狭すぎるよ。そして、NATが常に壊れていると言って、NATがセキュリティではないことを示唆するのは馬鹿げてる。SSHは常に「壊れてる」し、TLSも常に壊れてる。結論として、NATは実質的に家庭ネットワークの攻撃面をルーターに減らすんだ。それが実際のセキュリティだよ。

ロードバランサーも一種のNATだけど、これをセキュリティ対策やファイアウォールと混同する人はいないと思うよ。

内部トラフィックを内部に保つことの利用法を想像できない人たちからのコメントが多いのが怖いね。IPv4では、僕のノートパソコンがパブリックIPv4アドレスのプリンターを使おうとすると警報が鳴る。IPv6では、僕のノートパソコンがIPv6アドレスのプリンターを使おうとすると…ファイアウォールの問題じゃないんだ。NATがないと余計な攻撃ベクトルがたくさん増えるよ。

NATとファイアウォールの違い?どちらかに穴を開けることができるよ。 https://en.wikipedia.org/wiki/Hole_punching_(networking)

なんかこのスレッドにいる自称ハッカーたちの多くが、ただこの教義を鵜呑みにしてるだけなのが悲しい。IPv6のプライバシー拡張が使われる前から、プライバシーの問題を軽視したり、プライバシーを求めることが悪だと言ってる人もいたし、IPv6が重要だからって。NATとファイアウォールの違いはちゃんと理解してるよ。何年も両方を展開して設定してきたからね。「ファイアウォールなしのNAT」っていうストローマンはほとんど関係ない。実際に人々が運用しているのはそんなことじゃないし。ファイアウォールはポリシーベースのセキュリティで、NATは名前空間のこと。別の分野では、名前空間を重要なセキュリティメカニズムと考えることが多い。攻撃者がアクセスできないリソースの名前すら知らないなら、それはかなり強いセキュリティ特性だよね。もちろん、誰でもIPを偽装して192.168.0.6にトラフィックを送ろうとすることはできるけど、ISPのアクセスネットワークの中にいない限り、実際にはそのトラフィックをローカルの192.68.0.6にルーティングすることはできない。一方で、IPv6のファイアウォールは、設定ミス一つで誰でもアクセスできる状態になる可能性がある。

自称ハッカーの中には、偉そうなことを言う前にRFCを調べたことすらない人が多いのが怖い。RFC 4787のセクション5に「NATフィルタリング」っていうものがあるから見てみて。NATはファイアウォールじゃないけど、実際には野良のNATボックスはトラフィックをフィルタリングしてるし、それをやってるのもNATなんだよね、別のファイアウォールじゃない。ほとんどのNATボックスはステートフルフィルタリングをしてる。やり方は標準化されてないけど、現実はそうなってる。人々はNATのフィルタリング部分が「実際にはファイアウォール」だって主張するけど、何の意味があるの?外から見たら、トラフィックをフィルタリングするファイアウォールがあるのか、NATがそれをやってるのかは分からない。多くの人がNATはアドレス変換だけだって定義に固執して、現実世界と関わろうとしないんだよね。

アメリカでこの便利なテクノロジー、携帯電話を使っている人たちへ:NATなしでIPv6アドレスを持ってるよ。中には464XLATを使ってIPv4をIPv6にトンネルしてるネットワークにいる人もいるかもね(T-Mobileみたいに)。これらの携帯電話プロバイダーは、明らかな理由から、無数の消費者向けスマートフォンがサーバーとして機能するのを許可してないんだ。これは著者の主張を強調するためのもので、NATはステートフルなトラッキングを必要とするかもしれないけど、翻訳なしのファイアウォールは、存在するデバイスの中で最も数が多いタイプのものに対して大規模に展開されているんだ。

明らかな理由って何だろう?(軽い気持ちで言ってるわけじゃなくて、本当にそのネットワークでサーバーを許可しない理由を知りたいんだ)

携帯電話もかなりサンドボックス化されてるよね。

これらの携帯電話プロバイダーは、明らかな理由から、無数の消費者向けスマートフォンをサーバーとして使わせてくれない。ちなみに、フィンランドのここで自分の電話でテストしてみたんだけど(ここで一番大きいキャリアのElisa)、IPv6のインバウンドTCP接続は問題なく動作するよ。IPv4はCGNATの背後にあるからダメだけど。モバイルブロードバンド(通話なし)のプランでは、オプションで無料のパブリックIPv4アドレスも提供してるけど、通常の電話プランでは提供してない。(テストはPlayストアからTermuxをインストールして、その中で「pkg install netcat-openbsd」と「nc -6 -l 9956」を実行して、インターネットからそのポートにtelnetで接続した。)

ジョン、君の投稿は「IPv4のデフォルトNATは、実質的にデフォルト拒否のセキュリティ戦略の恩恵を受けることを意味する」っていうポイントに触れてるね。君のタイトルは「NATがないからIPv6は不安定じゃない」だけど、NATがデフォルトブロックルールの同等物を提供することを理解してる人なら、NATがないからってIPv6が不安定になるわけじゃないってことも分かるはず。だから、タイトルがちょっと釣りっぽくてストローマンに感じるんだ。君の反応は「ほとんどのファイアウォールもデフォルトブロックルールを持ってるから、IPv4とNATの組み合わせより悪くはない」ってことみたいだけど、実際には、限られたIPv4スペースのためにNATが必要で、ほとんどのIPv4デバイスがNATなしではインターネットからアドレス指定できないっていう内在的なアーキテクチャの特徴には、ポリシー機能よりも多くのセキュリティがあると思う。NATがないからってIPv6が不安定になるわけじゃないけど、IPv4のNATによる内在的なブロックは、デフォルトのファイアウォールルールに頼るよりもデバイスをアクセス不可にするためのより良いセキュリティ対策だと思う。君は何を言いたいの?それは実際に君が言ってるポイントよりも役に立つの?

内部のアーキテクチャ的な特徴にもっとセキュリティがあるって?いや、そんなことはないよ。セキュリティの量を順位付けするっていう考え方がそもそも意味があるのか無視しても、この主張はおかしい。もしデフォルトで外部からの接続がブロックされるのが不変の条件なら、IPv4のNATとIPv6のデフォルト拒否ルールはセキュリティ的には同じだよ。どちらもその条件を守ってるからね。もしゲートウェイの設定ミスがシステムを脆弱にするって言うなら、やっぱり二つのファイアウォール設定は同じだよ。IPv6のファイアウォールをトラフィック通過させるように設定できるし、NATの場合はDMZホストやポートフォワーディングを設定することもできる。だから、二つの方式がセキュリティレベルで違うって主張する根拠はないよ。

議論に入る前に、RFC 4787、特にNATのフィルタリング動作についてのセクション5を見てみることをお勧めするよ。いくつかのことは同時に正しいことがあるからね。* NATはファイアウォールではない * NATはトラフィックをフィルタリングできる(実際、ほとんどいつもそうしてる) * だからNATはセキュリティ機能を提供できる * 現実世界はしばしば用語の元々の定義を気にしない。NATは元々アドレス変換だけをするためのものだったけど、進化してきた。* もちろん、IPv6はNATがないからといって安全性が低いわけじゃない。ファイアウォールで同じフィルタリング動作を再現できるからね。それはNATよりも利点があるかもしれない。

そうだね、IPv6はNATがないから面倒くさい。扱いにくい(IPv6)と不安定であることには大きな違いがある。

じゃあ、聞くけど、IPv6にNATがない(これは間違いだけど)って言うのがなんで面倒だと思うの?30年前の醜い回避策をやっと取り除けるんだよ。それはインターネットのコア原則(エンドツーエンドの接続性)を壊して、FTPやSIP ALG、TURN/STUNとか、もっと醜いハックが必要だったプロトコルがやっとまともに動くようになるんだよ。なんでこれが面倒なの?

IPv6は「NATがない」わけじゃないよ。ネットワーク内でULAアドレス(RFC-1918のIPv6版)を使って、そのアドレスに対してルーターでNATを実行することを妨げるものは何もないからね。IPv6は単にNATを「必要としない」だけで、オプションとしてはまだあるんだよ。

IPv4では、NATがうまく機能しないとオンラインになれないから、修正しなきゃいけない。安全策だよね。IPv6では、コンピュータがグローバルにアドレス指定できるのが普通だから、ファイアウォールが誤設定されていても、コンピュータはおそらくオンラインのままだよ。安全策がない。議論する意味もないけど、これは自分の決定じゃなくてISPの問題だからね。ただ、ISPの選択には満足してるよ。

なんでIPv4がまだ優勢なのか、こんなに時間が経っても理解できない。