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

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

kazeburo
June 21, 2023

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. 2023/06/21 Masahiro Nagano @kazeburo
    DBやめてみた話
    TechFeed Expert Night#21

    Webパフォーマンスチューニング最前線:後編

    View Slide

  2. Me
    • ⻑野雅広(ながのまさひろ)
    • Twitter/GitHub @kazeburo
    • さくらインターネット株式会社

    クラウド事業本部 SRE室 室⻑
    • mixi, livedoor (LINE), mercari を経て

    2021年から現職
    • ISUCON本では第五章「データベース」を担当

    View Slide

  3. ⼀般的なWebサービスの構成
    CDN LB
    App
    DB
    Queue
    Worker
    Storage
    Monitoring

    View Slide

  4. ⼀般的なWebサービスの構成
    CDN LB
    App
    DB
    Queue
    Worker
    Storage
    Monitoring
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ
    ໊લ


    ղܾ

    View Slide

  5. DNSは
    • インターネットにおける重要な基板技術の⼀つ
    • Webサービス/パフォーマンスにとっても重要な基盤技術
    • ロードバランス/スケールアウトの実現
    • フェイルオーバーによる可⽤性向上

    View Slide

  6. DNSと私
    • 前前々職
    • /etc/hostsファイルの管理から内部DNSに
    • 前々職
    • PowerDNS + MySQLを利⽤したダイナミックな内部DNS
    • MySQL Replicaのロードバランスなどを実現
    • 主要なサーバではローカルのDNSキャッシュサーバとして unbound を導⼊

    View Slide

  7. DNSと私
    • 前職
    • Consul DNSを利⽤した Service Discovery
    • データベース、ジョブキュー、プロキシー、内部APIあらゆるサービスに利⽤
    • Orchestrator と組み合わせて MySQL PrimaryのF/Oの実現
    • サーバ全台にローカルのDNSキャッシュサーバとしてunboundを利⽤
    • CoreDNSによる動的なクエリ書き換えによる、マルチクラウドの実現
    • 現職
    • 権威DNSサービスの開発・運⽤

    View Slide

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

    View Slide

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

    View Slide

  10. DNS⽔責め攻撃
    • 最近話題
    • ランダムサブドメイン攻撃(Pseudo-Random Subdomain Attack)とも
    • 攻撃対象のゾーンにランダムに⽣成したサブドメインを問い合わせて、DNS
    の機能停⽌、機能低下を狙う攻撃

    View Slide

  11. 攻撃の記録
    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)

    View Slide

  12. 攻撃の記録
    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仕様)
    • ラベル数が増えることもあり

    View Slide

  13. 攻撃の⽅法とアクセス元
    • 攻撃の⽅法
    • 攻撃者はオープンリゾルバ/Public DNSに対して、⼤量のランダムサブドメ
    インの問い合わせを発⽣させる
    • DNSキャッシュサーバにはキャッシュが存在しない。その結果、権威DNS
    サーバに⼤量の問い合わせが発し。DoSとなる
    • 攻撃アクセス元は
    • Google、Cloud
    fl
    areのIPアドレスからが多い (有名Public DNS)

    View Slide

  14. さくらのクラウドでの攻撃事例
    • 2022年8⽉にサービスに影響するものとして初めて発⽣
    • 現在に⾄るまで断続的に攻撃は継続
    • 800万クエリ/分が数時間〜3⽇間継続ことも
    • (Route53のコストだと100万円になる
    • 最⼤4000万クエリ/分 (通常5000クエリ/分)

    View Slide

  15. DNSアプライアンスが影響を受けた理由
    • ⼤量のクエリ
    • DNSサーバのバックエンドとしてMySQLを利⽤していた
    • PowerDNS Authoritative Server のバックエンドとしてRDBMSを利⽤
    • データベースを使うことでお客様のゾーンを管理しやすい
    • 反⾯、負荷が上がりやすい

    View Slide

  16. DNSアプライアンスの構成(DBあり)
    PowerDNS
    API
    MariaDB
    MariaDB
    レプリケーション
    更新
    参照
    クエリ−
    dnsX サーバ
    API サーバ
    PowerDNS MariaDB
    参照
    クエリ−
    dnsY サーバ

    View Slide

  17. DNSアプライアンスが影響を受けた理由
    • 通常の名前解決ではDNSサーバ側に備わるキャッシュが有効に働き、DBへの
    アクセス、負荷は⼤きくない
    • ⽔責め攻撃ではキャッシュは役に⽴たない。基本ヒットしない😇
    • 都度SQLが発⾏される
    • DNSでは最⻑マッチのため、クエリ中に「.」ドットが増えるとその分クエ
    リが増える。最悪N+1が起きる(なんだっry

    View Slide

  18. ⽔責め攻撃への対策
    • スケールアップ☝
    • クラウド上のインスタンスなので停⽌・起動でスケールアップが可能
    • PowerDNSのアップデートおよびチューニング💉
    • アップデートやコネクション数のチューニングを実施
    • MariaDBのチューニング
    • dnsdistによるフィルタリング
    • 👉 次のページ

    View Slide

  19. MariaDBのチューニング
    • Webサービスでよく⾏われる対策は有効ではない
    • innodb_buffer_pool_size: そもそもゾーンデータは⼩さい
    • innodb_
    fl
    ush_log_at_trx_commit: 更新はあまりない
    • innodb_
    fl
    ush_method: 更新はあまり(ry
    • query_cache_type: 更新は少ないもののキャッシュヒットしない!

    View Slide

  20. dnsdistによる対策
    • dnsdist(dnsdist.org) はPowerDNSの開発元がOSSとしてリリースしている
    DNSのプロキシーソフトウェア。DNSのロードバランシング、リクエストの
    フィルタ、RateLimitの機能を備わる
    PowerDNS


    port:53
    クエリ−
    dnsX サーバ
    PowerDNS


    port:1053
    クエリ−
    dnsX サーバ
    dnsdist


    port:53
    フィルタ/ QPS制限
    変更前 変更後

    View Slide

  21. 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」があったら?

    View Slide

  22. 💪
    根本のパフォーマンスを強化する

    View Slide

  23. RDBMSをやめる

    View Slide

  24. 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倍
    キャッシュヒットするので
    変わらない

    View Slide

  25. BIND zone file backend?
    • 昔から利⽤されるBINDの「ゾーンファイル」を読み込み、オンメモリ処理す
    るバックエンド

    View Slide

  26. ゾーンファイル
    $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

    View Slide

  27. BIND zone file backend化にあたり
    • ゾーンファイルをサーバ間でコピーし、必要に応じてPowerDNSに再読み込み、
    あるいは破棄させる必要
    • レプリケーションのような⾼速な反映
    • DNSの反映は15秒から1分以内がSLO
    • シンプルでスケールするアーキテクチャ
    • 将来的にはスケールアウトしたい
    • クラウドのマネージドサービスを使えれば..

    View Slide

  28. 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サーバ

    View Slide

  29. まとめ
    • DNSはインターネットでもWebのシステムでも重要な基盤
    • DNSをうまく使うことでできることは多い
    • DNS⽔責め攻撃は対策が難しい
    • 適材適所でRDBMS/DBをやめる「選択」
    • アトミックな更新、レプリケーションなどRDBMSがやっていてくれたこと
    を他ミドルウェアで実現、⾃分で実装する必要

    View Slide

  30. SAKURA internet
    ࣾձΛࢧ͑Δ

    ύϒϦοΫΫϥ΢υɾେن໛ܭࢉࢿݯΠϯϑϥΛ

    Ұॹʹ࡞Γ·ͤΜ͔ʁ
    ソフトウェア開発、
    インフラ基盤から
    フロントエンドまで
    採⽤強化中!
    さくらインターネットではエン
    ジ
    ニア採⽤を強化しています
    さくらインターネットは新たなアイ
    デ
    アの創出に強い熱意と情熱を持って挑戦するお客様を

    じ
    め、私たちとつな
    が
    りのあるす
    べ
    ての⼈たちのために、未来のある
    べ
    き姿を想い描きな
    が
    ら ―「やりたいこと」を「
    で
    きる」に変える ― あらゆるア
    プ
    ローチを “インターネッ
    ト”を通
    じ
    て提供します。
    詳しくはWebサイトにて、カジュアル⾯談もやってます 👉 www.sakura.ad.jp/lp/22engineer/

    View Slide