brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Sep 25. 2023

37탄-7. AWS - 웹 공격의 방어 환경 구축

WAF로 웹공격 방어 환경을 구축해보자. 


<1> WAF 구축 

<2> WAF 로깅 설정 

<3> WAF 로깅 대시보드 설정

<4> AWS WAF web ACL 정책 설정 : 사용자 정의 규칙 - 링크  

<5> AWS WAF web ACL 정책 설정 : 관리형 규칙 - 링크 

<6> 참고 자료



<1> WAF 구축  


1

선수 조건

앞에서 Cloudformation 으로 기본 환경을 구축해야 한다.

LB등

https://brunch.co.kr/@topasvga/3445



AWS WAF 설정하기- 링크 

매뉴얼        

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/02-preparation/02-webacl-creation  



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 사이트 확인 하자






<2> WAF 로깅 설정  



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  







<3> WAF 로깅 대시보드 설정 


1

AWS WAF 로깅 대시보드 설정 with CloudFormation- 링크Github  


WAF의 Cloudwatch log만 가지고 , 쉡게 여러 대시보드 설정이 가능하다.


2

Cloud formation으로 구축하자

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  


3

WAF-dashboard 

aws-waf-logs-ahss

ap-northeast-2

DemoACL  


4

배포 후 출력 output 에 링크 클릭 → CW Dashboard 확인     (바로는 데이터가 없어 보이지 않는다)


5

대시보드가 만들어 진다.

새로 고침 할때만 비용이 발생한다.




<4> AWS WAF web ACL 정책 설정 : 사용자 정의 규칙 - 링크  


https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/04-mitigation-basic/01-custom


1

SQL Injection 공격 방어 : web ACL에 Rule 설정 후 공격 시도 확인 - 링크     


https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/04-mitigation-basic/01-custom/01-m-sql-injection


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 공격 방어 - 링크

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/04-mitigation-basic/01-custom/04-m-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 공격 방어 - 링크     

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/04-mitigation-basic/01-custom/05-m-xxe



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 테스트

파일 업로드는 됨.

카운트는 올라감.



SSRF 공격 방어 - 링크     

Rules → Add my own rules and rule groups : Rule builder - Name(SSRF) ⇒ 링크 내용 참고하여 설정

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/04-mitigation-basic/01-custom/07-m-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로 변경





<5> AWS WAF web ACL 정책 설정 : 관리형 규칙 - 링크 



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 따라해보기 - 링크





<6> 참고 자료


Security Automations for AWS WAF

 : 소개, Workshrop

Security Automations for AWS WAF | AWS 솔루션


https://docs.aws.amazon.com/solutions/latest/security-automations-for-aws-waf/architecture-overview.html


AWS WAF (Security Automations) [이론편]


AWS WAF (Security Automations) [실습편]


Workshop Studio



     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 - 링크





다음은 보안 모범 사례 100

https://brunch.co.kr/@topasvga/3448


주말 CloudNet  스터디 내용 참고하여  정리한 부분입니다.

https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863  


감사합니다.


                    

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari