김 컴퓨터


경로 탐색 공격 (Path Traversal)

경로 탐색 공격(Path Traversal)은 웹 애플리케이션의 보안 취약점을 이용해 애플리케이션의 루트 폴더를 벗어나 시스템의 다른 파일이나 디렉터리에 접근하는 공격 기법입니다. 흔히 도트-도트-슬래시(../) 공격이라고도 불립니다.


1. 개요

웹 애플리케이션이 사용자로부터 입력받은 파일 이름을 적절한 검증 없이 파일 시스템 작업에 사용할 때 발생합니다. 공격자는 이를 통해 서버의 민감한 파일(설정 파일, 소스 코드, 비밀번호 파일 등)을 열람하거나 실행할 수 있습니다.


2. 공격 메커니즘

공격자는 상대 경로의 상위 디렉터리로 이동하는 특수 문자열인 ../ (Dot-Dot-Slash)를 입력값에 삽입합니다.


3. 취약한 코드 예시 (Node.js/Express)

const fs = require('fs');
app.get('/download', (req, res) => {
  const fileName = req.query.file;
  // 위험: 사용자 입력을 검증 없이 경로에 합침
  const filePath = `/var/www/app/public/files/${fileName}`;
  res.sendFile(filePath);
});

4. 방어 대책

  1. 입력값 검증 (Allow-listing): 허용된 파일명 패턴(예: 영문, 숫자만 허용)이 아닌 경우 차단합니다.
  2. 경로 정규화 (Canonicalization): 입력된 경로에서 ../ 등을 제거한 실제 절대 경로를 구한 뒤, 허용된 디렉터리 내에 있는지 확인합니다.
  3. 파일 시스템 권한 제한: 웹 서버 프로세스가 접근할 수 있는 디렉터리를 최소화합니다.
  4. 간접 참조 사용: 파일 이름을 직접 입력받는 대신, 데이터베이스의 ID 값을 받아 서버 내부에서 매핑된 파일을 찾습니다.