[AWS] AWS WAF
1. AWS WAF (Web Application Firewall) 란?
WAF는 웹 어플리케이션 보안에 특화전 전용 L7 방화벽 장비이다.
웹 서비스 취약점에 대한 공격을 탐지하고 차단하는 기능을 수행하며, 웹 접근 트래픽에 대한 7계층 페이로드 분석 및 패턴 기반의 필터링을 통해 공격을 탐지하고 차단할 수 있다.
1) 구성요소
Web ACL, Rule, Statement 로 구분된다. Statement가 모여 Rule, Rule이 모여 Web ACL을 이루는 형태이다.
Web ACL
AWS WAF의 최상위 컴포넌트로 하위 컴포넌트인 Rule을 추가하여 AWS 리소스를 보호한다. Web ACL을 사용하여 CloudFront 배포, API Gateway Rest API 또는 ALB가 응답하는 웹 요청을 세부적으로 제어할 수 있다.
Web ACL 내에 포함되는 Rule은 최대 100개까지 생성이 가능하다.
Rule
Web ACL의 하위 컴포넌트로 검사 기준을 정의하고, 기준을 충족할 경우 수행하는 작업을 포함한다.
Rule을 사용하여 일치 대상에 대해 요청을 차단하거나 허용할 수 있다.
AWS에 의해 사전 정의된 규칙이 있으며, 사용자 정의 규칙을 사용할 수도 있다.
Rule의 하위 컴포넌트로 Statement가 있으며, 최대 5개의 Statement를 설정할 수 있다.
Statement
웹 필터링의 상세 조건을 정의하는 컴포넌트이며, 상세조건은 Inspect, Match Condition, Transformation, Action으로 구분된다.
Inspect : Inspection 대상을 정의하는 조건
Match Condition : Inspection 대상에 대한 분류 방법
Transformation : Match Condition의 추가적인 옵션을 부여
Action : 필터링 동작 방식을 정의하여 허용/거부/카운트 중 선택
2. AWS WAF 구성
구성할 인프라는 다음과 같다.
보안에 취약한 DVWA 웹 서버를 구축하고 ALB에 연결한다.
ALB에 WAF를 연결하여 Web ACL에 위반되는 트래픽을 거부하도록 한다.
-
WAF를 제외한 인프라를 구성한다. DVWA-EC2의 구성은 다음과 같다.
#!/bin/bash hostname DVWA-EC2 yum install -y httpd mariadb-server mariadb php php-mysql php-gd systemctl start mariadb httpd systemctl enable httpd.service mariadb.service echo -e "\n\nqwe123\nqwe123\ny\nn\ny\ny\n" | /usr/bin/mysql_secure_installation mysql -uroot -pqwe123 -e "create database dvwa; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost' IDENTIFIED BY 'qwe123'; flush privileges;" wget https://github.com/ethicalhack3r/DVWA/archive/master.zip unzip master.zip mv DVWA-master/* /var/www/html/ mv DVWA-master/.htaccess /var/www/html/ cp /var/www/html/config/config.inc.php.dist /var/www/html/config/config.inc.php sed -i "s/p@ssw0rd/qwe123/g" /var/www/html/config/config.inc.php sed -i 's/allow_url_include = Off/allow_url_include = on/g' /etc/php.ini chmod 777 /var/www/html/hackable/uploads chmod 777 /var/www/html/config chmod 666 /var/www/html/external/phpids/0.6/lib/IDS/tmp/phpids_log.txt systemctl restart httpd.service
-
DVWA에 접속하고 로그인한다. ID는 admin, PW는 password 이다.
Create / Reset Database 를 클릭 후 다시 로그인한다.
DVWA Security 탭에 들어간 후 보안은 low 로 설정한다.
비정상적인 HTTP 트래픽 테스트를 한다.
종류 구문 SQL Injection 1’ OR 1=1# Command Injection 8.8.8.8; cat /etc/passwd XSS (Reflected) <script>alert(document.cookie)</script> -
콘솔에서 Web ACL을 생성한다. Resource type은 Regional Resources 이고, Region 은 Asia Pacific (Seoul) 로 설정한다.
사전 정의된 Rule을 선택후 AWS managed rule groups 에서 다음 Rule 들을 추가한다.
- Anonymous IP list
- Core Rule Set
- SQL database
필요하다면 사용자 정의 규칙을 추가한다. 예시로 다음과 같은 Rule을 추가하였다.
- Statement / Inspect = URL path / Match Type = Contains String / String to match = exec
Action은 Deny로 한다.
-
생성한 Web ACL에서 Associated AWS resources 탭에 들어간 후 ALB를 추가하여 연결한다.
이제 HTTP 트래픽이 ALB로 전달되기 전에 WAF에 의해 HTTP 페이로드를 검사받게 된다.
설정해놓은 Rule에 감지되는 트래픽은 차단되어 403 Forbidden이 뜬다.
댓글남기기