-
[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
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