상세 컨텐츠

본문 제목

[Xray] CVE-2020-1938 Apache Tomcat AJP 취약점 점검 도구

[Tech] 정보보안/보안진단, 모의해킹

by tech-dailylife 2020. 3. 4. 15:08

본문

반응형

CVE-2020-1938 취약점이란?

 

구분설명
기본 정보
공개 날짜Apache Tomcat에서 2020.02.24 발표

 

 

 

 

 

 

CVE-2020-1938 Tomcat 취약점을 점검할 수 있는 도구로 Xray Tool 활용 (Ghost CAT 취약점 도구인 Xray)

(허가 되지 않은 점검도구 활용 스캔은 법적 문제 소지가 있으니 주의!)

 

 

 

[데모 환경]

사용 환경 : Kali Linux

Tool 버전 : Xray v 0.19.2

 

 

 

[설치]

1. 웹 브라우저에서 zip 파일 다운로드

"https://github.com/chaitin/xray/releases" 에서 점검 PC OS에 맞는 zip 파일 다운로드

 

 

2. zip 파일 압축 해제

# unzip xray_linux_386.zip -d ./

# unzip [다운받은 zip 파일] -d ./[압축해제 경로]

 

 

 

 

[사용법]

1. xray_linux_386 바이너리 실행

사용 방법 확인 가능 및 내부 프로그램 콘솔로 진입

# ./xray_linux_386

 

 

 

2. 주요 Command 설명

servicescan : CVE-2020-1938 Tomcat AJP 취약점 점검 기능

webscan : 기타 WEB, WAS, CMS 등 CVE 취약점 점검 기능

 

 

3. 내부 프로그램 콘솔에서 명령어 사용하여 점검 수행 가능

> servicescan -target [점검대상 IP:Port]

 

 

 

 

 

(허가 되지 않은 점검도구 활용 스캔은 법적 문제 소지가 있으니 주의!)

[데모 절차]

1. CVE-2020-1938 Tomcat AJP 취약점 스캔 진행 (servicescan 도구 사용)

- 내부 프로그램에 진입하지 않고 OS 커널의 Shell 에서 점검 수행

# ./xray_linux_386 servicescan --target [점검대상 IP:Port]

- Port 번호는 AJP 기본 Port 번호인 8009로 설정

- IP 대신 도메인 URL 주소를 넣어도 가능

 

 

결과 : 취약한 경우, 빨간 글씨로 Vuln 취약점 정보가 노출됨

        취약하지 않은 경우, Vuln 정보 노출되지 않고 종료됨

 

참고 : 데모 점검 대상 서버를 nmap을 통해 포트 스캔해보면, AJP 서비스가 8009번 포트로 열려있는 것을 확인 가능

# nmap -sS [점검대상 IP]

 

 

 

참고 : 개인적 의견으로 Web(Apache 등)을 DMZ망에 구축하고 WAS(Tomcat)를 내부망에 구축했다면, 외부에서는 Web 도메인으로 접근 시에 AJP 포트인 8009번이 열려있지 않아 성공시키는 데 한계가 있는것 같습니다.

 

 

 

 

2. 추가 점검으로 기타 CVE 및 취약점 스캔 진행 (webscan 도구 활용)

# ./xray_linux_386_webscan -url [점검대상 IP 또는 URL]

config file이 로딩되면서 점검 수행 내역을 확인 할수 있음

점검 수행 내역 : WEB 서버, WAS(tomcat, jboss, weblogic), CMS(Drupal, Joomla, Wordpress), DB, FrameWork 등

 

 

 

결과 : 취약한 경우, 빨간 글씨로 Vuln 취약점 정보가 노출됨

        취약하지 않은 경우, Vuln 정보 노출되지 않고 종료됨

 

- 타겟에 대한 request 패킷 전송 수와 전송 지연 시간, 전송 실패율이 나타남

실패율에 따라 관제나 보안장비 및 기타 이슈로 점검 수행이 원활히 되지 않음을 예상할 수 있음

 

 

 

 

 

 

[주관적인 한줄 평] : 물론 미탐/오탐 여부 분석이 필요하지만, CVE 점검 보조 도구로써 활용 가능할 것 같습니다.

 

 

 

(허가 되지 않은 점검도구 활용 스캔은 법적 문제 소지가 있으니 주의!)

 

 

 

 

[기타] webscan 데모 시 발견된 취약점 분석

옆 길로 세버렸네요.. 위에 xray webscan 도구 결과로 빨간 글씨의 Vuln 정보에 나온 취약점들을 가볍게 조사해봤습니다.

 

 

1. CVE-2012-1823 : PHP CGI Remote Code Execution (PHP CGI 코드 원격 실행 취약점)

 

- 취약점 확인 방법

아래 스크린 이미지와 같이 URI 뒤에 "-s" 옵션을 입력 시도

http://[점검 대상 도메인 또는 IP주소]/phpMyAdmin/index.php?-s

취약한 경우, 소스코드가 하이라이트 되어 출력됨

 

 

 

 

2. php Admin(관리자) 페이지 노출 취약점

http://[점검 대상 도메인 또는 IP주소]/phpMyAdmin/index.php

phpMyAdmin이라는 php 관리자 페이지가 노출됨

위험성 : 관리자 페이지가 외부에 노출될 경우 공격자들이 Brute Force 통해 관리자 권한 탈취할 위험성 존재

해결 방안 : 관리자 페이지는 내부망에서 운영하거나 부득이하게 외부망에서 사용하는 경우, IP기반 또는 타 방법의 접근제어 적용

추가 Comment : 해당 경우는 Default 관리자 페이지로 캡처나 OTP 등 추가 확인 절차 기능이 없어 더 취약할 수 있으며, Default 계정 정보를 수정하지 않았다면 쉽게 접속 가능하여 문제가 큼

 

 

 

3. php 프레임워크에 대한 정보 노출 취약점

http://[점검 대상 도메인 또는 IP주소]/phpinfo.php

기본 정보가 노출되는 페이지가 존재하여, php의 각종 정보들이 노출되어짐

노출된 정보는 해킹의 기반 자료로 쓰일 수 있어 노출을 방지 필요

예시 - 버전정보 노출시 CVE 공격 코드가 먹힐 만한 버전이라면 해당 CVE 공격 시도 가능

따라서, 정보가 노출되지 않도록 정보 제공 페이지는 삭제하는 것이 나음

노출되는 정보 : PHP의 시스템 정보, 빌드 날짜, 서버  API 정보, 가상 디렉토리 지원 여부, 설정 파일 경로, 로딩 설정 파일 등 여러 정보 노출

 

 

 

 

 

 

(허가 되지 않은 점검도구 활용 스캔은 법적 문제 소지가 있으니 주의!)

 

[기타] CVE-2020-1938 크로스 점검

도구로 CVE 점검을 할 경우, 도구의 소스코드를 전체 분석하지 않는 한 어떤 로직으로 동작하는지 전부 파악할 수 없어 신뢰성이 떨어집니다. 소스코드가 공개된 경우가 많아 분석하면 좋겠지만 시간상 여유나 역량 부족 등의 이유로 분석할 수 없을 때는 타 도구를 활용하여 크로스 점검하는 것도 한가지 방법입니다.

따라서, CVE-2020-1938 점검 도구로 보이는 하나의 Github에서 제공되는 도구(간단한 코드 수준) 추가 사용해봤습니다.

 

설치 경로 : https://github.com/hypn0s/AJPy

도구 설명 : WAS 유형, 버전 점검 도구 + CVE-2020-1938 점검 도구

 

1. WAS 유형, 버전 점검

# python tomcat.py version [점검 대상 IP주소 또는 도메인 URL]

 

 

결과 : WAS 정보(유형 및 버전)이 출력됨 (취약한 서버의 경우 테스트)

 

 

2. CVE-2020-1938 취약점 점검 (xray 도구의 Cross Check 의미로)

# python tomcat.py read_file --webapp=manager /WEB-INF/web.xml [점검 대상 IP주소 또는 도메인 URL]

설명 : webapp 파일(web.xml) 읽기 시도

 

 

결과 : 취약한 경우, web.xml 파일 내용이 출력됨

 

 

# python tomcat.py read_file --webapp=ROOT/ /WEB-INF/classes/application.xml [점검 대상 IP주소 또는 도메인 URL]

설명 : webapp 파일(application.xml) 읽기 시도

 

 

결과 : 취약한 경우, application.xml 파일 내용이 출력됨

 

 

취약하지 않은 경우(점검이 실패할 경우)

점검 실행해도 끝나지를 않아, 인터럽트 발생 시켜 Traceback 출력 내용 확인해보면,

멈춘 시점 : 점검 대상의 host와 port 지정한 후에 socket 연결할 때 연결이 되지 않는 문제가 보임

멈춘 이유 : AJP의 경우 8009 포트가 열려있어야 점검 가능한데, 해당 점검 대상에 8009 포트가 닫혀있어 점검이 멈춤

                (포트가 닫혀 있거나, 또는 특수한 경우 보안 장비 차단일 수도 있음)

 

 

 

여기까지 확인했습니다..  읽어주셔서 감사합니다~

반응형

관련글 더보기

댓글 영역