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

雑な攻撃からELBを守る一工夫 +おまけ / Know-how to protect servers from miscellaneous attacks

8e8410eb785755ae2cb485f85dbab6e8?s=47 hiroga
June 26, 2022

雑な攻撃からELBを守る一工夫 +おまけ / Know-how to protect servers from miscellaneous attacks

8e8410eb785755ae2cb485f85dbab6e8?s=128

hiroga

June 26, 2022
Tweet

More Decks by hiroga

Other Decks in Technology

Transcript

  1. 雑な攻撃からサーバーを守る一工夫
 +おまけ
 2022-06-26
 JAWS-UG 福岡 #12:9度目もちょっと濃い目にAWSの話をしてみよう 
 #jawsugfuk #jawsug
 Hiroaki

    Ogasawara @xhiroga

  2. 目次
 • はじめに
 • 攻撃
 • 防御
 • まとめ
 •

    ???
 • 今度こそおわり
 • 参考

  3. 免責
 • 発表者はセキュリティの専門家ではありません。
 ◦ 現在学習中の内容を発表しています。
 ◦ 誤りが含まれる可能性があります。
 はじめに


  4. 自己紹介
 はじめに


  5. 使ってね!
 はじめに


  6. None
  7. 攻撃


  8. None
  9. ごく普通のアーキテクチャです
 攻撃
 ALB ECS DB リスナーは HTTPSのみ 有効 React (SPA)

  10. (数年前)CTO「WAF導入したい〜!」
 攻撃
 現 CTO WAF導入したい〜! 
 コストかかりません? 
 でも攻撃されてますよ 


    マジすか?

  11. マジ。
 攻撃来てました。
 URL未公開なのに。
 (攻撃元IPアドレスも乗っ取り被害者の 可能性があるため隠してます) 
 攻撃
 全部ウチのサーバーに 
 存在しないパス


  12. 思ってたのと違った
 思ってた攻撃
 • APIエンドポイントを調べた上での標的型攻撃 
 • アプリケーションが用いるパスに対して、SQL インジェクションなどを試みる 
 実際の攻撃


    • AWSが持っているIPアドレスを狙った無差別型 攻撃(たぶん)
 • .envの誤コミットや.gitの誤デプロイなど、広くあ りそうな間違いを狙う
 • Binanceなどの大手暗号資産取引所への攻撃 の余波らしいものもある
 攻撃

  13. 大手暗号資産取引所への攻撃の余波 
 GET /bapi/fiat/v1/public/fiatpayment/menu?currency=CNY Accept: application/json, text/plain, */* Host: www.binance.com

    User-Agent: BNC/2.37.0 (build 10; iOS 14.8.0) Alamofire/4.9.0 Mclient-X-Tag: pch5D9lsORjgObhyjdSK timeout: 3000 Connection: close
 実際の攻撃
 攻撃
 無差別攻撃
 GET /.env Host: ***.***.***.*** User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Accept: */* Accept-Encoding: gzip
 ※あくまで私の案件で観測された攻撃を分類しただけで、汎用性や網羅性は全く保証できません。 

  14. 影響
 • 存在しないパスにアクセスされるので、4XXエラーが大量に出る
 ◦ モニタリングの4XXが使い物にならない 
 • 万が一存在する脆弱性を突かれたら不安
 攻撃


  15. 推測
 手法
 • AWSの持っているIPアドレスの範囲を自動で 攻撃?
 • 過去に攻撃対象だったIPアドレスを、私達が引 き当ててしまった?
 • 世界中のIPv4の範囲を自動で攻撃?

    
 • DNSサーバーへのブルートフォース攻撃が成 功し、ドメインを取得した? 
 攻撃者がIPアドレスでアクセスしていると推測した場 合、TLS証明書とはドメインが違うのを無視しているこ とになる。まあ攻撃者は気にしないか... 
 目的
 • 侵入可能なサーバーの探索? 
 • セキュリティの勉強?
 攻撃

  16. 防御


  17. Hostヘッダーで防ぐ
 攻撃
 無差別攻撃(再掲)
 GET /.env Host: ***.***.***.*** User-Agent: Mozilla/5.0 (Windows

    NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Accept: */* Accept-Encoding: gzip
 大手暗号資産取引所への攻撃の余波(再掲) 
 GET /bapi/fiat/v1/public/fiatpayment/menu?currency=CNY Accept: application/json, text/plain, */* Host: www.binance.com User-Agent: BNC/2.37.0 (build 10; iOS 14.8.0) Alamofire/4.9.0 Mclient-X-Tag: pch5D9lsORjgObhyjdSK timeout: 3000 Connection: close
 IPアドレス総当りで攻撃しているせいか *1、Host ヘッダーが的外れ
  18. ※あくまで私の案件で効果が高かっただけで、違う攻撃には効果が薄い可能性があります。 


  19. 6/22 12:16ごろ適用 → 観測範囲では攻撃を 100%ブロック ※6/22以降のAllowedはおそらく全て正常なリクエスト

  20. それ以外の案
 • ALBのHost-based Routingで防ぐ
 ◦ 指定したホスト名以外は403を返す
 • CDNで防ぐ
 ※私達がWAFを用いたのは、単にすでにWAFを使っていたから
 防御


    参考: ALBへのアクセスを特定のHostヘッダのみに限定する方法の一例 - Developers.io 

  21. 試したけど上手く行かなかった案
 防御
 マネジメントルール 有効だが取りこぼしも ある

  22. まとめ


  23. 意外と攻撃を受けている
 • 見直してみましょう。
 • 繰り返しますが、発表者は専門家ではありません。
 ◦ 学習中の内容や誤っている可能性のある内容を含 みます。
 • 皆さんの事例もこの後教えてください!


    まとめ

  24. ちょっと待った!


  25. Hostヘッダーで防ぐ
 ちょっと待った!
 無差別攻撃(再掲)
 GET /.env Host: ***.***.***.*** User-Agent: Mozilla/5.0 (Windows

    NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Accept: */* Accept-Encoding: gzip
 大手暗号資産取引所への攻撃の余波(再掲) 
 GET /bapi/fiat/v1/public/fiatpayment/menu?currency=CNY Accept: application/json, text/plain, */* Host: www.binance.com User-Agent: BNC/2.37.0 (build 10; iOS 14.8.0) Alamofire/4.9.0 Mclient-X-Tag: pch5D9lsORjgObhyjdSK timeout: 3000 Connection: close
 IPアドレス総当りで攻撃しているせいか *1、Host ヘッダーが的外れ いやいや、ドメインってIPアドレスか ら逆引きできるのでは? 攻撃者、なぜやらない?
  26. IPアドレスからドメイン名を引く方法(2案)
 1. PTRレコードを見る
 2. TLSでサーバー証明書を取得し、証明書内のドメインを読む
 2. を実験します💡
 ちょっと待った!


  27. 実験
 import ssl from os import environ import OpenSSL host_ip

    = “8.8.8.8” cert = ssl.get_server_certificate((host_ip, 443)) x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert) components = x509.get_subject().get_components() hostname_byte = components[0][1] print(hostname_byte.decode('UTF-8'))
 ちょっと待った!

  28. 結果: できる!
 ちょっと待った!
 dns.google

  29. • そもそもが「雑な攻撃」なので、攻撃者もいちいち気にしていない?
 • 同一IPで複数Hostを提供している場合にややこしい?
 • 私達のサーバーを狙った攻撃ではない?
 • etc…
 → 結論、攻撃者の考えはよくわからない...


    なぜ使わない...?
 ちょっと待った!

  30. 補足
 セキュリティエンジニアの友人に伺いました。 
 IPアドレスを基にTLS証明書を取得し、記載されているドメインと突き合わせる手法は、ホワイトハッカーが脅威 ハンティングの一環でフィッシングサイトを検出するために利用しているとのこと。 
 ちょっと待った!


  31. 今度こそおわり


  32. 今度こそおわり
 • 雑な攻撃は一工夫で防げる
 • セキュリティを考え出すと、本質的な理解が必要だなぁ と気づく
 • 参加者の皆様、セキュリティの話しましょう!!!
 ちょっと待った!


  33. 参考


  34. • [AWS]AWSのIP帯域を狙った攻撃の実態と対策 
 • ALBへのアクセスを特定のHostヘッダのみに限定する方法の一例 
 • その他、ご助言をくださった皆様 
 参考