41. 웹 기반 공격
<Web App 공격 트랜드 (2019) >
출처 : https://www.cbronline.com/news/sql-injection-attacks
42. 웹 방화벽(WAF)이란?
• Web Application Firewall (WAF): HTTP트래픽에 대하여 특정한 규칙을 적용하기 위한 어플라이언스, 웹서버
플러그인/필터 형태의 보안 제품.
• 사용 목적 : 중요 데이터 유출사고 및 서비스 중단 등을 발생시킬 수 있는 웹싸이트 또는 어플리케이션에 대한 공격 방어
• WAF 제품 유형
• 전통적인 WAF: 독립적인 어플라이언스 또는 소프트웨어 방식
• CDN 번들링 형태
• 로드밸런서 번들링 형태
• Universal Threat Manager (UTM) 타입: 네트웍 보안 위협 범용 대응
데이터베이스웹 서버WAF
정상 접근
악의적인 접근
43. 기존 웹 방화벽(WAF)의 문제
§ 제대로 구축하기가 어렵고 시간이 많이 걸림
§ 오탐율이 많은 규칙들
§ 트래픽이 폭증할때 확장에 한계
§ 자동화를 위한 API 부족
§ 유지보수에 과다한 노력 필요
45. AWS WAF
웹 어플리케이션 레이어
악성 봇디도스 OWASP 타입 공격
HTTP
floods
과다 요청자
크롤러SQL 인젝션
XSS
어플리케이션 취약점 스캐너 & probes
컨텐츠 수집기
AWS WAF
• 웹 취약점으로부터 웹 애플리케이션 보호
46. CloudFront/ALB/API Gateway 워크로드 보호
WEB/WAS
www.example.com
CloudFront
사용자
Safe
Traffic
Edge Location
Edge Location
WAF
WAF
해커 악성 봇
적법 접근
SQLi, XSS, ..
WAF
ELB
ALB
사용자
적법 접근
VPC
WEB/WAS
47. AWS WAF 동작
CloudFront로 컨텐츠에
대한 HTTP/HTTPS요청
전달
WAF 요청을 검사하고
결과를 CF로 리턴
(allow/deny)
CF에서 WAF의 검사를
받아야 하는지를 판단
WAF는 CW로 메트릭
전송; API를 이용하여
규칙 업데이트
CloudFront에 의해 요청된 컨텐츠 전송CloudFront에 설정된 Error페이지 전송
CloudFront
CloudFront CloudFront
BLOCK
WAF
PASS
CloudWatch
48. AWS WAF 구성
Web ACLs :
o AWS resource 지정 (CloudFront / ALB / API GW)
o 규칙을 추가하여 보호 전략을 정의
o Amazon managed rule
o Custom rule
o Web ACL에 대한 기본 작업 지정 (차단/허용)
o 규칙 우선순위 설정
o CloudWatch metric 지정
Rule groups:
o JSON 포멧의 룰
o Visual editor
o JSON editor
o 재사용 가능한 custom 규칙 저장
o 리전 특정
o 규칙 우선순위 설정
AWS WAF Console
IP sets:
o 규칙 문에 사용되는 IP 주소 및 IP 주소 범위
Regex pattern sets:
o 규칙 문에 사용되는 정규 표현식 모음
** Web ACL 혹은 Rule group에서 사용됨
49. Request
Web Access Control List (Web ACL)
Managed
Rule Group
Single-digit
millisecond latency
Amazon
CloudFront
Application
Load Balancer
Amazon API
Gateway
Amazon
CloudWatch
Users
Rule 1
Rule 2
Rule Z
…
WAF 내부 동작
Order (Priority)
IP set
Action
Associated
AWS resources
Logging and Metrics
Rules
Default
Action
Allow
or
Deny
Actions:
• Accept
• Deny
• Count
Rule
Action
Rule
• Core ruleset
• Known bad
input
• SQL DB
• Linux
• ….
Custom
Rule Group
Rule 1
Rule 2
Rule Z
……
Rule
• GeoMatch
• Regex pattern
• String match
• SQLi
• Size match
• Xss
50. AWS 관리형 규칙 (AMR)
자체 규칙을 작성하지 않고 일반적인 애플리케이션 취약성 또는 기타 원치 않는 트래픽에 대한 보호를
제공하는 AWS 관리형 서비스
• AWS Threat Research Team (TRT)에서 관리하고 유지하는 규칙 세트
• Amazon 내부에서 습득한 보안 지식과 위협 탐지 반영
• OWASP Top 10 및 anti-bot IP reputation list 포함
추가 비용 없이 사용 가능
• 지정된 WAF Capacity Unit (WCU) 내에서 소비 가능
51. 용어 : WCU (Web ACL Capacity Units)
규칙, 규칙 그룹 및 웹 ACL을 실행하는 데 사용되는 운영 리소스를 계산하고 제어라는 용량 단위
• 각 규칙 유형마다 다르게 용량을 계산하여 각 규칙의 상대적 리소스 비용을 반영
• 복잡한 규칙일수록 간단한 규칙에 비해 WCU를 많이 소비
• 규칙 그룹 생성 시 AWS WAF에서는 생성 시 각 규칙 그룹에 변경 불가능한 용량을 할당해야 합니다.
• 초기 제한 Web ACL당 1,500 WCU
• 더 많은 용량이 필요한 경우 AWS Support Center에 문의 필요.
Rule Type WCU Consumed
Geo-IP match (country) 1
IP set match (each set can contain 10,000 IPs) 1
Size constraint match 1
String comparison match (starts with) 2
String comparison match (contains) 10
SQLi detection 20
XSS detection 40
Regex set match (each set can contain 10 patterns) 25
Text transformation (applies once per unique header/body) 10
52. AWS 관리형 규칙 (AMR)
Category Ruleset Description WCU consumed
CRS Core Ruleset OWASP Top 10 및 CVE 700
CRS Admin Protection 외부에 노출된 어드민 페이지에 대한 엑세스 차단 100
CRS Known Bad Inputs 알려진 취약성 악용 요청 차단 200
EXR SQL DB SQL 데이터베이스 악용과 관련된 요청 패턴 차단 200
EXR Linux operating system
LFI(로컬 파일 포함) 공격을 포함, Linux 특정한 취약성 악용과
관련된 요청 패턴 차단
200
EXR POSIX operating system
LFI(로컬 파일 포함) 공격을 포함, POSIX 및 POSIX 유사 운영
체제에 특정한 취약성 악용과 관련된 요청 패턴 차단
100
EXR Windows operating system
PowerShell 명령의 원격 실행과 같이 Windows에 특정한 취약성
악용과 관련된 요청 차단
200
EXR PHP application 안전하지 않은 PHP 함수 삽입 차단 100
EXR WordPress application WordPress 관련된 취약성 악용과 관련된 요청 패턴 차단 100
IP List Amazon.com IP Reputation List Amazon 내부 위협 인텔리전스를 기반으로 봇과 같은 위협 차단 25
IP List Anonymous IP list
뷰어 ID의 난독화를 허용하는 서비스 요청을 차단 (VPN, 프록시,
Tor 노드 및 호스팅 공급자의 요청 등)
50
AWS 관리형 규칙 목록
53. AWS 관리형 규칙 (AMR)
Managed ruleset 포함 rule 확인
• 콘솔 확인
• 웹 ACL > 규칙(Rule) 탭 > 규칙 그룹 >
편집
• Override rules action 으로 개별 규칙을
개수 모드로 설정 가능
• AWS CLI :
• aws wafv2 describe-managed-rule-group -
-scope=REGIONAL -
-vendor-name=<vendor> -
-name=<managedrule_name>
54. Custom 규칙
Web ACL에 Custom 규칙을 적용하는 방법
1. Web ACL에서 Rule Builder를 생성 및 적용
2. Rule group 을 통해 재사용 가능한 규칙 적용
55. Custom 규칙
Custom 규칙을 작성하는 방법
Document-based로 변경되어 규칙 업데이트가 간소화되면서도
훨씬 더 정교한 규칙 작업이 가능하게 되었음
1. Visual Editor로 간편하게 작성
2. JSON Editor로 좀더 복잡한 규칙을 직접 작성
기본적으로 모든 규칙은 JSON 형태로 적용됨
56. 일치 조건 (Match Condition)
일치 조건 (영어) 일치 조건(한글) 설명 WCUs
Geographic Match 지역 일치 요청의 출처 국가를 검사 1
IP set Match IP 집합 일치 요청 출처를 IP주소 및 주소 범위 집합과 비교 1
Regex Pattern Match 정규식 패턴 집합 정규식 패턴을 지정된 요청 구성 요소와 비교 패턴 세트 당 25
Size constraint 크기 제약 조건 지정된 요청 구성 요소에 대해 크기 제약 조건을 검사 1
SQLi Attack SQL 주입 공격 지정된 요청 구성 요소에서 악성 SQL 코드를 검사 20
String Match 문자열 일치 문자열을 지정된 요청 구성 요소와 비교 매치 유형에 따라
다름
XSS Scripting Attack XSS 공격 지정된 요청 구성 요소에서 사이트 간 스크립팅 공격을 검사 40
웹 요청을 사용자가 설정한 일치 조건과 비교하여 향후의 Action 을 결정
57. Condition : Geographic Match
출처 국가를 기준으로 웹 요청을 허용 또는 차단
• Location : ISO 3166 국제 표준의 alpha-2 국가 ISO 코드에서 나온 2자리 국가 코드)
§ 한국 – KR
§ 북한 – KP
§ 중국 – CN
§ 러시아 – RU
§ …..
58. Condition : IP set Match
IP 주소 및 주소 범위의 집합에 대한 웹 요청 출처의 IP 주소를 검사
• IP v4, IP v6 지원
• CIDR Block: /1 부터 /32 까지 자유롭게 기술 가능
각 IP 집합 일치 규칙은 규칙과 관계 없이 생성 및 유지 관리하는 “IP 집합”을 참조
59. Condition : Regex Pattern Match
정규식 패턴 집합 내에서 지정한 정규 표현식 패턴에 대해 지정한 웹 요청 부분을 검사
• PCRE (Perl Compatible Regular Expression)기준 지원
• 검사 부분 지정 (요청 구성 요소)
• 텍스트 변환 지원으로 공격자가 WAF를 우회하기 위해 사용하는 일부 비정상적인 서식 제거
각 정규식 패턴 집합 일치 규칙은 규칙과 관계 없이 생성 및 유지 관리하는 “정규식 패턴 집합”을 참조
60. Condition : Regex Pattern Match
예시
정규식 I[a@]mAB[a@]dRequest 는
IamABadRequest, IamAB@dRequest, I@mABadRequest 및 I@mAB@dRequest 등을 차단할 수 있음
61. Condition : Size Constraint
초과(>) 또는 미만(<)과 같은 비교 연산자를 사용하여 요청 구성 요소의 크기에 대해 바이트 수를 비교
• 검사 부분 지정 (요청 구성 요소)
• 텍스트 변환 지원으로 공격자가 WAF를 우회하기 위해 사용하는 일부 비정상적인 서식 제거
• 비교 연산자 : <, >, =, <=, >= 등
• Size 제한을 바이트 단위로 설정 (upto 8,192)
62. Condition : SQLi Attack
웹 요청 일부(예: URI / 쿼리 문자열)를 식별하여 악성 SQL 코드가 포함된 것으로 보이는 요청을 차단
• 검사 부분 지정 (요청 구성 요소)
• 텍스트 변환 지원으로 공격자가 WAF를 우회하기 위해 사용하는 일부 비정상적인 서식 제거
• SQLi를 위한 세부 탐지 규칙은 AWS WAF 자체적으로 관리됨
예시
SELECT * FROM airport WHERE code=‘icn’ or 1=‘1’
curl -X POST $JUICESHOP_URL -F "user='AND 1=1;"
63. Condition : String Match
웹 요청 일부(예: User-agent header)와 미리 지정된 문자열을 비교하여 허용 혹은 차단
• 검사 부분 지정 (요청 구성 요소)
• 텍스트 변환 지원으로 공격자가 WAF를 우회하기 위해 사용하는 일부 비정상적인 서식 제거
문자열 일치 조건
• Contains string(문자열 포함)
• Exactly matches string(정확히 문자열과 일치)
• Starts with string(문자열로 시작)
• Ends with string(문자열로 끝)
• Contains word(단어 포함)– 영숫자 또는 밑줄(A-Z, a-z, 0-9 또는 _)만 포함
64. Condition : XSS Scripting Attack
악성일 수 있는 스크립트가 있는지 검사할 웹 요청의 부분(예: URI 또는 쿼리 문자열)을 식별
• 검사 부분 지정 (요청 구성 요소)
• 텍스트 변환 지원으로 공격자가 WAF를 우회하기 위해 사용하는 일부 비정상적인 서식 제거
• XSS를 위한 세부 탐지 규칙은 AWS WAF 자체적으로 관리됨
예시
<개발자의 의도>
<XSS 공격>
<결과>
65. 논리적 규칙문
논리적 문 설명 WCU 중첩 가능 여부
AND 로직 중첩된 문을 AND 로직과 결합 중첩 문 기반 예
NOT 로직 중첩된 문의 결과를 무효화 중첩 문 기반 예
OR 로직 중첩된 문을 OR 로직과 결합 중첩 문 기반 예
서로 다른 문을 결합하거나 결과를 무효화
AND 로직 예시 : “나는 특정 국가에서 나온 요청이나 특정 쿼리 문자열이 포함된 요청을 차단하고 싶다.”
NOT 로직 예시 : “나는 특정 국가가 출처가 아닌 요청을 차단하고 싶다.”
OR 로직 예시 : “나는 특정 IP 대역 혹은 특정 국가에서오는 요청을 모두 차단하고 싶다.”
66. 요청 구성 요소 (Request Component)
AWS WAF에서 검사할 웹 요청의 일부를 지정
• 검사할 요청 부분에 대한 옵션
§ 헤더(header) : 특정 요청 헤더. Header field name 에 이름(예: User-Agent) 지정 필요
§ HTTP 메서드 : 웹 요청이 오리진에게 수행을 요구하는 HTTP 메서드 (예: GET, POST)
§ 쿼리 문자열 : (있는 경우) ? 문자 뒤에 나타나는 URL의 부분.
§ 단일 쿼리 파라미터 : 쿼리 문자열의 일부로 정의한 모든 파라미터. Query parameter name
지정 필요. (이름의 최대 길이는 30자, 대소문자 구분 없음)
§ 모든 쿼리 파라미터 : 쿼리 문자열 내의 모든 매개 변수 값을 검사
§ URI : 리소스를 식별하는 URL의 부분.
§ 본문(body) : 요청 헤더 바로 뒤에 오는 요청 부분
67. 요청 구성 요소 (Request Component)
요청 구성 요소의 텍스트 변환 : 공격자가 WAF를 우회하기 위해 사용하는 일부 비정상적인 서식 제거
• 텍스트 변환을 위한 옵션
§ 소문자로 변환
§ HTML 디코딩 (ex. " > &)
§ 공백 표준화
§ 명령줄 간소화
§ URL 디코딩
예시
/login?x=test%20Id=10%20AND=1
/login?x=test%27%20UNION%20ALL%20select%20NULL%20--
/login?x=test’ UNION ALL select NULL --
Transform: URL Decode
Match: SQL Injection
탐지 실패
탐지 성공
68. 규칙 작업 (Rule Action)
웹 요청이 규칙에 정의된 조건과 일치할 때 웹 요청으로 수행할 작업을 정의
• 허용 (Allow) – AWS WAF가 처리 및 응답을 위해 요청이 AWS 리소스로 전달되도록 허용
• 차단 (Deny) – AWS WAF기 요청을 차단하고 AWS 리소스는 HTTP 403(금지됨) 상태 코드로 응답
• 개수 (Count) – AWS WAF은 요청의 개수는 세지만, 요청의 허용 또는 차단 여부를 결정하지 않음.
69. 규칙 타입 (Rule Type)
발신 IP 주소에 대한 요청 비율을 추적하고, 5분 간의 요청 수에 대해 지정한 제한을 초과할 경우 차단
• 규칙 작업이 일단 트리거되면 요청 비율이 다시 제한 값 이하로 떨어질 때까지 해당 IP 주소를 차단
• 비율 기반 문 내에 다른 문을 중첩하여 일치하는 요청만 계수하도록 설정.
• 과도한 요청을 전송하는 IP 주소의 요청에 임시 차단을 적용하는 데 유용.
예시
: 공격자로 예상되는 192.0.2.44 의 웹 사이트의 특정 페이지에 대한 요청을 제한하려는 경우
주소 192.0.2.44를 지정하는 IP 집합이 있는 IP 일치 문
AND
요청구성요소 ’URI’ 에 대해 ‘login’ 으로 시작하는 String 일치 문
중첩문 작성 및 비율 제한 지정
70. 규칙 그룹 (Rule Group)
생성 및 유지 관리하는 자체 규칙 그룹
• 직접 작성하고 관리, 재사용할 수 있는 규칙 모음
• 자주 쓰는 규칙을 모아서 관리하고 한꺼번에 Web ACL에 반영
• 규칙 그룹을 생성할 때는 변경이 불가능한 최대 용량을 설정
• 리전별 관리
71. Custom 규칙 작성 예시
"Rules": [
{
"Name": "foo",
"Priority": 1, // the priority this rule is triggered at
"Statements": {
<Condition> // this is where conditions (e.g. SQLi detection) are kept, will revisit later
},
"Action": {
"Block": {}
"Allow": {}
"Count": {}
},
"VisibilityConfig": { // the CloudWatch and SampledRequests metric generated for this rule
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "TestMetric"
}
}
// repeat the block above for subsequent rule
]
73. Custom 규칙 작성 예시 : AND / OR 중첩문
"Statements": {
"AndStatement": { // Can be replaced with OrStatement
"Statements": [ // Note the start of list here with square bracket
{
<Condition #1>
}, {
<Condition #2>
}, {
<Condition #3>
}
// Add more conditions as desired
]
}
}
You can nest AND/OR statement.
Simply repeat the statement in
one of the condition block.
75. AWS WAF Classic WAF vs. WAF
새로운 API
• “wafv2” 라는 고유한 namespace
• “waf” 나 “waf-regional”가 없어지고, 단일 API로 사용
새로운 룰 작성 방법
• 각 룰 타입에 따른 개별 API없음
• JSON 포멧의 Document-based 룰 작성
• JSON 파일로 모든 룰을 구성하고 간편하게 UpdateWebACL API 를 콜해서 반영
새로운 룰셋 용량 : WAF Capacity Unit (WCU)
• 더이상 WebACL 당 10개 룰로 제한되지 않음
• 다양한 서비스 제한 소멸 (ex. 필터 개수 제한)
새로운 콘솔 경험
• 간편해지고 직관적으로 변화
새로운 탐지 능력
• OR 로직, 다중 변형
빌트인 관리형 룰셋 : AWS Managed Rules
• AWS가 관리하고 유지하는 룰셋
• Amazon 내부에서 습득한 보안 지식과 위협 탐지 반영
• OWASP Top 10 및 anti-bot IP reputation list 포함
76. AWS WAF Classic 가용성
기존의 WAF는 그대로 유지
• Terms such as web ACL, conditions, IP sets, regex set, etc.
기존의 WAF 기능도 모두 유지
• E.g., 속도기반 룰, 로그 등
기존의 WAF에서 WAF classic으로 명명
• WAF classic에는 새로운 기능이 추가되지 않을 예정
• 새로운 고객은 WAFv2를 사용할 것을 권고
77. Custom 규칙 작성 (waf-classic 과 비교)
§ GetChangeToken
§ UpdateByteMatchSet
§ GetChangeToken
§ UpdateRule
§ GetChangeToken
§ UpdateRuleGroup
§ …
§ (Repeat for each rule)
§ (After 200th times)
§ Done…
UpdateRuleGroup
Done!
"Rules": [
{
"Name": "foo",
"Priority": 1,
"Statements": {
<Condition>
},
"Action": {
"Block": {}
"Allow": {}
"Count": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "TestMetric"
}
}
]
Before After
Make all changes in
JSON in your favorite
editor!
Difficult to see all rules
at once.
Need to manually keep
track of what you
changed.
Call API once to update
all rules!
Version control JSON file
for quick roll back!
Forced to do redundant
API calls.
Simplifies the rule update process and maintenance!