Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DBやめてみた / DNS water torture attack and counterm...

DBやめてみた / DNS water torture attack and countermeasures

2023/06/21 TechFeed Experts Night#21 〜 Webパフォーマンス・チューニング最前線 : 後編(DB、CDN、キャッシュ、OS編)

kazeburo

June 21, 2023
Tweet

More Decks by kazeburo

Other Decks in Technology

Transcript

  1. Me • ⻑野雅広(ながのまさひろ) • Twitter/GitHub @kazeburo • さくらインターネット株式会社 
 クラウド事業本部

    SRE室 室⻑ • mixi, livedoor (LINE), mercari を経て 
 2021年から現職 • ISUCON本では第五章「データベース」を担当
  2. ⼀般的なWebサービスの構成 CDN LB App DB Queue Worker Storage Monitoring ໊લ

    ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ ໊લ ղܾ
  3. DNSと私 • 前前々職 • /etc/hostsファイルの管理から内部DNSに • 前々職 • PowerDNS +

    MySQLを利⽤したダイナミックな内部DNS • MySQL Replicaのロードバランスなどを実現 • 主要なサーバではローカルのDNSキャッシュサーバとして unbound を導⼊
  4. DNSと私 • 前職 • Consul DNSを利⽤した Service Discovery • データベース、ジョブキュー、プロキシー、内部APIあらゆるサービスに利⽤

    • Orchestrator と組み合わせて MySQL PrimaryのF/Oの実現 • サーバ全台にローカルのDNSキャッシュサーバとしてunboundを利⽤ • CoreDNSによる動的なクエリ書き換えによる、マルチクラウドの実現 • 現職 • 権威DNSサービスの開発・運⽤
  5. 権威DNSサービス • さくらのクラウド DNSアプライアンス、Amazon Route53やGoogle Cloud DNSなど • コントロールパネルやAPIによりゾーンの作成、DNSレコードの操作が可能 •

    DNSサーバの管理をサービス提供社にまかせることで、脆弱性対策、攻撃対 策、DNSサーバ管理の⼿間を省くことができる
  6. 権威DNSサービス • さくらのクラウド DNSアプライアンス、Amazon Route53やGoogle Cloud DNSなど • コントロールパネルやAPIによりゾーンの作成、DNSレコードの操作が可能 •

    DNSサーバの管理をサービス提供社にまかせることで、脆弱性対策、攻撃対 策、DNSサーバ管理の⼿間を省くことができる
  7. 攻撃の記録 07:25:11.719035 IP 209.216.160.2.50051 > 133.242.64.100.53: 43104 A? meetmodeling.example.com. (50)

    07:25:11.719057 IP 205.171.30.238.44916 > 133.242.64.100.53: 64321% [1au] A? _.modeling.example.com. (71) 07:25:11.719069 IP 172.70.109.31.63292 > 133.242.64.100.53: 40380 [1au] A? osaExpe1-pLatINUM.exAmpLe.cOm. (66) 07:25:11.719071 IP 3.139.136.204.44597 > 133.242.64.100.53: 32383% [1au] A? webdirect.foster.example.com. (65) 07:25:11.719113 IP 18.188.77.103.42513 > 133.242.64.100.53: 14853 [1au] A? note-modeling.example.com. (62) 07:25:11.719132 IP 172.70.33.19.27971 > 133.242.64.100.53: 35379 [1au] A? indian-awarded.example.com. (63) 07:25:11.719147 IP 12.121.89.48.43564 > 133.242.64.100.53: 23891 A? matchfiling.example.com. (49) 07:25:11.719156 IP 74.125.181.130.64517 > 133.242.64.100.53: 25285% [1au] A? xmL.mODeLING.eXaMple.CoM. (61) 07:25:11.719166 IP 165.225.41.202.17203 > 133.242.64.100.53: 53044% [1au] A? qatawarded.example.com. (59) 07:25:11.719176 IP 96.114.53.67.20082 > 133.242.64.100.53: 41999 [1au] A? netherlands.filing.example.com. (67) 07:25:11.719190 IP 172.253.195.196.35276 > 133.242.64.100.53: 45639% [1au] A? tdd-modeling.example.com. (61) 07:25:11.719195 IP 172.253.217.12.40587 > 133.242.64.100.53: 62658% [1au] A? web.modeling.example.com. (61) 07:25:11.719197 IP 172.253.9.4.50295 > 133.242.64.100.53: 37961% [1au] A? co.awarded.example.com. (59) 07:25:11.719224 IP 172.71.29.39.30489 > 133.242.64.100.53: 2496 [1au] A? SfaaSobvioUs.ExamplE.Com. (61) 07:25:11.719235 IP 209.66.107.33.57264 > 133.242.64.100.53: 50511 [1au] A? hap.modeling.example.com. (61) 07:25:11.719275 IP 96.114.53.69.53157 > 133.242.64.100.53: 5679 [1au] A? gitcn-awarded.example.com. (62) 07:25:11.719312 IP 172.70.229.30.59530 > 133.242.64.100.53: 45890 [1au] A? ipafoster.example.com. (58) 07:25:11.719336 IP 172.217.46.78.59507 > 133.242.64.100.53: 60186% [1au] A? testcloud-modeling.example.com. (67) 07:25:11.719351 IP 69.47.193.166.52891 > 133.242.64.100.53: 238 [1au] A? bfmpassing.example.com. (59) 07:25:11.719353 IP 34.218.119.91.26001 > 133.242.64.100.53: 31511% [1au] A? signal-modeling.example.com. (64) 07:25:11.719365 IP 34.218.119.91.13381 > 133.242.64.100.53: 4210% [1au] A? pairfiling.example.com. (59)
  8. 攻撃の記録 07:25:11.719035 IP 209.216.160.2.50051 > 133.242.64.100.53: 43104 A? meetmodeling.example.com. (50)

    07:25:11.719057 IP 205.171.30.238.44916 > 133.242.64.100.53: 64321% [1au] A? _.modeling.example.com. (71) 07:25:11.719069 IP 172.70.109.31.63292 > 133.242.64.100.53: 40380 [1au] A? osaExpe1-pLatINUM.exAmpLe.cOm. (66) 07:25:11.719071 IP 3.139.136.204.44597 > 133.242.64.100.53: 32383% [1au] A? webdirect.foster.example.com. (65) 07:25:11.719113 IP 18.188.77.103.42513 > 133.242.64.100.53: 14853 [1au] A? note-modeling.example.com. (62) 07:25:11.719132 IP 172.70.33.19.27971 > 133.242.64.100.53: 35379 [1au] A? indian-awarded.example.com. (63) 07:25:11.719147 IP 12.121.89.48.43564 > 133.242.64.100.53: 23891 A? matchfiling.example.com. (49) 07:25:11.719156 IP 74.125.181.130.64517 > 133.242.64.100.53: 25285% [1au] A? xmL.mODeLING.eXaMple.CoM. (61) 07:25:11.719166 IP 165.225.41.202.17203 > 133.242.64.100.53: 53044% [1au] A? qatawarded.example.com. (59) 07:25:11.719176 IP 96.114.53.67.20082 > 133.242.64.100.53: 41999 [1au] A? netherlands.filing.example.com. (67) 07:25:11.719190 IP 172.253.195.196.35276 > 133.242.64.100.53: 45639% [1au] A? tdd-modeling.example.com. (61) 07:25:11.719195 IP 172.253.217.12.40587 > 133.242.64.100.53: 62658% [1au] A? web.modeling.example.com. (61) 07:25:11.719197 IP 172.253.9.4.50295 > 133.242.64.100.53: 37961% [1au] A? co.awarded.example.com. (59) 07:25:11.719224 IP 172.71.29.39.30489 > 133.242.64.100.53: 2496 [1au] A? SfaaSobvioUs.ExamplE.Com. (61) 07:25:11.719235 IP 209.66.107.33.57264 > 133.242.64.100.53: 50511 [1au] A? hap.modeling.example.com. (61) 07:25:11.719275 IP 96.114.53.69.53157 > 133.242.64.100.53: 5679 [1au] A? gitcn-awarded.example.com. (62) 07:25:11.719312 IP 172.70.229.30.59530 > 133.242.64.100.53: 45890 [1au] A? ipafoster.example.com. (58) 07:25:11.719336 IP 172.217.46.78.59507 > 133.242.64.100.53: 60186% [1au] A? testcloud-modeling.example.com. (67) 07:25:11.719351 IP 69.47.193.166.52891 > 133.242.64.100.53: 238 [1au] A? bfmpassing.example.com. (59) 07:25:11.719353 IP 34.218.119.91.26001 > 133.242.64.100.53: 31511% [1au] A? signal-modeling.example.com. (64) 07:25:11.719365 IP 34.218.119.91.13381 > 133.242.64.100.53: 4210% [1au] A? pairfiling.example.com. (59) • ランダムな⽂字列、単語の組み合わせ • ⼤⽂字・⼩⽂字まざり(Google Public DNS仕様) • ラベル数が増えることもあり
  9. MariaDBのチューニング • Webサービスでよく⾏われる対策は有効ではない • innodb_buffer_pool_size: そもそもゾーンデータは⼩さい • innodb_ fl ush_log_at_trx_commit:

    更新はあまりない • innodb_ fl ush_method: 更新はあまり(ry • query_cache_type: 更新は少ないもののキャッシュヒットしない!
  10. dnsdistのフィルタリング addLocal("0.0.0.0:53", {reusePort=true}) newServer({address="127.0.0.1:1053",name="backend1"}) domain1 = newSuffixMatchNode() domain1:add(newDNSName("example.com.")) addAction( AndRule({

    SuffixMatchNodeRule(domain1), OrRule({QTypeRule(DNSQType.A),QTypeRule(DNSQType.AAAA)}), NotRule(QNameRule("example.com.")), NotRule(QNameRule("www.example.com.")), MaxQPSIPRule(3,16) }), DropAction() ) • ネイキッドドメインおよびwwwをホワ イトリストとし、それ以外のアクセス が3QPS以上あればDropする • 全てのゾーンに適⽤が不可能 • 設定の爆発🤯 • そもそもゾーンにワイルドカード 「*.example.com」があったら?
  11. PowerDNS バックエンドごとの性能評価 ΫΤϦඵ 0 40000 80000 120000 160000 ϥϕϧ਺ 

       51,892 69,942 98,716 159,720 30,042 41,071 69,694 158,095 4,617 6,895 16,124 159,167 .Z42- -.%# #*/%[POF fi MF 6倍 キャッシュヒットするので 変わらない
  12. ゾーンファイル $TTL 3600 @ SOA ns1 example.com. ( 1 ;

    serial 3600 ; refresh 900 ; retry 2419200 ; expire 300 ; ncache ) @ 259200 NS ns1 ns1 259200 A 192.0.2.1 @ 259200 NS ns2 ns2 259200 A 192.0.2.2 test 3600 A 192.0.2.1
  13. BIND zone file backend化にあたり • ゾーンファイルをサーバ間でコピーし、必要に応じてPowerDNSに再読み込み、 あるいは破棄させる必要 • レプリケーションのような⾼速な反映 •

    DNSの反映は15秒から1分以内がSLO • シンプルでスケールするアーキテクチャ • 将来的にはスケールアウトしたい • クラウドのマネージドサービスを使えれば..
  14. BIND zone file backend化の構成 API Maria DB 更新 API サーバ

    tar (2) アーカイブ取得 workerはIf-Modi fi ed-Sinceリクエストを送る serverはIf-Modi fi ed-Sinceリクエスト受け、 更新されるまでファイルの更新⽇付をpollingしつつ、レスポンスを遅延/blockingする リクエスト頻度を下げて負荷を削減し、更新を⾼速に反映 tar Server tar Worker PowerDNS ゾーン ファイル named .conf (1) ゾーンファイル群の 
 tarアーカイブを作成 
 別名ファイルでの作成とmvにより 
 アトミックな操作 (3) ゾーンファイルを展開 named.confを⽣成し、必要に応じて pdnsのリロード処理を⾏う DNSサーバ
  15. SAKURA internet ࣾձΛࢧ͑Δ 
 ύϒϦοΫΫϥ΢υɾେن໛ܭࢉࢿݯΠϯϑϥΛ 
 Ұॹʹ࡞Γ·ͤΜ͔ʁ ソフトウェア開発、 インフラ基盤から フロントエンドまで

    採⽤強化中! さくらインターネットではエン ジ ニア採⽤を強化しています さくらインターネットは新たなアイ デ アの創出に強い熱意と情熱を持って挑戦するお客様を は じ め、私たちとつな が りのあるす べ ての⼈たちのために、未来のある べ き姿を想い描きな が ら ―「やりたいこと」を「 で きる」に変える ― あらゆるア プ ローチを “インターネッ ト”を通 じ て提供します。 詳しくはWebサイトにて、カジュアル⾯談もやってます 👉 www.sakura.ad.jp/lp/22engineer/