1
선수 조건
앞에서 Cloudformation 으로 기본 환경을 구축해야 한다.
LB등
https://brunch.co.kr/@topasvga/3445
AWS WAF 설정하기- 링크
매뉴얼
2
AWS 관리 콘솔
[web ACL 생성]
WAF⇒ Create web ACL
Name :
DemoACL
Resource type : Regional resources
Region :
Aisa Pacific(Seoul)
Add AWS resources 클릭
ALB 선택
하단에 생성해둔 ALB 체크 후 Add 클릭
3
Step2** : 별도 추가 없이 **Next**
Step3** : 별도 추가 없이 **Next**
Step4** : ‘**Enable sampled requests**’ 클릭 후 **Next** (내용이 많으므로 샘플로 한다)
Step5** : **Create web ACL 클릭**
4
[차단 페이지 생성] ?
사용자 요청을 차단하는 경우 ‘사용자 정의 웹페이지’를 출력 설정
생성된 Web ALC 클릭 → Custom Response Bodies 선택 ⇒ Create Custom Response Body : 이름 custom_denied , Type(HTML)
차단되었을때 뜨는 경고 사이트
첨부 text 내용 입력
6
Ovieview 클릭
DVWA 로그인 admin / passw 하여 메뉴 클릭 클릭하여 내용을 남김다.
DVWA 사이트는 ALB를 통해 로그인 한다.
WAF를 ALB에 연결했기 때문에 접속 이력등 내용이 남을 것이다.
남은 내용을 Sampled requests 사이트 확인 하자
1
매뉴얼
https://aws.amazon.com/ko/blogs/mt/analyzing-aws-waf-logs-in-amazon-cloudwatch-logs/
2
CloudWatch Logs 신규 생성
WAF > Web ACLs > Asia Pacific(Seoul) 선택 > DemoACL 클릭
Logging and metrics > Enable 클릭 > Cloudwatch Logs log group > 새로 생성
반드시 aws-waf-logs로 시작되는 이름
aws-waf-logs-ahss
보존(1일)
3
CloudWatch > Logs Insights 사용해보기 (10분 걸림)
로그 그룹 선택 - aws-waf-logs-ahss
4
최근 기준 20개 로그 확인
fields @timestamp, @message
| sort @timestamp desc
| limit 20
1
AWS WAF 로깅 대시보드 설정 with CloudFormation- 링크Github
WAF의 Cloudwatch log만 가지고 , 쉡게 여러 대시보드 설정이 가능하다.
2
Cloud formation으로 구축하자
3
WAF-dashboard
aws-waf-logs-ahss
ap-northeast-2
DemoACL
4
배포 후 출력 output 에 링크 클릭 → CW Dashboard 확인 (바로는 데이터가 없어 보이지 않는다)
5
대시보드가 만들어 진다.
새로 고침 할때만 비용이 발생한다.
1
SQL Injection 공격 방어 : web ACL에 Rule 설정 후 공격 시도 확인 - 링크
WAF & Shield
WEB ACL > Asia Pacific (Seoul) > Demo ACL 클릭
Rules → Add my own rules and rule groups (자신의 룰을 만들어본다) / 관리형 룰은 다음번에 테스트 한다. > Rule builder > Name : SQL_Injection > Regular rule > matches the statement >
Query string > Containes SQL Injection attack > Compress whitespace, URL decode Unicode > High 좀더 민감하게 검사해보자.
Custom respose-optional > Enable
200
custom deny 선택
Add rules
DVWA에서 테스트
AWS WAF 의 SQL Injection 규칙문에 대해 Sensitivity levels를 설정 - 링크
' OR 1=1 #
결과 = 차단됨
2
Reflected XSS 공격 방어 - 링크
Rules → Add my own rules and rule groups : Rule builder - Name(Reflected_XSS) ⇒ 링크 내용 참고하여 설정
DVWA 사이트 > XSS(Reflected) > 아래 입력하여 테스트
<script>alert(document.cookie)</script>
차단됨
WAF > Overview에서 차단 내용 확인이 된다.
3
Stored XSS 공격 방어 - 링크
Rules → Add my own rules and rule groups : Rule builder - Name(Stored_XSS) ⇒ 링크 내용 참고하여 설정
DVWA 사이트 > XSS (Stored)
Name 부분에는 admin 을 입력하고
Message 부분에는 아래의 XSS 코드를 입력한 후 Sign Guestbook 버튼을 클릭
: <script>alert(document.cookie)</script>
4
Command Injection 공격 방어 - 링크
Rules → Add my own rules and rule groups : Rule builder - Name(Command_Injection) ⇒ 링크 내용 참고하여 설정
matches all the statements (AND) 설정!
여러개 조건이 있고, AND조건이다. 여러 조건이 동시에 매치되어야 한다.
/vulnerabilities/exec/
DVWA 사이트 > Command Injection
1.1.1.1 && cat /etc/passwd
1.1.1.1 ; whoami
8.8.8.8 ; curl -s http://169.254.169.254/latest/meta-data/iam/
DVWA 사이트 차단됨
WAF Overview에서 확인
5
File Upload 후 Backdoor 공격 방어 - 링크
Rules → Add my own rules and rule groups : Rule builder - Name( XXE ) ⇒ 링크 참고
/hackable/uploads
로 바뀌는 경로를 차단 하겠다. 해당 경로로 직접 들어오는 부분에 대해 차단하는 것이다. 정상 경로 아님.
적용에 10분 걸린다.
파일 업로드로 테스트한다.
http://{{ALB DNS Name}}/hackable/uploads/phpbash.php
Count test
차단규칙을 Count모드 변경 : Action(Count)로 변경 ⇒ 위 접속 후 3~5분 정도 후 요청 로그 확인
차단은 아님. 통과를 시킴, 카운트 수를 남김
서비스 사용시는 Count 설정후 오탐인지 확인하는 작업이 필요하다. (1달정도 탐지)
File Upload 테스트
파일 업로드는 됨.
카운트는 올라감.
6
SSRF 공격 방어 - 링크
Rules → Add my own rules and rule groups : Rule builder - Name(SSRF) ⇒ 링크 내용 참고하여 설정
matches all the statements (AND) → 두번째는 조건에서 Negate statement results 는 Uncheck 임
http://도메인 주소
/vulnerabilities/fi/?page=http://169.254.169.254/latest/meta-data/iam/security-credentials/IAMLabInstanceRole
차단 확인
7
무차별 입력 공격 방어 - 링크 ⇒
워크셥과 다르게 설정
추후에 Workshop의 rule 설정 내용(rate: POST 등) 처럼 실습을 변경하자
Rules → Add my own rules and rule groups : Rule builder - Name(Brute_Force) ⇒ 링크 내용 참고하여 설정
예) 5분 내에 소스 ip가 100개에서 접근차단 경우
Rate-based rule선택 : Rate limit(100), Source IP Address, Only condider requests that match the criteria in a rule statement
matches all(AND), 첫번째 조건(about.php),
두번째 조건‘Negate’ Uncheck GET, Action(CAPTCHA, time 60)
크롬 브라우저에서 로그인 후 아래 사이트에서 새로고침 110번 정도 시도 → CAPTCHA 창 확인
테스트
http://<ALB>/about.php
테스트 - F5 100번 - 5분 걸림
http://www.masterseo0.link/about.php
결과
캡차 나옴
8
아래는 테스트 한건이라 Pass
GET Flooding 공격 방어 - 링크
Rules → Add my own rules and rule groups : Rule builder - Name(GET_Flooding) ⇒ 링크 내용 참고하여 설정
Rate-based rule 선택 : Rate limit(100), Source IP Address, Only condider requests that match the criteria in a rule statement
URI Path 의 String to match 에 /vulnerabilities/weak_id 입력(링크와 다름)
[Attacker EC2]
# apache bench 툴로 총 10000000 요청 전송
ab -n 10000000 -c 10 <alb>/vulnerabilities/weak_id/
모든 Rule의 Action 을 COUNT로 변경
1
VPN, Tor, Proxy IP 사용자 차단 설정
: Add managed rule groups → AWS managed rule groups : Anonymous IP list
우선순위를 높이자.
기타
다른 사업자 룰도 유료로 제공한다.
AWS WAF 익명 IP 목록 관리 규칙 HostingProviderIPList가 AWS IP를 차단하는지 확인 - 링크 → 어떻게 될까요?
2
Browsec VPN 에서 다른 국가로 설정 후 접속 시도 해보자
VPN으로 접속 테스트 하자.
차단 된다.
3
AWS WAF web ACL 정책 설정 : 심화 - 링크
4
로그 분석 및 예외 처리 : 위 로깅 설정부분에 CloudWatch Log/ Log Insight 따라해보기 - 링크
Security Automations for AWS WAF
: 소개, Workshrop
Security Automations for AWS WAF | AWS 솔루션
AWS WAF (Security Automations) [이론편]
AWS WAF (Security Automations) [실습편]
AWS WAF Workshop - 링크 CM1* CM2
Protect your application security perimeter with AWS WAF - 링크
AWS Protecting Workloads Workshops - 링크
Serverless Security Workshop - 링크
Building Prowler into a QuickSight powered AWS Security Dashboard - 링크
https://brunch.co.kr/@topasvga/3448
주말 CloudNet 스터디 내용 참고하여 정리한 부분입니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
감사합니다.