1. Apache Tomacat 취약점
Apache Tomcat은 Web server 기능을 하는 Apache와
WAS(Web Application Server) 기능을 하는 Tomcat이 서로 합쳐진 합성어다.

Apache는 정적 data를 처리하는 web server 역할을 하는 반면,
Tomcat은 web server 역할을 수행할 뿐만 아니라 동적 data를 처리하는
web container 기능도 같이 수행한다.

다만, 정적 data 처리 속도가 WAS에 비해 web server가 현저히 빠르므로
정적 data 처리 대신 동적 data 처리만을 Tomcat에서 수행한다.

WAS process를 보면 web server와 WAS 사이에서 data 송수신을 위해
사용하는 protocol이 존재하는데이를 AJP(Apache Jserv Protocol) 라고 한다.
AJP는 여러 web server로부터 여러가지 application server로의
load balancing을 구현하기 위한 목적으로 사용한다.
이러한 구조에서 Ghostcat은 AJP를 통해서 WAS와 Web server간
송수신하는 data로 인하여 발생하는 취약점이다.
AJP는 TCP/8009 port를 사용하며 외부에 노출되지 않는 protocol이지만
AJP request가 Apache에서 Tomcat으로 전달될 때
사용자 입력값 검증없이 실행되어 임의로 file 읽기나 실행이 가능할 경우
혹은 file upload가 가능한 환경에서 임의의 file이 upload된다면
AJP 취약점을 이용하여 공격 code를 실행시킬 수 있는 구조다.
실제로 web에서 접근할 수 없는 영역을 공격 code를 삽입하여
AJP request를 전송하게 되면 이에 대한 응답 값을 통해
내부 정보를 탈취할 수 있게 된다.
[Ghostcat = AJP를 통해 전달되는 data 검증의 부재로 인한 취약점]

MSF로 metasploitable3에 tomcat 취약점이 존재하는지 확인하면
다음과 같이 공격 가능한 route를 반환한다.
해당 route로 URL 접속을 하면 다음과 같은 결과를 확인할 수 있다.



MSF로 공격하는 과정을 wireshark로 AJP request packet을 확인할 수 있는데
MSF가 metasplotable3로 다음과 같이 field 값을 설정하여 전달한다.
이 세가지 attribute의 내용이 검증되지 않기 때문에
공격자가 이를 변경할 경우 변조된 경로의 file을 읽어올 수 있게 된다.
| 1. javax.servlet.include.request_uri: servlet으로 전송하는 request URI의 전체 attribute 값 2. javax.servlet.include.path_info: servlet의 mapping pattern에 추가적인 path 정보 3. javax.servlet.include.servlet_path: servlet이 request를 처리하는 URI의 한 부분을 대표한 값 |
2. GhostCat 대응방안
1. Apache Tomcat 보안패치
Apach Tomcat의 version을 확인한 후,
Ghostcat 취약점에 노출된 version에서 upgrade를 하는 것을 권고한다.
2. AJP protocol 자격 증명 설정
AJP protocol을 사용해야 하는 경우, Apache Tomcat이 설치된 디렉토리 위치에
/conf/server.xml file의 AJP protocol 활성화 여부를 결정하는 값을 변경하도록 한다.
1. AJP protocol 활성화 여부를 결정하는 설정 값 변경
<Connector protocol= “AJP/1.3”
address= “Tomcat server IP”
port= “8009”
redirectPort= “8080”
requiredSecret=”[AJP 인증속성]” />
2. 저장 후 재시작
3. SNORT 적용
SNORT rule을 적용하여 packet에 어떠한 data field가 포함되어 들어왔는지 확인
즉, host가 packet을 처리하기 전에 앞단에서 탐지를 하는 방식이다.
다음 그림처럼 servlet으로 전달하는 data가 있는지 사전에 확인하여
이를 alert 하는 rule을 적용하도록 한다.

4. AJP connector 비활성화 하기
만약 AJP connector를 사용하지 않을 경우, server.xml file을 확인하면
AJP connector와 관련된 정보와 활성화 설정이 작성되어 있다.
여기서 AJP connector를 주석 처리하여 비활성화하는 것을 권고한다.

'CVE' 카테고리의 다른 글
| CVE 2024-23897 (0) | 2024.06.29 |
|---|
