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