경로 순회

설명

많은 파일 작업은 제한된 디렉토리 내에서 일어나도록 의도되어 있습니다. ../ 구분자와 같은 특수 요소를 사용하여 공격자는 시스템의 다른 위치에 있는 파일 또는 디렉토리에 액세스하기 위해 제한된 위치 외부로 이탈할 수 있습니다. 가장 일반적인 특수 요소 중 하나는 ../ 시퀀스로, 이것은 대다수의 현대 운영 체제에서 현재 위치의 상위 디렉토리로 해석됩니다. 이를 상대 경로 순회라고 합니다. 경로 순회는 또한 /usr/local/bin과 같은 절대 경로명의 사용도 다른 파일에 액세스하는 데 유용할 수 있습니다. 이를 절대 경로 순회라고 합니다.

많은 프로그래밍 언어에서 널 바이트 (0 또는 NULL)의 삽입은 공격자가 생성된 파일 이름을 잘라내어 공격 범위를 확대할 수 있게 할 수 있습니다. 예를 들어, 소프트웨어는 임의의 경로명에 .txt를 추가할 수 있지만, 널 삽입으로 이 제한을 효과적으로 제거할 수 있습니다.

이 검사는 요청의 매개변수(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 수정하여 제한된 파일 및 웹 루트 외부의 파일에 액세스하려고 시도합니다. 그런 다음 로그 및 응답을 분석하여 파일에 성공적으로 액세스되었는지 감지하려고 합니다.

복구

경로 순회 공격 기술은 공격자가 웹 문서 루트 디렉터리 외부에 있는 파일, 디렉토리 및 명령에 액세스할 수 있게 합니다. 공격자는 URL을 조작하여 웹 사이트가 웹 서버의 임의의 위치에 있는 파일의 내용을 실행하거나 공개하도록 할 수 있습니다. HTTP 기반 인터페이스를 노출하는 장치는 잠재적으로 경로 순회에 취약할 수 있습니다.

대부분의 웹 사이트는 전형적으로 “웹 문서 루트” 또는 “CGI 루트” 디렉터리라고 불리는 파일 시스템의 특정 부분에 대한 사용자 액세스를 제한합니다. 이러한 디렉터리에는 사용자 액세스를 위해 의도된 파일과 웹 애플리케이션 기능을 구동하는 데 필요한 실행 파일이 포함되어 있습니다. 파일 시스템의 임의의 위치에 파일에 액세스하거나 명령을 실행하기 위해 경로 순회 공격은 특수 문자 시퀀스의 능력을 활용합니다.

가장 기본적인 경로 순회 공격은 URL에서 요청된 리소스의 위치를 변경하기 위해 ../ 특수 문자 시퀀스를 사용합니다. 대부분 인기 있는 웹 서버는 이 기법이 웹 문서 루트를 벗어나는 것을 방지할 것이지만, ../ 시퀀스의 대체 인코딩이 보안 필터를 우회하는 데 도움이 되는 경우가 있습니다. 이러한 방법의 변형은 슬래시 문자의 유효한 및 유효하지 않은 유니코드 인코딩(..%u2216 또는 ..%c0%af), 윈도우 기반 서버의 백 슬래시 문자(..), URL 인코딩된 문자(%2e%2e%2f), 백 슬래시 문자의 이중 URL 인코딩(..%255c) 등을 포함합니다.

웹 서버가 URL 경로에서 경로 순회 시도를 적절히 제한하더라도, 웹 애플리케이션 자체가 사용자 제공 입력을 적절하게 처리하지 않아 여전히 취약할 수 있습니다. 이는 템플릿 메커니즘을 사용하거나 파일에서 정적 텍스트를 로드하는 웹 애플리케이션의 일반적인 문제입니다. 공격의 변형에서 원래 URL 매개변수 값이 웹 애플리케이션의 동적 스크립트 중 하나의 파일 이름으로 대체됩니다. 따라서 결과는 파일이 실행 가능한 스크립트가 아닌 텍스트로 해석되기 때문에 소스 코드를 공개할 수 있습니다. 이러한 기술은 종종 현재 작업 디렉토리의 목록을 공개하기 위해 점(.)과 같은 추가적인 특수 문자 또는 기본 파일 확장자 확인을 우회하기 위해 %00 NULL 문자와 같은 추가적인 특수 문자를 사용합니다.

링크