KISA에서 진행하는 2021년도 실전형 정보보호제품군 초급 2차과정을 진행하다가 재미있는 것을 발견하여 기록해둔다.
해당 과정에서는 ModSecurity라는 WAF을 운영하여 웹 취약점들을 차단하는 실습을 진행하였다.
1. 설정되어 있는 방화벽 룰
우선 현재 적용되어 있는 방화벽 룰을 확인해보자.
해당 방화벽 룰에서는 /etc/passwd라는 문자열 자체를 방어하고 있다.
이를 우회하는 방법은 다양하지만 이번에 진행하는 방법은 초기화되지 않은 bash 변수를 사용해보겠다.
2. 초기화되지 않은 Bash 변수
여기서 말하는 초기화되지 않은 bash 변수란 $u를 말한다.
아래 그림을 보자.
리눅스 bash 쉘에서 다음과 같이 초기화되지 않은 변수를 echo로 출력해보면 아무것도 출력되지 않는 것을 볼 수 있다.
즉 초기화되지 않은 변수는 ""를 의미한다는 것이다.
이를 공격에 적용해보자.
3. 공격에 활용
우선 웹쉘을 통해 cat /etc/passwd 명령어를 날리면 아래 그림과 같이 방화벽에 의해 차단됨을 확인할 수 있다.
이제 여기에 위해서 설명한 초기화되지 않은 변수를 활용하게 되면 다음과 같이 방화벽 우회가 가능하다.
다음과 같이 초기화된 변수를 길게 사용할 수도 있다.
4. 대응방안
- 해당 공격방법을 막기 위해서는 $ 문자를 방화벽에서 차단하면 된다. 하지만 수많은 오탐이 발생할 수 있기 때문에 단순히 $를 차단하는 것은 권고하기 어렵다.
- 따라서 오탐을 최대한 방지하면서 해당 공격 패턴을 막기 위해서는 공격을 시도하기 위해 특수문자를 많이 사용할 가능성이 크므로 4번 혹은 그 이상 특수문자를 사용할 경우 차단하는 방식으로 가는 것을 권고한다.
- 가장 추천하는 방식은 시큐어코딩을 통해 이러한 공격 자체가 안되도록 하는 것이 BEST이다.
( 참고 ) https://www.secjuice.com/web-application-firewall-waf-evasion/
'Hacking > Web' 카테고리의 다른 글
ASP.NET ViewState deserialization (0) | 2021.08.19 |
---|---|
Oracle WebLogic Server 원격코드 실행 취약점 (CVE-2020-14750) (0) | 2021.07.28 |
Liferay Portal RCE ( CVE-2020–7961 ) (0) | 2020.08.14 |
XSS In event handler (0) | 2020.08.06 |
Content Security Policy(csp) (2) | 2020.07.28 |