Terraform으로 구축한 DVWA를 이용해 간단한 WAF 실습

김유신·2024년 2월 17일
0

AWS.WAF

목록 보기
1/1
post-thumbnail

테라폼 깃허브 링크 https://github.com/choisungwook/aws_waf_at_dvwa.git

실습 환경 구축 (테라폼 구조)

테라폼으로 aws 리소스 생성, aws alb dns 주소 접속
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
WAF 이론 -

AWS WAF는 웹 어플리케이션을 보호하는 웹(어플리케이션)방화벽입니다. WAF는 사용자 요청을 검사하여 AWS리소스로 전달할지 거부할지 결정합니다.

WAF는 웹 어플리케이션을 보호하기 때문에 HTTP프로토콜을 사용하는 AWS리소스만 연결 가능합니다. cloudfront, application loadbalancer, api gateway등 WAF는 HTTP프로토콜 요청을 검사하므로 웹 애플리케이션이 아닌 다른 애플리케이션이나 AWS리소스에는 연동이 불가능합니다.

WAF 설정 -

WEB ACL 설정 , WAF AWS 리소스 연결

WEB ACL(액세스 제어 목록)에는 사용자 요청을 검사할 규칙이 있습니다. 사용자 요청이 WEB ACL에 있는 규칙과 일치한다면, 해당 규칙이 지정한 액션에 따라 요청이 처리됩니다. 예를 들어 액션이 허용이라면 요청이 허용되고, 반대로 액션이 거부라면 요청이 거부됩니다. 사용자 요청이 WEB ACL이 관리하는 규칙에 일치하지 않으면 디폴트 액션을 따릅니다.

규칙 검사 순서 -

WEB ACL에 규칙이 여러 개라면, 우선순위 따라 규칙을 사용하여 사용자 요청을 검사합니다. 만약 규칙이 매핑되면 바로 규칙의 액션을 사용하고, 하위 우선순위 규칙은 사용하지 않습니다.

매핑되는 규칙 액션을 바로 사용하므로 규칙 우선순위를 고려하여 규칙 우선순위를 설정해야 합니다. 중요한 규칙이 우선순위를 낮게 설정하면, 상위 우선순위 규칙때문에 사용되지 않는 상황이 생깁니다.

WAF 로그 저장

WAF로그는 2곳에 저장됩니다.

sample request(디폴트): 마지막 3시간 전 로그 저장
장기저장(선택): WAF로그를 영구 저장

3시간을 초과한 WAF로그를 분석하려면 영구저장 설정을 해야 합니다. 로그를 저장할 위치는 cloudwatch, kinesis firehose, s3 bucket 중 한 개를 선택할 수 있습니다.

모니터링 방법

WAF 테스트와 모니터링은 운영환경과 동일한 스테이지환경 또는 QA환경에서 테스트하는 것을 권장합니다. 운영환경에서 테스트하면 기존 서비스에 영향이 미칠 수 있고 테스트 규칙때문에 보안위험이 노출될 수 있습니다.

만약 운영환경에서 규칙을 테스트해야 한다면 액션을 count로 설정합니다. count는 허용, 거절하지 않고 로그만 남깁니다. 그리고 하위 우선순위 규칙을 실행합니다. 만약 모든 규칙의 액션이 count이면 디폴트 액션이 실행됩니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

실습 -

테라폼으로 생성된 로드 밸런서의 DNS 주소로 접속합니다.

유저 네임 - admin
초기 비밀번호 - p@ssw0rd


로그인 후 초기화 페이지에서 Rest Database를 눌러줍니다.
이후 맨아래 Please login. 으로 다시 로그인 해줍니다.
다시 로그인 할때는
유저 네임 admin
수정 비밀번호 - password

로그인 후 실습을 위해 왼쪽 하단 DVWA Security로 이동하여 Security Level을 Low로 낮춰줍니다.

AWS WAF - Web ACLs으로 이동해 줍니다. (리전 서울)


웹 ACL 생성을 통해 이름만 설정 후 모든 과정을 기본으로 생성해 줍니다.

  • 리소스 타입에 대한 설명 - 글로벌 혹은 리전 리소스인지 선택하는것.

클라우드 프론트 - 글로벌 리소스
실습에는 ALB를 사용 - 리전 리소스 선택


생성한 Web ACLS을 눌러 Associated AWS resources에서 Add AWS resources로 리소스를 연결해 줍니다.


실습에서는 ALB를 사용했습니다 Add로 추가해줍니다.

현재 이 구조로 WAF가 연결 되었습니다.

DVWA로 돌아가 SQL Injection에서 'OR 1=1 # 공격코드를 넣고 송신해봅니다.

유저 아이디에 대한 항목만 나와야 하지만 모든 유저의 정보가 나옵니다. (공격 성공)

Web ACLs - 만들어둔 waf로 이동한뒤 Sampled requests에서 로그를 확인 할 수 있습니다.
(아직 룰이 없기 때문에 공격이 WAF를 거치고 ALLOW된걸 확인 할 수 있습니다.)

만들어둔 waf - Rules로 이동 한 뒤 aws에서 제공해 주는 Add managed rule groups을 선택해줍니다.

AWS - managed rule groups 에서 SQL database를 추가해주고 규칙을 추가해줍니다.

다시 DVWA로 돌아와 공격을 해보면 403 Forbidden으로 차단 되는걸 확인 할 수 있습니다.

403 Forbidden

Sampled requesets에서 BLOCK 된 로그를 확인 할 수 있습니다.

실습2 -

실습2를 위해 규칙 우선순위를 잘못 적용

기존 waf 규칙에 사용자 설정 룰 추가


이름 설정 후 (allow-all)
모든 url이 starts로 시작되는걸 규칙에 탑제하겠다는 설정
action - allow(모든 트래픽 허용)

룰 우선순위가 allow -all이 되도록 설정. (위로 갈수록 우선 순위)

설정된 현재 상황

다시 DVWA에 돌아가 공격하면 WAF 차단이 되지않음.

우선순위가 잘못되었기 때문 모든 트래픽 허용(1) SQL 룰 (2)

참고한 사이트 https://github.com/choisungwook/aws_waf_at_dvwa

profile
KYS's blog

0개의 댓글