狠狠撸
Submit Search
ブルームフィルタを利用した ランダムサブドメイン攻撃(DNS水責め)からのDNSキャッシュサーバの防御
?
17 likes
?
11,168 views
hdais
Follow
ソース公開しました: https://github.com/hdais/unbound-bloomfilter
Read less
Read more
1 of 21
Download now
Downloaded 37 times
More Related Content
ブルームフィルタを利用した ランダムサブドメイン攻撃(DNS水責め)からのDNSキャッシュサーバの防御
1.
ブルームフィルタを利用した ランダムサブドメイン攻撃から のDNSキャッシュサーバの防御 東?大亮 1 (更新版)
2.
ランダムサブドメイン攻撃 (に巻き込まれたキャッシュサーバ) victim.com 権威サーバ キャッシュ サーバ 正規ユーザ 攻撃者(踏み台) www.victim.com? mail.victim.com? awfbh.victim.com? uscz8.victim.com? abqce.victim.com? qpdks.victim.com? qpdks.victim.com? abqce.victim.com? uscz8.victim.com? awfbh.victim.com? www.victim.com? mail.victim.com? 2
3.
キャッシュサーバにおける 一般的な防御 victim.com 権威サーバ キャッシュ サーバ 正規ユーザ 攻撃者(踏み台) www.victim.com? mail.victim.com? awfbh.victim.com? uscz8.victim.com? abqce.victim.com? qpdks.victim.com? ? ? ? ? ? ? victim.comゾーンへの問 い合わせをすべてブロッ ク or レートリミット BIND9:
ローカルゾーン、fetch-per-zone、fetch-per-server Unbound: ローカルゾーン、ratelimit (ver1.5.4~) 3
4.
攻撃対象ゾーンへのクエリを ブロックすると??? ? 確かにキャッシュサーバは防御できるが、そのゾーンはキャッシュサー バで完全に解決不可(DoS)状態になる ? ある意味、攻撃者の思う壺! ?
有名ドメイン名への攻撃に巻き込まれたら? google.com や twitter.com をブロックするのか? ? 自動的に攻撃対象ゾーンを検出する機構を運用していた場合、攻撃で ないものを攻撃と誤検知し、ブロックすべきでないゾーンをブロック 対象にしてしまったら? ? 攻撃クエリはブロックし、正規クエリは受けつけて名前解決したい! 4
5.
防御の理想形 victim.com 権威サーバ キャッシュ サーバ 正規ユーザ 攻撃者(踏み台) www.victim.com? mail.victim.com? awfbh.victim.com? uscz8.victim.com? abqce.victim.com? qpdks.victim.com? ? ? ? ? www.victim.com? mail.victim.com? victim.comゾーンへのク エリのうち、正規クエリ のみ受け付けしたい! 5
6.
正規クエリと攻撃クエリの 判定 www.victim.com? mail.victim.com? awfbh.victim.com? uscz8.victim.com? abqce.victim.com? qpdks.victim.com? 正規クエリは存在するドメイン名 へのクエリ: 結果はNOERROR 攻撃クエリは存在しないドメイン名 へのクエリ: 結果はNXDOMAIN 6 正規クエリ 攻撃クエリ キャッシュサーバ(リゾルバ)が、権威サーバに問い合 わせる前に、NOERRORになりそうなクエリかどうか 判定できればよい(さもなくばブロック)
7.
「NOERRORになりそうな クエリ」 ? そのキャッシュサーバで、過去N時間までにNOERROR になったドメイン名(QNAME)へのクエリは、今度のク エリも「NOERRORになりそう」と仮定して受け付ける ? 逆に、過去N時間までにNXDOMAINになった/ユーザ からのクエリが無かったQNAMEは、今回も NXDOMAINになる/正規ユーザも関心が無いドメイン 名とし仮定し、攻撃中はブロックしても問題ないと仮定 ?
Nは比較的長時間 (N=24時間 or 48時間 etc) 7
8.
過去24時間のNOERRORなQNAMEを どうやって覚えておくか? ? DNSのクエリは超大量にある ? (主に攻撃を受けやすい)ISP環境では、数千~数 万クエリ/秒 ?
記憶には大量のメモリが必要 ? 防御時に高速検索が必要 8
9.
NOERRORなドメイン名を ブルームフィルタで記憶 ? ブルームフィルタ(Bloom ?lter)とは ?
検索キーが、検索対象の集合に属しているか否か を、少ないメモリ量で記憶し、高速に判定可能な 確率的データ構造 ? Wikipediaの同名記事の解説がわかりやすい 9
10.
ブルームフィルタの特徴 ? 使用メモリが少ない ? 1%の偽陽性率ならば、9.6ビット/要素のメモリ量でよい。 ?
8.6億個 ( 毎秒1万個 24時間) の QNAMEなら1Gバイトでよい ? 記憶?検索が高速 ? 記憶?検索いずれもO(1) ? 記憶済の要素数?メモリ量に応じ、偽陽性が発生する ? 偽陽性(false positive)とは、検索キーが検索対象の集合に存在しないのに 「存在する」と誤って判定してしまうこと。 ? なお、BFでは偽陰性(存在するのに「存在しない」と誤判定)は発生しない 10 ※BF記憶?検索の時間計算量は記憶済の要素数や使用メモリ量には依存しない。厳密には偽陽 性率を決めるパラメータkに比例はするが、偽陽性率1%で固定すればO(1)と見なせる
11.
Unboundに実装してみた ? 通常時の動作 ? ユーザからのクエリのうち、NOERRORとなったQNAMEを、ひたす らBFに入力 ?
攻撃時の防御 ? 攻撃対象ゾーンへのクエリのうち、BFにヒットするもの(過去に NOERRORになったもの)を受け付け。ヒットしないものはブロック。 ? 攻撃対象ゾーンは、手動指定の他、自動判定+BF自動適用が可能 11 Githubで公開してます: https://github.com/hdais/unbound-bloom?lter
12.
Bloom?lterによる victim.comゾーン宛クエリの防御 victim.com 権威サーバ キャッシュ サーバ 正規ユーザ 攻撃者(踏み台) www.victim.com? mail.victim.com? awfbh.victim.com? uscz8.victim.com? abqce.victim.com? qpdks.victim.com? ? ? ? ? www.victim.com? mail.victim.com? 12 veryrarename.victim.com? ? ugjks.victim.com? BFにマッチしない QNAMEは正規?不正ク エリに関わらずブロック BFの偽陽性のため、 攻撃クエリもわずかに 「漏洩」する BFにマッチする QNAMEは受け付け?再 帰検索処理を行う
13.
unbound-bloom?lterの 使用法 ? BF有効化?使用するメモリ量?BFのリセット時間間隔の設定 (unbound.conf) server: bloomfilter-size:
1024m bloomfilter-interval: 86400 →BF学習が有効になる。使用するメモリは 1GBx2=2GB。86400秒毎にBFをリセット ? 手動指定:ランダムサブドメイン攻撃時に、BF適用対象ゾーンを手動指定 (CLI) $ unbound-control local_zone victim.com bloomfilter →victim.comゾーンへのクエリにBF適用 13 $ unbound-control local_zone_remove victim.com →victim.comゾーンへのBF解除
14.
unbound-bloom?lterの 攻撃ゾーン自動判定① 14 ? ゾーン毎に、requestlist (BIND9のrecursive
clientsに相当) に長時間居座るクエリ数を制限 server: bloomfilter-size: 1024m bloomfilter-interval: 86400 bloomfilter-threshold: 100 → requestlistに長時間(2秒以上)居座るクエリが ?100個を超えたゾーンにBF適用 (一定時間後、自動解除) ?ゾーンの分類にはpublicsu?xlistを使用。 QNAME クライアントから受信して からの経過時間 nwdw.victim.com 3.2 msdfw.victim.com 0.1 sdjef.victim.com 2.3 dmsfg.victim.com 2.4 www.example.com 1.3 mail.example.com 0.2 ゾーン 2.0秒以上「居座っている」 クエリ数 victim.com 3 example.com 0 クエリ数がbloom?lter-threshold指定値を超 えているゾーンを自動的にブルームフィルタ requestlistの内容 名前解決に時間がかかっているクエリ数を ゾーン毎に集計
15.
saywc.victim.com unbound-bloom?lterの 攻撃ゾーン自動判定② ? ゾーン毎に、BFマッチしないキャッシュミスクエリをレートリミット server: bloomfilter-size: 1024m bloomfilter-interval:
86400 bloomfilter-ratelimit: 1000 → ゾーン毎にキャッシュミスは1000qpsに制限。 超えたものはBF適用。ゾーンの分類には publicsu?xlistを使用 キャッシュ サーバ ? ? ? 1000qps BFにマッチするクエリは ratelimit非適用 victim.com 権威サーバ mail.victim.com www.victim.com nsjkf.victim.com kjsvd.victim.com ujekc.victim.com ejsdv.victim.com ijkac.victim.com 正規ユーザ 攻撃者 正規ユーザ example.com 権威サーバ BFにマッチせず、 キャッシュミスしたクエリはゾーン毎にratelimit www.example.com ratelimit値に達しないゾーンへのクエリには影響なし 2000qps
16.
課題 ? そもそも「過去N時間にNOERRORになったクエリのみ受け付ける」が正 規クエリのみ受付けるために有効なのか? ? まったく未検証! ?
有効だとしても、どのようなチューニングをすべきか? 特に、過去どれ だけの期間?個数のNOERRORなドメイン名を集めればよいか ? ワイルドカードなゾーン (tumblr.comとかblogspot.jp)が攻撃された時は 無力かもしれない ? 通信の秘密!攻撃時はともかく、平常時でもユーザクエリを分析してBFに漬け込むの はどうなのよ etc 16
17.
現状 ? unbound-users MLでbloom?lterを紹介したら、海外某ISPの方 から色々問い合わせ。使ってくれてるらしい。 ?
Unbound本家も、unbound-bloom?lterやBIND9を意識したのか、 実験的なランダムサブドメイン攻撃対策が入った (ver 1.5.4~) ? ゾーン毎にキャッシュミス数をratelimit ? ratelimit超えたキャッシュミスクエリはブロックするが、1/10 (設定変更可能)の確 率で受付ける。正規ユーザから人気があるQNAMEなら、いずれブロックをすり抜け て受付けられキャッシュに乗るだろうとの仮定。 ? 「ゾーン毎」を分類するのにPublic Su?x Listは使用していない(これはGood) 17
18.
END
19.
backup slides
20.
unbound-bloom?ter 名前解決速度への影響 ? 通常時 (キャッシュミス
100%の最悪時) ? BFに学習なし: 15,863 qps ? BFに学習あり: 14,810 qps ▲6.64% ? victim.com防御時 (victim.comへのクエリ100%の最悪時) ? victim.com refuse: 135,617 qps ? victim.com bloom?lter: 113,953 qps ▲16.0% ? (参考) victim.com キャッシュヒット: 95,371 qps 通常時のBF学習のペナルティは、100%キャッシュミスの最悪時でも6~7%程度。 bloom?lter防御時のペナルティは、REFUSEよりも16%悪いが、キャッシュヒットよりは高速 テストマシン: Core2Duo 1.6GHz(2core) / Mem 2GB BFサイズ: 1GB / キャッシュサイズ1GB 20
21.
攻撃対象ドメインへのクエリ をブロックすると??? 21 cloud?are.comへの水責め攻撃に巻き 込まれた某ISPのキャッシュサーバ そのISPはcloud?are.comへのクエリ をすべてブロックした clould?are.comへの正規クエリと攻撃クエリを、キャッシュサーバが機械的に 識別することは、普通は困難のため、全クエリをブロックせざるを得ない (そうしなければ、サーバが過負荷で停止してしまう)
Download