「Dnsmasq」は、小規模サーバや組み込み機器に DNS/DHCP サーバを構築するために利用される事実上の標準ソフトウェアです。2017 年 10 月 2 日、Google のセキュリティリサーチャ がバージョン 2.78 より前の Dnsmasq に存在する7 つの脆弱性を確認しました。特定のオプションでDnsmasq を実行している場合、これらの脆弱性は、「遠隔でのコード実行(Remote CodeExecution、RCE)」、情報流出、「Denial of Service(DoS、サービス拒否)攻撃」を可能にします。
トレンドマイクロは、インターネットに接続しているさまざまな端末機器を対象にしたオンライン検索エンジン「Censys」および「Shodan」を利用し、影響を受ける可能性のあるホストの数を調査しました。その結果、Dnsmasq を含むと考えられる Linux ディストリビューションのうち、53 番ポートでインターネットに DNS サーバを露出しているホストを約 100 万個確認しました。これらのホストは、条件によって 7 つの脆弱性のすべてまたは一部を持つ可能性があります。ただし、この推計にはインターネットに露出していない Dnsmasq は含まれていません。
Dnsmasq は広く普及しており、組込みシステムは更新プログラムの適用が困難な場合があることを考慮し、本記事では下記について解説します。
- 脆弱性を持つ Dnsmasq への攻撃に必要な条件
- 脆弱性攻撃の可否を判定するためのチェックリスト
- 脆弱性を持つ Dnsmasq を保護する方法
図 1 は、組込みシステムの脆弱性有無を判定するためのフローチャートです。
図 1:「Dnsmasq」の脆弱性診断および対策
■「Dnsmasq 」に存在する脆弱性
ネットワークにおける 2 つの主要な機能 DHCP と DNS を提供する Dnsmasq は、2001 年に初めてリリースされ、今日ではルータおよび IoT ゲートウェイに欠かせないソフトウェアになっています。また、高い柔軟性と軽量な動作から、「BusyBox」や「DropBear」のような Linux コマンドをまとめたパッケージにも含まれています。つまり、DNS/DHCP サービスを持つ組込み Linux 機器が、SSH 接続によってアクセス可能な管理画面を提供している場合、Dnsmasq、BusyBox、DropBear のすべてが管理画面に表示されるということです。組込みシステムは一般的に利用されているため、これら 3 つの軽量ソフトウェアパッケージの重要性も高まっています。
2017 年 9 月 24 日から 25 日にかけて、Dnsmasq の開発者 Simon Kelly 氏は、Google のセキュリティリサーチャから内密に連絡を受け、確認された 7 つの脆弱性に対処するために 7 つの修正を Git リポジトリにプッシュしました。これらの脆弱性は、RCE、情報流出、または DoS 攻撃を可能にします。10 月 2 日にリリースされた 2.78 よりも前の Dnsmasq にこれらの脆弱性が存在します。さらに、2.76 より前のバージョンでは、類似した脆弱性により無制限の RCE が可能になります。
確認された 7 つの脆弱性のうち、1 つは既に報告されていた CVE-2017-13704 と重複していることが確認されたため、本記事ではこの脆弱性について解説していません。
■更新プログラムの適用状況
高い柔軟性を持つ Dnsmasq は、携帯機器、ノート PC、小規模サービス、IoT ゲートウェイ、カスタマイズされたファームウェアやソフトウェアベンダが提供するファームウェアを実行する小規模オフィス/家庭向けルータなど、インターネットサービスプロバイダ(ISP)が採用するケースも含め、ネットワークに接続するさまざまなホストで使用されています。
Dnsmasq は、Linux ディストリビューションのパッケージに含まれるため、更新プログラムのリリースは各ディストリビューションの開発者に依存します。例えば、Alpine Linux にはすぐに更新プログラムが提供されましたが、ルータで非常に一般的に利用されている OpenWrt 系のディストリビューションでは時間がかかっています。本記事執筆時点(2017 年 10 月 9 日)で、公式の OpenWrt ディストリビューションには更新プログラムが適用されていません。OpenWrt のようなオープンソースプロジェクトはボランティアによって開発されていることも多く、更新プログラムのリリースが遅くなったとしても無理はありません。
ルータのような組込みシステムに自力で更新プログラムを適用することは、簡単ではなく、リスクも伴います。そのため、ユーザはソフトウェアベンダや開発コミュニティが提供するパッケージを待つ傾向にあります。
このような状況を踏まえると、依然として多くの組込み機器が脆弱なバージョンの Dnsmasq を実行していると考えられます。以下では、OpenWrt、および DD-WRT に代表される OpenWrt からの派生ディストリビューションや、開発者によって配布された Dnsmasq のバイナリパッケージを含むディストリビューションのように、影響を受ける可能性のある組込み機器の数をLinux の種類ごとに見ていきます。
■影響を受ける可能性のある Dnsmasq の利用状況
正確な数を把握することはできませんが、Dnsmasq を含んでいる可能性の高いオープンソースの Linux ディストリビューションを利用する機器の数を基に、控えめな数値を出すことは可能です。トレンドマイクロは、検索サービス「Censys」と「Shodan」を用いて、影響を受ける恐れがあるインターネット上に露出した機器を推計しました。
推計に用いる Linux ディストリビューションには、ルータで広く利用されている OpenWrt、DD-WRT、Tomato Firmware を選定しました。特に OpenWrt は、「VirtualAccess」や「IntelliDesign」のような工業用ルータでも使用されています。
シングルボードコンピュータ「Raspberry Pi」で利用される Raspbian や、Debianから派生した小規模システム向けのその他のディストリビューションには、修正が反映された Debian のリポジトリを介して既に更新プログラムが適用されています。Alpine 系のディストリビューションも同様です。しかし、選定した 3 つのディストリビューションでは状況が異なります。
トレンドマイクロは、Censys に以下の検索条件を送信することで、簡単な調査を実施しました。
(“openwrt” OR “dd-wrt” OR “dnsmasq” OR “Tomato Firmware”) |
この検索条件は、OpenWrt、DD-WRT、Tomato を実行しているホストや、ネットワークバナー情報に文字列「dnsmasq」を含むホストを検索します。
2017 年 10 月 4 日の時点で、203,645 個のホストがこの検索条件に該当しました。そのうち 4,408 個では、53 番ポートの DNS サービスがインターネットに露出していました。
Dnsmasq を実行しているかどうかを知るには、各ホストの精査が必要なため、上記の検索だけでは判断できません。しかし、表 1 のように、検索結果上位のプロトコルが SOHO(小規模または自宅事務所)のルータで一般的に利用されるものであることから、検索結果はルータのような機器である可能性が高く、従って Dnsmasq を実行している可能性が高いと言えます。具体的には、HTTP と HTTPS は Web ベースの設定ユーザインターフェイス、Telnet と SSH はコマンドラインベースの管理に利用されていると考えられます。また、その他には FTP が含まれていますが、これもルータで利用されている可能性のあるプロトコルです。
ポート番号/プロトコル | ホストの個数 | 割合 |
8080/http | 62,871 | 30.9% |
443/https | 58,881 | 28.9% |
80/http | 34,752 | 17.1% |
23/telnet | 15,308 | 7.5% |
22/ssh | 12,775 | 6.3% |
その他 | 19,058 | 9.3% |
合計 | 203,645 | 100.0% |
次に、53 番ポートが開かれているホストに着目した数値を見てみましょう。53 番は DNS サーバで一般的に利用されるポートです。上述の検索条件を Shodan の記法に書き換えて検索したところ、10 月 9 日の時点で、53 番ポートが開かれている1,155,437 個の機器 がインターネット上に露出していることを確認できました。この数字は、10 月 4 日の 1,087,600 個から増加しています。
図 2:53 番ポートで Dnsmasq を実行している可能性のある機器の国別分布(10 月 9 日時点の Shodan の検索結果に基づく)
カスタマイズされていない Dnsmasq サービスは、ネットワークバナーにバージョン情報を含みます。Shodan は、そのバナー情報に基づいて検索結果を返します。図 2 は Shodan を利用して取得した Dnsmasq バージョンの内訳です。トレンドマイクロは、Shodan からダウンロード可能なデータの最大数 747,276 個のホストをサンプルとして解析し、それらの約 99%で「dnsmasq-<バージョン番号>」という文字列を確認しました。更新プログラム適用済みのバージョン 2.78 を利用していたホストは 3 個のみでした。
Dnsmasq のバージョン | ホストの個数 | 割合 |
2.52 | 155,911 | 20.9% |
2.4 | 145,555 | 19.5% |
2.62 | 86,678 | 11.6% |
2.48 | 74,475 | 10.0% |
2.61 | 58,349 | 7.8% |
2.51 | 40,266 | 5.4% |
その他 | 186,042 | 24.8% |
合計 | 747,276 | 100.0% |
カスタマイズしていない Dnsmasq を実行していると想定すると、これらの機器の Dnsmasq はすべて脆弱性を持つ古いバージョンということになります。
幸いなことに、古いバージョンの Dnsmasq だとしても、脆弱性攻撃は容易ではないことが確認されています。
■脆弱性攻撃が可能となる条件
まずはじめに、「CVE-2017-14491」から「CVE-2017-14496」までのすべての脆弱性は、遠隔からの攻撃を想定しています。つまり、攻撃者は対象機器との間でネットワークパケットを送受信することによって攻撃します。では、Censys や Shodan で確認された脆弱性を持つ可能性のあるすべてのホストに対して脆弱性攻撃が可能なのでしょうか。今回確認された脆弱性の影響度について理解を深めるために、脆弱性攻撃が可能となる条件について見ていきましょう。
Google からは攻撃の種類と対象プロトコルに焦点を当てた表 が提供されていますが、表 3 は、脆弱性攻撃の要件を整理し、実務的に利用可能なチェックリストを作成したものです。
CVE | 攻撃者の前提条件 | Dnsmasq に対する脆弱性攻撃が可能な条件 | 攻撃対象の機能を起動するオプション |
CVE-2017-14491 | 上位サーバからのレスポンスを操作可能 | 上位 DNS サーバの利用 | -S, –local, –server=<上位サーバ> |
CVE-2017-14492 | 対象ホストにパケット送信が可能 | DHCPv6 サービスの実行
IPv6 ルータ広告が有効 |
-F, –dhcp-range=<IPv6 の範囲>
–enable-ra |
CVE-2017-14493 | 対象ホストにパケット送信が可能 | DHCPv6 サービスの実行 | -F, –dhcp-range=<IPv6の範囲> |
CVE-2017-14494 | 対象ホストにパケット送信が可能 | DHCPv6 サービスの実行 | -F, –dhcp-range=<IPv6 の範囲> |
CVE-2017-14495 | 対象ホストにパケット送信が可能 | DNS の拡張プロトコルを利用 | –add-mac、–add-cpe-id、–add-subnet のいずれか |
CVE-2017-14496 | 対象ホストにパケット送信が可能 | DNS の拡張プロトコルを利用 | –add-mac、–add-cpe-id、–add-subnet のいずれか |
■「CVE-2017-14491」を狙う攻撃シナリオとその要件
図 3:「CVE-2017-14491」を狙う攻撃シナリオ
図 3 は CVE-2017-14491 を狙った攻撃シナリオです。攻撃者は、対象の機器から転送された DNS サーバへの問い合わせを受信することができるか、または問い合わせを受けたドメインの DNS レスポンスを操作できる必要があります。攻撃者は、この応答を利用して脆弱性攻撃を実行します。ただし、このような攻撃は現実的ではありません。なぜなら、攻撃者は自身が管理する機器に DNS 問い合わせを送信するように、対象の Dnsmasq の設定を変更する必要があるためです。
Dnsmasq を実行する機器は、設定によって直接あるいは間接的に攻撃に関与します。前者の場合、ノート PC やモバイル機器の Dnsmasq が、攻撃者が管理する上位 DNS サーバに直接問い合わせを送信します。対象機器がルータに問い合わせを送信する場合、不正な上位 DNS サーバへの問い合わせはルータを介して間接的に送信されます。
後者の場合、攻撃者はルータのその他の脆弱性を攻撃するなどして、ルータが DNS 問い合わせを受信するように設定したり、あるいは最後の手段として攻撃者が管理するドメイン内の URL へのリンクをクリックさせるソーシャルエンジニアリングの手法を利用する必要があります。Dnsmasq の運用に脆弱性が無い場合、攻撃者が与えうる被害はDNS 問い合わせに対する応答を操作することに限定されます。しかし、脆弱性がある場合、転送された DNS 問い合わせを受信した攻撃者によって、対象機器で任意のコードが実行される可能性があります。
以上をまとめると、脆弱性が引き起こす事象としては珍しくないヒープオーバーフローを伴うものであるにもかかわらず、CVE-2017-14491 を狙う攻撃の条件を満たすのは容易ではありません。脆弱性を持つ Dnsmasq のバージョンでさえ、メモリのオーバーフローは 2 バイトのみです。ただし、2.76 より前のバージョンでは、攻撃者が操作可能なメモリに制限はありませんでした。
■「CVE-2017-14492」、「CVE-2017-14493」、「CVE-2017-14494」、「CVE-2017-14495」および「CVE-2017-14496」を狙う攻撃シナリオ
図 4:CVE-2017-14492~14496 を狙う攻撃シナリオ、攻撃者は図中のオプションで Dnsmasq を実行している脆弱な機器にネットワークパケットを送信できる必要がある
図4は、CVE-2017-14492~CVE-2017-14496 を狙う攻撃シナリオです。攻撃するための条件は脆弱性ごとに微妙に異なります。
CVE-2017-14492、14493、14494 を狙った攻撃に必要な条件
これらの脆弱性を狙うために、攻撃者は Dnsmasq を実行する対象ホストの DHCP サブシステムへのネットワークパケットの送信が可能である必要があります。加えて、対象のホストが IPv6 のパケットに対応できるようにDHCPv6 サービスが有効化されていなければなりません。具体的には、「-dhcp-range」オプションに「fd00::, fd00::ff」のような IPv6 のアドレス範囲が指定されている必要があります。
更に、CVE-2017-14492 を狙った攻撃のためには、「–enable-ra」オプションによって IPv6のルータ広告が有効化されていなければなりません。IPv6 のアドレスをインターネットに露出しているだけでは当該ホストが DHCPv6 を実行しているかどうか判断できませんが、Shodan の検索結果によると、2017 年 10 月 9 日の時点で1,155,555 個のホストのうち 66,471 個が IPv6 のアドレスを露出しています。(検索結果の閲覧には Shodan へのログインが必要です)
CVE-2017-14495 と 14496 狙った攻撃の条件
これらの脆弱性攻撃を実行するために、攻撃者は Dnsmasq を実行しているホストの DNS または DHCP サブシステムへのネットワークパケットの送信が可能である必要があります。具体的には、CVE-2017-14491 と同様、DHCPv6 が有効化されている場合に限り CVE-2017-14494 を狙った攻撃が可能です。
CVE-2017-14495 と 14496 の両方について、Dnsmasq が以下のオプションのいずれかで実行されている場合に限り攻撃が可能です。これらのオプションは転送する DNS 問い合わせにフィールドを追加するために利用されます。下記のオプションのうち、最初の 2 つはRFC2671 で規定された DNS の拡張プロトコル「EDNS0」です
- 「–add-mac」オプション
転送する DNS 問い合わせに、問い合わせ送信側端末の MAC アドレスを追加します。Dnsmasq の開発者は、マニュアルの中でこのオプションがテスト中の非標準機能であることを注意しています。興味深いことに、2011 年には、「あまり利用されないと思われるため、十分なテストをしていない」と開発者が述べているある拡張プロトコルにおいて、知らない間にまったく同じ不具合を引き起こしていたユーザがいた可能性があります。
- 「–add-cpe-id」オプション
転送する DNS 問い合わせにユーザが指定した文字列を追加します。
- 「–add-subnet」オプション
転送するDNS 問い合わせに付加されているサブネットアドレスを変更します。通常このフィールドには問い合わせを送信する側のアドレスが入っています。
■感染有無を調べる方法
Google のセキュリティブログには以下のような記載があります。
Android の各パートナーはこの更新プログラムを受け取っています。また、10 月の月次セキュリティアップデートにもこの更新プログラムが含まれています。Kubernetes のバージョン1.5.8、1.6.11、1.7.7、1.8.0 が、修正された DNSポッドとともにリリースされています。影響を受けたその他の Google のサービスも更新されています。 |
その他の環境はどうでしょうか。ここまでの各段落で解説した条件の確認で、初回調査としては十分です。実務的な確認作業には、図 1 のフローチャートを利用してください。
端末を保護する方法
図 1 のフローチャートに記載した推奨策について簡単に見ていきましょう。
- 利用しているディストリビューションが Dnsmasq を 2.78 に更新するパッケージを提供している場合、ディストリビューションが提供する案内に従って更新してください。
・更新パッケージがリリースされていない場合、2.78 のリリースまたは公式の Git リポジトリからソースコードを取得し、Dnsmasq をビルドする必要があります。
- Dnsmasq をカスタマイズして利用している場合は、自身のソースコードに合わせて更新プログラムを適用する必要があります。
Dnsmasq の更新有無にかかわらず、Dnsmasq を利用する必要がある場合は、一般的なネットワークセキュリティのベストプラクティスに従うことが推奨されます。脆弱性攻撃のリスクを減らすために以下のような対策を取ることが可能です。
- 表 3 を参照し、利用していない場合は影響を受ける Dnsmasq のオプションを無効にしてください。
- Dnsmasq サービスと通信可能なホストをホワイトリスト方式で制限し、不審なユーザがネットワークパケットを送信できないようにしてください。
- 信頼できる上位 DNS サーバを利用してください。SOHO では、通常 ISP が動的に上位 DNS サーバを割り当てます。そのため、信頼できる ISP を利用する必要があります。しかし、もし攻撃者が、例えばルータで実行している Dnsmasq と ISP によって割り当てられた正規の上位 DNS サーバとの間に割り込むことができた場合、攻撃者は上位 DNS への問い合わせを乗っ取り、応答を利用して CVE-2017-14491 を狙った攻撃を実行することが可能です。
・ルータで Dnsmasq を実行している場合、ルータを狙った攻撃に関する記事の推奨策に従ってください。
- 以上の対策を取れない場合は、侵入防止システム(IPS)に適切なシグネチャを設定することで、脆弱性を狙った攻撃を検出することが可能です。
■トレンドマイクロの対策
トレンドマイクロの「Trend Micro Smart Home Network™」を搭載したルータや、家庭用ルータを中心に構成されるホームネットワークを保護する「ウイルスバスター for Home Network」では、トレンドマイクロがクラウド上に保有するWebレピュテーションデータベースと連携し、フィッシング詐欺サイトやマルウェアの配布サイトなど不正サイトへのアクセスをブロックします。また、家庭内に接続されている各デバイスへの脆弱性を悪用する攻撃をネットワークレイヤでブロックし、ルータなどの脆弱性を悪用する攻撃に対応します。
ネットワークセキュリティ対策製品「TippingPoint」では、以下のフィルタによって今回の脅威をブロックします。
- 29729: DNS: Dnsmasq DNS Response Buffer Overflow Vulnerability
- 29730: DNS: Dnsmasq DNS Inverted Query Denial-of-Service Vulnerability
- 29731: DNS: Dnsmasq DNS add_pseudoheader Denial-of-Service Vulnerability
- 29732: ICMP: Dnsmasq ICMPv6 Router Advertisement Buffer OverflowVulnerability
- 29733: DHCP: Dnsmasq DHCPv6 Relay-Forward Buffer Overflow Vulnerability
- 29734: DHCP: Dnsmasq DHCPv6 Relay-Forward Information DisclosureVulnerability
ネットワーク型対策製品「Deep Discovery™ Inspector」は、以下の DDI ルールによって今回の脅威を検知します。
- Beta Rule ID 3751:CVE-2017-14491 DNSMASQ Buffer Overflow Exploit –DNS(Response)
- Beta Rule ID 3752: CVE-2017-14493 DNSMASQ Buffer Overflow Exploit –DHCP(Request)
- Official Rule ID 2517, Beta Rule ID 3753: CVE 2017-14496 DNSMASQ IntegerUnderflow Exploit – DNS(Request)
参考記事:
翻訳:澤山 高士(Core Technology Marketing, TrendLabs)