[レポート] Amazon CloudFront、AWS WAF、およびLambda@Edgeを使ってスパマーを排除する #CMY303 #reinvent

2019.12.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本記事は、セッション「CMY303 - Using Amazon CloudFront, AWS WAF, and Lambda@Edge to keep spammers out」のレポートです

セッション概要

In this session, we look at the timeline, analysis, and solution implemented for a sudden attack by spammers. Suddenly, the number of newly registered users in our system spiked. We could see that these new users were likely spammers. It was a more sophisticated attack than earlier, as traffic originated from everywhere; captchas and email verifications were bypassed. We already had some countermeasures in place, including a manual process for approval. We needed a quick and cost-effective solution. By using Amazon CloudFront, AWS WAF, Lambda@Edge, and some smarts, we permanently stopped 99% of the spammers within an hour.

登壇者

Anders Bjoernestad - Senior consultant, Webstep as

内容

とある架空のサイトを題材としてに、このような流れでの説明がされたセッションでした。

  1. 通常運用中
  2. 何かが起きた(通常運用から外れて、対策が必要になる)
  3. CloudFrontで地域制限をしよう
  4. AWS WAFで攻撃をブロックしよう
  5. Lambda@Edgeで攻撃をブロックしよう
  6. 通常運用に戻る

通常運用中

  • 現在の運用状況
    • 私達の組織とシステム
      • 非営利/ボランティア組織
      • コンテンツとディスカッションのページがある
      • ユーザがコンテンツを追加できる
      • ユーザがそのコンテンツにコメントを追加できる
    • ユーザ認証のプロセス
      • Captchaや質問による自己登録式
      • Eメール認証
    • 技術のチョイス
      • レガシーシステム
      • 市販品を利用
      • 何年か前にAWSへ移行した
      • Amazon S3を利用
        • エラーページ、その他静的なページの配置に利用
      • Amazon EC2を利用
        • 一般的な使い方
      • Amazon CloudFront
        • エラーをS3(のエラーページ)へリダイレクト
        • ほとんどのトラフィックはEC2へ転送される
        • キャッシュが有効になっている

何かが起きた(通常運用から外れて、対策が必要になる)

ユーザ登録の急増が発生

  • ユーザ登録が1/Dayから1/分へ急増する
  • ユーザ名とメールアドレスが「本物」に見えない・・・
    • パターン化されたようなユーザ情報がある
    • 「評判が悪い」リストに乗っているようなユーザ情報がある
  • ユーザ認証ページではオリジンのIP .ru .uaという表示になっている
  • 質問からCaptchaに切り替わっている上にCapthcaが表示されていない

完全に怪しい。

CloudFrontで地域制限をしよう

  • Amazon CloudFrontの地域制限設定をする
    • 地域制限をすべてのdistributionに対して適用する
      • 今回は .ruや .ua(ロシアとウクライナ)から異常なアクセスが合ったのでその2つをブラックリストに設定
    • 地域制限機能について
      • Black- or whitelistの選択して設定できる
      • ブロックされたユーザには403エラーが返却される
      • サードパーティ製の地域IPデータベースがベースに使われている
  • この設定完了時点では50%ほどのアクセスが減りました。しかしまだまだノイジーです。次にAWS WAFの設定を行っていきます

AWS WAFで攻撃をブロックしよう

  • AWS WAFで次の設定を行います
    • SQLインジェクションやXSS対策
    • HTTPフラッド攻撃対策
    • IP reputation list等を利用したIP制限を行い、既知の不正IPアドレスからの攻撃を対策
    • 悪意を持ったBotへの対策

Lambda@Edgeで攻撃をブロックしよう

さらに、既知の不正IPアドレスレンジのアクセスに対しては、登録画面にアクセスがあった場合に、ダミーのレスポンスを返すようにします

  • Lambda@Edgeで次の機能を実装して、register.php(登録画面)のViewer requestにイベントトリガーをセットする
    • IPとメアドをチェック
    • 不正な宛先であればダミーのレスポンスを返す
  • Lambda@Edgeに関する補足説明
    • Lambda@EdgeCloudFrontの機能の一つ
    • エッジで実行される
    • HTTPリクエストやレスポンス、またそれらのボディを操作する
    • Node.jsPythonがサポートされている
    • イベントトリガーを使ってハンドラを用意できる(前述のViewer requestは図のようにエンドユーザからのリクエストに対して起動するものです)

通常運用に戻る

  • しばらくすると、アクセス数が戻りました。
  • そのため、CloudFrontの地域制限をオフに戻しておきます
  • 最終的にこのような構成となりました

所感

今回セッションで紹介があったAWS WAFやLambda@Edgeを使う方法は比較的モダンな方法もあったと思います。

既にこういったAWS WAF等を利用した対応をしている方もいらっしゃると思いますが、攻撃者は手段をアップデートしてまた行動する可能性が低くないので、常によりよい機能がないか、情報のアップデートを続けていくことが必要かと思いました。