はじめに
Google Cloud Platform環境で公開するWebサイトに Croud Armorを利用して、クロスサイトスクリプティング(XSS)、SQLインジェクションのセキュリティ対策(WAF)を導入しました。
Cloud ArmorでIPアクセス制限する例は、たくさん見ますが、XSS、SQLインジェクション対策の記事はGCP公式サイト以外では見ないため、導入までの手順を記録として投稿します。
この投稿で扱う内容
- Croud Armor導入により、WebサイトにWAFを導入する。
- WAF機能として、XSS、SQLインジェクションのセキュリティ対策ルールを適用する。
本記事は、XSS、SQLインジェクション以外のCroud Armorの機能は扱わない。
(IPルールでのアクセス制限、XSS、SQLインジェクション以外のセキュリティ対策等)
記載手順は、作業後に画面キャプチャ、手順をメモっているため、簡略記載です。
Cloud Armorとは
インターネットに接続されたサービスを DDoS 攻撃から防御する。
導入の前提事項
GCP環境で、WEBサイトをロードバランサー経由で公開していること。
Cloud Armorの設定呼び出す
サービスのサイドメニューからCloud Armorを呼び出す。
ポリシーを登録する
ポリシー名を入力する。
デフォルトのルールアクションを拒否にする。
拒否ステータスを403にする。
ブロック条件のルール設定
詳細モードを選択する。
一致の欄にルールの条件(XSS、SQLインジェクション)を、OR条件で入力する。
evaluatePreconfiguredExpr('sqli-canary') || evaluatePreconfiguredExpr('xss-canary’)
アクションを拒否にする。
優先度は、ルールが最優先される様に最小の直を入力する。
evaluatePreconfiguredExprで組み込む、sqli-canary、xss-canaryは、ブロックするポリシールールが多数、組み込まれています。
ポリシールールは、第2引数以降(複数)で指定することで、除外する(ブロックを弱める)ことが可能です。
今後、この辺りのベスト事例が、出揃ってくる事を期待してます。
例
evaluatePreconfiguredExpr('sqli-canary', ['owasp-crs-v030001-id942421-sqli',
'owasp-crs-v030001-id942432-sqli']
)
許可条件のルール設定
基本モードを選択する。
一致の欄に * を入力する。
アクションを許可にする。
優先度は、ブロックするルールより、優先度が低くなる様に入力する。
ロードバランサー割当
登録完了

Cloud ArmorによるWAF導入検証
XSSのブロック検証
Webサイトの検索入力欄に、Javascriptコードを入力し、検索(Post)すると403エラー画面が表示され、ブロックされることを確認。



SQLインジェクションのブロック検証
Webサイトの検索入力欄に、SQLインジェクションのコードを入力し、検索(Post)すると403エラー画面が表示され、ブロックされることを確認。

