티스토리 뷰
가. 원인
- 업로드되는 파일의 안정성을 검사하지 않고 업로드를 허용
- 서버측에서 실행될 수 있는 스크립트 파일(ASP, JSP, PHP 등)이 업로드 가능하며 웹을 통해 직접 실행가능
나. 영향
- 시스템 내부명령어를 실행
- 웹쉘 업로드를 통해 서버를 장악
- 키로거를 설치하여 인증정보 획득
- 악성코드가 포함된 파일을 업로드하여 사용자 PC를 감염
다. 보안대책
- 화이트리스트 방식으로 허용된 확장자만 업로드를 허용
- 업로드 파일의 크기와 갯수를 제한
- 업로드 파일의 종류를 제한
- 외부에서 접근할 수 없는 경로(Web Document Root 밖에 위치)에 파일저장
- 업로드 파일의 저장경로 및 파일명을 외부에 노출 금지
- 업로드 파일의 실행권한을 제거 후 저장
라. 안전한 코드
1. 파일 확장자 검증
String fileName = multipart.getFilesystemName("filename"); /* 대소문자 구분없이 검증하기 위해 소문자로 변경 */ String fileExt = fileName.substring( fileName.lastIndexOf(".") + 1).toLowerCase(); if ( gif.equals(fileExt) || jpg.equals(fileExt ) { ... Thumbnail.create(savePath + "/" + fileName, savePath + "/s_" + fileName, 150); ... }
|
마. 진단방법
<확장자 검증>
1. 외부 입력값에서 파일명을 얻어오는 부분이 존재하는지 확인
2. 허용된 확장자에 대해서만 업로드를 허용하는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. 파일 업로드 시 확장자를 체크하지 않을 경우
2. 블랙리스트 방식으로 확장자를 체크하는 필터링에서 대소문자를 구분하여 체크하는 경우
<오탐 케이스>
1. 파일 업로드 시 확장자를 체크하여 필터링할 경우
2. 업로드한 파일의 데이터를 안전한 확장자의 파일의 데이터로 복사하여 사용할 경우
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 입력 데이터 검증 및 표현 07 - XQuery 삽입 (0) | 2019.10.01 |
---|---|
[구현보안] 입력 데이터 검증 및 표현 06 - 신뢰되지 않는 URL주소로 자동 접속 연결 (0) | 2019.09.30 |
[구현보안] 입력 데이터 검증 및 표현 04 - 운영체제 명령어 삽입 (0) | 2019.09.30 |
[구현보안] 입력 데이터 검증 및 표현 03 - 크로스 사이트 스크립트 (0) | 2019.09.30 |
[구현보안] 입력 데이터 검증 및 표현 02 - 경로 조작 및 자원 삽입 (0) | 2019.09.30 |
- Total
- Today
- Yesterday