728x90
반응형

디렉터리 트래버설(Directory Traversal) 공격에 대해 다루어보겠습니다. 디렉터리 트래버설 공격은 공격자가 웹 애플리케이션의 파일 시스템에 접근하여 파일을 읽거나 수정하는 방식입니다. 이 공격은 시스템의 중요한 파일을 읽거나 파일 삭제와 같은 악의적인 작업을 할 수 있게 만듭니다. 이를 방지하는 방법을 깊이 있게 다뤄보겠습니다.

3. 디렉터리 트래버설 (Directory Traversal) 공격

3.1. 디렉터리 트래버설 개요

디렉터리 트래버설 공격은 공격자가 웹 애플리케이션의 파일 시스템을 탐색하여 권한이 없는 파일에 접근하는 공격 방식입니다. 웹 애플리케이션에서 사용자 입력을 파일 경로로 처리할 때, 입력 값에 특수 문자를 삽입함으로써 디렉터리를 벗어나 상위 디렉터리로 이동하거나, 시스템 파일에 접근할 수 있습니다.

이 공격을 통해 중요 시스템 파일(예: /etc/passwd, /etc/shadow, config.php 등)에 접근하거나, 애플리케이션 설정 파일을 열어 중요한 정보를 탈취할 수 있습니다.

3.2. 디렉터리 트래버설 공격 발생 원인

디렉터리 트래버설 공격은 주로 사용자 입력을 제대로 필터링하지 않거나 올바르게 검증하지 않을 때 발생합니다. 예를 들어, 파일 경로를 동적으로 처리하는 코드에서 사용자 입력을 그대로 사용하는 경우, 공격자는 ../(상위 디렉터리로 이동)를 이용하여 시스템의 다른 부분에 접근할 수 있습니다.

공격의 주요 원인은 다음과 같습니다:

  1. 파일 경로 검증 부족: 사용자가 파일 경로를 제공할 때 이를 제대로 검증하지 않으면, 공격자는 ../와 같은 특수 문자를 사용하여 상위 디렉터리로 이동할 수 있습니다.
  2. 입력 필터링 부재: 사용자 입력에 대해 아무런 제한이나 정규화가 없으면, 경로를 포함한 입력값이 시스템 명령어로 전달되어 위험한 위치로 접근할 수 있게 됩니다.
  3. 파일 다운로드 기능: 파일을 다운로드할 수 있는 기능을 제공할 때, 사용자가 입력한 경로를 그대로 파일 경로로 사용하면 다른 중요한 파일들을 다운로드 받을 수 있습니다.

3.3. 디렉터리 트래버설 공격 예시

  1. 파일 경로로 ../ 삽입하기

사용자가 파일을 다운로드하거나 특정 파일에 접근하려고 할 때, 경로를 입력하는 경우 다음과 같은 방식으로 공격을 할 수 있습니다:

예시:

$file = $_GET['file']; // 사용자 입력을 받음
include('/uploads/' . $file);  // 사용자가 입력한 파일을 include
  • 사용자 입력: ../../../../etc/passwd와 같은 값을 삽입하면, 애플리케이션이 /uploads/../../../../etc/passwd를 포함하게 됩니다.
  • 결과: 공격자는 /etc/passwd 파일을 읽어 시스템의 사용자 정보를 탈취할 수 있습니다.
  1. 특수 문자를 통한 디렉터리 탐색

공격자는 ../(상위 디렉터리 이동) 또는 ..%2f(URL 인코딩된 형태)를 통해 파일 경로를 변경하여 서버 상의 중요한 파일에 접근할 수 있습니다. 예를 들어, 다음과 같은 방식으로 공격할 수 있습니다:

  • 경로 예시:
http://example.com/download.php?file=../../../../etc/shadow
  • 공격자는 /etc/shadow 파일을 다운로드하거나 읽을 수 있습니다. 이 파일은 사용자 비밀번호와 같은 중요한 시스템 정보를 포함하고 있습니다.
  1. 경로 변조를 통한 악성 파일 실행

특정 애플리케이션이 파일 업로드 또는 파일 실행 기능을 제공하는 경우, 공격자는 경로 변조를 통해 악성 파일을 실행할 수 있습니다. 예를 들어, 업로드된 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. 정기적인 보안 테스트와 감사

  • 취약점 스캐닝: 애플리케이션과 서버에서 디렉터리 트래버설 취약점이 없는지 정기적으로 스캔하고, 이를 수정합니다.
  • 보안 로그 모니터링: 시스템과 애플리케이션 로그를 지속적으로 모니터링하여 의심스러운 파일 접근 시도를 실시간으로 탐지하고 대응할 수 있도록 합니다.

디렉터리 트래버설 공격은 시스템에 큰 피해를 줄 수 있기 때문에, 입력 검증서버 설정을 철저히 하고, 파일 경로와 파일 업로드에 대한 보안 절차를 강화하는 것이 중요합니다.

728x90
반응형

+ Recent posts