BINDからの卒業

株式会社インターネットイニシアティブ
島村 充 <simamura@iij.ad.jp>

1

BINDからの卒業?
• BINDの問題点– DoS脆弱性多すぎなんだよおおおおおおおお– 「重複」に怯える日々。「夏のBIND祭り」
1234567891011122009

◎2010

◎

◎◎◎

◎/○

◎

○◎

◎

2011

◎○2012
2013

○2014

◎

2015
2016

◎
◎◎

◎

◎◎

◎

○○/◎◎/◎◎◎◎※ JPRSさん「DNS関連技術情報」にて “(重要)” →◎ 無印→○
同日公開のものは1つにまとめてある
2

BINDの脆弱性について• Security Architecture of BIND 9– JANOG US Regional Meeting #2での神明さんの発表– BIND9はBIND8に比べると遥かにマシ– BIND8のコードを再利用しない(デザインしなおし) “16 buffer overflow/overrun bugs inchangelog of BIND 8.4.7”
 BIND9ではRemote Code Executionなし
 でも落ちる!

– 2000/09/16 9.0.0リリース
 いろいろ古い…
3

BINDの脆弱性の分析• CHANGESに65個の “[security]”• BIND 9 Security Vulnerability Matrix に56のCVE-ID• 神明さん分析– 28(or 29)のassertion failure– メモリリーク1, 無限ループ1• JPRSさんの「DNS関連技術情報」にて– BIND9の脆弱性
 “（緊急）” 25件
 “（緊急）” ではないもの12件(2005年～)4BINDの脆弱性の特徴• RCEはない• assert() (INSIST, REQUIRE) でプロセスが死ぬ• メモリリーク、無限ループ (リソース食いつぶし)• ACLが意味を成さない (ACLを解釈する前段階で死ぬ)• その機能を使っていなくても死ぬ場合がある(DNSSEC, Dynamic Update(DDNS))• 外部からのpacket 1発で死ぬものがある– 通称: BINDコロリ(CVE-2009-0696 BIND Dynamic Update DoS)
• 外部からpacketが届かなくても死ぬものがある– 特定の名前を引か(さ)れてしまうとOUT

CVE-2012-4244,CVE-2013-2266,CVE-2015-5986など
5

BINDの脆弱性の特徴• RCEはない (再)– コード実行されないなら、即座に自動起動されるようにしてれば、たいして影響なくね??
– systemd, runsv, monit, contrib/scripts/nanny.pl– 起動が早くなったとはいえ、やはりある程度は時間がかかる
 権威サーバーで5万ゾーンで10分超とか
 その間応答しないゾーンがある cacheでも(良くても)2秒位は応答しない パケット一発で死ぬような脆弱性がある
 送り続けると…? 当然ずっと応答しない

6

BINDの脆弱性の原因• BIND9のコードは割とどうしようもない– 保護機構がないから? プログラマの質?
 すごくいろんなところで使われているので、crash bugがみつかりやすい?
(他のソフトでは見つかっていないだけ?)– 新機能追加 → crash bug発見のループ
 RPZ(2.5回), DNS64(2.5回), prefetch, GeoIP,OPENPGPKEY RR, DNS Cookie– 網羅的なテストがないとおもわれる
 RPZ有効時に、くべているドメインのRRSIGを引くだけで落ちる など
 発見されたバグに対してピンポイントのテストは追加されている

7

BINDの脆弱性の原因• 複雑なモノリシックアーキテクチャ– 権威・キャッシュ同居– Dynamic Update– 個々のスレッドが密接に絡まっており、1スレッドだけ死ぬというのは無理 イベントドリブン?なにそれ?おいしいの?(16年前のソフトです)8

BINDの脆弱性の原因• RDATAを解釈している– NAPTRで正規表現解釈して死亡– APL, OPENPGPKEY解釈して死亡– 新しいRR Typeが次々に追加される
 SPFレコードの失敗の反省から?

– 新しいRDATAの対応はESV系列にも入る
 ESVを使っていて、新機能はいらないだろうと安心していても、昔々からあるわけではないような脆弱性でも影響を受ける可能性がある

9

BINDの脆弱性の原因• RDATAを解釈している– NAPTRで正規表現解釈して死亡– APL, OPENPGPKEY解釈して死亡– 新しいRR Typeが次々に追加される
 SPFレコードの失敗の反省から?

– 新しいRDATAの対応はESV系列にも入る
 ESVを使っていて、新機能はいらないだろうと安心していても、昔々からあるわけではないような脆弱性でも影響を受ける可能性がある

10

最近のBINDの脆弱性• american fuzzy lop の登場 (もふもふ)– GAを使ってテストケースを変更して、カバレッジを上げるファジングツール
CVE-2015-5477: An error in handling TKEY queries cancause named to exit with a REQUIRE assertion (2015/07/28)
 CVE-2015-5986: An incorrect boundary check can trigger aREQUIRE assertion failure in openpgpkey_61.c (2015/09/03)
 CVE-2015-5722: Parsing malformed keys may cause BIND
to exit due to a failed assertion in buffer.c (2015/09/03)
– その他多数の犠牲者たち…


Shellshockとか…

エ数
ンえ
ジき
ニれ
アなをい殺ほしどてのいる

顔人を畜し無て害いそるうがな

11最近のBINDの脆弱性• american fuzzy lop の登場 (もふもふ)– GAを使ってテストケースを変更して、カバレッジを上げるファジングツール
CVE-2015-5477: An error in handling TKEY queries cancause named to exit with a REQUIRE assertion (2015/07/28)
 CVE-2015-5986: An incorrect boundary check can trigger aREQUIRE assertion failure in openpgpkey_61.c (2015/09/03)
 CVE-2015-5722: Parsing malformed keys may cause BIND
to exit due to a failed assertion in buffer.c (2015/09/03)
– その他多数の犠牲者たち…
Shellshockとか…

エ数ンえジきニれ
アなをい
殺ほしどてのいる顔人を畜し無て害いそるうがな12最近のBINDの脆弱性• american fuzzy lop の登場 (もふもふ)– GAを使ってテストケースを変更して、カバレッジを上げるファジングツール
CVE-2015-5477: An error in handling TKEY queries cancause named to exit with a REQUIRE assertion (2015/07/28)
 CVE-2015-5986: An incorrect boundary check can trigger aREQUIRE assertion failure in openpgpkey_61.c (2015/09/03)
 CVE-2015-5722: Parsing malformed keys may cause BIND
to exit due to a failed assertion in buffer.c (2015/09/03)
– その他多数の犠牲者たち…
Shellshockとか…

エ数ンえジきニれ
アなをい殺ほしどてのいる

顔人を畜し無て害
いそるうがな13

今後の展望• 9.11で新機能盛りだくさん• 新しいRR TYPEがどんどん追加される• american fussy lopパワーで今まで見つけられていなかった脆弱性がモリモリ出てくる→ (即死)DoS脆弱性の高頻度化を予想

逃げてーーーー

14ベンダーPackageの対応状況• 「ベンダーのサポートがないからBIND9以外使えない」とみなさんおっしゃいますが…
• 脆弱性公表からRHELパッケージリリースまで、ヤバイ脆弱性18件を調査かかった日数

回数

運用者の気持ち0-1日5早い。安心安心

2日

3

このくらいならまだ安心

3日

2

そろそろやばくね…?

4日

2

まだーー? (そろそろ攻撃が来るー)

5日

1

まだなのーーー?

6日2

そろそろ1週間なんだけど (あわわ…)

7日

1

や、やっと出た… _(:3｣∠)_

8日

1

遅いよ…

12日

1

攻撃来ないし、もう忘れかけてたわ…

13-15日1

もうどうでもイイっす…
15

実際の攻撃• 攻撃ってそんなにすぐ来ないよね?(つぶらな瞳)来ます• CVE-2015-5477: Bind TKEY Query Assertion Failure

http://internet.watch.impress.co.jp/docs/news/714526.html

2015/07/29早朝(日本時間)公開→ 7/29 AM11時「重複」→ 7/31障害
幸い、この時は7/28,29(現地時刻)にRHELのupdateがでている
16

実際の攻撃• CVE-2013-4854: A specially crafted query can cause BIND toterminate abnormally (2013/07/26)
Crashes have been reported by multiple ISC customers.
First observed in the wild on 26 July 2013.

• CVE-2011-4313: BIND 9 Resolver crashes after logging anerror in query.c (2011/11/16)
ISC is receiving multiple reports and working
with multiple customers on this issue.

• CVE-2011-1910: Large RRSIG RRsets and Negative Caching
Can Crash named
開発元であるISCは、本脆弱性の深刻度（Severity）を「高（High）」と評価しています。また、・既に本脆弱性を利用した具体的な攻撃方法がインターネット上に公開されていること

17

実際の攻撃• bind-users@isc.org, dns-operations@dnsoarc.netで「なんかxxxってログはいてBINDが落ちたんだけど」

18

実際の攻撃• bind-users@isc.org, dns-operations@dnsoarc.netで「なんかxxxってログはいてBINDが落ちたんだけど」

19

そんなわけで…
• BIND9以外の実装に乗り換えよう!
– BIND10はお亡くなりになりました…
(2014/04/18 final release of BIND 10)
 bundyと名を変えてgithubで公開されているが…

– 実装紹介 Unbound:島村 PowerDNS: (株)デージーネット OSS研究室 大野さん
 NSD: (株)インターネットイニシアティブ 山口さん
 他OSS: KnotDNS, YADIFA
20