개요
예전에 서버를 열고 얼마 지나지 않은 시점에(한 한 시간 지났었나?) 해커의 공격을 받은 적이 있었다.
누군가가 내 사이트로 php기반 공격을 하려했고.. 심지어 맨 뒤에 Hello라고 했다....
그때부터 불안에 떨면서 ALB보안그룹에 우리 팀원들 IP만 열어뒀었는데, 늘 이렇게 숨어 살 순(?) 없었다.
web application firewall을 적용해서, 어플리케이션을 안전하게 보호해보자!
AWS WAF 란?
Web Application Firewall은 웹 어플리케이션을 보호하기 위해 HTTP/HTTPS 트래픽을 감시하고, 필터링하는 보안 솔루션이다.
네트워크 방화벽과는 달리 어플리케이션 계층(7계층)에서 동작하며, 웹 어플리케이션에 대한 공격을 탐지하고 차단해준다.
이를 AWS에서 클라우드 기반으로 유지 보수가 간편하게 제공해준다.
대표적인 기능으로는,
1. OWASP Top10에서 정의한 주요 보안 취약점(잘 알려진 보안 취약점 공격들, 후술 할 예정)에 대한 방어를 제공한다.
2. 요청을 분석하여 비정상적인 트래픽을 차단한다.
3. 봇과 자동화 공격을 차단한다. (스크래핑, 크롤링, DDoS)
4. SSL/TLS 암호화된 트래픽을 복호화하여 공격 여부를 확인한다.
한계도 존재한다. 알려지지 않은 새로운 공격에는 대응이 어렵고, 정상적인 요청을 차단할 가능성이 있다.
모든 요청을 검사하기 때문에 트래픽이 많을 경우에는 성능이 떨어질 수 있고,
지속적인 룰 업데이트와 튜닝이 필요하다.
설정
사용중인 ALB에 붙였다.
WAF를 CloudFront에 적용하면 ALB까지 트래픽이 도달하기 전에 차단할 수 있는데, CloudFront를 사용중이지 않으니 아쉽게 됐다
기본적으로 AWS가 제공해주는 보호 규칙 세트는 11개가 있다. 위에서부터,
1. Admin protection
관리자 페이지에 대한 외부 접근을 차단해준다. 만약 /admin 같은 페이지가 있다면 추가하는 게 좋다.
2. Amazon IP reputatoin list
AWS에서 제공하는 악성IP차단 목록을 기반으로 요청을 필터링한다. 봇, 스팸, DDoS 공격을 어느정도 예방 가능하다.
3. Anonymous Ip list
VPN, 프록시, Tor 노드에서 들어오는 요청을 어느정도 차단 가능하다. 익명화된 트래픽을 막아서, 의심스러운 접근을 걸러낼 수 있다.
4. Core rule set
웹 어플리케이션을 위한 기본적인 보호 규칙이다. OWASP Top 10 취약점(XSS, SQL ingection, Command Injection 등)에 대한 보호기능을 제공해준다.
5. Known bad inputs
이미 알려진 악성 패턴의 요청을 차단한다. OWASP 취약점 외에도 다양한 자료 기반으로 차단기능을 제공한다.
6. PHP application
PHP환경에서 위험한 입력을 차단한다.
7. SQL database
SQL Injection 공격을 방어해준다. DB를 사용하는 서비스라면 필수라고 볼 수 있다.
8. WordPress Application
WordPress 사이트에서 자주 발생하는 보안 취약점 공격을 차단해준다.
이 외에 operating system은 OS취약점을 이용한 공격을 차단하는 툴이다.
난 이렇게 6개를 추가해줬다! 나는 Spring boot기반 앱이라 PHP, OS는 해당사항에 없다.
WordPress는 이제 봤는데 실수로 넣었다
WAF는 시스템이 특이한데, Capacity가 1500점 이상이면 유료, 5000점 이상으론 추가할 수 없는 시스템이다.
나처럼 Spring boot 어플리케이션에 기본적인 기능만 넣는다면 딱 1175점으로 무료로 사용할 수 있다.(사진은 wordPress 포함값이다..)
규칙 우선순위는 더 강력한 차단 툴을 위쪽에 두는 게 낫다.
이건 악성 사용자의 패턴을 분석할 수 있게 해주는 옵션인데, 웬만하면 켜두는게 좋다.
설정 끝!
수상한 사용자의 ip를 어플리케이션 내부에서도 확인하고 있으니, 반복적으로 이상 행동을 보이는 사용자를 WAF에서 IP차단을 걸 수도 있다!
결과
자고 일어나서 sample requests 확인해보니까 전세계 사람들이 열심히 자기 할일을 하고 있는 걸 볼 수 있었다
.env 파일 접근하려는 놈도 있고 admin에 auth에 php공격도 있고 다양하다
완성! 진짜끝
'팀 프로젝트 > cheerha.project' 카테고리의 다른 글
RedisTemplate과의 결합도를 낮춰봅시다 (DIP) (0) | 2025.03.14 |
---|---|
Grafana Alert Rule 설정하기 with Slack (0) | 2025.03.12 |
Fluentd로 로그를 수집하고, ElasticSearch-Kibana로 시각화하자! (0) | 2025.03.11 |