
こんにちは、比嘉です!以前は自社開発企業で開発をしていましたが、現在は一時的にニートライフを満喫しています。
今日は、僕がAWS環境で構築したWEBアプリケーションがDoS攻撃を受け、サーバーダウンに至った際の障害対応について、その全貌を語りたいと思います。
特に、ALB(Application Load Balancer)の思わぬ落とし穴が原因だったという、衝撃の事実を皆さんに共有します。
同じような問題で悩んでいる方、これからAWS環境を構築する方は、ぜひ参考にしてください。
障害内容
ある日突然、ALB配下のアプリケーションサーバーがDoS攻撃によりダウンしてしまいました。
緊急事態発生です!確認すると、アクセスのあったIPはまさかのオレゴンリージョンから。
僕が管理しているアプリケーションサーバーは東京リージョンにあるため、なぜ遠く離れたオレゴンから大量のアクセスが来ているのか、この時点では全く見当がつきませんでした。
- ALB配下のアプリケーションサーバーがDos攻撃によりサーバーダウン。
- アクセスのあったIPの出どころはオレゴンリージョン
- 私の管理しているアプリケーションサーバーは東京リージョン。
調査内容
まずは手がかりを求めて、nginxやアプリケーションのアクセスログ、エラーログを徹底的に漁りました。
しかし、一向に決定的な手がかりが見つかりません。
そんな中、アクセスログを注意深く見ていたところ、ある異変に気づきました。
通常、僕たちが意図的に公開している EIP で抑えているグローバルIPとは全く関係ないIPアドレスから、アプリケーションサーバーにアクセスが到達しているのです。
そこで、すかさずdigコマンドを実行してみると、やはり先ほどのEIPとは無関係のIPアドレスが確認できました。
しかし、「なぜ、僕たちに関わりのないIPがアプリケーションへアクセスを流しているんだ?」
この疑問が頭から離れません。ルーティングテーブルや他のAWSリソースを調べても問題は見当たらず、「うーん、わからない…」という状況が3時間ほど続きました。
精神的に疲弊し始めたその時、ふとALB(Application Load Balancer)のルールに問題があるのではないかという考えがよぎりました。そして、確認してみると…ビンゴです!
ALBのデフォルトルールが、アプリケーションサーバーが所属するターゲットグループにトラフィックを転送する設定になっていたのです。
そして、Route 53のAレコードにALBのエイリアスを指定していることで、ALBに紐づくサブネットのグローバルIPでもアクセスが可能になっている仕様もここで理解しました。
つまり、ALBのグローバルIPに直接アクセスが入ると、意図せずアプリケーションサーバーへ流れてしまう状態になっていたのです。
この瞬間、「これで勝ち確定!」と心の中で叫びましたね。
対策
今回の障害を受けて、最も効果的な対策はALBのデフォルトルールを適切に設定することです。意図しないアクセスをアプリケーションサーバーに流さないために、以下のように設定することをおすすめします。
- デフォルトルールで固定レスポンスを返す:レスポンスコード: 503 Service Unavailable
- 本文: 許可されていないリクエストです
これにより、正規のドメインを通さないALBへの直接アクセスはアプリケーションサーバーに到達せず、DoS攻撃のリスクを大幅に低減できます。
もし、プロジェクトの制約上、固定レスポンスを返すのが難しい場合は、少なくともアプリケーションサーバーへリクエストを流さない設定にすることが重要です。例えば、別のダミーのターゲットグループを指定するか、アクセスを拒否するアクションを設定することも検討してください。
調査に使ったもの
nginx のアクセスログ
該当のリクエストがあった時間帯のアクセスを dig ることで出どころのIP等がわかります。
IPでどの辺りの地域かが判別できたり、content-type を元に BOT からのリクエストなのかがわかったりします。一旦、アクセスログを覗いてみましょう。
2025年に入って、生成AIからのリクエストが頻繁に来ている事を確認できているのでアクセスログを覗いてみると面白いですよ。
VPC フローログ
AWS のサービスです。VPC内の監視ができるのでかなり有用です。。使っていないプロジェクトは導入オススメします。
VPC、サブネット、またはネットワークインターフェイスのフローログを作成できます。サブネットまたは VPC のフローログを作成する場合、そのサブネットまたは VPC 内の各ネットワークインターフェイスが監視されます。
監視されるネットワークインターフェイスのフローログデータは、フローログレコードとして記録されます。これは、トラフィックフローについて説明するフィールドで構成されるログイベントです。詳細については、「フローログレコード」を参照してください
コマンド類
nslookup
DNS が正しく設定されているか、IPがEIPと同値かに使用した、
dig
ドメイン名に関する詳細な情報を取得するためのツールです。今回はDNSの設定が正しいか検証するために使用しました。
tail
アクセスログを掘り起こすのに使用しました。リアルタイム監視を後輩に見せたら尊敬されたのでドヤりたい人使ってください。(後輩が可愛いだけ
まとめ
誰でも簡単に作れるようになっているのがAWSの特徴ですが、結果として穴ができてしまうことが多々あるので皆さんの環境も見てみましょう。