はじめに
IPv6はさまざまなOSでサポートされており、Windows 10ではインストール直後の状態でIPv6が有効になっています(下図参照)。
IPv4の利用しか想定されていない環境でも、ネットワークアダプターの設定で有効になっていればIPv6で通信できるため、IPv6環境を対象とした攻撃が行われる可能性があります。
今回ご紹介するDHCPv6(Dynamic Host Configuration Protocol version 6) spoofingもIPv6環境に対する攻撃の1つで、名前のとおりDHCPv6を利用する手法です。 DHCPv6 spoofingが行われると、コンピューターに偽のDNSサーバーアドレスを設定される可能性があります。
本記事では、IPv4のみの利用を想定している環境でのDHCPv6 spoofingについて、ネットワークの通信内容を追いながら解説します。
※本記事に記載の内容や手法を用いることで生じたいかなる問題につきましても、当社は一切の責任を負いかねます。あらかじめご了承ください。
検証環境
検証環境は下記のとおりです。
以降、標的マシンをWIN10
、攻撃者マシンをUbuntu
と記載します。
- マシン構成(VMwareのNAT環境に構築)
- 標的(ホスト名:
WIN10
)- IPアドレス(v4): 10.212.33.110/16(固定アドレス)
- IPアドレス(v6 Link Local): fe80::f883:764c:508c:5ca7
- OS: Windows 10 Pro(バージョン: 20H2、OSビルド: 19042.685)
- OSを新規インストール後、Windows Active Directoryドメイン(jupiter.solar.local)に参加
- ログオン中のドメインユーザー: JUPITER\user1
- 攻撃者(ホスト名:
Ubuntu
)- IPアドレス: 10.212.11.110/16(固定アドレス)
- IPアドレス(v6 Link Local): fe80::d0cf:4695:c020:2097
- OS: Ubuntu 20.04.1 LTS
- 標的(ホスト名:
WIN10
およびUbuntu
のネットワークアダプター情報は下記のとおりです。
DHCPv6 spoofing
概要
DHCPv6は、コンピューターのIPアドレスの自動設定など、IPv6環境でのネットワーク通信における各種設定を行う際に利用されるプロトコルです。 DHCPv6において、クライアントはIPアドレスの他にDNSサーバーやNTPサーバーなどの情報をDHCPv6サーバーから取得できます。 これらの情報を、DHCPv6サーバーになりすました攻撃者がクライアントに送信することをDHCPv6 spoofingと呼びます。
ここではbettercapというツールを使ってDHCPv6 spoofingを検証します。bettercapは、DHCPv6 spoofingやDNS spoofing(DNSサーバーへのなりすまし)など、さまざまなネットワーク機能を持ったフレームワークです。
DHCPv6 spoofing実行
Ubuntu
にてbettercapを起動します。
dhcp6.spoof.domains
の値として、クライアントが所属しているドメイン「jupiter.solar.local」を設定し、DHCPv6 spoofingを開始します。
これによりUbuntu
は、クライアントからのIPv6ネットワーク情報取得要求に対して「jupiter.solar.localドメインのDNSサーバーはUbuntu
(のIPv6アドレス)である」という応答をするようになります。
WIN10
を起動または再起動すると、DHCPv6のプロセスが開始されます。
実際の通信を見てみると、下記のような「4-message exchange」が行われていることが分かります。
(このプロセスの詳細についてはRFC 8415の18. DHCP Configuration Exchangesを参照してください。)
WIN10
からのDHCPv6サーバー応答要請(Solicit)Ubuntu
からのDHCPv6サーバー応答(Advertise)WIN10
からのネットワーク設定情報要求(Request)Ubuntu
からのネットワーク設定情報応答(Reply)
このとき、Ubuntu
からのReplyにおいて下記のオプション値がWIN10
へ送信されます。
(下記オプション値の詳細についてはRFC 3646(DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6))を参照してください。)
- DNS recursive name server(DNS server address): fe80::d0cf:4695:c020:2097
- Domain Search List(Domain Search List FQDN): jupiter.solar.local
上記の値はそれぞれ、bettercapを起動しているUbuntu
のIPv6 Link Localアドレス「fe80::d0cf:4695:c020:2097」と、bettercapのdhcp6.spoof.domains
で設定したドメイン名「jupiter.solar.local」となっています。
ここでWIN10
のネットワークアダプター設定を確認してみると、IPv6のDNSサーバーアドレスとしてUbuntu
のアドレスが設定されており、DHCPv6 spoofingが成功したことが分かります。
動作確認
DHCPv6 spoofingによって設定したDNSサーバーに対して、WIN10
が実際にDNS名前解決問い合わせを行っているかどうかを確認します。
下記の結果から、「jupiter.solar.local」ドメイン上ホストのDNS名前解決において、WIN10
はDHCPv6 spoofingによって設定したUbuntu
のIPv6 Link Localアドレス(fe80::d0cf:4695:c020:2097)に対して問い合わせていることが分かります。
上記において、Ubuntu
はWIN10
に対して応答していませんが、Ubuntu
が「jupiter.solar.local」ドメイン上の任意のホストに対する名前解決問い合わせに対して偽の応答を返した場合(DNS spoofing)、それ以降WIN10
は不正なホストに対して通信を行う可能性があります。
なお、上記のように明示的にコマンドを実行するのではなく、OSの機能により自動的にDNS名前解決が行われる場合があります。
このような場合にWIN10
は、「jupiter.solar.local」ドメイン上ホストのDNS名前解決を行う際はIPv6のDNSサーバーアドレスへ優先的に問い合わせを行い、名前解決できなかった場合はIPv4のDNSサーバーアドレスへ問い合わせを行っています(下図参照)。
DNS spoofingとの連携
概要
DHCPv6 spoofingによってWIN10
に偽のDNSサーバーアドレスを設定することができたので、WIN10
からのDNS名前解決問い合わせに対して偽の応答を返すDNS spoofingと連携させてみます。
ここでもbettercapを使います。
DNS spoofing実行(DHCPv6 spoofingと連携)
Ubuntu
にてbettercapを起動します。
dhcp6.spoof.domains
の値として「jupiter.solar.local」を設定し、dns.spoof.domains
の値として「jupiter.solar.local」を設定します。
(IPv6アドレスの逆引き用ドメイン「ip6.arpa」も便宜上設定しています。)
DHCPv6 spoofingおよびDNS spoofingを開始します。
これによりUbuntu
は、クライアントからの「jupiter.solar.local」ドメイン上ホストに関するDNS名前解決問い合わせに対して自分のIPアドレス(ここでは10.212.11.110)を返すようになります。
動作確認
DHCPv6 spoofingとDNS spoofingが連携できているかどうかを確認します。 下記の結果から、両者が連携できていることが分かります。
WIN10
(IPv6 Link Localアドレス:fe80::f883:764c:508c:5ca7
)は、「jupiter.solar.local」ドメイン上ホストへのDNS名前解決問い合わせをUbuntu
(IPv6 Link Localアドレス:fe80::d0cf:4695:c020:2097
)へ送信するWIN10
からのDNS名前解決問い合わせを受信したUbuntu
は、当該問い合わせに対して自身のIPv4アドレス(10.212.11.110
)を返す
条件を変えて検証
これまでの検証結果から、IPv4のみの利用を想定している環境において攻撃者がDHCPv6 spoofingとDNS spoofingを連携して実行することで、IPv6が有効な標的マシン(OS: Windows 10)は下記のような状態になることが分かっています。
- 標的マシンは、攻撃者マシンのIPv6 Link LocalアドレスをDNSサーバーアドレスとして設定する
- 標的マシンは、DNS spoofing対象のドメイン上ホストへのDNS名前解決問い合わせを攻撃者マシンに送信する
ここでは、下記それぞれの条件下でDHCPv6 spoofingとDNS spoofingを実行し、上記と同様の結果が得られるかどうか検証してみます。
- クライアントのIPv6機能を無効化
- クライアントのIPv4設定をDHCPに設定
クライアントのIPv6機能を無効化
下記のように、WIN10
のネットワークアダプター設定でIPv6機能を無効にします。
WIN10
を起動または再起動すると、WIN10
のDNSサーバーアドレスにUbuntu
のIPv6 Link Localアドレスが表示されなくなります。
また、「jupiter.solar.local」ドメイン上ホストへのDNS名前解決問い合わせはIPv4のDNSサーバーに送信されます。
これはIPv6機能を無効化しているので想定どおりの結果です。
クライアントのIPv4設定をDHCPに設定
WIN10
のネットワークアダプター設定のIPv6機能が有効な状態で、下記のようにIPv4機能のDHCP設定を有効にします。
ここではIPアドレスとDNSサーバーアドレス両方の取得方法を自動(DHCP設定有効)にしています。
WIN10
を起動または再起動すると、WIN10
のネットワークアダプター設定は下記のようになります。
この状態で「jupiter.solar.local」ドメイン上ホストへのDNS名前解決問い合わせを行うと、IPv6のDNSサーバーに送信されます。
想定される影響
以上の結果から、IPv4の利用しか想定されていない環境でネットワークアダプターのIPv6機能を有効にしていると、DHCPv6 spoofingとDNS spoofingを組み合わせることで、攻撃者によるDNSサーバーへのなりすましが行われる可能性があると考えられます。 その結果、攻撃を受けたユーザーは偽のWebサイトやサーバーに誘導される可能性があります。
上記の具体例として、プロキシ設定を自動で行うために利用されるWPAD(Web Proxy Auto-Discovery)サーバーやプロキシサーバーに攻撃者がなりすまし、クライアントから送信された認証情報を中継することで、Active Directoryドメインに不正アクセスされるといった手法が存在します。 (参照先: mitm6 - compromising IPv4 networks via IPv6)
対策について
IPv4の利用しか想定されていないネットワークでのDHCPv6 spoofingへの対策としては下記が考えられます。
- クライアントのネットワークアダプター設定でIPv6機能を無効化する
- 端末のネットワーク接続時に認証を行うIEEE 802.1Xを導入し、不正な端末のネットワーク接続を制限する
- 一部のCisco社製品に実装されているDHCPv6 Guardのような、ネットワーク機器が持つセキュリティ機能を導入する
おわりに
本記事では、IPv4のみの利用を想定している環境でDHCPv6 spoofingおよびDNS spoofingを実行した際のクライアントの動作などを、ネットワークの通信内容を交えて解説しました。
使用しているマシンのネットワークアダプターでIPv6機能が有効になっているかどうかについては、あまり気に留めていない方もいらっしゃるかと思いますが、これを機に設定状況を確認されてみては、と思います。
参照先
- IPv6 Security - An Overview
- DHCPv6
- bettercap
- (RFC 8415)Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
- (RFC 3646)DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
- Web Proxy Auto-Discovery Protocol draft-cooper-webi-wpad-00.txt
- mitm6 - compromising IPv4 networks via IPv6
- IPv6 First-Hop Security Configuration Guide(Chapter: DHCP--DHCPv6 Guard)


記事の著者
セキュリティ診断業務に10年間従事後、2016年よりシニアセキュリティアナリストとしてペネトレーションテスト業務に従事。
診断業務開始当初は社内イントラサイトの脆弱性に対する過激な指摘により物議を醸したが、
現在はだいぶおとなしくなっている。好きな周波数は13.56MHz。
GXPN、GAWN、GREM、GPEN、GDAT、GCPN、GCFA、GCFE、CRTE、CARTP、CEH
関連記事
RELATED ARTICLE