SPNセキュリティ技術解説セミナー DNSにおけるキャッシュ汚染攻撃 2008年10月25日(土) 【2008年11月3日改訂】 塩月 誠人 <mshio@Sec-Pro.Net> 合同会社セキュリティ・プロフェッショナルズ・ネットワーク 本セッションの概要 DNSはインターネットを利用する際に誰もがお世話になる非常に基 本的なサービスです。そのためDNSサーバにおけるセキュリティ侵害 は、多くのインターネット利用者に重大な影響を与えかねません。中 でもDNSキャッシュの汚染は、効果的なファーミング攻撃手法として 特に近年注目されています。 本セッションではこのDNSキャッシュ汚染が発生する仕組みについて、 クエリIDの予測、バースデイアタック、古典的キャッシュ汚染攻撃(Ka shpureff Attack)、Kaminsky's Attackといった手法を例に挙げ解 説するとともに、その対策方法について考察します。 2 DNSとは DNS ・・・ Domain Name System 平たく言うと、「ホストの名前とIPアドレスを関連付ける仕組み」 名前の例 ・・・ www.example.co.jp IPアドレスの例 ・・・ 192.168.1.1 名前からIPアドレスを調べる → 正引き IPアドレスから名前を調べる → 逆引き www.example.co.jp ? www.example.co.jp ? 192.168.1.1 192.168.1.1 組織内のDNSサーバ インターネット上の DNSサーバ群 3 DNSの階層構造 ルート"." arpa mil edu org com ・・・ jp in-addr ・・・ co ad ac or 218 ・・・ example ・・・ ・・・ 45 ・・・ www www2 192.168.1.1 4 DNSにおける名前解決の仕組み ルートDNSサーバ www.sec-pro.net ? 反復的問い合わせ netのNS Iterative Query 「権威」の「委任」 ドメイン「net」DNSサーバ www.sec-pro.net ? キャッシュDNSサーバ sec-pro.net のNS 「権威」の「委任」 組織内DNSサーバ ドメイン「sec-pro.net」 DNSサーバ www.sec-pro.net ? www.sec-pro.net ? 61.12.249.254 61.12.249.254 cache 権威DNSサーバ 再帰的問い合わせ Recursive Query 5 一般的なDNSの問題点 情報の漏洩 BINDバージョン情報の取得(BINDに固有の問題) ゾーン転送 情報の改竄、不正な情報の挿入 ダイナミックアップデート 偽造DNSリプライの挿入 DNSキャッシュの汚染 Pharming攻撃に利用 外部からの再帰的問い合わせ 資源の浪費(CPU、キャッシュ) 各種DNSサーバ攻撃の助長 その他、DNSサービスのバグによる各種脆弱性を利用した攻撃(サー ビス妨害、不正コードの実行、・・・) 6 Pharmingの脅威 Phishing ・・・ エサ(電子メール等)を使って一本釣り Fishing(釣り)から派生した造語 不正な電子メール等を用い、犠牲者を偽サイトに誘導 Pharming ・・・ タネ(不正な名前解決)をまいて、一気に収穫 Farming(農場経営)から派生した造語 ホストの名前解決の仕組みを不正に操作し、その仕組みを利用する犠牲 者すべてを偽サイトに誘導 → DNSの情報を不正に操作 いずれも主としてオンライン詐欺(カード番号やパスワード等の不正 取得)に利用 Pharmingの方が効率的かつ効果的 「The Pharming Guide」 http://www.ngssoftware.com/papers/ThePharmingGuide.pdf 7 Pharmingの概念 不正に介入 WWW.○×銀行.JP DNSによる 名前解決 攻撃者 10.1.1.1 偽の○×銀行Webサイト 10.1.1.1 クライアント 192.168.1.1 本物の○×銀行Webサイト 192.168.1.1 8 各種Pharming手法 ホストファ イルの改 ざん DNSリプラ イの詐称 ルート DNSサーバ リ エ ク プ リ リプライ ドメイン名 の乗っ取り クエリ リプライ キャッシュDNSサーバ 参照 ホストファイル (/etc/hosts等) JP DNSサーバ リ クエ ライ プ リ クエリ クライアント イ ラ 不正なダイ ナミックアッ プデート 参照 Kashpureffタイプ のキャッシュ汚染 参照 格納 キャッシュ ○×銀行.JP DNSサーバ Kaminskyタイプの キャッシュ汚染 不正侵入に よるDNS設 定情報の改 ざん DNS設定情報 9 DNSのキャッシュとは キャッシュDNSサーバは、問合せた結果のレコードを一定期間保持 → DNSレコードのキャッシュ 同じ問合せに対して、キャッシュに保持されたレコードを返すことでレ スポンス時間を短縮、ネットワークトラフィック等の資源を節約 キャッシュの情報が汚染される(誤った情報がキャッシュされる)と、そ のキャッシュDNSサーバに問合せるすべてのホストが騙される キャッシュに保持される期間は、当該レコードのTTL値に依存 TTL値は権威DNSサーバで定義 通常は1日(86400sec)に設定、最近は短い値の場合も多い 攻撃者はキャッシュ汚染時に自由なTTL値を設定することが可能 ただし実装によりキャッシュ保持時間の最大値が異なる(?) Windows Server 2003 DNS ・・・ 86400sec (1 day) BIND 9 ・・・ 604800sec (1 week) 10 キャッシュ汚染手法の分類 DNSリプライの詐称によるキャッシュ汚染 偽のリプライを返すことで結果的にキャッシュを汚染 いかにしてクエリIDを合致させるかがポイント 1) MITM/ネットワーク盗聴 2) ブルートフォース 3) クエリID予測 4) バースデイアタック Kashpureffタイプのキャッシュ汚染 DNSリプライに権威外のレコードを入れて返すことでキャッシュを汚染 古典的キャッシュ汚染手法(1997年、2005年にインターネット上で攻撃) Kaminskyタイプのキャッシュ汚染 リプライ詐称を効率的に実行し、権威の委任を利用して偽情報を入れる 2008年にKaminsky氏により発表、同7月に各種DNSサーバが一斉パッチ 11 DNSリプライの詐称によるキャッシュ汚染 正常なDNSクエリとリプライ www.sec-pro.net ? ドメイン「sec-pro.net」権威 DNSサーバ キャッシュ DNSサーバ www.sec-pro.net ? 61.12.249.254 61.12.249.254 cache 偽のDNSリプライの挿入 ドメイン「sec-pro.net」権威 DNSサーバ 攻撃者 www.sec-pro.net ? キャッシュ DNSサーバ www.sec-pro.net ? ? et n . ro p ec s . w 1 .1. イ ww 1 . 10 プラ リ NS D 偽造 次の問い合わせには キャッシュの情報を返す 10.1.1.1 cache 10.1.1.1 12 DNSリプライの詐称が成功する条件(1) DNSの応答パケットは基本的にUDPなので、トランスポート層での 詐称は容易 偽のDNSリプライを挿入するためには以下の条件が必要 正規のDNSサーバからのリプライよりも先に送り込まなければならない 正規のDNSサーバが遠い、動作していない、DOSでダウン、・・・ → 成功率UP 以下が正しいリプライパケットでなければならない ソースおよびデスティネーションIPアドレス ソースおよびデスティネーションUDPポート番号 クエリの内容 クエリID IPアドレス? キャッシュDNSサーバ/権威DNSサーバいずれもIPアドレスは既知 13 DNSリプライの詐称が成功する条件(2) ポート番号? 権威DNSサーバ側 ・・・ 53番固定 キャッシュDNSサーバ側 ・・・ 今年7月の一斉パッチ以前は多くの場合固定 のため、事前に問合せることで判明 クエリの内容? 攻撃者が能動的に問合わせを発行すれば既知 クエリID(Transaction ID)? DNSの問い合わせの識別子(2バイト → 65,536通り) 古いBINDやNT4.0DNS(SP4より前?)では連番だったため、容易に予測可 能であったが、最近のDNSサービスは基本的にランダムなクエリIDを使用 ローカルネットワーク上では比較的容易に詐称可能(ネットワーク盗 聴やMITM攻撃を利用) 14 DNSリプライパケット IP Header src-ip UDP Header DNS Message dst-ip src-port dst-port 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ID | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |QR| Opcode |AA|TC|RD|RA| Z | RCODE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QDCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ANCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | NSCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ARCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +---------------------+ | HEADER | +---------------------+ | QUESTION SECTION | +---------------------+ | ANSWER SECTION | +---------------------+ | AUTHORITY SECTION | +---------------------+ | ADDITIONAL SECTION | +---------------------+ 15 クエリIDによるリプライ詐称の防止(1) C QUERY IP-B → IP-C P-1138 → P-53 QID: 5678 QUERY B 一致!! 一致 権威DNSサー バ ANSWER IP-C → IP-B P-53 → P-1138 QID: 5678 ○ キャッシュ DNSサーバ IP-A → IP-B P-1024 → P-53 QID: 1234 一致 ANSWER 一致!! IP-B → IP-A P-53 → P-1024 QID: 1234 A ○ クライアント 16 クエリIDによるリプライ詐称の防止(2) C QUERY IP-B → IP-C P-1138 → P-53 QID: 5678 QUERY B 権威DNSサー バ 不一致!! 不一致 Хキャッシュ IP-A → IP-B P-1024 → P-53 QID: 1234 A クライアント DNSサーバ X ANSWER IP-C → IP-B P-53 → P-1138 QID: 9999 攻撃者 Query IDを正しく推測しなければ 偽造DNSリプライは挿入できない 17 偽造リプライ挿入の確率 キャッシュDNSサーバが偽造リプライを受付ける確率は、 R * W P_s = ----------N * P * I R: 偽造リプライパケットの送出レート(pps)、つまり一秒に何発打てるか W: 「窓」が開いている秒数(s)、つまり正規リプライが返るまでの時間 N: 対象ドメインの権威DNSサーバの数 P: キャッシュサーバのポート番号がとりうる値の数(1~64,000程度) I: Query IDのとりうる値の数(16bit、つまり「65,536」) R=5000, W=0.1, N=2, P=1, I=65536として、0.4%程度の確率 18 クエリID予測によるDNSリプライの詐称(1) 以下のDNSサーバのクエリIDは容易に予測できることが2007年に公 開 BIND8(8.4.7-P1にてフィックス) http://www.trusteer.com/docs/bind8dns.html BIND9(9.2.8-P1, 9.3.4-P1, 9.4.1-P1, 9.5.0a6にてフィックス) http://www.trusteer.com/docs/bind9dns.html Windows 2000 Server/Windows Server 2003(MS07-062にてフィックス) http://www.trusteer.com/docs/windowsdns.html 攻撃者の管理するDNSサーバに問い合わせを発行させ、そのクエリ IDを基にして次のクエリIDを予測し、偽造DNSリプライを挿入 19 クエリID予測によるDNSリプライの詐称(2) ドメイン「sec-pro.net」 権威DNSサーバ 攻撃者ドメイン 「attacker.dom」の権威 DNSサーバ QID:XXX 攻撃者 QIDをサンプリングして、 次のQIDを予測 www.sec-pro.net ? QID:YYY om ? d . r e ttack aaa.a ? m o r.d e ? k et tac n t . a . pro aaa c e ライ w.s プ w リ w NS D .1 偽造 0.1.1 1 キャッシュ DNSサーバ www.sec-pro.net ? 10.1.1.1 cache 10.1.1.1 QID:YYY 20 バースデイアタックによるDNSリプライの詐称(1) バースデイパラドックス ・・・ 「人が23人集まると、同じ誕生日同士 の人が存在する可能性は1/2を超え、60人も集まると確実に存在 する」という確率論 つまり、自分と同じ誕生日の人を探すのは大変だが、「誕生日が同 じ」というペアを探すのは容易 DNSのクエリIDの場合、500発程度のクエリおよび偽造リプライを送 信することにより、80%以上の確率でクエリIDが合致 DNS Cache Poisoning - The Next Generation http://www.lurhq.com/dnscache.pdf BIND9では同時問い合わせを同時並行的に処理しないので安全 Windows DNSはMS07-062適用後、同時並行的に処理しない 21 バースデイアタックによるDNSリプライの詐称(2) QID ドメイン「sec-pro.net」DNS 権威サーバ どれかのQIDが(たまたま)合致する 攻撃者 www . secpro. net ? et ? n . -pro c e s w. ww .1.1 1 . 10 QID D 偽造 イ プラ リ NS キャッシュ DNSサーバ www.sec-pro.net ? 10.1.1.1 cache 10.1.1.1 22 Kashpureffタイプのキャッシュ汚染手法(1) キャッシュDNSから攻撃者が管理する権威DNSサーバへ問合わせ をさせ、そのリプライに入れた権威外のレコードでキャッシュを汚染 CNAMEやNSレコードを利用しANSWER/ADDITIONALセクションに挿入 本来信用してはいけないレコードを信用してしまうといった、キャッシュ DNSサーバの脆弱性を利用したもの 脆弱なDNSサーバは、権威外のレコードをキャッシュに保存 古いBINDや、デフォルトのNT4.0/2000 DNS (SP3より前)は脆弱 最新のWindows DNSでも、設定によっては脆弱になるので注意 DNSキャッシュ機能はさまざまな製品(ルータ、ゲートウェイ製品等)に含まれ るが、場合によってはそれらに脆弱性が存在 Windows DNSでの対策: DNS設定の 「詳細」プロパティで「Pollutionに対してセキュリティでキャッシュを 保護する」を設定(2000 SP3以降および2003ではデフォルト) 23 Kashpureffタイプのキャッシュ汚染手法(2) インターネットで発生したKashpureffタイプのキャッシュ汚染攻撃 1997年7月: http://www.cert.org/advisories/CA-1997-22.html BIND4.9.6/8.1.1より前のバージョンに脆弱性 AlterNIC(Eugene Kashpureff氏)により多数のDNSサーバが攻撃 www.internic.netへのアクセスがAlterNICのサーバへ誘導 2005年3月~4月: http://isc.sans.org/presentations/dnspoisoning.php Windows NT/2000、Symantecゲートウェイ製品のDNS 各種商用サイトのドメイン名がターゲット 不正サイトにリダイレクト(Web、E-Mail、FTP、IMAP/POP、・・・) 不正サイト上でスパイウェアを配布 対策済みのWindows DNSでもBIND4/8をフォワーダとして使っている場合は脆 弱 24 Kashpureffタイプのキャッシュ汚染手法(3) ドメイン「sec-pro.net」 権威DNSサーバ 攻撃者ドメイン 「attacker.dom」の 権威DNSサーバ 権威外のレコード キャッシュ DNSサーバ www.sec-pro.net ? om ? d . r 10.1.1.1 .net cke o r a t p t a c . e a s aa ww. 1.1.1 w E M 10. CNA A m cache er.donet k c ? 10.1.1.1 a o. att m aaa.w.sec-pr o .d ww er k c ta t a.a a a 攻撃者 25 フォワーダ経由でのキャッシュ汚染(1) フォワーダ ・・・ 自分の代わりに名前解決してくれるDNSサーバ Windows DNSは、フォワーダの設定をしている場合、フォワーダから のリプライなら権威外レコードであっても受け入れる(仕様) つまり、「Pollutionに対してセキュリティでキャッシュを保護する」と設定していて も、Kashpureffタイプのキャッシュ汚染が発生 以下の場合、Windows DNSに対するキャッシュ汚染が可能 フォワーダDNSにKashpureffタイプのキャッシュ汚染脆弱性がある場合 フォワーダDNSが毒を浄化せずにリプライを戻す場合(BIND8/4?) フォワーダDNSを詐称してキャッシュ汚染攻撃された場合 クエリIDの推測が必要(バースデイアタックや総当り) 解説ページ: http://www.st.rim.or.jp/~shio/advisories/windns_poison/w indns_poison.txt 26 フォワーダ経由でのキャッシュ汚染(2) フォワーダ キャッシュ DNSサーバ DNSサーバ aaa.attacker.dom ? www.sec-pro.net ? ドメイン「sec-pro.net」 権威DNSサーバ リプライを返さない e ck a t at . a aa 攻撃者ドメイン 「attacker.dom」の 権威DNSサーバ 攻撃者 om .r d ? フォワーダ設定 10.1.1.1 cache 10.1.1.1 t e 称 ro.n ? 詐 を ec-p om d 1 . イ er ラ w.s .1. k プ w .1 c リ ta t w 10 a の . E a ら AM aa か S CN A N D m Windows DNSはフォワーダからの ダ .do et ー r n リプライなら権威外のレコードでも受 ワ cke ro. ォ p け入れる フ atta eca. w.s a a w w 権威外のレコード 27 従来のキャッシュ汚染攻撃手法の欠点 DNSリプライの詐称によるキャッシュ汚染 一度失敗すれば正規のレコードがキャッシュされ、キャッシュ保持中(TTL値 の期間中)は攻撃できない ・・・ 効率的な攻撃が不可 ある一定の期間(T)連続した攻撃で、一度でも偽造リプライを受付ける確率は、 TTLの値に依存 T/TTL R * W P_cs = 1 - 1 - ----------N * P * I R=5000, W=0.1, N=2, P=1, I=65536, TTL=86400(1日)として、10日で約4% TTLが例えば1時間(3600)だとすると、10日で約60%、20日で約84% Kashpureffタイプのキャッシュ汚染 脆弱性を持つキャッシュDNSサーバのみが攻撃対象 ・・・ 攻撃対象が極め て限定(設定を誤ったWindows DNS等) 28 Kaminskyタイプのキャッシュ汚染手法(1) 2008年になって、Dan Kaminsky氏が新しいタイプのDNSキャッシュ 汚染手法を考案 DNSのもともとの設計による問題 今まで考えられていたよりも容易にリプライ詐称が可能 攻撃の機会はTTL値に依存しない(いつでも「レース」が開始できる) BIND、Windows DNS等、多くのターゲットに適用可能 DNSの下位ドメインに対する「委任」の仕組みを利用してキャッシュを汚染 実装によっては既存レコードの上書きも可能(Windows DNS → Aレコード) 7月に各種DNSの実装が一斉にアップデート ソースポートをランダマイズすることで攻撃成功の可能性を低減 29 Kaminskyタイプのキャッシュ汚染手法(2) 基本はブルートフォース型DNSリプライの詐称 つまりターゲットのキャッシュDNSサーバから権威DNSサーバへの問い合わせに 対するリプライを詐称 ランダムなクエリIDで多数の偽造リプライを返し、どれかが当たるのを待つ 存在しないホスト名をクエリに使用 001.www.sec-pro.net等の存在しないレコードを、キャッシュDNSサーバから 権威DNSサーバへ問い合わせさせる 毎回クエリのホスト名を変えるため、TTL値に依存することなく何度でも連続 してリプライ詐称をトライすることが可能(001, 002, 003, 004, ...) どのようにしてキャッシュを汚染するか? 「001.www.sec-pro.net」を偽IPアドレスでキャッシュさせても意味がない やりたいことは「www.sec-pro.net」を偽IPアドレスでキャッシュ 30 Kaminskyタイプのキャッシュ汚染手法(3) 手法その1: 偽造リプライ中に委任先のNSレコードを入れることで参照先を変更 例1)www.sec-pro.net NS 例2)sec-pro.net NS ns.attacker.dom ns.attacker.dom それにより、www.sec-pro.netの問い合わせを攻撃者のDNSサーバへ誘導 例2の場合は、sec-pro.netドメイン全体の乗っ取りが可能 BIND9.5.0-P2およびWS2K3/SP2(MS08-037適用済み)で検証(いずれも ソースポート固定に設定) 手法その2: CNAMEやNSレコードを利用して、ターゲットAレコードを直接挿入/上書き 例)001.www.sec-pro.net CNAME/NS www.sec-pro.net www.sec-pro.net A 10.1.1.1 WS2K3 DNSはCNAMEを利用してAレコードの挿入および上書きが可能 BIND9.5.0-P2はNSを利用してAレコード挿入が可能 31 Kaminskyタイプのキャッシュ汚染手法(4) ドメイン「sec-pro.net」DNS 権威サーバ QID ・・・ 001. www .secpro.n 002. et ? www .secpro.n et ? どれかのQIDが (たまたま)合致 キャッシュ DNSサーバ www.sec-pro.net ? 001.www.sec-pro.net ? www.sec-pro.net NS ns.attacker.dom 偽造DNSリプライ 攻撃者 10.1.1.1 002.www.sec-pro.net ? www.sec-pro.net NS ns.attacker.dom QID cache www.sec-pro.net NS ns.attacker.dom 偽造DNSリプライ ・・・ 10.1.1.1 権威の委任によりNS レコードがキャッシュ www.sec-pro.net ? 攻撃者ドメイン 「attacker.dom」の 権威DNSサーバ 32 DNSキャッシュ汚染攻撃への対策(1) ソースポートのランダマイズによりキャッシュ汚染成功率を下げる Kaminskyタイプのキャッシュ汚染攻撃が成功する確率 T R * W P_cs = 1 - 1 - ----------N * P * I R=5000, W=0.1, N=2, P=1, I=65536として、1分間の攻撃で約20% ソースポートのランダマイズ → P=64000とすると、10日間の攻撃で約5% 2008年7月に各種DNSの実装が一斉にパッチ提供 → ポートランダマイズ 設定によってはランダム化しない場合もあるので注意 例) BIND ・・・ query-source port 53; → ソースポートが固定化 NAT/NAPT環境ではソースポートのランダム化効果がなくなる場合もある ランダム度のテスト(https://www.dns-oarc.net/oarc/services/dnsentropy) dig +short porttest.dns-oarc.net TXT ・・・ ソースポートのランダム度 dig +short txidtest.dns-oarc.net TXT ・・・ クエリIDのランダム度 33 DNSキャッシュ汚染攻撃への対策(2) 外部からの再帰的問合せを禁止する 攻撃者がインターネット経由で直接トリガーを引くことを抑制 www.sec-pro.net ? 攻撃者 再帰的問合せを拒否 Х キャッシュ DNSサーバ www.sec-pro.net ? ○再帰的問合せを許可 cache 内部から強制的に再帰的問合せを発行させることもできるので注意が必要 メールサーバに問合せを発行させる(mail from: xxx@www.sec-pro.net等) Webバグを使ってブラウザ/メールクライアントから問合せを発行、・・・ 外部からの再帰的問合せのテスト(http://recursive.iana.org/) 34 DNSキャッシュ汚染攻撃への対策(3) 同時並行的な連続問合せの制限(バースデイアタック対策) Windows DNSは「Pollutionに対してセキュリティでキャッシュを保護 する」を設定(Kashpureff Attack対策) パケットフィルタリングによるソースIPアドレス詐称の防止 DNSSECの導入 公開鍵暗号方式を利用しゾーンのリソースレコードに署名、出所の認証と整 合性チェックを提供 問い合わせ側(リゾルバ)はレコードの署名を確認することで、偽造リプライ等 によるキャッシュ汚染を回避し、正しいレコードのみを受け入れる 公開鍵を上位ドメインに署名してもうらことで信頼関係を構築 インターネットで広く普及するにはしばらく時間がかかりそう SE(スウェーデン):対応中、ORG/GOV:対応予定、・・・ DLV(DNSSEC Lookaside Validation) TLDがDNSSEC化していない場合にDNSSEC対応する技術 35 まとめ DNSキャッシュ汚染は極めて影響度の高い攻撃のため、適切な対 応が必要 DNSサーバの最新版へのアップデート、設定の確認 ルータやゲートウェイ製品のDNSキャッシュ機能にも注意 クエリIDおよびソースポートのランダマイズによりリスクはかなり低減さ れるが、所詮は確率の大小の問題 外部からの再帰的問合せの禁止により攻撃の難易度は高まるが、 不可能ではない Kashpureffタイプの脆弱性は致命的 → 特にWindows DNSは設 定を確認 Windows DNSのフォワーダ経由でのキャッシュ汚染にも注意 Windowsクライアントでもキャッシュ汚染が発生する可能性 最終兵器はDNSSECだが・・・ 36
© Copyright 2024 Paperzz