5. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
構成について
5
6. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
GCPが提供する、ウェブ攻撃からサイトを保護する機能
・IPアドレスごとのアクセス制限
・UserAgentルールによるアクセス制限
・各種WAFルールに基づいたアクセス制限
など様々な機能が備わり、
新機能追加含め定期的にアップデートされ続けている。
<引用>GCP公式のCloudArmor説明ページ
https://cloud.google.com/armor
6
7. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
システム構成としてはLB(LoadBalancing)に紐付ける形で運用する。
条件でNGだった場合
7
8. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
LB(LoadBalancing)の紐付け先がCloudRunやGKEでも可。
8
9. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
つまりCloudArmorは
アプリケーションに到達する前に
ロードバランサーへのアクセス時点で
防御する仕組み
9
10. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
CloudArmorはひとつのターゲット
(アプリ)に対しての防御ルールを
『ポリシー』という単位で作成する。
3の「ターゲットへのポリシーの適応」で
紐付けるロードバランサーを選択する。
最も重要なのでは2の「ルールの追加」で
ここの設定をどのようにするかで、
CloudArmorの動作が変わってくる。
10
11. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
料金はかなり安価です。
1サービスに対し、ルールを 20件設定、
月に400万アクセス来ると過程した場合、
月額$28(約3220円)程度。
ただし、アプリケーションに含まれる
CSSや画像ファイルなども含まれるため、
少しでも削減したい場合は別ドメインの CDNに
切り出すなどの対応が必要。
HTTPリクエスト $0.75/1,000,000件
ポリシー数 1件あたり月額$5
ルール数 1件あたり月額$1
11
12. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
ルールの基本事項
12
13. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
『ルール』は後から追加・編集・削除が可能。
上の図で設定されているルールは「指定した IPアドレス」に対してアクセスを「拒否」する。
IPアドレスは1ルールにつき最大10個指定ができる。
※設定ルールの一覧画面
13
14. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
ルールは優先度に従って並んでいますが、
同じIPの指定がされたルールがこのように並んでいる場合、
「203.0.113.0/24」のIPからアクセスするとどうなるでしょうか。
14
15. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
答えは「拒否(403)でアクセスが制限される」です。
優先度の高い順に判定され、条件に一致した場合はそのアクションが実行されます。
よって、以下の場合は逆に「許可」されます。
15
16. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
CloudArmorとは
『ルール』は『プレビュー』としてアクションはせずに、
判定結果だけをログとして残すことも出来ます。
上の図で設定されている場合だと、「拒否( 403)」の判定がアクセスログに記録されつつ、
「許可」のアクションが実行されます。
16
17. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
● CloudArmorはロードバランサのアクセス時点で防御を行う仕組み
● アプリケーションはVMグループだけではなく
CloudRunやGKEも利用できる
● ルールは優先度の高い順で評価し、
アクションが決まればそれ以降は評価されない
CloudArmorとは まとめ
17
18. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限
UA制限 &
条件組み合わせによる制限
18
19. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(UA制限)
『ルール』は大きく『基本モード』と『詳細モード』のふた
つがあります。
IP制限だけであれば基本モードですが、詳細モードを
使いこなすことが、CloudArmorを利用するにあたっ
て重要になります。
詳細モードではテキストエリアの記述欄が表示され、
そこに構文を設定します。
※ルール編集の条件設定部分
19
20. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(UA制限)
User-Agentによる識別を行う構文です。
上記の例ではInternet Explorerでのアクセスを検知します。
Internet Explorerは基本的に「MSIE」の文字列が含まれるため、
この構文でアクセス検知が可能です。
request.headers['user-agent'].contains('MSIE')
20
21. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(UA制限)
しかし、この場合だと Internet Explorer 11のケースがカバーできません。
Windows10のIE11は「MSIE」という文字列がなく、
「Trident」という文字列で判別できるようになっています。
どちらかの条件で検知するにはどうすればよいでしょうか。
request.headers['user-agent'].contains('MSIE')
21
22. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(条件組み合わせによる制限)
詳細モードでは「 || 」や「 && 」の論理演算子が使えます。
この場合はUserAgentに『MSIE』または『Trident』の文字が含まれるとき
request.headers['user-agent'].contains('MSIE') ||
request.headers['user-agent'].contains('Trident')
request.headers['user-agent'].contains('MSIE') &&
inIpRange(origin.ip, '203.0.113.0/24')
この場合はUserAgentに『MSIE』が含まれ、かつIPが『203.0.113.0/24』のとき
となります。
22
23. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(条件組み合わせによる制限)
論理演算子は様々な種類があります。
x == ”hoge” 文字列hogeと一致する
x != ”hoge” 文字列hogeと一致しない
x && y x かつ y がtrueである
x || y x または y がtrueである
!x x がfalseである
x.contains(‘hoge’) 文字列xに部分文字列hogeが含まれている
inIpRange(x, y) IPアドレスxがIPアドレス範囲yに含まれている
これ以外にも数種、論理演算が存在します
23
24. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(様々な構文による制限)
『origin』と『request』の変数を使うことで、様々なリクエスト元の情報を取得し、
判別に利用することが出来ます。
origin.region_code == ‘JP’ &&
request.path.contains('/test/') &&
request.method == POST
(例)送信元IPが日本かつ、URLのpathに「/test/」が含まれるPOSTメソッド
request.method HTTPリクエストメソッド
request.path HTTP URLのパス
request.query 「name1=hoge」などのURLクエリ
request.headers リクエストのヘッダー情報
origin.ip 送信元IP
origin.region_code 送信元IPの国コード
origin.asn 送信元IPアドレスの自律システム番号
24
25. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限
事前構成されたWAFルール &
最近追加されたルールについて
25
26. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(事前構成されたWAFルール)
SQLインジェクションなどの攻撃に対しての WAFルールの設定も可能です。
evaluatePreconfiguredExpr('sqli-stable', [])
構文はこのようになります。
『evaluatePreconfiguredExpr』というメソッドを使うことで CloudArmorが
事前に用意している WAFルールを適用することができます。
ひとつめの引数は対象となるルールを、
ふたつ目の引数はルールの中でも限定的に除外したい詳細ルールを設定できます。
26
27. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(事前構成されたWAFルール)
それぞれのWAFルールには、いくつかの詳細ルールがあります。
除外したい詳細ルールが設定できるのは、
正しい動作でも対象のプロジェクトで検知されてしまう場合に対応するためです。
evaluatePreconfiguredExpr('sqli-stable', [
'owasp-crs-v030001-id942421-sqli',
'owasp-crs-v030001-id942432-sqli'
])
この場合はSQL文字がcookieやパラメータから検出され、
特殊文字数の検知が一定以上確認された場合の詳細ルールを除外しています。
「SELECT」や「FROM」などよく使われやすかったり、暗号鍵で含まれることもあるので
適応しづらいルールです。
27
28. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(事前構成されたWAFルール)
事前に正常なアクセスに詳細ルールの検知が含まれているかを知りたい場合は
プレビューモードを使います。
28
29. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(事前構成されたWAFルール)
検知した場合はロギングで上記のような検索方法で見つけることができます。
こちらは設定した優先度「5」のルールでプレビュー検知されたアクセスを見つけるものです。
29
30. Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved.
詳細モードによるアクセス制限(事前構成されたWAFルール)
検索結果のログでは
右画像のような形式で記録されます。
『previewSecurityPolicy』
の中身がプレビューで検知した
内容の詳細となり
『preconfiguredExprIds』
が実際に検知した詳細 ルールです。
30