踏み台から見た DNS 水責めの傾向
中京大学工学部 鈴木常彦
Aug 29, 2023 電気・電子・情報関係学会 東海支部連合大会 2023
http://www.e-ontap.com/misc/rengotokai2023/
DNS ハニーポット による観察
2018 年 9 月から Unbound に以下の制限を施してハニーポットとしてのオープンリゾルバを運用
- FreeBSD の dummynet で UDP 外向き帯域を 5Mbps に制限
- クエリ元 IP アドレス毎でのレートを 1qps に制限
- ドメイン (ゾーン) 毎のクエリのレートを 2qps に制限
- パッチで DNSSEC (DNSSEC DO bit) を無効化
- DNSSEC 署名検証機能 (validator) をオフ (DO bit off で必然)
- バッファサイズ (TCP fallback ライン) を 512byte に制限
- クエリが多くなる qname-minimisation をオフ
- タイプ any のクエリを拒否
- 反復問い合わせのリトライを3回に制限
DNSSEC の無効化 (EDNS0 DO bit off) は Unbound ソースの util/net_help.h への以下のパッチによる
< #define EDNS_DO 0x8000 /* Dnssec Ok */
---
> #define EDNS_DO 0x0000 /* Dnssec NG */
パケットカウント
ipfw を用いて以下をカウントしている
- allow udp from any to me 53 : クエリのパケット数とデータ量
- allow udp from me 53 to any : 応答のパケット数とデータ量
- allow udp from any 53 to me 1024-65535 : 自身の反復クエリの応答パケット数とデータ量
- allow icmp from me to any icmptypes 3 : SADDNS 検知用
- allow log tcp from any to me 53 established : TCP クエリの記録
クエリ数推移
2018年からの推移
クエリ数推移
3月からの推移
トラフィック (outbound udp 53)
水責めと判断する理由
- 毎回異なる qname のクエリであり約 8 割がNXDOMAIN
(残りはワイルドカードによって NOERROR になったものが大半)
- クエリに続く多数の偽応答がみられない
(誕生日パラドックス攻撃が紛れている可能性がなくはないがキャッシュポイズニングの可能性は非常に低い)
- ICMP type 3 (port unreachable) の顕著な増加がみられない (SADDNS ではない)
- DNS アンプ攻撃はみられなかった (詐称の場合に反射はあるが否定応答は小さい)
- 単純な単語の探索はわずかでサブドメインテイクオーバー目的の探索の可能性は低い
- 実際に多くの権威サーバの応答障害を誘発
- 水責めではあるが2014年の流行時と異なりキャッシュサーバへの負荷は軽い
応答障害の検出
Unbound のログから "all servers for this domain failed, at zone ..." をゾーン毎にカウント
Jun 06 19:23:21 unbound[62102:0] notice: ip_ratelimit exceeded *.*.228.175 1 fileshare-produ.pref.mie.lg.jp. IN A
Jun 06 19:23:25 unbound[62102:0] query: *.*.228.175 fileshare-web1.pref.mie.lg.jp. A IN
Jun 06 19:23:25 unbound[62102:0] error: SERVFAIL : all servers for this domain failed, at zone pref.mie.lg.jp. no server to query nameserver addresses not usable
Jun 06 19:23:25 unbound[62102:0] reply: *.*.228.175 fileshare-web1.pref.mie.lg.jp. A IN SERVFAIL 0.000000 0 47
Web への掲示
DDoS Victims Today (jp) -- Tue Jun 6 23:55:05 JST 2023
count zone time (first seen - last seen)
----------------------------------------------------------------------------
7527 nta.co.jp. Jun 06 16:26:19 - Jun 06 23:54:55
1661 pref.osaka.jp. Jun 06 00:00:11 - Jun 06 01:44:36
441 pref.mie.lg.jp. Jun 06 17:59:34 - Jun 06 19:23:47
86 su-mynote.jhf.go.jp. Jun 06 09:15:22 - Jun 06 11:16:27
84 unyoust.jhf.go.jp. Jun 06 09:15:29 - Jun 06 11:00:46
qnameの特徴
辞書を使用してランダムに生成された文字列と考えられる。辞書の使用はランダムドメイン名判定を回避するためか?
4/17 query log
brazil.shinsei.pref.osaka.lg.jp.
kodomotachiniokomewodev.pref.osaka.lg.jp.
content.autodiscover.mbox.pref.osaka.lg.jp.
dev0-cnw.pref.osaka.lg.jp.
eaccess.autodiscover.sbox.pref.osaka.lg.jp.
europe.gbox.pref.osaka.lg.jp.
www-devel.taishin.pref.osaka.lg.jp.
johokokai-korea.pref.osaka.lg.jp.
shinseidocker.pref.osaka.lg.jp.
kodomotachiniokomewo-fileserver.pref.osaka.lg.jp.
8/26 query log
cache-autodiscover.mbox.pref.osaka.lg.jp.
archivesboards.globalfinder.pref.osaka.lg.jp.
container-www.payment.pref.osaka.lg.jp.
gbox-corporate.pref.osaka.lg.jp.
archives-gallery.globalfinder.pref.osaka.lg.jp.
default-seikatu.pref.osaka.lg.jp.
devopswww.anshin.pref.osaka.lg.jp.
direct-cnw.pref.osaka.lg.jp.
europe.kodomotachiniokomewo.pref.osaka.lg.jp.
english.archives.pref.osaka.lg.jp.
応答障害 (3月15日 - 5月31日)
応答障害エラー/日
最小: 102,306
最大: 566,757
平均: 254,540
標準偏差: 110,039
応答障害ゾーン/日
最小: 707
平均: 1,982
最大: 10,116
標準偏差: 1,656
障害ゾーン総数 142,739 (うち jp は 585)
平均 250,721回/日 のレートリミットがかかった上での数字である。
ファイアウォールでカウントしたポート 53 への UDP パケット数は約 1万 / 5分 = 280万/日 (約 30 qps) であった。リミットされたクエリの約10倍が到来している。
クエリ数の推移
クエリ数
応答障害数の推移
障害の時間帯 (JP)
影響のある時間帯を考慮しているようには見えない
TLD別の応答障害ゾーン数 Top 39
(3/15 - 5/31)
- com 45123
- arpa 14848
- fr 6204
- net 5957
- de 5730
- org 4979
- uk 2202
- se 2112
- br 2043
- info 1993
- it 1590
- ca 1428
- ch 1393
- eu 1389
- xin 1381
- ru 1371
- cn 1371
- es 1351
- us 1274
- biz 1274
- tr 1215
- lv 1163
- nl 1102
- dk 1063
- be 958
- pl 957
- au 948
- lt 939
- ro 916
- in 821
- gov 777
- za 738
- at 667
- tech 663
- mx 623
- co 623
- xyz 605
- jp 585
- sk 580
JPドメイン (ゾーン) での応答障害カウント Top 30
(3/15 - 5/31)
- at.nttdocomo.co.jp. 23845
- pref.aichi.jp. 13758
- pref.okinawa.jp. 9883
- jil.go.jp. 9845
- pref.nara.jp. 9639
- pref.osaka.jp. 8882
- takashimaya.co.jp. 8704
- pmda.go.jp. 7528
- nies.go.jp. 6837
- enekoshop.jp. 6710
- hane-line.co.jp. 6656
- saisoncard.co.jp. 6642
- pref.toyama.jp. 6146
- android.jp. 4694
- v4.cyber.ipa.go.jp. 4513
- pref.kagoshima.jp. 3451
- boj.or.jp. 3408
- animate-onlineshop.jp. 3294
- yamaha.co.jp. 3222
- nta.co.jp. 2132
- csl.sony.co.jp. 1878
- post.japanpost.jp. 1645
- gaga.ne.jp. 1048
- umin.ac.jp. 904
- gov-online.go.jp. 761
- idc.nttdocomo.co.jp. 723
- city.osaka.lg.jp. 655
- ntt-east.co.jp. 630
- prtls.jp. 505
- montegrappa.jp. 453
JP ドメイン (ゾーン) での応答障害カウント Top 10 (6月)
- pref.nara.jp. 11815
- pref.aichi.jp. 11154
- v4.cyber.ipa.go.jp. 10848
- umin.ac.jp. 9491
- nta.co.jp. 8370
- pref.osaka.jp. 7351
- gov-online.go.jp. 5956
- pref.kagoshima.jp. 5654 (Jun 08 07:53:12 - 16:05:11)
ニュース: 海外からDDoS攻撃か、鹿児島県のHPがつながりにくい状態に
- csl.sony.co.jp. 3503
- pmda.go.jp. 2134
JP ドメイン (ゾーン) での応答障害カウント Top 10 (7月)
- wh2.ocn.ne.jp. 4690
- wh.ocn.ne.jp. 4616
- v4.cyber.ipa.go.jp. 3174
- cn.makeshop.jp. 1418
- eaccess.ne.jp. 1275
- umin.ac.jp. 1028
- cfbx.jp. 1006
- wht2.ocn.ne.jp. 917
- csl.sony.co.jp. 892
- whv.ocn.ne.jp. 679
JP ドメイン (ゾーン) での応答障害カウント Top 10 (8月)
- eaccess.ne.jp. 948 (16回)
- hinode-kagaku.co.jp. 249 (Aug 12 09:17:14 - 09:30:52)
- denka-azumin.co.jp. 168 (Aug 09 19:49:55 - 20:01:05)
- jasso.go.jp. 157 (Aug 01 12:53:33 - 13:06:26)
- city.osaka.lg.jp. 133 (Aug 26 09:35:39 - 10:00:02)
- city.tottori.lg.jp. 89 (Aug 18 05:03:58 - 05:23:25) ... 307 queries in 20 min = 1/4 qps
- des.co.jp. 86
- pref.osaka.lg.jp. 73
- sejsurvey.sej.co.jp. 58
- IRI.pref.kumamoto.jp. 54
(8/1 - 8/28 17:40)
攻撃元の分析 (1)
3月のIPアドレス分布
TCP接続元の死活監視グラフ
4/13 に調査したTCP接続元を ping で継続的に死活監視
攻撃元の分析 (2)
最小: 1,241
平均: 2,000
最大: 3,017
標準偏差: 484
総IPアドレス数 (3月15日-5月31日) 60,335
TCP 3,862 / IPアドレス総数 26,514 = 15% (5月分)
588 のTCP接続元のサンプリング分析 (4月5日) では 78% が米国の某大手データセンタ
攻撃例
3/22 mofa.go.jp (外務省) 攻撃の推移
3月22日 07:45 - 09:28 クエリ総数 1,632 (ratelimited)
6/5 pref.osaka.jp (大阪府) 攻撃の推移
6月5日 17:34 - 6月6日 01:44 クエリ総数 7,367 (ratelimited)
攻撃元はいずれも 1 IP アドレスのみで、1/4 qps (リミット前でも推定 数qps) の緩慢な攻撃であり膨大な数 (少なくとも数千) の踏み台の使用が推察される。
まとめ
- 飛来する平均クエリ頻度: 30qps
- 応答障害となったクエリ数/日: 254,540
- 応答障害が発生したゾーン数/日: 1,982
- 応答障害が発生したゾーン総数: 142,739
- 応答障害が発生したゾーン数(jp): 585
- 総IPアドレス数: 60,335
- IPアドレス数/日: 2,000
- TCP接続IPアドレス数 (5月分): 3862 (15%)
- 攻撃継続時間: (jp のみ分析)
- 1時間未満 77% (うち半数はクエリ1発のみ)
- 4時間未満 94%
- 最長 約26時間、次点 16時間 (jp の場合)
- 対策: レートリミット, 監視, オープンリゾルバ対策, リソース増, L7 F/W にてホワイトリスト, 我慢
ところで、隠れオープンリゾルバの対策してますか?
隠れオープンリゾルバとは
- 問題なのはリゾルバではなくネットワーク (境界ルータ or F/W)
- 攻撃に晒されるのは DNS ばかりではない
(NTP,SNMP,SSDP,Memcached,LDAP,ICMP,...)
- DNS水責め攻撃 (DDoS) の踏み台になりやすい
- キャッシュポイズニングされやすい
- DNSリフレクション攻撃 の踏み台としては限定的 (許可範囲内)
- リゾルバではアクセス制限 (許可外のクエリは REFUSED)
- 許可内の送信元 IP アドレスに偽装するとクエリを受け入れ
- ログを監視できるドメイン名のクエリを撃ち込むことで検出可能
穴の開き方のパターン
- リゾルバに隣接する IP アドレスに偽装すると受け入れ (わかる)
- リゾルバと同一 IP アドレスに偽装すると受け入れ (わかる)
- ルートサーバに偽装すると受け入れ (わからない)
- ソースポート 53 だとどこからでも受け入れ (わからない)
- REFUSED なのに名前解決は発動 / 偽装は不要 (まったくわからない)
隠れオープンリゾルバ対策
- サーバ (リゾルバ) でアクセス制限するだけでは不足
- 境界ルータ (F/W) の外側インターフェイスから内部アドレス(詐称)の流入を止める
deny all from 192.0.2.0/24 to any in via ${外側IF}
- 境界ルータ or F/W の内側インターフェイスから内部アドレス以外(詐称)の流出を止める (攻撃元にならないため)
deny all from not 192.0.2.0/24 to any in via ${内側IF}
- IP TTL によるブロック (サーバ管理者の自衛策)
deny ip from 192.0.2.0/24 to me not ipttl 64,128,255
ブロック実例 (攻撃は来ている!)
Jul 15 05:04:25 ipfw: 53
Deny UDP *.*.171.173:12345 *.*.171.172:53 in via vtnet0
(例は FreeBSD の ipfw)