[시큐어코딩-자바] 위험한 형식 파일 업로드 (입력 데이터 검증 및 표현)
류명운
·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/
'삶의 늪에 들어 가기 전 > 정리중(미정리)' 카테고리의 다른 글
[Docker, Azure, AWS] Docker, Azure, AWS - 김포프(펌) (0) | 2017.02.05 |
---|---|
[개발자 강좌] "null이란 무엇인가?", 김포프(펌) (0) | 2017.02.05 |
[시큐어코딩-자바] 크로스 사이트 스크립트 (입력 데이터 검증 및 표현) (0) | 2017.01.31 |
[도메인] 도메인 신규/연장 업체별 가격비교 (2) | 2017.01.30 |
[시큐어코딩-자바] 1. 입력 데이터 검증 및 표현 - SQL 삽입 (0) | 2017.01.29 |