cloudNet@ 팀의 가시다 님이 진행하는 AWS 보안 스터디 3주차 정리입니다.
AWS WAF Configuration A to Z workshop을 참고 했습니다.
전 포스팅에서 웹 취약점에 대해 10가지 정도 자주 사용되는 해킹 공격 유형에 대해서 알아 보았습니다.
사실 WAF에 대한 기능을 보여드리기 위해 빌드업이였다고 생각하시면 될것 같습니다.
웹 취약점 10가지에 대해서 전 게시물을 반드시 확인하고 공부하고 이번 게시물을 읽어주시기 바랍니다.
1. AWS WAF 소개
✅ 1.1 WAF 란?
- WAF란 Web Application Firewall의 약자로 웹 애플리케이션 보안에 특화된 전용 방화벽입니다.
- SQL Injection 공격, Cross-Site Scripting(XSS) 공격 등과 같은 공격 패턴을 탐지하고 차단하는 용도
- 웹 접근 트래픽에 대한 페이로드 분석 및 패턴 기반의 필터링을 통해 공격을 탐지하고 차단할 수 있습니다.
✅ 1.2 WAF 특징?
- AWS WAF를 CloudFront, ALB, API Gateway, AppSync에 배포할 수 있습니다
- CloudFront는 Global 서비스, 나머지는 Regional 서비스
✅ 1.3 AWS WAF 주요 기능 ?
- 웹 트래픽 필터링 : 웹 취약점 공격을 차단하는 규칙을 손쉽게 생성하여 웹 트래픽을 필터링하도록 규칙을 생성할 수 있습니다.
- 자동화 및 유지 관리 : AWS CloudFormation 템플릿을 사용하여 자동 배포 및 프로비저닝 할 수 있습니다.
- 실시간 가시성 보장 : 뒤에 실습할때 보여드리겠지만 AWS WAF는 CloudWatch와 완전히 통합되어 실시간 지표를 제공합니다.
- AWS Firewall Manager와 통합 : AWS Firewall Manager를 사용하여 AWS WAF 배포를 중앙에서 구성 및 관리할 수 있습니다.
2. AWS WAF 구성 실습
✅ [ AWS WAF 콘솔 ] -> Seoul -> Create web ACL
✅ [ AWS WAF 콘솔 ] - Step 1 , 4 입력값 넣고 Next 계속 눌러서 진행
- Name : DemoACL
- Resource type : Regional resources
- Region : Aisa Pacific(Seoul)
- → 아래 Add AWS resources 클릭 ⇒ ALB 선택 후 하단에 생성해둔 ALB 체크 후 Add 클릭
✅ [ AWS WAF 콘솔 ] - 사용자 정의 웹 페이지 출력 설정
- 생성된 Web ALC 클릭 → Custom Response Bodies 선택 ⇒ Create Custom Response Body :
- 이름 custom_denied , Type(HTML)
<!DOCTYPE html>
<html>
<head>
<title>Access Denied</title>
<style>
.container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
}
h1 {
font-size: 40px;
margin-bottom: 20px;
}
</style>
</head>
<body>
<div class="container">
<h1>Access Denied</h1>
<img src="https://s3.ap-northeast-2.amazonaws.com/do-not-delete-demo-website.ap-northeast-2/waf.png" alt="Access Denied Image">
<p>[CloudNet@ Study] Your access is blocked due to abnormal activity. Please contact support for assistance.</p>
</div>
</body>
</html>
✅ [ AWS WAF 콘솔 ] - [ Web ACLs ] - [DemoACL] - Enable logging
- CloudWatch Logs 신규 생성((aws-waf-logs- 시작되는 이름) : aws-waf-logs-ahss , 보존(1일)
- Web ACL → Enable logging 설정
✅ [ AWS CloudWatch 콘솔 ] - Log insights
# 최근 기준 20개 로그 확인
fields @timestamp, @message
| sort @timestamp desc
| limit 20
# TOP 100 address
fields httpRequest.clientIp
| stats count(*) as requestCount by httpRequest.clientIp
| sort requestCount desc
| limit 100
# TOP 100 country
fields httpRequest.country
| stats count(*) as requestCount by httpRequest.country
| sort requestCount desc
| limit 100
✅ [ AWS CloudFormation ] - 아래 링크 클릭
https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?stackName=WAF-Dashboard&templateURL=https://s3.amazonaws.com/ytkoka-resources/CloudWatch-Dashboard-for-AWS-WAF/cw-waf-dashboard-regional.yaml
- CloudWatch Log Name : aws-waf-logs-ahss
- WAF Region: ap-northeast-2
- WebACLName: DemoACL
✅ [ AWS CloudWatch ] - 대시보드 - WAF Dashboard 클릭
✅ SQL injection 방어 규칙 생성
SQL Injection 공격 방어 규칙 생성
1.1 WebACL 에 새로운 규칙을 추가하기 위해 WebACL 메뉴에 접속하도록 합니다. 사전 준비 단계에서 미리 생성해 둔 DemoACL 을 선택한 후 아래와 같이 Rules 탭을 선택한 후 Add my own rules and rule groups 를 클릭합니다.
1.2 규칙 생성 화면의 옵션 중 첫번째 옵션인 Rule Type 에서는 Rule Builder 가 선택된 상태를 유지하고, 규칙 이름에는 SQL_Injection 을 입력한 후 Type 은 Regular Rule 을 선택합니다.
1.3 If a request 의 Pull Down 메뉴에서는 matches the statement 를 선택하고, Inspect 는 Query String, Match Type 은 Contains SQL Injection Attacks 를 선택합니다. Text Transformation 에 대해서는 Compress White Space 와 URL decode Unicode 를 추가합니다. 마지막으로 Sensitivity Level 은 High 를 선택합니다.
1.4 규칙에 매칭되는 요청을 처리하는 액션은 Block 을 선택합니다. 하단의 Custom response 옵션의 체크 박스를 체크합니다. Response Code 에는 200 을 입력하고 2.2 Web ACL 생성단계에서 생성한 custom_denied 페이지를 선택합니다.
모든 설정이 완료되었다면 Add Rule 버튼을 클릭합니다.
1.5 Priority 설정하는 화면에서 Save 버튼을 클릭합니다.
1.6 아래 그림과 같이 SQL_Injection 규칙이 정상적으로 생성되었는지 확인합니다.
2. SQL Injection 공격 방어 확인
2.1 공격을 위한 실습 중 앞의 단계에서 수행한 것과 마찬가지로 DVWA 의 SQL Injection 메뉴의 User ID 입력칸에 아래와 같은 SQL Injection 코드 를 입력한 후 Submit 버튼을 클릭합니다.
2.2 아래 그림과 같이 사용자의 요청이 사용자 정의 차단 페이지 와 함께 차단되는 것을 확인합니다.
'DevOps > AWS' 카테고리의 다른 글
[AWS] AWS WAF 통한 API 보안 (0) | 2023.09.19 |
---|---|
[AWS] AWS System Manager을 통한 보안 강화 (0) | 2023.09.19 |
[AHSS 3주차] 웹 취약점 및 보안 (0) | 2023.09.11 |
[AWS] IAM 정책 (자격증명 기반 정책, 리소스 기반 정책) (0) | 2023.09.09 |
[AHSS 2주차] AWS IAM 보안 (2) (0) | 2023.09.06 |