웹사이트에서 발생하는 디렉토리 트래버설 공격은 애플리케이션이 사용자로부터 받은 파일 경로 인자(parameter)를 적절히 검증하지 못할 때 발생하는 대표적인 보안 취약점입니다. 공격자는 특수 경로 조작 시퀀스(예: ../)를 삽입하여, 웹 서버가 접근하도록 요청된 파일의 논리적 범위를 벗어나 서버 내부의 민감한 파일에 접근하는 것이 핵심 메커니즘입니다.
일반 사용자가 사전에 파악해야 할 기본적인 예방책은 공식 채널을 통한 보안 업데이트를 주기적으로 확인하고, 서비스 이용 시 2단계 인증(2FA)을 습관화하는 것입니다. 하지만 개발자나 보안 담당자라면, 이 공격이 서버의 핵심 기밀 정보 유출로 이어질 수 있음을 인지하고 근본적인 코드 레벨의 방어 전략을 이해해야 합니다.
디렉토리 트래버설 공격이란 무엇이며 왜 위험한가?
디렉토리 트래버설 공격(Path Traversal)은 웹 애플리케이션 보안 취약점 중 하나입니다. 이는 애플리케이션이 사용자 입력 값을 파일 경로로 사용할 때, 해당 입력값의 경계 검증이 미흡할 경우 발생합니다.
공격의 핵심은 경로 조작 시퀀스(../ 또는 윈도우 환경의 ..\)를 이용하는 것입니다. 공격자는 이 시퀀스를 삽입하여, 서버가 의도한 논리적 디렉토리 구조를 벗어나 서버의 운영체제(OS) 파일이나 설정 파일에 접근을 시도합니다.
이러한 공격이 심각한 이유는 다음과 같습니다.
- 정보 유출: 단순한 정보 노출을 넘어, 기업의 핵심 기밀 문서, 사용자 데이터베이스 설정 파일, 또는 서버의 운영체제(OS) 파일 자체에 접근할 수 있습니다.
- 시스템 장악 위협: 공격 성공 시, 시스템의 취약한 부분까지 접근하여 추가적인 시스템 장악(System Takeover)으로 이어질 잠재적 위험이 있습니다.
- 실제 사례 증가: 최근 몇 년간의 보안 보고서에 따르면, 디렉토리 트래버설 기반의 정보 유출 사례가 빈번하게 보고되고 있으며, 특히 백업 파일이나 민감한 로그 파일 유출이 주요 패턴으로 확인되었습니다.
디렉토리 트래버설 공격의 작동 원리 분석
디렉토리 트래버설 공격의 근본 원인은 개발자가 사용자 입력을 파일 시스템 API(파일 열기, 읽기, 쓰기 등)에 전달하기 전에 입력값의 유효성과 범위를 철저히 검증하지 않았기 때문입니다.
공격 메커니즘:
- 입력: 공격자는 파일 경로를 요청하는 파라미터에
../../../etc/passwd와 같은 경로를 삽입합니다. - 오인: 애플리케이션은 이 경로를 신뢰하고 파일 시스템에 접근합니다.
- 결과: 애플리케이션은 의도하지 않은 시스템 파일(예:
/etc/passwd)의 내용을 읽어 사용자에게 노출시키게 됩니다.
이러한 취약점은 입력값 검증 실패(Input Validation Failure)의 전형적인 예시입니다.
방어적 접근: 다층적 방어 전략
효과적인 방어는 단 하나의 기술에 의존할 수 없으며, 여러 계층에서 방어해야 합니다.
1. 입력값 검증 (Input Validation) – 최우선 방어선
- 화이트리스트 방식 적용: 허용되는 문자, 형식, 최대 길이를 명확히 정의하고, 이 범위를 벗어나는 모든 입력은 거부해야 합니다.
- 경로 정규화: 입력된 파일 경로를 시스템 표준에 따라 정규화(Canonicalization)하여, 상대 경로 탐색(
../) 시도를 무력화해야 합니다.
2. 권한 최소화 (Principle of Least Privilege)
- 애플리케이션이 동작하는 서버 프로세스는 해당 기능 수행에 필요한 최소한의 파일 시스템 접근 권한만을 가져야 합니다. 만약 공격이 성공하더라도, 피해 범위를 최소화할 수 있습니다.
3. 출력 인코딩 (Output Encoding)
- 읽어온 데이터가 사용자에게 표시될 때, 시스템 특성(HTML, URL 등)에 맞게 적절히 인코딩하여, 데이터가 코드로 해석되는 것을 방지해야 합니다.
결론: 개발자가 지켜야 할 핵심 가이드라인
| 영역 | 취약점 | 방어 기법 |
| :— | :— | :— |
| 파일 경로 처리 | 상대 경로 탐색(../) | 경로 정규화 및 화이트리스트 검증 |
| 데이터 처리 | 사용자 입력값 신뢰 | 모든 사용자 입력은 잠재적 공격 코드로 간주하고 검증 |
| 시스템 권한 | 과도한 권한 부여 | 서비스 프로세스에 최소 권한만 할당 |
요약하자면, 디렉터리나 파일 경로를 다룰 때는 ‘사용자 입력값은 절대 신뢰해서는 안 된다’는 원칙을 최우선으로 지켜야 합니다.