디렉토리 트래버설 공격

Directory traversal attack

디렉토리 트래버설(또는 패스 트래버설) 공격은 "부모 디렉토리로의 이동"을 나타내는 문자가 운영 체제의 파일 시스템 API에 전달되도록 사용자 제공 파일 이름의 보안 검증 또는 삭제가 불충분함을 악용합니다.영향을 받는 응용 프로그램은 파일 시스템에 대한 무단 액세스를 얻기 위해 악용될 수 있습니다.

디렉토리 트래버설은,../(도트 슬래시) 공격, 디렉토리 클라이밍 및 백트래킹.이 공격의 일부 형식은 정규화 공격이기도 합니다.

PHP 코드의 취약한 응용 프로그램의 일반적인 예는 다음과 같습니다.

<?개요 $140 = '빨간색.빨간색; 한다면 (세트($_COOKIE['템플릿'])) {     $140 = $_COOKIE['템플릿']; } 포함하다 "/home/users/harguru/harguru/hargu/" . $140; 

이 시스템에 대한 공격은 다음 HTTP 요청을 보내는 것일 수 있습니다.

얻다 /어플리케이션 가능.php HTTP/1.0 쿠키: TEMPLATE=../../../../../../../ etc/passwd 

그러면 서버는 다음과 같은 응답을 생성합니다.

HTTP/1.0 200 OK Content-Type: 텍스트/html 서버: Apache 루트:fi3sED95ibqR6:0:1:시스템 오퍼레이터:/:/bin/ksh 데몬:*1:1:1:/tmp:phguru:f8fk3j1OIf31.182:100:developer/ph:homeusers/ph.

반복하다../뒤에 있는 문자/home/users/phpguru/templates/야기하다include()루트 디렉터리로 이동한 다음 UNIX 암호 파일을 포함하려면/etc/passwd.

유닉스/etc/passwd는 디렉토리 트래버설을 보여주기 위해 사용되는 일반적인 파일입니다.이것은 크래커에 의해 패스워드 크래킹에 사용되는 경우가 많기 때문입니다.다만, 보다 최근의 Unix 시스템에서는,/etc/passwd파일에는 해시된 패스워드가 포함되어 있지 않으며, 대신 이 패스워드는/etc/shadow이 파일은 시스템에서 권한이 없는 사용자가 읽을 수 없습니다.그래도 독서는.../etc/passwd에는 사용자 계정 목록이 계속 표시됩니다.

바리에이션

가장 간단한 형식의 디렉토리 트래버설은../양식.일반적인 변형은 다음과 같습니다.

Microsoft Windows

Microsoft Windows 및 DOS 디렉토리 트래버설에서는..\또는../패턴입니다.[1]

각 파티션에는 개별 루트 디렉토리(라벨)가 있습니다.C:\여기서 C는 임의의 파티션일 수 있습니다).또, 그 위에 공통의 루트 디렉토리는 없습니다.즉, Windows 의 대부분의 디렉토리 취약성에 대해서, 공격은 1 개의 파티션으로 제한됩니다.

디렉토리 트래버설은 많은 Microsoft [2][3]취약성의 원인이 되어 왔습니다.

URI에서의 부호화 비율

일부 웹 응용 프로그램에서는 요청 URI 경로에서 다음과 같은 패턴을 스캔하여 디렉토리 트래버설을 방지하려고 합니다.../이 체크는 퍼센트 디코딩 전에 잘못 실행되어 다음과 같은 패턴을 포함하는 URI가 발생할 수 있습니다.%2e%2e/해독되어도 받아들여지다../실제 사용 [4]전에.

이중 부호화

퍼센티지 디코딩은 검증 전에 한 번, 그 후에 여러 번 잘못 실행되어 어플리케이션이 다음과 같은 반복적인 퍼센티지 인코딩 입력에 취약해질 수 있습니다.%252e%252e/(1%의 패스가 회전합니다).%25문자 그대로 %-부호로 변환합니다).이 취약성은 특히 Microsoft의 IIS 웹 서버 소프트웨어 [5]5.0 이전 버전에 영향을 미칩니다.

UTF-8

잘못 실장된 UTF-8 디코더는 필요 이상으로 많은 바이트를 사용하여 인코딩된 문자를 받아들이기 때문에 다음과 같은 대체 문자 표현이 발생할 수 있습니다.%2e그리고.%c0%ae둘 다 대표하고 있다.이것은 UTF-8 [6]규격에서는 특별히 금지되어 있습니다만, IIS Web [7]서버등의 소프트웨어에서는 디렉토리 트래버설의 취약성이 발생하고 있습니다.

아카이브

zip과 같은 일부 아카이브 형식은 디렉토리 트래버설 공격을 허용합니다.아카이브 내의 파일은 백트랙을 통해 파일 시스템의 파일을 덮어쓰도록 쓸 수 있습니다.아카이브 파일을 추출하는 코드를 작성하여 아카이브에 있는 파일의 경로가 경로 트래버설에 관여하지 않는지 확인할 수 있습니다.

예방

디렉토리 트래버설을 방지하기 위한 가능한 알고리즘은 다음과 같습니다.

  1. 파일 요청(예: 사용자 코드에 대한 후크 실행)이 발생하지 않는 URI 요청을 처리한 후 다음 작업을 계속합니다.
  2. 파일/디렉토리에 대한 URI 요구를 실시할 때는, 파일/디렉토리에의 풀 패스가 있는 경우는, 그것을 작성해, 모든 문자를 정규화합니다(예를 들면,%20공백으로 변환됩니다).
  3. 정규화된 'Document Root'는 정규화된 경로를 알고 있으며 이 문자열의 길이는 N이라고 가정합니다. 이 디렉터리 외부에 있는 파일을 처리할 수 없다고 가정합니다.
  4. 요청된 파일에 대한 정규화된 경로의 첫 번째 N자가 '문서 루트'와 정확히 일치하는지 확인하십시오.
  5. 이 경우 파일을 반환할 수 있도록 합니다.
  6. 그렇지 않으면 오류가 반환됩니다.요구는 웹 서버가 처리할 수 있는 범위를 명백히 벗어납니다.

하드 코딩된 미리 정의된 파일 확장자를 사용하여 경로를 접미사로 지정해도 공격 범위가 해당 파일 확장자의 파일로 제한될 필요는 없습니다.

<?개요 포함하다($_GET[파일'파일] . '.display'); 

사용자는 NULL 문자(스트링의 끝을 나타냄)를 사용하여 다음 명령어를 모두 바이패스할 수 있습니다.$_GET(이것은 PHP 고유의 것입니다.)

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Naming Files, Paths, and Namespaces". Microsoft. File I/O functions in the Windows API convert '/' to '\' as part of converting the name to an NT-style name
  2. ^ Burnett, Mark (December 20, 2004). "Security Holes That Run Deep". SecurityFocus.
  3. ^ "Microsoft: Security Vulnerabilities (Directory Traversal)". CVE Details.
  4. ^ "Path Traversal". OWASP.
  5. ^ "CVE-2001-0333". Common Vulnerabilities and Exposures.
  6. ^ "RFC 2279 - UTF-8, a transformation format of ISO 10646". IETF.
  7. ^ "CVE-2002-1744". Common Vulnerabilities and Exposures.

자원.

외부 링크