본문 바로가기
about Security/SECURE CODING

[입력 데이터 검증 및 표현] 위험한 형식 파일 업로드 (3등급)

by saniii 2021. 8. 7.

 

0. 개요 

 

서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드 가능하고, 

이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우,

시스템 내부명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있는 보안약점이다.

2020.11.15 - [about Security/웹 해킹] - [웹해킹] # 파일 업로드

2020.11.15 - [about Security/웹 해킹] - [웹해킹 실습] # 파일 업로드 공격

 

 

 

1. 보안 대책

 

- 업로드 되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다.

 

- 업로드 되어 저장되는 파일은 외부에서 식별되지 않아야 한다.

 

- 화이트 리스트 방식으로 허용된 확장자만 업로드를 허용한다.

  * 화이트 리스트 방식 : 안전이 증명된 것만을 허용한다.

 

- 업로드 되는 파일을 저장할 때에는 파일명과 확장자를 외부 사용자가 추측할 수 없는 문자열로 변경하여 저장하며,

  저장 경로는 'web document root' 밖에 위치시켜서 공격자의 웹을 통한 직접 접근을 차단한다.

 

- 파일 실행여부를 설정할 수 있는 경우, 실행 속성을 제거한다. 

 

 

 

2. 진단 방법

 

 - 외부 입력값에서 파일명을 얻어오는지 확인한다.

 

 - 허용된 확장자에 대해서만 업로드를 허용하는지 확인한다.

 

 

 

3. 코드 예시

 

# 1  -  위험한 형식 파일 업로드 - 안전하지 않은 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

위의 코드와 같이 업로드할 파일에 대한 유효성을 검사하지 않으면,

위험한 유형의 파일을 공격자가  업로드 하거나 전송할 수 있다.

파일의 확장자를 검사하여 허용되지 않은 확장자인 경우 업로드를 제한하도록 하자.

 

# 1  +  위험한 형식 파일 업로드 - 안전한 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

 

 

# 2  -  위험한 파일 형식 업로드 - 안전하지 않은 코드 예시(JAVA)

 

# 2  +  위험한 파일 형식 업로드 - 안전한 코드 예시(JAVA)  

https://wiki.wikisecurity.net/guide:java_%EA%B0%9C%EB%B0%9C_%EB%B3%B4%EC%95%88_%EA%B0%80%EC%9D%B4%EB%93%9C#%EB%AC%B4%EC%A0%9C%ED%95%9C_%ED%8C%8C%EC%9D%BC_%EC%97%85%EB%A1%9C%EB%93%9C_unrestricted_upload_of_file_with_dangerous_type

 

JAVA 보안 개발 가이드 -

 

wiki.wikisecurity.net

 

 

 

 

4. 해당 취약점 CASE

 

- 파일 업로드 시 확장자를 체크하지 않는 경우

 

- 블랙리스트 방식으로 확장자를 체크하는 필터링에서 대소문자를 구분하여 체크하는 경우.

 

*  블랙리스트와 화이트리스트의 차이점

블랙리스트는 시스템으로부터 차단해야하는 것들의 목록 이라면 화이트리스트는 들어와도 되는 것들의 목록이다.

블랙리스트가 필터링, 걸러냄의 의미라면 화이트리스트는 가능한 것만 골라잡는 너낌??!?

 

 

#. 참고 블로그 

https://prokyhsigma.tistory.com/42?category=848515 

 

[구현보안] 입력 데이터 검증 및 표현 05 - 위험한 형식 파일 업로드

가. 원인 - 업로드되는 파일의 안정성을 검사하지 않고 업로드를 허용 - 서버측에서 실행될 수 있는 스크립트 파일(ASP, JSP, PHP 등)이 업로드 가능하며 웹을 통해 직접 실행가능 나. 영향 - 시스템

prokyhsigma.tistory.com

 

댓글