[시큐어코딩-자바] 위험한 형식 파일 업로드 (입력 데이터 검증 및 표현)

류명운

·

2017. 2. 3. 19:21

반응형

[시큐어코딩-자바] 위험한 형식 파일 업로드 (입력 데이터 검증 및 표현)


입력 데이터 검증 및 표현이란?

  프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정, 일관되지 않은 언어셋 사용 등으로 인해 발생되는 보안약점으로 SQL 삽입, 크로스사이트 스크립트(XSS) 등의 공격을 유발할 수 있다.


위험한 형식 파일 업로드(Unrestricted Upload of File with Dangerous Type)


1. 정의

  서버측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드가능하고, 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우 공격자는 스크립트 파일로 업로드하고 이 파일을 통해 시스템 내부명령어를 실행하거나 외부와 연결하거나 외부와 연결하여 시스템을 제어할 수 있다.

<그림 1> 위험한 형식 파일 업로드

2. 안전한 코딩기법

  • 업로드하는 파일 타입과 크기를 제한하고, 업로드 디렉터리를 웹서버의 다큐먼트 외부에 설정한다.

  • 화이트리스트 방식으로 허용된 확장자만 업로드되도록 하고, 확장자도 대소문자 구분 없이 처리하도록 한다.

  • 공격자의 웹을 통한 직접 접근을 차단한다. 또한 파일 실행 여부를 설정 할 수 있는 경우, 실행 속성을 제거한다.


3. 예제

  • 다음 <코드 1>와 같이 업로드할 파일에 대한 유효성을 검사하지 않으면, 위험한 유형의 파일을 공격자가 업로드하거나 전송할 수 있다.

<코드 1> 안전하지 않은 코드의 예

  • 다음 <코드 2>는 안전한 코드의 예로 업로드 파일의 확장자를 검사하여 허용되지 않은 확장자일 경우 업로드를 제한하고 있으며, 저장 시 외부에서 파일명을 그대로 사용하지 않고 있다.

<코드 2> 안전한 코드의 예

  • 다음 <코드 3>은 안전하지 않은 코드의 예로 업로드할 파일에 대한 유효성을 검사하지 않으므로, 위험한 유형의 파일을 공격자가 업로드하거나 전송할 수 있다.

<코드 3> 안전하지 않은 코드의 예

  • 다음 <코드 4>는 안전한 코드의 예로 업로드 파일의 확장자를 제한하고 있다. 확장자가 실행 가능한 위험한 파일 타입인 EXECUTABLE_FILE_TYPE에 해당하는 경우 업로드를 제한하고 있다.

<코드 4> 안전한 코드의 예

참고 문헌

[1] 전자정부 SW 개발ㆍ운영자를 위한 Java 시큐어코딩 가이드, 행정안전부, 11-1311000-000330-10, 2012-09 - http://www.moi.go.kr

[2] CWE-434 Unrestricted Upload of File with Dangerous Type, http://cwe.mitre.org/data/definitions/434.html

[3] 2011 SANS Top 25 - RANK 4 (CWE-434), http://cwe.mitre.org/top25/


반응형