IPv6
要注意!IPv6に潜む落とし穴
GREETINGS:
今回も引き続きIPv6について解説していきますが、少し視点を変えてIPv6が抱えているセキュリティリスクについてのお話です。
前回までで、IPv6について何となく分かるようになり、これから活用していきたいと思っていただけていれば幸いですが、IPv6がIPv4と比べて進歩しているとは言え、当然セキュリティリスクはついて回ります。
IPv4の時と似たようなリスクもあれば、IPv6固有の要素を利用したものまでさまざまですので、具体的な内容と対策を合わせて紹介していきます。
Risk 01: EUI-64 Issues
■ EUI-64
前々回の記事でも軽く触れた内容でもありますが、IPv6の便利な機能、自動アドレス設定(SLAAC)をEUI-64方式で行った場合、ホストのMACアドレスが割り出せてしまうという問題があります。

また、この方式を用いた際には生成されるインターフェースIDは常に同じであるため、第三者に通信を追跡されてしまう可能性もあります。
そのため、EUI-64方式を用いた生成はRFC 8064で非推奨となりました。
そこで「一時IPv6アドレス」を用いてネットワークに接続されるたびにインターフェースIDが変わるという方式(RFC 4941)が考案されましたが、これは定期的にアドレスが変わってしまう場合があり、管理の手間が増えてしまうという問題点もあります。
攻撃者がアドレスの匿名性を逆手に取ってネットワークに侵入してくるリスクもあるため、 100%安全とも言い切れない部分もあります。
別の選択肢としてはRFC 7217で紹介されている「Semantically Opaque IID」と呼ばれるMACアドレスとシークレットキーを用いた方式で、プレフィックスを生成キーとしてインターフェースIDを生成できます。
RFC 4941とRFC 7217、どちらがベストプラクティスかについての結論はまだ出ていないようなので、アドレス自動生成の安全性と可用性の間には課題が残されています。
Risk 02: Rogue RA Attacks
■ 不正RA攻撃
IPv6における有名な攻撃手法として知られる「不正RA攻撃」は攻撃者が偽装したRA(ルータ広告)をネットワークに流し、偽装サーバのアドレスをゲートウェイ情報として告知することで、通信の妨害や盗聴を行えてしまうというものです。IPv4で言うところのDHCPスプーフィングと似たような攻撃ですね。
DHCPスプーフィングでは、ユニキャストのDHCP応答パケットに偽装するため、DHCP要求を送ってきた攻撃対象にしか不正なパケットが届きません。しかし、前回の記事で紹介したNDPはRS(ルータ要請)を受信すると、マルチキャスト「ff02::1」つまり同一セグメントすべてに向けてRAを送信します。
一度のパケット送信で同じセグメント上すべてが攻撃者の魔の手に落ちてしまう可能性があり、偽装サーバがパケットを盗聴した後に正規のゲートウェイに転送する設定になっていた場合は攻撃に気付けない、という事態も起こりうるのです。

さらに、このRAの仕様を悪用したDoS攻撃などもあり、便利なRAですが何かとセキュリティリスクも伴うようです。
この不正RA攻撃への対策なのですが、IPv4のDHCPスプーフィングには「DHCPスヌーピング」が有効でした、対してIPv6の不正RAには「RAガード(RFC6105)」などが有効であるとされています。
「RAガード」は「DHCPスヌーピング」と似た動作で、通信を中継するノードで動的/静的に学習した送信元からのRAのみを転送し、それ以外のRAは不正と見なしてドロップする仕組みです。
また、不正RAを利用したDoS攻撃に対しては、「CPUプロテクション機能」も有効です。
CPUプロテクション機能を設定した機器では、機能ごとのCPU使用率の閾値を設定しておくことで、特定のパケットを大量に受け取ることで閾値が超過した場合、それ以上のパケットを受け取らずにドロップすることでオーバーフローを防止し、機器全体を攻撃から守ることが出来ます。加えて、「レートリミット」を設定することでDoS攻撃による帯域のひっ迫を抑制することもできます。
もちろん、これらの機能を使えば不正RA以外の様々な種類のDoS攻撃対しても対策が可能です。
Risk 03:
ICMPv6 Reflection/Amplification
■ ICMPv6反射増幅攻撃
ICMPv6の仕様を利用した反射増幅型DoS攻撃は、送信元アドレスを攻撃対象となる機器のIPアドレスであるように偽装し、マルチキャストアドレス (ff02::1) を宛先としてICMPv6パケットを送ることで、ローカルに存在する全てのノードから、標的に向けてエラーパケットを一斉に送りつけるという攻撃手法です。
通常、宛先がマルチキャストアドレスであるICMPv6パケットについては、エラーを返さないことになっていますが、ICMPv6では特定のエラーを検知した場合にICMPv6 Parameter Problem (Type:4) のパケットを送信元に返すという仕様があるため、これを悪用することで、一発の不正パケットを標的のネットワーク内で増幅し攻撃を行うことが出来るのです。

対策として、一番手っ取り早いものは、ICMPv6のエラーパケットの送信間隔の調整または送信の抑制がありますが、先ほど不正RAの対策で紹介した、CPUプロテクション、レートリミット等も有効です。
IPv6に存在するセキュリティリスクとしては上記で挙げたものが代表的ですが、その他にも様々なリスクが存在しています。
これからIPv6環境を構築していこうと考えている方は、しっかりとリスクを把握し、対策をお忘れなく!
「FXCエンジニアブログIPv6編」は一旦ここで区切らせていただきます。私自身もまだIPv6について極めることが出来ていないと感じるので、今後も新たな発見があった際にはまとめてみます。
このブログを読んで、少しでもIPv6に関して理解が深まったようであれば嬉しく思います。
それでは、またお会いしましょう!