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

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

hiroga
June 26, 2022

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

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


    View full-size slide

  2. 目次

    ● はじめに

    ● 攻撃

    ● 防御

    ● まとめ

    ● ???

    ● 今度こそおわり

    ● 参考


    View full-size slide

  3. 免責

    ● 発表者はセキュリティの専門家ではありません。

    ○ 現在学習中の内容を発表しています。

    ○ 誤りが含まれる可能性があります。

    はじめに


    View full-size slide

  4. 自己紹介

    はじめに


    View full-size slide

  5. 使ってね!

    はじめに


    View full-size slide

  6. ごく普通のアーキテクチャです

    攻撃

    ALB ECS DB
    リスナーは
    HTTPSのみ
    有効
    React (SPA)

    View full-size slide

  7. (数年前)CTO「WAF導入したい〜!」

    攻撃


    CTO
    WAF導入したい〜! 

    コストかかりません? 

    でも攻撃されてますよ 

    マジすか?


    View full-size slide

  8. マジ。

    攻撃来てました。

    URL未公開なのに。

    (攻撃元IPアドレスも乗っ取り被害者の
    可能性があるため隠してます) 

    攻撃

    全部ウチのサーバーに 

    存在しないパス


    View full-size slide

  9. 思ってたのと違った

    思ってた攻撃

    ● APIエンドポイントを調べた上での標的型攻撃

    ● アプリケーションが用いるパスに対して、SQL
    インジェクションなどを試みる

    実際の攻撃

    ● AWSが持っているIPアドレスを狙った無差別型
    攻撃(たぶん)

    ● .envの誤コミットや.gitの誤デプロイなど、広くあ
    りそうな間違いを狙う

    ● Binanceなどの大手暗号資産取引所への攻撃
    の余波らしいものもある

    攻撃


    View full-size slide

  10. 大手暗号資産取引所への攻撃の余波 

    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

    ※あくまで私の案件で観測された攻撃を分類しただけで、汎用性や網羅性は全く保証できません。 


    View full-size slide

  11. 影響

    ● 存在しないパスにアクセスされるので、4XXエラーが大量に出る

    ○ モニタリングの4XXが使い物にならない

    ● 万が一存在する脆弱性を突かれたら不安

    攻撃


    View full-size slide

  12. 推測

    手法

    ● AWSの持っているIPアドレスの範囲を自動で
    攻撃?

    ● 過去に攻撃対象だったIPアドレスを、私達が引
    き当ててしまった?

    ● 世界中のIPv4の範囲を自動で攻撃?

    ● DNSサーバーへのブルートフォース攻撃が成
    功し、ドメインを取得した?

    攻撃者がIPアドレスでアクセスしていると推測した場
    合、TLS証明書とはドメインが違うのを無視しているこ
    とになる。まあ攻撃者は気にしないか...

    目的

    ● 侵入可能なサーバーの探索?

    ● セキュリティの勉強?

    攻撃


    View full-size slide

  13. 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
    ヘッダーが的外れ

    View full-size slide

  14. ※あくまで私の案件で効果が高かっただけで、違う攻撃には効果が薄い可能性があります。 


    View full-size slide

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

    View full-size slide

  16. それ以外の案

    ● ALBのHost-based Routingで防ぐ

    ○ 指定したホスト名以外は403を返す

    ● CDNで防ぐ

    ※私達がWAFを用いたのは、単にすでにWAFを使っていたから

    防御

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


    View full-size slide

  17. 試したけど上手く行かなかった案

    防御

    マネジメントルール
    有効だが取りこぼしも
    ある

    View full-size slide

  18. まとめ


    View full-size slide

  19. 意外と攻撃を受けている

    ● 見直してみましょう。

    ● 繰り返しますが、発表者は専門家ではありません。

    ○ 学習中の内容や誤っている可能性のある内容を含
    みます。

    ● 皆さんの事例もこの後教えてください!

    まとめ


    View full-size slide

  20. ちょっと待った!


    View full-size slide

  21. 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アドレスか
    ら逆引きできるのでは?
    攻撃者、なぜやらない?

    View full-size slide

  22. IPアドレスからドメイン名を引く方法(2案)

    1. PTRレコードを見る

    2. TLSでサーバー証明書を取得し、証明書内のドメインを読む

    2. を実験します💡

    ちょっと待った!


    View full-size slide

  23. 実験

    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'))

    ちょっと待った!


    View full-size slide

  24. 結果: できる!

    ちょっと待った!

    dns.google

    View full-size slide

  25. ● そもそもが「雑な攻撃」なので、攻撃者もいちいち気にしていない?

    ● 同一IPで複数Hostを提供している場合にややこしい?

    ● 私達のサーバーを狙った攻撃ではない?

    ● etc…

    → 結論、攻撃者の考えはよくわからない...

    なぜ使わない...?

    ちょっと待った!


    View full-size slide

  26. 補足

    セキュリティエンジニアの友人に伺いました。

    IPアドレスを基にTLS証明書を取得し、記載されているドメインと突き合わせる手法は、ホワイトハッカーが脅威
    ハンティングの一環でフィッシングサイトを検出するために利用しているとのこと。

    ちょっと待った!


    View full-size slide

  27. 今度こそおわり


    View full-size slide

  28. 今度こそおわり

    ● 雑な攻撃は一工夫で防げる

    ● セキュリティを考え出すと、本質的な理解が必要だなぁ
    と気づく

    ● 参加者の皆様、セキュリティの話しましょう!!!

    ちょっと待った!


    View full-size slide

  29. ● [AWS]AWSのIP帯域を狙った攻撃の実態と対策

    ● ALBへのアクセスを特定のHostヘッダのみに限定する方法の一例

    ● その他、ご助言をくださった皆様

    参考


    View full-size slide