Closed9
AWS WAF で使用している Managed Rule を特定の path へのアクセスについて無効にしたい
以下のような状況で false positive が発生している
前述の記事を参考にやってみる
- Rule set :
AWSManagedRulesSQLiRuleSet
- Rule :
SQLi_BODY
こういう状態にしたい
Terraform での Override 方法を確認する
resource "aws_wafv2_web_acl" "example" {
... (snip) ...
rule {
name = "rule-1"
priority = 1
override_action {
count {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
rule_action_override {
action_to_use {
count {}
}
name = "SizeRestrictions_QUERYSTRING"
}
}
}
aws_wafv2_web_acl
リソースの rule_action_override
でよさそう
AWSManagedRulesSQLiRuleSet
マネージドルールセットのうち SQLi_BODY
ルールについて
COUNT
に変更する
rule {
name = "AWS-AWSManagedRulesSQLiRuleSet"
priority = 6
override_action {
none {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesSQLiRuleSet"
vendor_name = "AWS"
// ファイルアップロードが失敗する可能性があるので COUNT に変更する
rule_action_override {
action_to_use {
count {}
}
name = "SQLi_BODY"
}
}
}
ただ、この方法だと SQLi_BODY
がすべての箇所で無効化されてしまう
特定の path の場合のみ特定のRuleを除外する
前述の設定だけだと、 SQLi_BODY
のルールがすべての箇所で無効化されてしまうので、特定の path 以外ではブロックしたい。
上の記事にあるように
-
COUNT
モードで検知されたアクセスには「ラベル」が付与される - 追加のルールで「ラベル」を検知して、特定の path 以外へのアクセスの場合には
BLOCK
する
という動きにするとよさそう
付与されるラベル
awswaf:managed:aws:sql-database:SQLi_Body
COUNT
設定した rule の後に以下のような rule を追加。
Path が /hoge
以外の場合に SQLi_BODY
のラベルが付与されたものを BLOCK
し、 /hoge
の場合はスルーする。
waf/main.tf
// SQLi_BODY にマッチしたアクセスのうち /upload_file 以外のリクエストをブロックする
rule {
name = "Custom-SQLi_BODY"
priority = 10
action {
block {}
}
statement {
and_statement {
statement {
label_match_statement {
scope = "LABEL"
key = "awswaf:managed:aws:sql-database:SQLi_Body"
}
}
statement {
not_statement {
statement {
byte_match_statement {
field_to_match {
uri_path {}
}
positional_constraint = "STARTS_WITH"
search_string = "/upload_file"
text_transformation {
priority = 0
type = "NONE"
}
}
}
}
}
}
}
}
// 主要な部分だけを抜粋
}
結果、コンソールでみると以下のような rule になる
このスクラップは4ヶ月前にクローズされました