디렉터리 트래버설(Directory Traversal) 공격에 대해 다루어보겠습니다. 디렉터리 트래버설 공격은 공격자가 웹 애플리케이션의 파일 시스템에 접근하여 파일을 읽거나 수정하는 방식입니다. 이 공격은 시스템의 중요한 파일을 읽거나 파일 삭제와 같은 악의적인 작업을 할 수 있게 만듭니다. 이를 방지하는 방법을 깊이 있게 다뤄보겠습니다.
3. 디렉터리 트래버설 (Directory Traversal) 공격
3.1. 디렉터리 트래버설 개요
디렉터리 트래버설 공격은 공격자가 웹 애플리케이션의 파일 시스템을 탐색하여 권한이 없는 파일에 접근하는 공격 방식입니다. 웹 애플리케이션에서 사용자 입력을 파일 경로로 처리할 때, 입력 값에 특수 문자를 삽입함으로써 디렉터리를 벗어나 상위 디렉터리로 이동하거나, 시스템 파일에 접근할 수 있습니다.
이 공격을 통해 중요 시스템 파일(예: /etc/passwd, /etc/shadow, config.php 등)에 접근하거나, 애플리케이션 설정 파일을 열어 중요한 정보를 탈취할 수 있습니다.
3.2. 디렉터리 트래버설 공격 발생 원인
디렉터리 트래버설 공격은 주로 사용자 입력을 제대로 필터링하지 않거나 올바르게 검증하지 않을 때 발생합니다. 예를 들어, 파일 경로를 동적으로 처리하는 코드에서 사용자 입력을 그대로 사용하는 경우, 공격자는 ../(상위 디렉터리로 이동)를 이용하여 시스템의 다른 부분에 접근할 수 있습니다.
공격의 주요 원인은 다음과 같습니다:
- 파일 경로 검증 부족: 사용자가 파일 경로를 제공할 때 이를 제대로 검증하지 않으면, 공격자는 ../와 같은 특수 문자를 사용하여 상위 디렉터리로 이동할 수 있습니다.
- 입력 필터링 부재: 사용자 입력에 대해 아무런 제한이나 정규화가 없으면, 경로를 포함한 입력값이 시스템 명령어로 전달되어 위험한 위치로 접근할 수 있게 됩니다.
- 파일 다운로드 기능: 파일을 다운로드할 수 있는 기능을 제공할 때, 사용자가 입력한 경로를 그대로 파일 경로로 사용하면 다른 중요한 파일들을 다운로드 받을 수 있습니다.
3.3. 디렉터리 트래버설 공격 예시
- 파일 경로로 ../ 삽입하기
사용자가 파일을 다운로드하거나 특정 파일에 접근하려고 할 때, 경로를 입력하는 경우 다음과 같은 방식으로 공격을 할 수 있습니다:
예시:
$file = $_GET['file']; // 사용자 입력을 받음
include('/uploads/' . $file); // 사용자가 입력한 파일을 include
- 사용자 입력: ../../../../etc/passwd와 같은 값을 삽입하면, 애플리케이션이 /uploads/../../../../etc/passwd를 포함하게 됩니다.
- 결과: 공격자는 /etc/passwd 파일을 읽어 시스템의 사용자 정보를 탈취할 수 있습니다.
- 특수 문자를 통한 디렉터리 탐색
공격자는 ../(상위 디렉터리 이동) 또는 ..%2f(URL 인코딩된 형태)를 통해 파일 경로를 변경하여 서버 상의 중요한 파일에 접근할 수 있습니다. 예를 들어, 다음과 같은 방식으로 공격할 수 있습니다:
- 경로 예시:
http://example.com/download.php?file=../../../../etc/shadow
- 공격자는 /etc/shadow 파일을 다운로드하거나 읽을 수 있습니다. 이 파일은 사용자 비밀번호와 같은 중요한 시스템 정보를 포함하고 있습니다.
- 경로 변조를 통한 악성 파일 실행
특정 애플리케이션이 파일 업로드 또는 파일 실행 기능을 제공하는 경우, 공격자는 경로 변조를 통해 악성 파일을 실행할 수 있습니다. 예를 들어, 업로드된 PHP 웹쉘 파일을 서버에서 실행하도록 유도할 수 있습니다.
3.4. 디렉터리 트래버설 공격의 영향
디렉터리 트래버설 공격의 피해는 단순히 파일을 읽는 것에 그치지 않습니다. 공격자는 시스템 내 중요한 파일을 탈취하거나 변조할 수 있습니다. 주요 영향은 다음과 같습니다:
- 중요 시스템 파일 노출: 시스템 파일(/etc/passwd, /etc/shadow, config.php 등)에 접근하여 시스템의 구성 정보나 인증 정보를 얻을 수 있습니다.
- 데이터 유출: 중요한 데이터 파일(예: 암호화된 비밀번호, API 키, 사용자 개인정보)을 유출할 수 있습니다.
- 악성 코드 실행: 경로를 조작하여 악성 파일을 실행하거나, 서버의 명령어 실행 취약점을 악용하여 악성 스크립트를 실행할 수 있습니다.
- 서비스 마비: 시스템 파일을 삭제하거나 손상시켜 서비스 중단을 일으킬 수 있습니다.
- 관리자 권한 탈취: 중요한 파일을 읽고, 권한 상승을 위한 정보를 획득하거나 보안 설정을 변경하여 관리자 권한을 탈취할 수 있습니다.
4. 디렉터리 트래버설 공격 대응 방안
디렉터리 트래버설 공격을 방어하기 위한 핵심적인 대응 방안을 설명하겠습니다. 이를 통해 공격자가 시스템 파일에 접근하거나 웹 쉘을 실행하는 등의 위험을 최소화할 수 있습니다.
4.1. 사용자 입력 검증 및 필터링
- 경로 정규화: 사용자 입력으로 제공된 파일 경로를 정규화하여 ../와 같은 특수 문자가 정상적인 경로로 처리되지 않도록 합니다. 예를 들어, 경로에서 ..을 제거하여 디렉터리 트래버설을 막을 수 있습니다.
$file = realpath($_GET['file']); // 실제 경로로 변환
$base_path = '/uploads/';
if (strpos($file, $base_path) !== 0) {
die("Invalid file path!");
}
- 허용된 파일명 검증: 파일 이름에 허용된 문자만 사용하도록 제한합니다. 예를 들어, 알파벳, 숫자, 점(.)만 허용하고, 특수 문자(예: .., /, \\ 등)는 차단합니다.
4.2. 파일 경로 제한
상대 경로 차단: 사용자가 파일 경로를 입력할 때 상대 경로를 차단합니다. 이를 위해 절대 경로만 허용하는 방식으로 경로를 제한해야 합니다.
$base_path = '/uploads/';
$file = $_GET['file'];
if (strpos($file, '..') !== false) {
die("Invalid file path!");
}
- 예시:
- 디렉터리 경로 제한: 사용자가 파일을 다운로드하거나 업로드할 때, 특정 디렉터리 내에서만 접근이 가능하도록 제한합니다.
4.3. 파일 다운로드 기능 강화
- 파일 이름 검증: 다운로드할 파일의 이름을 사용자가 제공하는 것이 아니라, 서버에서 관리되는 안전한 이름을 사용하여 파일을 제공합니다.
- 예를 들어, 파일 이름을 해시 값이나 UUID로 변경하여 사용합니다.
- 파일 확장자 검사: 업로드 또는 다운로드하려는 파일의 확장자가 허용된 확장자인지 검사하고, 실행 파일(예: .php, .exe 등)은 업로드나 다운로드할 수 없도록 차단합니다.
4.4. 웹 서버 및 파일 시스템 보안 강화
- 서버 설정 강화: 웹 서버의 설정에서 파일 다운로드와 실행에 대한 권한을 최소화해야 합니다. 예를 들어, 업로드된 파일을 저장하는 디렉터리에서 실행 권한을 차단합니다.
- 디렉터리 권한 최소화: 서버에서 사용되는 디렉터리 권한을 최소화하여, 불필요한 디렉터리나 파일에 대한 접근을 제한합니다.
4.5. WAF(웹 애플리케이션 방화벽) 사용
- WAF 구성: 웹 애플리케이션 방화벽(WAF)을 사용하여 디렉터리 트래버설 공격을 자동으로 차단할 수 있습니다. WAF는 악의적인 파일 경로 탐색을 탐지하고 차단할 수 있습니다.
4.6. 정기적인 보안 테스트와 감사
- 취약점 스캐닝: 애플리케이션과 서버에서 디렉터리 트래버설 취약점이 없는지 정기적으로 스캔하고, 이를 수정합니다.
- 보안 로그 모니터링: 시스템과 애플리케이션 로그를 지속적으로 모니터링하여 의심스러운 파일 접근 시도를 실시간으로 탐지하고 대응할 수 있도록 합니다.
디렉터리 트래버설 공격은 시스템에 큰 피해를 줄 수 있기 때문에, 입력 검증과 서버 설정을 철저히 하고, 파일 경로와 파일 업로드에 대한 보안 절차를 강화하는 것이 중요합니다.
'IT' 카테고리의 다른 글
| 크로스 사이트 스크립팅 (XSS, Cross-Site Scripting) 공격 (1) | 2025.07.15 |
|---|---|
| 버퍼 오버플로우(Buffer Overflow) 공격 (1) | 2025.07.15 |
| RCE (Remote Code Execution) 해킹 수법 (0) | 2025.07.15 |
| SQL 인젝션(SQL Injection) 해킹 수법 (0) | 2025.07.15 |
| 해킹 수법과 대응 방안 (1) | 2025.07.15 |