IPv6の何が危険なのかをまとめてみる(+その対策)

Posted on Dec 5, 2023

アドカレの記事で書ききれなかったIPv6に対する愚痴をまとめてみる

致命的すぎるプライバシー上の欠陥

IPv6はデフォルトだとなんと各デバイスのMacアドレスを利用してグローバルIPアドレスを決定します。 つまりCookieを消そうがプライベートタブを使おうがブラウザを変えようがOSを再インストールしようがどのネットワークに繋ごうが個々のデバイスを半永久的にIPアドレスという情報のみで追跡できてしまいます。 なぜこの脆弱性まがいの仕様を平気で制定できたのか謎ですが流石にこれは不味いということで、IPv6にはアドレスを一定時間でランダムなものに変えるプライバシーアドレス拡張(RFC4941)と呼ばれるものがあります。

拡張は免罪符ではない

拡張があるならいいじゃないかという人もいますが私は全くそうとは思いません。 拡張はあくまでも拡張なので当然実装次第ではサポートしてなかったりサポートしててもデフォルトで使わないパターンがそれなりにあります。 特にLinux系などのニッチなOSやIoTデバイスになるほどデフォルトでデバイス固有のID(Macアドレス)をアクセス先の全サイトにばら撒く設定になっている場合が多いです。 必要性が限られる機能を拡張にするのは構いませんがこの致命的な欠陥を拡張で解決した気になるのは極めて危険だと考えています。
そもそもRFC7217でStable Privacyアドレスとかやるくらいなら最初からこれにしとけば良かった話です。その機会を逃して後から拡張でなんとかしようとしている時点で終わっています。

規格制定側がNATを嫌いすぎている

IPv6はアドレスが潤沢にあるのでNATというものが存在しません。でNATが存在しないため全デバイスがグローバルIPアドレスを持つことになる訳ですがこれはあまりにも危険だと考えています。 全デバイスがグローバルIPアドレスを持つということはルーターが脆弱であれば全てのデバイスが外からアクセスし放題になることを意味します。
でこの「脆弱なルーター」は現に市販品にも一定数ありますしFORWARDポリシーを何も考えずにAllowにしてるルーター(やコンテナホスト)も当てはまります。 NATがセキュリティ機能ではないという理論にも一理ありますがルーターしかグローバルIPアドレスを持たないという仕組みが結果としてLAN内のデバイスへの攻撃をしにくくしていたというのもまた事実です。

各デバイスにまともなファイアウォールと認証があれば大丈夫だという声が飛んできそうですが私にはそうとは思えません。LAN内のデバイスでufw allow 22なんてすればルーターしか防壁がない訳です。 IoTデバイスの存在を考えるとこの状況はさらに悪化します。IoTデバイスのセキュリティはベンダー依存です。 世の中には実際大量の脆弱なIoTデバイスが存在しボットネットの一部となっている訳ですが各デバイスがグローバルIPアドレスを持つという仕様はこの状況を悪化させます。

NAT66 / IPv6 Masquerade がいつまでも標準にならない

最初に書いたMacアドレスの問題も先程書いたセキュリティ問題も、NATがあればかなりマシになります。(前者に関してはほぼ完全に解消できる) じゃあNATすればいいじゃんって話ですがなんとIPv6でのNAT(NAT66)は規格上正式には定められていません。一応実験段階(?)ではRFC6296として存在するらしいですが私が調べた限りではIETFとしてはNPTv6利⽤も推奨していない⽴場という話もあり 制定側はNAT66の導入には消極的であることが伺えます。nftablesやらで実装されているIPv6のMasqueradeはあくまでも実験的で非推奨という訳です。

NATは必要

非推奨とはいえnftablesには実装されている訳でVyOSOpenWRTにはNAT66に相当する設定が存在します。 私個人として家庭用のルーターはデフォルトでNAT66をIPv6接続に使うべきだと思ってますが、所詮は非推奨なので一般的な家庭用ルーターやらはこれを実装していない訳です。

そもそも全デバイスがグローバルIPを持つメリットなんて一般人からしたらほぼありません。全デバイスどころか家庭単位ですら必要な人がどれだけ居るか怪しいところです。 プライバシーアドレスだのやるくらいなら最初からNATを導入しとけばいい話だったんじゃないかというお気持ちです。IPv6の推進者はあまりにもNATを敵視しすぎていますがインターネットが社会的なインフラとなった現代においてNATは必要不可欠なものです。 NAT自体に技術的な問題があるとは考えにくいです。NATはVPNを通じて別経路で通信して本来のIPアドレスを秘匿するときにも一部のロードバランサーにも使われます。
規格を決められる立場なのをいいことに自分たちのある意味で政治的な思想を押し付けるのはGoogleとやってる事が同じだと感じますね…

どうすればいいのか(対策)

  • OpenWRT等が下にぶら下がってるならNAT66を使うようにする
    • ただしWAN側のインターフェースがプライバシーアドレスを使う設定にしないと結局はルーターのMacアドレスがばら撒かれる
  • そもそも面倒とか良くわからないならIPv6を無効にする
    • 一番手っ取り早い
    • IPv4をサポートしていないサイトは現実的に考えて存在してないに等しいので問題にならない
  • 上2つが駄目なら全デバイスの設定を確認してプライバシーアドレスを使うようにする
    • IoTデバイスなど脆弱な可能性があるデバイスは専用のルーターにぶら下げてIPv6を通さない
    • Ubuntuとかnetplan/networkd環境だとsysctlの値触ってもプライバシーアドレスにならないので注意
    • モバイルデバイスは最近のならランダムMacなので大丈夫なはず

おわりに

以上が私のIPv6に対するお気持ちでした。最後まで読んでくれてありがとうございました。