경로 탐색 (Path Traversal)
경로 탐색 공격 기법, 제한된 디렉토리 밖의 파일 접근 시도를 탐지하고 방어하는 방법을 설명합니다.
설명 # 많은 파일 작업은 제한된 디렉토리 내에서 수행되도록 설계됩니다. 공격자는 .. 나 / 구분자와 같은 특수 요소를 사용하여 제한된 위치를 벗어나 시스템의 다른 곳에 있는 파일이나 디렉토리에 접근할 수 있습니다. 가장 일반적인 특수 요소 중 하나는 ../ 시퀀스로, 대부분의 현대 운영 체제에서 현재 위치의 상위 디렉토리로 해석됩니다. 이를 상대 경로 탐색이라고 합니다. 경로 탐색은 /usr/local/bin 과 같은 절대 경로명의 사용도 포함하며, 이 역시 예상치 못한 파일에 접근하는 데 유용할 수 있습니다. 이를 절대 경로 탐색이라고 합니다. 많은 프로그래밍 언어에서 null 바이트( 0 또는 NULL )를 주입하면 공격자가 생성된 파일명을 잘라내어 공격 범위를 넓힐 수 있습니다. 예를 들어, 소프트웨어가 모든 경로명에 .txt 를 추가하여 공격자를 텍스트 파일로만 제한하더라도, null 주입으로 이 제한을 효과적으로 제거할 수 있습니다. 이 검사는 요청의 파라미터(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 수정하여 제한된 파일 및 웹 루트 외부의 파일에 접근을 시도합니다. 그런 다음 로그와 응답을 분석하여 파일에 성공적으로 접근했는지 탐지합니다. 해결 방법 # 경로 탐색 공격 기법을 사용하면 공격자가 웹 문서 루트 디렉토리 외부에 있는 파일, 디렉토리 및 명령에 접근할 수 있습니다. 공격자는 웹 서버의 임의 파일 내용을 실행하거나 노출시키도록 URL을 조작할 수 있습니다. HTTP 기반 인터페이스를 노출하는 모든 장치는 잠재적으로 경로 탐색에 취약합니다. 대부분의 웹 사이트는 사용자 접근을 파일 시스템의 특정 부분(일반적으로 "웹 문서 루트" 또는 "CGI 루트" 디렉토리)으로 제한합니다. 이러한 디렉토리에는 사용자 접근을 위한 파일과 웹 애플리케이션 기능을 구동하는 데 필요한 실행 파일이 포함됩니다. 파일 시스템의 어디서든 파일에 접근하거나 명령을 실행하기 위해 경로 탐색 공격은 특수 문자 시퀀스의 기능을 활용합니다. 가장 기본적인 경로 탐색 공격은 ../ 특수 문자 시퀀스를 사용하여 URL에서 요청된 리소스 위치를 변경합니다. 대부분의 인기 있는 웹 서버는 이 기법이 웹 문서 루트를 벗어나는 것을 방지하지만, ../ 시퀀스의 대체 인코딩은 보안 필터를 우회하는 데 도움이 될 수 있습니다. 이러한 방법의 변형에는 슬래시 문자의 유효하거나 유효하지 않은 유니코드 인코딩( ..%u2216 또는 ..%c0%af ), Windows 기반 서버의 백슬래시 문자( .. ), URL 인코딩된 문자( %2e%2e%2f ), 백슬래시 문자의 이중 URL 인코딩( ..%255c ) 등이 포함됩니다. 웹 서버가 URL 경로에서 경로 탐색 시도를 적절히 제한하더라도, 웹 애플리케이션 자체가 사용자 제공 입력을 부적절하게 처리하여 취약할 수 있습니다. 이는 템플릿 메커니즘을 사용하거나 파일에서 정적 텍스트를 로드하는 웹 애플리케이션의 일반적인 문제입니다. 공격의 변형에서는 원래 URL 파라미터 값이 웹 애플리케이션의 동적 스크립트 파일명
