Path Traversal
Path Traversal
개요
Path Traversal(경 탐색)은 보 분야에서 중요한 취점 유형 중로, 공격자가 시스템의 파일 시스템 내에서 권한이 없는 디렉터리나 파일에 접근할 수 있도록 만드는 입력 검증 실패로 인해 발생하는 보안 위협입니다. 이 취약점은 주로 웹 애플리케이션에서 사용자 입력을 통해 파일 경로를 동적으로 결정할 때, 입력값에 대한 적절한 검증이나 필터링이 없을 경우 노출됩니다.
Path Traversal 공격은 "디렉터리 탐색(Directory Traversal) 공격" 또는 "..\..\ 공격"으로도 불리며, 공격자가 ../
또는 ..\
과 같은 상대 경로 기호를 악용하여 상위 디렉터리로 이동함으로써 시스템의 중요한 파일(예: /etc/passwd
, C:\Windows\win.ini
)을 읽거나, 경우에 따라 수정하거나 삭제할 수 있게 됩니다.
이 문서에서는 Path Traversal의 원리, 공격 방식, 예시, 영향, 그리고 방어 방법에 대해 체계적으로 설명합니다.
Path Traversal의 원리
Path Traversal은 사용자 입력을 통해 파일 경로를 생성하는 시스템에서 발생합니다. 예를 들어, 웹 애플리케이션이 사용자 요청에 따라 특정 파일을 제공하는 기능을 제공할 때, 다음과 같은 코드가 사용될 수 있습니다:
filename = request.GET.get('file')
path = "/var/www/files/" + filename
return send_file(path)
이 경우, 사용자가 file=../../../../etc/passwd
와 같은 값을 입력하면, 최종 경로는 /var/www/files/../../../../etc/passwd
가 되며, 이는 시스템 루트 디렉터리 기준으로 /etc/passwd
를 가리킵니다. 이렇게 상대 경로를 이용해 시스템의 예상치 못한 위치의 파일에 접근하는 것이 Path Traversal의 핵심입니다.
공격 방식과 예시
1. 기본적인 공격 패턴
가장 일반적인 공격은 ../
시퀀스를 반복적으로 사용해 상위 디렉터리로 이동하는 것입니다. 예를 들어:
http://example.com/download?file=../../../../etc/passwd
http://example.com/view?path=../../config/database.ini
이러한 요청은 서버가 예상하지 못한 위치의 파일을 반환하게 만들 수 있습니다.
2. 인코딩을 이용한 우회
일부 시스템은 ../
문자열을 직접 차단할 수 있으나, 공격자는 URL 인코딩이나 유니코드 인코딩을 통해 이를 우회할 수 있습니다.
..%2F
→ URL 디코딩 후../
%2e%2e%2f
→../
의 각 문자를 인코딩한 형태..\
→ Windows 시스템에서 사용되는 역슬래시
이러한 인코딩된 입력이 필터링되지 않으면, 여전히 공격이 성공할 수 있습니다.
3. Null Byte 삽입 (과거 주로 발생)
과거 PHP와 같은 일부 언어에서는 Null Byte(%00
)를 문자열 끝으로 인식하여, 다음과 같은 공격이 가능했습니다:
http://example.com/read.php?file=../../etc/passwd%00.jpg
이 경우, 시스템은 passwd
파일을 읽은 후 .jpg
부분은 무시하게 됩니다. 하지만 최신 시스템에서는 대부분 이 문제가 해결되었습니다.
영향과 위험성
Path Traversal 공격이 성공할 경우 다음과 같은 심각한 피해가 발생할 수 있습니다:
- 시스템 정보 유출:
/etc/passwd
,/etc/shadow
,C:\Windows\win.ini
등 민감한 시스템 파일 노출 - 애플리케이션 설정 유출:
config.php
,web.xml
,.env
파일 등에 포함된 데이터베이스 비밀번호, API 키 노출 - 코드 실행 가능성: 일부 환경에서는 파일 업로드와 결합되어 악성 스크립트 실행으로 이어질 수 있음
- 전체 시스템 침해: 관리자 권한으로 실행되는 경우, 시스템 전체를 제어당할 위험
OWASP에서는 Path Traversal을 웹 애플리케이션 취약점 상위 10개(OWASP Top 10)에 포함된 A05:2021 – Security Misconfiguration 또는 A01:2021 – Broken Access Control과 관련된 문제로 분류하기도 합니다.
방어 방법
1. 입력 검증 및 정규화
- 사용자 입력에
../
,..\
,/
,\
등의 경로 이동 문자열이 포함되지 않도록 필터링 - 입력값을 정규화(normalization)하여 인코딩된 문자열도 검사
- 허용 가능한 파일명만을 허용하는 화이트리스트(Whitelist) 방식 사용
예시 (Python):
import os
def is_safe_path(basedir, path):
return os.path.realpath(path).startswith(basedir)
2. 기준 디렉터리 고정
- 모든 파일 접근을 특정 기준 디렉터리 내로 제한
- 절대 경로를 사용하고, 외부 입력으로부터 경로를 직접 조합하지 않음
3. 파일명 매핑 사용
- 사용자 입력을 실제 파일 경로가 아닌, 사전 정의된 식별자로 매핑
- 예:
file_id=1
→/safe_dir/report_2023.pdf
이 방식은 사용자에게 실제 파일 경로를 노출하지 않아 보안성이 높습니다.
4. 보안 라이브러리 및 프레임워크 활용
- 보안 기능이 내장된 프레임워크 사용 (예: Django, Spring Security)
- 파일 업로드 시 MIME 타입 검사, 파일 확장자 제한, 저장 위치 분리 등 복합 방어
관련 표준 및 가이드라인
- OWASP Top 10: Broken Access Control, Security Misconfiguration
- CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
- NIST SP 800-53: AC-6(4) - Least Privilege, SC-7 - Boundary Protection
참고 자료
Path Traversal는 단순해 보이지만, 철저한 입력 검증이 없을 경우 치명적인 결과를 초래할 수 있는 취약점입니다. 개발자는 사용자 입력을 절대 신뢰하지 말고, 항상 검증, 정규화, 접근 제어를 통해 안전한 파일 시스템 접근을 보장해야 합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.