こんにちは。運用開発グループの高橋です。
本記事では、弊社Webサービスに対して定期的に発生するバーストアクセスを簡易的に分析してみた事例をご紹介します。
構成
簡易的な構成図ですが、このようになっています。
ログ分析に関連する部分のみ軽く触れると、フロントエンドに Google Cloud Load Balancing (GCLB) を配置しており、GCLB のログは Cloud Logging を経由して BigQuery に蓄積しています。
分析してみた
分析対象のデータソースは GCLB のメトリクスとログとなり、分析は以下の3ステップで進めました。
- バースト発生時間帯の確認 (Cloud Monitoring)
- バースト発生時間帯における上位アクセス元IPアドレスの特定 (BigQuery)
- 上位アクセス元IPアドレスの調査
バースト発生時間帯の確認
Cloud Monitoring の Metrics Explorer を使って、バーストアクセスの発生状況を確認していきます。
指標を選択する画面から Google Cloud HTTP/S Load Balancing Rule > https > Request count を選択し、リクエスト数の推移からバーストアクセスの発生時間帯を確認します。図は GCLB へのリクエスト数の推移をアクセス元の国情報をもとにグルーピングしたグラフとなります。
このグラフから、USからのバーストアクセスが16:30-16:40の間で発生していることがわかりました。
バースト発生時間帯における上位アクセス元IPアドレスの特定
BigQuery でクエリを発行し、バーストアクセスの発生時間帯において、どのようなIPアドレスから多量のリクエストが来ているのかを確認していきます。前提として、GCLB のデータを格納しているテーブルは日単位のパーティション分割テーブルとしており、クエリも対象日のパーティションに対して発行しています。
画像ではマスキングしておりますが、クエリの実行結果からバースト発生時間帯におけるアクセス元IPアドレスの上位を特定できました。
# {}内は実行環境に合わせて要変更
SELECT httpRequest.remoteIp,count(httpRequest.remoteIp) as CNT,
FROM `{テーブルID}`
WHERE DATE(timestamp) = "{対象日付}" AND FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', timestamp, 'Asia/Tokyo') between '{バースト開始時刻}' and '{バースト終了時刻}'
Group by httpRequest.remoteIp
ORDER BY CNT DESC
上位アクセス元IPアドレスの調査
バースト発生時間帯の上位アクセス元IPアドレスについて調査していきます。
今回はGoogle傘下で運営されている VirusTotal という無料のセキュリティツールを利用しました。VirusTotal ではファイルやウェブサイトのマルウェア検査を行うことができ、今回はIPアドレスをもとに検査を行ってみました。
上位アクセス元IPアドレスを検査してみた結果となります。複数のセキュリティベンダーが悪意があるという判定をしており、攻撃者からアクセスを受けている可能性があることがわかりました。
今後のアクセス傾向も見ながら、こうした情報をもとにIPアドレス制限などの対策を行っていきたいと考えています。