Directory traversal 공격

Directory traversal 공격

Directory traversal 공격은 저장된 파일을 다운로드 할 때 가장 많이 발생해서 파일 다운로드 공격이라고도 합니다.

=> ../는 상위 디렉토리로 이동, ./는 현재 디렉토리를 의미합니다.

=> ../../../../../../../../은 상위 디렉토리의 상위 디렉토리의 ...상위 디렉토리로 이동할 수 있게 되는데 결국 이런 방법으로 올라가면 최종적으로 root에 도달할 수 있습니다.

=> 이 경로 순회문자에 대해 검증을 하지 않으면 공격자가 root에서 다양한 공격을 실행할 수 있습니다.

 

취약점 설명

다운로드를 담당하는 변수 입력값에 대한 검증 부재 또는 미흡으로 웹을 통해 웹 애플리케이션의 소스파일 및 시스템 파일을 다운로드 할 수 있는 취약점

=> 다운로드 경로의 인수값에 "../"문자열 등을 입력하여 상위 디렉토리로 접근하거나 일반적으로 접근이 불가능한 경로의 파일이 다운로드가 가능

=> 리눅스, 유닉스 계열의 웹서버에서는 /etc/passwd와 같은 시스템 파일 다운도 가능

 

공격 포인트

첨부파일 또는 특정 파일들의 다운로드 소스로 붙어있는 파라미터 값 변조

ex) https://www.test.com/../../../../../board/dbconn.inc 

      https://www.test.com/down.asp?path=/img/&filename=apple.png 

 

해킹 시나리오 

(1,2)일반적으로는 다운로드 로직을 통해서 개발자가 의도한, 사용자가 요청한 파일에 대해서만 다운로드를 받아야합니다.

(3,4)공격자가 경로조작을 해서 서버에 있는 파일이 다운로드가 됩니다. 일반사용자에게 노출이 되면 안되는 파일이 다운로드 됩니다.

 

보안대책

  • 파일이 위치하는 경로를 변수로 사용하지 말고 해당 파일의 키 값을 변수로 사용하여 다운로드

=> 해당 파일의 키 값을 변수로 사용에 대한 대표적인 예시 : UUID

=> UUID는 Universally Unique Identifier의 약자로, 해당 타입의 다른 모든 리소스 중에서 리소스를 고유하게 식별하는데 사용되는 레이블입니다.

=> UUID 참고: https://developer.mozilla.org/ko/docs/Glossary/UUID

  • 파일 위치 경로 변수를 사용할 경우, "../", "..\", ".\", "%" 와 같은 특수문자 필터링 적