개요와 간단한 설명
파일 다운로드 취약점이란 파일 다운로드가 미흡하게 구현되어서 별도의 인증인가 없이 파일이 다운로드되는 버그가 있는 것을 말합니다. 해당 취약점이 있다면 공격자가 서버에서 별도의 인가 없이 중요한 파일을 다운로드하거나 소스파일 등을 다운로드할 수 있습니다. 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가 실행되지 않는 서버를 구축하여 다운로드 파일을 별도로 저장
'💻Information Security' 카테고리의 다른 글
인증인가 취약점에 대해 (0) | 2024.02.26 |
---|---|
파일 인클루드 취약점에 대해 (0) | 2024.02.16 |
전자서명의 필요와 이해 (0) | 2024.02.13 |
웹 셸 업로드 공격 및 리버스셸/바인드 실습 (1) | 2024.02.12 |
aka.ms/alca 해킹 공격 시나리오 (1) | 2024.02.11 |