Google Cloud Armor는사전 구성된 WAF 규칙을 제공하며, 각 규칙은 ModSecurity Core Rule Set(CRS)에서 가져온 여러 서명으로 구성됩니다.
각 서명은 규칙 집합의 공격 감지 규칙에 해당합니다. 들어오는 요청은 사전 구성된 규칙에 따라 평가됩니다.
요청이 사전 구성된 WAF 규칙과 연결된 서명과 일치하면 요청과 사전 구성된 WAF 규칙이 일치하는 것으로 간주됩니다. evaluatePreconfiguredWaf()
또는 evaluatePreconfiguredExpr()
표현식이 true
값을 반환하면 일치하는 것입니다.
민감도 수준 선택
각 서명에는 ModSecurity paranoia 수준에 해당하는 민감도 수준이 있습니다.
0
과 4
사이의 민감도를 선택할 수 있지만 민감도 수준 0
은 기본적으로 사용 설정된 규칙이 없음을 의미합니다.
민감도 수준이 낮을수록 서명의 신뢰도가 높으므로 거짓양성을 생성할 가능성이 낮습니다. 민감도 수준이 높아지면 보안이 향상되지만 거짓양성이 생성될 위험이 증가합니다. WAF 규칙의 민감도 수준을 선택하면 선택한 민감도 수준보다 낮거나 같은 민감도 수준에서 서명을 선택합니다. 다음 예시에서는 민감도 수준 1
을 선택하여 사전 구성된 WAF 규칙을 조정합니다.
evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 1})
규칙 서명 선택 해제
사전 구성된 WAF 규칙이 필요한 이상으로 많은 요청과 일치한다고 결정하거나 규칙이 허용되어야 하는 트래픽을 차단하는 경우에는 노이즈가 많거나 불필요한 서명을 중지하도록 규칙을 조정하면 됩니다. 사전 구성된 특정 WAF 규칙에서 서명을 중지하려면 원치 않는 서명의 ID 목록을 evaluatePreconfiguredWaf()
표현식에 제공합니다.
다음 예시에서는 사전 구성된 sqli-v33-stable
(CRS 3.3) WAF 규칙에서 두 개의 CRS 규칙 ID를 제외합니다.
evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 4, 'opt_out_rule_ids': ['owasp-crs-v030301-id942350-sqli', 'owasp-crs-v030301-id942360-sqli']})
사전 구성된 CRS 규칙 세트에서 서명 ID를 제외하는 경우 구성 오류를 방지하기 위해 서명 ID 버전을 규칙 세트 버전(CRS 3.0 또는 3.3)과 일치시켜야 합니다.
기존 표현식 evaluatePreconfigureExpr()
을 사용하여 서명 ID를 사용 중지할 수도 있습니다. 사전 구성된 WAF 규칙 표현식에 대한 자세한 내용은 커스텀 규칙 언어 참조를 참조하세요.
규칙 서명 선택
규칙 서명을 선택 해제하는 대신 사용 중지된 민감도 수준에서 규칙 서명을 선택할 수 있습니다. 지정된 민감도 수준에서 사용할 서명이 선택 해제하려는 규칙보다 적을 경우 규칙 서명을 선택하는 것이 좋습니다. 규칙 서명을 선택하려면 민감도 수준이 0
이어야 합니다. 다음 예시에서는 모든 민감도 수준에서 모든 cve-canary
서명을 선택 해제한 후 owasp-crs-v030001-id044228-cve
및 owasp-crs-v030001-id144228-cve
를 명시적으로 선택합니다.
evaluatePreconfiguredWaf('cve-canary', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030001-id044228-cve', 'owasp-crs-v030001-id144228-cve']})
검사에서 요청 필드 제외
커스텀 애플리케이션은 사전 구성된 WAF 규칙의 서명과 일치하지만 합법적인 것으로 알려진 요청 필드(예: 헤더, 쿠키, 쿼리 파라미터 또는 URI)의 콘텐츠를 포함할 수 있습니다. 이 경우 요청 필드에 대한 제외 목록을 보안 정책 규칙과 연결하여 검사에서 이러한 요청 필드를 제외함으로써 거짓양성을 줄일 수 있습니다. WAF 규칙에 요청 필드 제외가 연결된 경우에는 allow
작업을 사용할 수 없습니다.
요청 필드 제외를 구성할 때 이 필드를 대상과 연결할 수 있는데, 이때 대상은 사전 연결된 WAF 규칙 전체 또는 사전 구성된 WAF 규칙의 서명 목록일 수 있습니다. 필드 연산자와 필드 값을 사용하여 정확한 일치 또는 부분 일치를 지정할 수 있습니다. 사용 가능한 필드 연산자는 다음과 같습니다.
EQUALS
: 필드 값이 지정된 값과 같은 경우 연산자가 일치합니다.STARTS_WITH
: 필드 값이 지정된 값으로 시작되는 경우 연산자가 일치합니다.ENDS_WITH
: 필드 값이 지정된 값으로 끝나는 경우 연산자가 일치합니다.CONTAINS
: 필드 값에 지정된 값이 포함되어 있는 경우 연산자가 일치합니다.EQUALS_ANY
: 필드 값에 상관없이 연산자가 일치합니다.
다음 섹션에서는 검사에서 제외할 수 있는 요청 필드에 대한 자세한 정보와 예시를 제공합니다.
요청 헤더
사전 구성된 WAF 규칙 평가 중에 값이 검사에서 제외되는 요청 헤더 이름의 목록입니다.
제외는 원래 요청 헤더 값을 검사하는 대상의 서명에만 적용됩니다. 여기에는 ModSecurity Core Rule Set의 다음 요청 플래그와 관련된 서명이 포함됩니다.
- REQUEST_HEADERS
지정된 요청 헤더의 값만 검사에서 제외됩니다. 이름은 아직 검사 중입니다.
요청 쿠키
사전 구성된 WAF 규칙 평가 중에 값이 검사에서 제외되는 요청 쿠키 이름의 목록입니다.
제외는 원래 요청 쿠키 값을 검사하는 대상의 서명에만 적용됩니다. 여기에는 ModSecurity Core Rule Set의 다음 요청 플래그와 연결된 서명이 포함됩니다.
- REQUEST_COOKIES
지정된 요청 쿠키의 값만 검사에서 제외됩니다. 이름은 아직 검사 중입니다.
요청 쿼리 파라미터
사전 구성된 WAF 규칙 평가 중에 값이 검사에서 제외되는 요청 쿼리 파라미터 이름의 목록입니다.
제외는 원래 요청 파라미터를 검사하는 대상의 서명에만 적용됩니다. 여기에는 ModSecurity Core Rule Set의 다음 요청 플래그와 연결된 서명이 포함됩니다.
- ARGS
- ARGS_GET
- REQUEST_URI
- REQUEST_URI_RAW
- REQUEST_LINE
지정된 쿼리 파라미터의 값만 검사에서 제외되며 쿼리 문자열 또는 POST 본문에 포함될 수 있습니다. 이름은 아직 검사 중입니다.
쿼리 파라미터는 URI 및 요청 행의 일부이므로 이러한 필드는 지정된 쿼리 파라미터를 제외한 후 검사를 위해 다시 조합됩니다. 그러나 전체 요청 본문을 검사하는 서명(예: 요청 플래그 REQUEST_BODY
와 연결된 서명)의 경우 쿼리 파라미터 제외가 적용되지 않습니다.
예를 들어 'args'라는 쿼리 파라미터를 제외하더라도 요청의 POST 본문과 'args' 일치 항목의 값에 'args' 파라미터가 있으면 전체 요청 본문을 검사하는 서명에 일치 항목이 표시될 수 있습니다.
요청 URI
사전 구성된 WAF 규칙 평가 중에 검사에서 제외할 쿼리 문자열 데이터를 제외한 요청 행의 URI 목록입니다.
제외는 원래 요청 URI를 검사하는 대상의 서명에만 적용됩니다. 여기에는 ModSecurity Core Rule Set의 다음 요청 플래그와 관련된 서명이 포함됩니다.
- REQUEST_URI
- REQUEST_URI_RAW
- REQUEST_LINE
- REQUEST_FILENAME
- REQUEST_BASENAME
위의 필드를 제외할 경우 해당 필드는 검사에서 완전히 제외되며 재조합은 수행되지 않습니다.
필드 값
EQUALS_ANY
이외의 필드 연산자를 사용하는 경우 필드 값을 지정해야 합니다.
요청 헤더, 요청 쿠키, 요청 쿼리 파라미터의 경우 필드 값에 허용되는 문자 집합에는 다음 문자가 포함됩니다.
!
,#
,$
,%
,&
,*
,+
,-
,.
,^
,_
,`
,|
,~
- 알파벳 문자
A
~Z
(소문자 및 대문자) - 숫자 문자
0
~9
이러한 요청 필드에 제외를 적용할 때는 구성된 필드 값을 요청의 값과 대조하여 비교합니다(변환 후 대소문자를 구분하지 않음). 허용된 문자 집합에 없는 특정 문자를 제외하려는 경우 추가 인코딩을 수행하지 않아도 됩니다.
요청 URI의 경우 필드 값은 다음과 같이 URI 형식으로 제공되어야 합니다.
- 스키마는 허용되지만 http 또는 https로만 제한됩니다.
- 호스트는 허용되며 IP 주소일 수 있습니다.
- 포트는 허용됩니다.
- 경로가 허용됩니다.
- 쿼리가 허용되지 않습니다.
- 프래그먼트는 허용되지 않습니다.
요청 URI에 제외를 적용할 때 구성된 필드 값은 쿼리 문자열을 제외하고 요청 줄의 URI(변환 후 대소문자를 구분하지 않음)와 비교됩니다. 요청 줄의 URI는 상대적이거나 절대적일 수 있습니다. 요청 URI에 대한 제외를 구성할 때 이 점을 고려하세요.
예시
첫 번째 예에서는 PRIORITY의 보안 정책 POLICY_1에서 규칙을 업데이트하여 sqli-v33-stable
WAF 규칙의 모든 서명에 대한 제외 구성을 추가하고 모든 요청 쿠키를 검사에서 제외합니다.
gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \ --security-policy POLICY_1 \ --target-rule-set "sqli-v33-stable" \ --request-cookie-to-exclude "op=EQUALS_ANY"
두 번째 예에서는 PRIORITY의 보안 정책 POLICY_2에서 규칙을 업데이트하여 xss-v33-stable
WAF 규칙의 서명 owasp-crs-v030301-id941140-xss
및 owasp-crs-v030301-id941270-xss
에 대한 제외 구성을 추가하고 abc
로 시작하거나 xyz
로 끝나는 요청 헤더를 검사에서 제외합니다.
gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \ --security-policy POLICY_2 \ --target-rule-set "xss-v33-stable" \ --target-rule-ids "owasp-crs-v030301-id941140-xss" "owasp-crs-v030301-id941270-xss" \ --request-header-to-exclude "op=STARTS_WITH,val=abc" \ --request-header-to-exclude "op=ENDS_WITH,val=xyz"
세 번째 예에서는 PRIORITY의 보안 정책 POLICY_3에서 규칙을 업데이트하여 sqli-v33-stable
의 규칙 ID owasp-crs-v030301-id942110-sqli
및 owasp-crs-v030301-id942120-sqli
에 대한 요청 필드 제외를 모두 제거합니다.
gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \ --security-policy POLICY_3 \ --target-rule-set "sqli-v33-stable" \ --target-rule-ids "owasp-crs-v030301-id942110-sqli,owasp-crs-v030301-id942120-sqli"
커스텀 Content-Type
헤더 값에 파싱 적용
Google Cloud Armor가 사전 구성된 WAF 규칙에 대해 POST 본문을 평가할 때 Content-Type
헤더는 요청 본문의 데이터 형식을 나타냅니다. 기본적으로 Google Cloud Armor는 POST 본문의 콘텐츠를 사전 구성된 WAF 규칙에 대해 검사 및 일치시킬 수 있는 하나의 문자열로 취급합니다. 그러나 수신 요청에 다른 인코딩이 있는 경우 더 정확한 구문 분석을 구성할 수 있습니다. Google Cloud Armor는 다음 인코딩 유형을 지원합니다.
- JSON
- GraphQL
자세한 내용은 POST 본문 콘텐츠 파싱을 참조하세요.
다음 단계
- 보안 정책 구성 자세히 알아보기
- 사전 구성된 WAF 규칙에 사용할 수 있는 규칙 서명 자세히 알아보기
- 커스텀 규칙 언어 참조를 사용하여 사전 구성된 WAF 규칙 자세히 알아보기