본문 바로가기

보안/침해사고 분석

Directory Traversal Attack (CVE 2021-42013, CVE 2021-41773)

[Directory Traversal Attack 취약점 공격]

Directory Traversal 공격이란 

 - HTTP 트래픽을 대상으로 하며, 공격자가 응용 프로그램 소유 외부의 디렉터리에 엑세스할 수 있도록 하여 잠재적으로 민감한 시스템 파일을 누출 또는 덮어쓰기에 노출시킵니다. 쉽게 말해 요청 디렉터리 경로를 조작하여 서버 내에 중요한 정보를 가지고 있는 파일에 접근을 시도하여 기밀성과 무결성을 훼손시키는 공격입니다. 

 

이것은 디렉터리 상승 경로 순회 또는 역추적이라고도 합니다.  

 

이러한 종류의 공격은 "../" 명령이 통과하도록 허용하는 사용자 입력의 보안 유효성 검사 취약점을 나타냅니다. 

 

Apach HTTP Server 2.4.49 이하 버전에서 경로 유효성 검사 결함으로 인해 경로 탐색이 가능한 취약점으로 원격코드 실행이 허용될 수 있습니다. 

2.4.49 버전에서 취약점을 발견하였으나 2.4.50 패치에서 수정사항이 불완전하여 영향이 있어 업데이트가 필요합니다. 

 

CVE-2021-41773 의 불완전한 수정으로 인해 CVE-2021-42013 취약점이 추가로 발생

 

 

[Payload]

[그림1] Directory Traversal Attack 공격 패킷

실제 공격이 발생한 패킷을 분석해보면, 노란색으로 색칠 된 부분이 해커가 공격을 시도한 행위로 판단할 수 있습니다. 

 

해당 패킷은 /cgi-bin 문자열 탐지 snort rule에 의해서 탐지된 패킷으로 공격 구문을 크게 3가지로 나눠서 내용을 작성하겠습니다. 

 

(1)  /cgi-bin

 

 cgi-bin 이란 ? 

  - cgi-bin은 웹서버 상에 CGI 프로그램들이 저장되어 있는 디렉토리의 일반적인 이름이다. cgi-bin에서의 "bin"은 "binary"를 줄여서 쓴말인데, 그 이유는 옛날에는 프로그램들을 대부분 "binaries"라고 불렀기 때문이다. 그러나 요즘의 현실을 보면, cgi-bin에 있는 대부분의 프로그램들은 스크립트라고 불리는 텍스트 파일인데, 이 스크립트가 같은 컴퓨터의 어딘가에 있는 바이너리 프로그램에 의해 실행되는 것이다.

 

cgi-bin 자체가 공격코드인 것이 아니라 공격에 이용이 가능하기 때문에 해당 디렉터리는 삭제하는 것이 보안에 안전하고, cgi-bin에 접근하려는 시도는 비정상적인 행위로 판단할 수 있습니다. 

 

(2) /../../../../../../..

[그림2] URL 디코딩 결과

 

[그림3] URL 2번 디코딩 결과

 

해당 부분을 보면 알아보기 어려운 문자열이 삽입되어 있습니다. 

URL 인코딩 된 것으로 판단되어 디코딩을 진행한 결과 /../../../../../../.. 문자열이 나타나게 되며, 해당 문자열은 디렉터리 경로를 조작하는 명령어입니다. 

 

URL 인코딩 외에도 보안장비 탐지를 우회하기 위해서 인코딩을 진행하여 공격을 시도하는 경우가 많습니다. 

 

<우회하기 위한 기법 예시>

 

기본 문자열 

../
..\
..\/
%2e%2e%2f
%252e%252e%252f
%c0%ae%c0%ae%c0%af
%uff0e%uff0e%u2215
%uff0e%uff0e%u2216

 

16 bits Unicode encoding

. = %u002e
/ = %u2215
\ = %u2216

 

UTF-8 Unicode encoding

. = %c0%2e, %e0%40%ae, %c0ae
/ = %c0%af, %e0%80%af, %c0%2f
\ = %c0%5c, %c0%80%5c

 

Bypass "../" replaced by ""

..././
...\.\

 

Bypass "../" with ";"

..;/
http://domain.tld/page.jsp?include=..;/..;/sensitive.txt

 

Double URL encoding

. = %252e
/ = %252f
\ = %255c

 

해당 공격 문자열 내용은 아래 하우리 블로그의 내용을 참고하였습니다. 

https://www.hahwul.com/cullinan/path-traversal/

 

Path Traversal (Directory traversal)

🔍 Introduction Path traversal(Directory traversal)은 서비스에서 사용자로부터 받은 입력이 path 형태의 백엔드에서 처리 로직을 가지는 경우, 이를 조작하여 공격자가 원하는 경로로 접근하여 동작을 수

www.hahwul.com

 

(3) /windows/win.ini

 

win.ini 파일은 부팅 시 기본 설정을 저장하는 Windows 운영 체제의 초기화 및 구성 파일 유형입니다. 

컴퓨터를 시작할 때 필요한 일부 기본 및 핵심 설정을 저장하고 로드하는 데 사용되며, 일반적으로 통신 드라이버, 언어, 글꼴, 화면 보호기, 배경 화면 등이 포합됩니다. 이러한 서비스에 대한 모든 설정은 win.ini 파일에 즉시 저장되었습니다. 

컴퓨터가 시작 / 재시작 될 때 Windows는 win.ini 파일에서 사용자 정의 설정에 대한 정보를 로드하고 추출합니다. 

 

(1) (2) (3) 내용을 종합적으로 분석하였을 때 해커는 cgi-bin을 이용하여 Directory Traversal Attack을 시도한 것으로 

서버의 win.ini 파일에 대한 접근 시도로 판단됩니다. 

 

[대응 방안]

1. 사용자 입력 구간에 대한 특수문자 등 Path를 바꿀 수 있는 문자열 검증

2. 파일의 권한을 설정하여 일반적인 사용자의 접근 차단

'보안 > 침해사고 분석' 카테고리의 다른 글