Directory Traversal 이란?

2023. 3. 31. 23:23

Directory Traversal(디렉토리 순회 또는 파일 경로 순회)

: 공격자가 요청 메시지 URL이나 파라미터를 변경하여 정상적으로 허용하지 않은 기능을 실행하거나 다른 사용자의 리소스에 접근할 수 있는 공격이다.

 

- 공격자가 응용 프로그램을 실행 중인 서버에서 임의의 파일을 읽을 수 있도록 허용하는 웹 보안 취약점이다. 

 

- 경우에 따라 공격자는 서버의 임의 파일에 쓸 수 있으므로 어플리케이션 데이터 또는 동작을 수정하고 궁금적으로 서버를 완전히 제어할 수 있다.

 

- 여기에 어플리케이션 코드 및 데이터, 백엔드 시스템의 자격 증명 및 중요한 운영체제 파일이 포함될 수 있다.

 

- 보통 파일을 처리하는 과정에서 가장 많이 발생한다.

 

- ../ 또는 ..\ 와 같은 경로 이동 문자를 사용하여 웹 루트 디렉토리(웹 어플리케이션의 최상위 디렉토리)를 벗어나 접근이 제한된 상위 디렉토리에 접근하여 민감하거나 열람되어서는 안되는 디렉토리와 파일을 열람할 수 있게 된다.

 

 

 

<공격과정>

1. 이미지가 다음과 같은 HTML을 통해 로드된다고 가정하자.

<img src="/loadImage?filename=218.png">

2. 해당  URL은 매개변수 loadImage를 사용하여 filename과 지정된 파일의 내용을 반환한다.

이미지 파일 자체는 /var/www/images/ 해당 위치의 디스크에 저장된다.

이미지를 반환하기 위해 응용 프로그램은 요청된 파일 이름을 기본 디렉터리에 추가하고, 파일 시스템 API를 사용하여 파일 내용을 읽는다. 

/var/www/images/218.png
다음 파일 경로에서 읽는다.

3. 응용 프로그램은 디렉토리 통과 공격에 대한 방어를 구현하지 않으므로 공격자는 다음 URL을 요청하여 서버의 파일 시스템에서 임의의 파일을 검색할 수 있다.

https://douneo.com/loadImage?filename=../../../etc/passwd

4. 이로 인해 어플리케이션은 /var/www/images/../../../etc/passwd 라는 파일 경로에서 읽는다.

../는 파일 경로 내에서 유효하며, 디렉토리 구조에서 한 단계 위로 올라간다는 의미이다.

위 구문에서 ../을 3번 사용하여 실제로 읽히는 파일은 /etc/passwd이다.

 

 

 

<영향>

- 서버의 디렉토리, 파일에 접근이 가능하여 서버의 디렉토리 구조가 공개된다.

 

- 서버에서 구동 중인 Apache 또는 기타 다른 서비스의 설정 파일 접근을 통해 중요한 정보가 유출되고, 공격자는 공격에 필요한 추가적인 정보를 획득하거나 다른 서비스로 공격을 확대할 수 있다.

 

- bash_history 파일 접근을 통해 사용자가 실행했던 명령어 목록에서 데이터베이스 접속 정보 등의 민감한 정보를 알아낼 수 있다.

 

- 웹 어플리케이션의 파일 업로드 기능이 디렉토리 순회 공격에 취약한 경우 공격자는 파일이 업로드 되는 경로를 조작하여 서버의 임의의 경로에 파일(웹쉘)을 업로드 할 수 있고, 웹 어플리케이션은 원격코드 실행에 노출된다.

 

 

 

<대응방안>

1.  파일 경로 순회 취약성을 방지하는 가장 효과적인 방법은 사용자 제공 입력을 파일 시스템 API에 모두 전달하지 않는다.

 

2.입력 유효성 검사를 적용한다.

: 파일, 디렉토리에 대한 요청을 허용할 경우 요청된 파일명에 상위 디렉토리(../), 홈 디렉토리(~/)와 같은 디렉토리 순회 시퀀스나 NULL byte가 존재하는지 검증하고 제거한다.

디렉토리 순회 시권스를 제거할 때는 공격자가 제거 로직의 결함을 이용해 약간 변형된 공격 문자열(....//)을 사용할 수 있으므로 반드시 제거해야 한다.

또한, 공격 문자열이 URL인코딩이나 다른 인코딩 형식으로 변형될 수 있으므로 가능한 모든 인코딩 형태의 공격 문자열을 검증해야 한다.

 

3. 인덱스를 통한 파일 참조를 사용한다.

: 요청에 파일 경로나 파일명을 직접 요청하도록 구현하지 않고, 특정 인덱스와 파일을 매핑하여 요청시에는 인덱스를 통해 요청되도록 구현한다.

ex) example.com?filename=some-file.html 파일의 인덱스를 별도로 관리하고, 요청할 때 example.com?fileidx=3과 같은 형식을 사용한다.

 

4. 최소 권한을 적용한다.

: 웹 어플리케이션을 구동하는 사용자 계정이 불필요한 시스템 디렉토리나 파일에 접근할 수 없도록 권한을 최소화한다.

 

5. 웹 서버, 운영체제 등을 항상 최신 버전으로 유지한다.

 

'seKUrity' 카테고리의 다른 글

seKUrity 강의  (0) 2023.05.10
파일 다운로드 실습  (0) 2023.04.06
File Download Vulnerability란?  (0) 2023.03.30
상대경로와 절대경로  (0) 2023.03.30
불충분한 인증/ 인가 취약점  (0) 2023.03.28

BELATED ARTICLES

more