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

More Related Content

What's hot

DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタDRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ株式会社サードウェア
 
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜Takuya ASADA
 
Kyoto.pm 20120818-hogem
Kyoto.pm 20120818-hogemKyoto.pm 20120818-hogem
Kyoto.pm 20120818-hogemhogem
 
Vagrant intro
Vagrant introVagrant intro
Vagrant introt9md
 
openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018
openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018
openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018zgock
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
独学道場アセンブリの会
独学道場アセンブリの会独学道場アセンブリの会
独学道場アセンブリの会Ryota Suenaga
 
勉強会0614 vagrant
勉強会0614 vagrant勉強会0614 vagrant
勉強会0614 vagrantYu Ito
 
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -Go Saito
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-mainShotaro Uchida
 
サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)snicker_jp
 

What's hot (14)

DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタDRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
 
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
 
Kyoto.pm 20120818-hogem
Kyoto.pm 20120818-hogemKyoto.pm 20120818-hogem
Kyoto.pm 20120818-hogem
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
Free bsd jail入門
Free bsd jail入門Free bsd jail入門
Free bsd jail入門
 
Vagrant intro
Vagrant introVagrant intro
Vagrant intro
 
暗号技術入門
暗号技術入門暗号技術入門
暗号技術入門
 
openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018
openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018
openSUSEで作る仮想化環境 -KVM,Xen,Docker 仮想化技術選択のポイント -. /oscnagoya2018
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
独学道場アセンブリの会
独学道場アセンブリの会独学道場アセンブリの会
独学道場アセンブリの会
 
勉強会0614 vagrant
勉強会0614 vagrant勉強会0614 vagrant
勉強会0614 vagrant
 
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 
サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)
 

Recently uploaded

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (7)

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

ブルームフィルタを利用した ランダムサブドメイン攻撃(DNS水責め)からのDNSキャッシュサーバの防御