본문 바로가기

Cloud

[AWS] 웹 방화벽(Web Application Firewall, WAF) - 2

이번 포스팅 글은 AWS WAF 데모 테스트를 진행하면서 웹 ACL를 알아보도록 한다.

 

#웹 ACL이란

웹 액세스 제어 목록으로 방화벽을 운영하면서 ACL을 사용하여 웹 서비스에서 요청되는 패킷을 탐지 및 차단하여 세부적으로 제어할 수 있게된다.

 

1편에 소개되었던 아키텍처를 참고해서 설명하자면 아래 파란 네모박스로 표시된 룰이 웹 ACL이라고 볼 수 있다.

 

 

# AWS ACL 리스트 정리

 AWS WAF에서 제공되는 그룹들을 공식홈페이지를 참고하여 간단하게 정리한다.

 

1. Baseline rule groups

RuleSetName : AWSManagedRulesCommonRuleSet

정책 리스트 세부설명
NoUserAgent_HEADER HTTP user-agent 헤더 값이 없는 경우 제어
UserAgent_BadBots_HEADER User-Agent 헤더 값에 불량 봇이 존재하는 경우 제어
SizeRestrictions_QUERYSTRING URI 쿼리 문자열 길이가 표준 길이가 아닌 경우 제어
SizeRestrictions_Cookie_HEADER 쿠키 헤더 길이가 사용되는 범위가 아닌 경우 제어
SizeRestrictions_BODY 요청 본문 크기가 공통 범위가 아닌 경우 제어
SizeRestrictions_URIPATH URI 경로 길이가 사양 안이 아닌 경우 제어
EC2MetaDataSSRF_BODY 요청 본문에서 Amazon EC2 메타데이터를 빼내려는 시도가 있는 경우 제어
EC2MetaDataSSRF_COOKIE 요청 쿠키에서 Amazon EC2 메타데이터를 빼내려는 시도가 있는 경우 제어
EC2MetaDataSSRF_URIPATH 요청 URI 경로에서 Amazon EC2 메타데이터를 빼내려는 시도가 있는 경우 제어
EC2MetaDataSSRF_QUERYARGUMENTS 요청 쿼리 인수에서 Amazon EC2 메타데이터를 빼내려는 시도가 있는 경우 제어
GenericLFI_QUERYARGUMENTS 쿼리 인수에 로컬 파일 포함(LFI, Local File Inclusion) 도용 제어
ex) ../../../../etc/password
GenericLFI_URIPATH URI 경로에 로컬 파일 포함(LFI, Local File Inclusion) 도용이 있는 경우 제어
ex) ../../../../etc/password
GenericLFI_BODY 요청 본문에 로컬 파일 포함(LFI, Local File Inclusion) 도용이 있는 경우 제어
ex) ../../../../etc/password
RestrictedExtensions_URIPATH URI 경로에 클라이언트가 읽거나 실행해서는 안 되는 시스템 파일에 접근하는 경우 제어
ex) win.ini , access.log
RestrictedExtensions_QUERYARGUMENTS 쿼리 인수가 클라이언트가 읽거나 실행해서는 안 되는 시스템 파일에 접근하는 경우 제어
ex) win.ini , access.log
GenericRFI_QUERYARGUMENTS 모든 쿼리 파라미터의 값을 검사하고 웹 애플리케이션에서 원격 파일 포함
(RFI, Remote File Inclusion)을 도용하는 경우 제어

ex) ://
GenericRFI_BODY 요청 본문의 값을 검사하고 웹 애플리케이션에서 원격 파일 포함
(RFI, Remote File Inclusion)을 도용하는 경우 제어

ex) ://
GenericRFI_URIPATH URI 경로의 값을 검사하고 웹 애플리케이션에서 원격 파일 포함
(RFI, Remote File Inclusion)을 도용하는 경우 제어

ex) ://
CrossSiteScripting_COOKIE 쿠키 헤더 내 교차 사이트 스크립팅(XSS, cross-site scripting) 패턴 제어
CrossSiteScripting_QUERYARGUMENTS 쿼리 인수의 값 내 교차 사이트 스크립팅(XSS, cross-site scripting) 패턴 제어
CrossSiteScripting_BODY 요청 본문의 값 내 교차 사이트 스크립팅(XSS, cross-site scripting) 패턴 제어
CrossSiteScripting_URIPATH URI 경로의 값 내 교차 사이트 스크립팅(XSS, cross-site scripting) 패턴 제어

RuleSetName : AWSManagedRulesAdminProtectionRuleSet

정책 리스트 세부설명
AdminProtection_URIPATH 웹 서버 또는 애플리케이션의 관리를 위해 예약되어 있는 URI 경로에 대한 요청 제어
ex) 노출된 관리 페이지에 대한 외부 액세스를 차단

RuleSetName : AWSManagedRulesKnownBadInputsRuleSet

정책 리스트 세부설명
Host_localhost_HEADER 로컬 호스트를 나타내는 패턴에 대한 요청의 호스트 헤더 제어
ex) localhost
PROPFIND_METHOD HEAD와 유사하지만 XML 객체를 빼내려는 의도가 추가된 PROPFIND에 대한
요청의 HTTP 메서드 제어
ExploitablePaths_URIPATH URI 경로에서 도용 가능한 웹 애플리케이션 경로에 대한 액세스 시도 제어
ex) web-inf
BadAuthToken_COOKIE_AUTHORIZATION 요청되지 않은 JSON 웹 토큰(JWT, JSON Web Token)이 요청 제어

2. Use-case specific rule groups

RuleSetName : AWSManagedRulesSQLiRuleSet

정책 리스트 세부설명
SQLiExtendedPatterns_QUERYARGUMENTS 모든 쿼리 파라미터의 값에서 악성 SQL 코드와 일치하는 패턴 제어
SQLi_QUERYARGUMENTS 모든 쿼리 파라미터의 값에서 악성 SQL 코드와 일치하는 패턴 제어
SQLi_BODY 본문에서 악의적인 SQL 코드와 일치하는 패턴 제어
SQLi_COOKIE 요청 쿠키 헤더에서 악성 SQL 코드와 일치하는 패턴 제어
SQLi_URIPATH 요청 URI 경로에서 악성 SQL 코드와 일치하는 패턴 제어

RuleSetName : AWSManagedRulesLinuxRuleSet (Linux operating system)

정책 리스트 세부설명
LFI_URIPATH 로컬 파일 포함(LFI, Local File Inclusion) 취약성을 도용하려는 시도가 있는 요청 경로 제어
ex) /proc/version 등의 파일 탐지
LFI_QUERYARGUMENTS 로컬 파일 포함(LFI, Local File Inclusion) 취약성을 도용하려는 시도가 있는 모든 쿼리 파라미터의 값 제어
ex) /proc/version 등의 파일 탐지
LFI_BODY 로컬 파일 포함(LFI, Local File Inclusion) 취약성을 도용하려는 시도 있는 요청 본문을 제어
ex) /proc/version 등의 파일 탐지

RuleSetName : AWSManagedRulesUnixRuleSet (POSIX operating system)

정책 리스트 세부설명
UNIXShellCommandsVariables_QUERYARGUMENTS Unix 시스템에서 실행되는 웹 애플리케이션에서 명령 주입, LFI 및 경로 탐색 취약성을 도용하려는 시도 있는 모든 쿼리 파라미터의 값을 제어
ex) echo $HOME 및 echo $PATH
UNIXShellCommandsVariables_BODY Unix 시스템에서 실행되는 웹 애플리케이션에서 명령 주입, LFI 및 경로 탐색 취약성을 도용하려는 시도 있는 요청 본문을 제어
ex) echo $HOME 및 echo $PATH

RuleSetName : AWSManagedRulesWindowsRuleSet (Windows operating system)

정책 리스트 세부설명
PowerShellCommands_Set1_QUERYARGUMENTS 모든 쿼리 매개 변수 및 블록의 값을 제어
ex) PowerShell 명령 주입 시도, Invoke-Expression 함수 등
PowerShellCommands_Set2_QUERYARGUMENTS 모든 쿼리 파라미터의 값을 제어
ex) PowerShell 명령 주입 시도, Invoke-Expression 함수 등
PowerShellCommands_Set1_BODY 요청 본문 및 블록을 제어
ex) PowerShell 명령 삽입 시도, Invoke-Expression 함수 등
PowerShellCommands_Set2_BODY 요청 본문 및 블록을 제어
ex) PowerShell 명령 삽입 시도, Invoke-Expression 함수 등

RuleSetName : AWSManagedRulesPHPRuleSet (PHP application)

정책 리스트 세부설명
PHPHighRiskMethodsVariables_QUERYARGUMENTS PHP 스크립트 코드 주입 시도가 있는지 모든 쿼리 파라미터의 값 제어
ex) fsockopen 함수 및 $_GET superglobal 변수 등
PHPHighRiskMethodsVariables_BODY PHP 스크립트 코드 주입 시도가 있는지 요청 본문의 값 제어
ex) fsockopen 함수 및 $_GET superglobal 변수 등

RuleSetName : AWSManagedRulesWordPressRuleSet (WordPress application)

정책 리스트 세부설명
WordPressExploitableCommands_QUERYSTRING WordPress 취약한 설치 또는 플러그인에서 악용될 수 있는 명령 제어
ex) do-reset-wordpress 명령 등
WordPressExploitablePaths_URIPATH WordPress 다음과 같은 파일 xmlrpc.php쉽게 악용할 수 있는 취약성 제어

3. IP reputation rule groups

RuleSetName : AWSManagedRulesAmazonIpReputationList

정책 리스트 세부설명
AWSManagedIPReputationList_xxxx Amazon 위협 인텔리전스에 의해 악의적인 액터 및 봇으로 식별된 IP 주소 목록 제어

RuleSetName : AWSManagedRulesAnonymousIpList

정책 리스트 세부설명
AnonymousIPList TOR 노드, 임시 프록시 및 기타 마스킹 서비스 등 클라이언트 정보를 익명화하는 것으로
알려진 소스의 IP 주소 목록 제어
HostingProvider
IPList
최종 사용자 트래픽을 소싱할 가능성이 적은 호스팅 공급자 및 클라우드 공급자의 IP 주소 목록 제어