Web Hacking/Study

File Download 취약점과 대응방안

박연준 2023. 7. 1. 23:13

파일 다운로드 취약점(File Download Vulnerabillity)이란?

  • 파일 다운로드 시 사용자로부터 특정 파일 정보를 입력받지만 이 입력 값을 검증하지 않을 경우에 발생할 수 있는 취약점이다.

발생 원인

  • 파일 다운로드 시 파일의 절대 경로 또는 상대 경로가 노출되는 경우
  • 다운로드 모듈이 파일의 경로나 이름을 파라미터로 사용하는 경우
  • 파일 경로와 파일명 필터링 미흡하여 ../를 이용해 상위 디렉터리에 접근이 가능한 경우
  • 다운로드 경로가 노출되지 않더라도 구조가 단순하여 파라미터 변조를 통해 접근이 허용되지 않은 파일에 접근이 가능할 경우

절대 경로란?

  • 웹 페이지나 파일이 가지고 있는 고유한 경로

    ex) C:\Apache24\bin\iconv\test.txt

상대 경로란?

  • 현재 위치한 곳을 기준으로 하여 그곳의 위치

    ex) http://192.168.0.0/board/data/../../qna/test.txt

취약한 소스코드 형태

💡
String fileName = request.getParameter("fileName"); -> 파일명을 입력값으로 받음
💡
String Filepath = request.getParameter("filePath"); -> 파일 경로를 입력값으로 받음
💡
File file=new File(filePath+fileName); 필터링 없이 경로명+파일명을 조합하여 File객체 생성

진단 방법

💡
업로드 된 파일의 속성 정보를 확인하여 해당 파일의 경로 노출 여부 확인
💡
사용되는 파라미터 중 변조에 의해 다른 파일에 접근이 가능한 부분이 있는지 확인
💡
파일명으로 다운로드 하는것을 확인 후 상위 경로로 이동하는 명령어(../) 삽입
💡
다운로드한 주요 파일을 바탕으로 시스템 정보수집

주요 파일 경로

  • Windows
💡
../../../../boot.ini
💡
../../../../winnt/win.ini
💡
..%2F..%2 Fboot.ini %2F -> /값 인코딩
💡
..%5C..%5 Cboot.ini %5C -> \(역슬래쉬) 인코딩
💡
../../../../writetest.txt
💡
/../../../windows/system32/config/sam

  • UNIX
💡
etc/passwd
💡
etc/shadow
💡
etc/security/passwd
💡
etc/security/user

우회 기법

  • 경로 추적 - http://192.168.0.0/scripts/..%255c..%255c../winnt/system32/cmd.exe?c+dir+c:\\cmd를 통해 해당 시스템 경로를 추적하는 방법
  • URL인코딩 특수문자를 인코딩하여 경로 설정 시 적용
  • 유니코드 인코딩 파일명을 유니코드 인코딩을 적용하여 파일 다운로드 시도
  • 특수문자 변형 (.../.../..//) 사용하여 다운로드 시도

중요 정보 파일

대응방안

  1. 파일 다운로드 경로 제한하기 파일 다운로드 취약점을 방지하기 위해, 서버에서 다운로드 가능한 파일의 경로를 제한하는 것이 좋다. 서버에서 설정된 경로 외의 다른 경로로의 파일 다운로드를 차단하여 취약점을 방지할 수 있다.
  1. 파일 다운로드 링크 보안 강화 파일 다운로드 취약점을 방지하기 위해, 파일 다운로드 링크에 보안 기능을 추가하는 것이 좋다. 예를 들어, 다운로드 링크에 토큰 값을 추가하여 링크 공유를 차단하거나, 링크를 다운로드 가능한 기간과 시간으로 제한하는 등의 보안 기능을 추가할 수 있다.
  1. 파일 이름 검증 파일 다운로드 취약점을 방지하기 위해, 서버에서 다운로드 가능한 파일의 이름을 검증하는 것이 좋다. 예를 들어, 파일 이름에 대해 정해진 규칙이 있을 경우, 규칙에 어긋나는 파일 이름은 다운로드 차단을 하도록 하는 등의 검증을 추가할 수 있다.
  1. 보안 프로토콜 사용 파일 다운로드 취약점을 방지하기 위해, HTTPS와 같은 보안 프로토콜을 사용하는 것이 좋습니다. HTTPS는 데이터를 암호화하고 인증하는 프로토콜로, 데이터의 안정성을 보장해주며, 중간자 공격과 같은 공격을 막아준다.
  1. 보안 업데이트 적용 웹 어플리케이션에서는 보안 업데이트를 적용하여 취약점을 예방해야 한다. 자주 발생하는 취약점에 대한 보안 패치를 적용하고, 서버 운영체제와 어플리케이션에서 사용하는 모든 라이브러리와 프레임워크를 최신 버전으로 업데이트하는 것이 중요하다.
  1. 문자열 필터링

    상위 디렉토리에 해당하는 ../ 등을 필터링 해야한다.

if(strpos($real_name, "/") !== false || strpos($real_filename, "..") !== false){
	exit();
}

'Web Hacking > Study' 카테고리의 다른 글

Background: SQL Features  (0) 2023.07.01
정규 표현식  (0) 2023.07.01
File Upload 취약점과 대응방안  (0) 2023.07.01
SQL Injection 실습(2)  (0) 2023.07.01
Non-Relational DBMS  (0) 2023.07.01