-
[AWS] AWS WAF 오탐 예외처리 (AWS WAF False Positive Mitigation)Back End/보안 2022. 12. 17. 16:50
이전 포스팅 (AWS WAF 적용 시, 주의해야할 Default 설정들) 에 이어 이번엔 Count 로 설정한 규칙들에 대해 예외처리 하는 작업에 대한 포스팅을 하고자 합니다.
예외처리 작업에 앞서 Count 규칙에 대해 왜 예외처리가 필요한지 알아 보겠습니다.
Count 로 변경한것도 예외처리인데 또 예외처리를 해야한다고? 왜?
WAF 적용 초기에 필자는 이러한 생각을 했었다.
정상적인 트래픽인데도 Block 될 가능성이 있다면 열어주면 되겠군.
Count 설정을 하여 최소한으로만 열어주자.코딩을 하다보면 최소 권한 원칙이라는 단어를 한번쯤은 들어보았을 것이다.
예시로 Java 에서 final 키워드를 일단 다붙여 둔 뒤, 필요할 때만 final 키워드를 제거하는 방식의 코딩기법이 대표적이다.
최소 권한 원칙은 정보보안 용어이기도 한데,
더 설명할 필요도 없이 권한을 최소로 열어두면 좋다는 것은 누구나 쉽게 납득이 가능할 것이다.
하지만 인간은 타협의 동물이기 때문에,
"WAF 로 이미 많은 Reqeust 를 Block 하는 Rule 들을 적용했는데 그중에 몇개만 열어주는 것이 최소 권한 아닌가?" 라며 타협을 하고 옳다고 생각할 수 있다. (필자가 그랬다... 동물 그 자체...)
정보보안에 대한 지식과 AWS WAF 에 대한 지식이 부족한 것이 이렇게 생각하게 된 것에 한 몫 하지 않았나 싶다.
결국, AWS WAF 를 적용하면서 관련지식이 조금이나마 늘어나자
Count 를 적용한 Rule 들에 대해서도 최대한 Block 을 설정해야겠다 라는 생각을 하게되었다.
간단한 예시를 들어보겠다.
앞선 포스팅에서 Size_Restriction_BODY 는 RuleAction 을 COUNT 로 변경해야 된다고 설명하였다.
AWS 공식문서에도 AWS WAF 는 8KB 페이로드만 검사하고 동작한다고 설명이 되어있다.
그럼 공격자는 8KB 만큼의 페이로드를 빈문자열로 채우고 그 뒤에 공격문을 채워서 WAF 를 속여 우회하여 공격할 수 있게된다.
그러면 AWS 제공하는 모든 Rule 들이 무의미하게 된다.
따라서 Size_Restriction_BODY 를 Block 하면 안되는 서비스들의 URI 만 트래픽을 수신할 수 있게 하고, Payload 가 8KB 가 넘지 않는 URI 들은 트래픽을 차단해야 AWS WAF 를 사용하는데에 의의가 있을 것이다.
필자의 보안지식은 깊지 않기 때문에, 이정도 레벨까지 적용하는게 최선이다.
(지나가시는 정보보안 고수님들의 첨언은 언제나 감사히 받겠습니다.)
AWS WAF 에서 오탐 핸들링하기
SQLI_BODY 에 대해 예외처리를 하고 싶다고 가정하겠다.
아래의 예시는 예시일 뿐이며, 본인의 입맛에 작성하면 되겠다.
순서는 아래와 같다.
1. 예외처리를 할 Rule 을 Count 로 변경한다.
2. 허용할 리소스들은 제외한 모든 요청들을 Block 하는 Custom Rule 을 작성한다.
* 정규식은 AWS Console -> AWS WAF -> Regex pattern sets 에서 작성하여 관리할 수 있다.
3. Custom Rule 의 위치를 예외처리 Rule 보다 아래에 위치시킨다.
* Request 는 Rules 의 Priority 0부터 출발하여 마지막까지 도달한다. (Spring 의 Filter 와 같다고 생각하시면 되겠다.)
1. 예외처리를 할 Rule 을 Count 로 변경 (예시 : SQLI_BODY)
2. 허용할 리소스들은 제외한 모든 요청들을 Block 하는 Custom Rule 을 작성
Statement 1. 특정 Rule 에 Filter 된 트래픽인지 검증
Statement 2. Allow 할 URI 를 가진 서비스 도메인인지 검증
Statement 3. 해당 URI 이 아니면 모두 BLOCK
3. Custom Rule 의 위치를 예외처리 Rule 보다 아래에 위치시킨다.
Reference
AWS WAF’s Dangerous Defaults
AWS WAF’s defaults make bypassing trivial in POST requests, even when you enable the AWS Managed Rules
osamaelnaggar.com
728x90'Back End > 보안' 카테고리의 다른 글
[보안] Spring 에서 SQL Injection 방어 그리고 원리 (feat. Prepared Statement, JPA, MyBatis) (0) 2023.02.13 [XSS] HTML Escape Characters 리스트 (1) 2022.12.19 [보안] 웹서버 정보 감추기 - AWS Beanstalk 에서 Server Version Disclosure (Feat. .ebextension & .platform) (0) 2022.09.17 [컴퓨터 보안] 네트워크 보안 (0) 2020.11.24 [컴퓨터 보안] 인증(Authentication) [메세지 인증(MAC), 사용자 인증, 디지털서명] (0) 2020.11.24