본문 바로가기
💻Information Security

파일 다운로드 취약점과 대응

by Prof. Panda 2024. 2. 16.

Leon Seibert on Unsplash

개요와 간단한 설명

파일 다운로드 취약점이란 파일 다운로드가 미흡하게 구현되어서 별도의 인증인가 없이 파일이 다운로드되는 버그가 있는 것을 말합니다. 해당 취약점이 있다면 공격자가 서버에서 별도의 인가 없이 중요한 파일을 다운로드하거나 소스파일 등을 다운로드할 수 있습니다. php로는 아래와 같이 구현되어 있을 수 있습니다.

<?php //sudo code
	fileName = $_GET['fileName'];
    download('/files/' . $fileName);
?>

 

위의 코드에서 추가적으로 인증과정을 구현해두지 않는다면 fileName 파라미터에 '../../../../etc/passwd'를 입력하면 해당 파일을 다운로드할 수 있습니다. 이런 파일을 포함하여 소스코드 등을 공격자가 얻어낸다면 추가적으로 더 위협적인 공격이 생길 수 있습니다.

 

파일 인클루션 취약점과 비교

파일 인클루션과 장단점이 교차되어서 해당 취약점과 비교될 수 있습니다.

  파일 인클루션 파일 다운로드
장점 서버에서 코드를 실행시킬 수 있다. 소스코드를 획득할 수 있다.
단점 소스코드를 획득할 수 없다. 코드를 실행시킬 수 없다.

 

모의 해킹시 POC

다운로드 취약점이 있는 것을 증명하기 위한 POC는 OS마다 다를 수 있습니다. 리눅스와 윈도즈를 예시로 들겠습니다.

  • Linux POC : /etc/passwd 또는 /etc/shadow 또는 /etc/security/passwd 또는 /etc/security/user
  • Windows POC : /boot.ini 또는 /winnt/win.ini 또는 /windows/system32/config/sam
     

또한, POC와 별개로 실제공격자나 모의해커의 경우 모두 파일 다운로드 취약점이 있다면 소스코드를 다운로드하는 것을 우선적으로 합니다. 소스코드를 얻게 된다면 추가적인 취약점을 발견하기에 매우 용이하게 됩니다. 난독화 등의 방어를 하더라도 난독화는 일정한 규칙이 있다면 난독화를 풀어주는 프로그램을 통해서 쉽게 풀 수 있습니다. 

 

파일 다운로드와 파일 업로드 대응방안

파일 업로드 공격과 파일 다운로드 공격의 대응 방안은 매우 유사합니다.

  • 접근 방어
    • 파일 경로 감추기 - 다운로드 구현시 'download.php?boardId='처럼 별도의 다운로드 페이지를 연결한다.
    • 파일 이름 난독화 - SQLi와 같은 추가적인 취약점이 있다면 알아낼 수 있는 약한 방어 기법
  • 필터링
    • 확장자 화이트 리스트 기반 필터링
    • 확장자 블랙 리스트 기반 필터링 
  • 서버 외 다른 위치 저장
    • DB에 데이터 저장 - Binary, BLOB/CLOB
    • NAS 별도 저장 - php가 실행되지 않는 서버를 구축하여 다운로드 파일을 별도로 저장