IgnatiusHeo
설계단계 보안설계기준-업로드·다운로드 파일 검증 본문
작성일: 230627
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(93~102p)
유형 | 입력데이터 검증 및 표현 |
설계항목 | 업로드·다운로드 파일 검증 |
설명 | 업로드·다운로드 파일의 무결성, 실행권한 등에 관한 유효성 검증방법 설계 및 부적합한 파일에 대한 처리방법을 설계한다. |
보안대책 | ① 업로드되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다. ② 업로드되어 저장되는 파일은 외부에서 식별되지 않아야 한다. ③ 파일 다운로드 요청 시, 요청파일명에 대한 검증작업을 수행해야 한다. ④ 다운로드 받은 소스코드나 실행파일은 무결성 검사를 실행해야 한다. |
연관된 구현단계 |
- 위험한 형식 파일 업로드 https://cryptocurrencyclub.tistory.com/115 - 부적절한 전자서명 확인 https://cryptocurrencyclub.tistory.com/137 - 무결성 검사 없는 코드 다운로드 https://cryptocurrencyclub.tistory.com/142 |
가. 취약점 개요
ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 1. 특정 파일명을 유추하여 탈취? 2. 트로이목마?ㅋㅋ..
- 위험한 형식 파일 업로드: 서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 등)을 업로드하고 웹에서 직접 실행하여 시스템 내부 명령어를 실행하거나 제어
- 경로조작 문자를 이용한 파일 다운로드: 접근제한 영역에 대한 경로 문자열 구성이 가능해 시스템 정보누출, 서비스 장애 등을 유발할 수 있음
- 무결성 검사 없는 코드 다운로드: 호스트서버 변조, DNS 스푸핑 또는 전송 시 코드 변조 등의 방법을 이용하여 공격자가 악의적인 코드를 실행할 수 있음.
나. 설계시 고려사항
① 업로드되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다.
- 크기 제한: 업로드되는 파일의 크기 제한은 프레임워크, 프로그램에서 설정할 수도 있다. Spring 프레임워크를 사용하는 경우 MultiPartResolver 컴포넌트 속성값을 설정하여 업로드 파일의 크기를 제한할 수 있다.
- 타입 제한: 업로드되는 파일유형의 통제는 서버, 클라이언트가 동일한 정책을 적용하도록 설계해야 하며, 파일의 MIME-TYPE과 확장자가 동시에 검사 될 수 있도록 업로드 파일에 대한 필터링 기능을 구현한 공통모듈을 설계하여 모든 파일 업로드 기능에 적용하거나 업로드 기능을 가진 컴포넌트에서 직접 필터링하도록 시큐어 코딩 규칙을 정의한다.
- 실행권한 제거: 업로드된 파일이 저장되는 디렉터리에 대한 디폴트 파일 또는 디렉터리 생성 권한을 확인하고, 업로드된 파일에 실행권한이 주어지지 않도록 시스템 설정을 확인. 파일이 읽기 권한을 가지고 있기만 해도 서버에서 파일을 읽어 실행할 수 있으므로 서버 설정으로 업로드 경로의 파일이 실행되지 않도록 설정해야 함.
② 업로드되어 저장되는 파일은 외부에서 식별되지 않아야 한다.
- 파일의 저장경로는 외부에서 직접 접근이 불가한 경로 사용: URL을 조작하여 업로드된 파일에 접근할 수 없으므로 통제가 가능함. 업로드된 파일을 다운로드하기 위해서는, 다운로드 처리를 수행하는 컨트롤러를 구현해야 하며, 컨트롤러 구현 시 허가된 파일에 대한 허가된 사용자만 다운로드 기능을 사용할 수 있도록 통제.
- 업로드되어 저장되는 파일의 파일명은 랜덤 하게 생성하여 사용: 저장된 파일을 공격자가 찾을 수 없도록 랜덤하게 생성된 파일명을 이용하여 디렉토리에 저장. 업로드한 파일명과 저장된 파일명이 매핑될 수 있도록 DB 테이블 칼럼 설계 시 업로드/저장된 파일명이 함께 저장되도록 설계
③ 파일 다운로드 요청 시, 요청파일명에 대한 검증작업을 수행해야 한다.
- 요청 파일명에 경로를 조작하는 문자의 포함 여부 확인: .. / \ 문자는 제거하고 사용
- 허가된 사용자의 허가된 파일에 대한 요청인지 확인: 허가된 사용자와 파일인지를 확인하는 기능이 구현되도록 파일 다운로드 컴포넌트가 설계되어야 하며, 파일을 다운로드하는 사용자의 안전을 위해 파일에 대한 악성코드 또는 바이러스 검사를 수행한 뒤 파일이 다운로드되도록 기능을 설계한다.
- 사용자 요청에 의해 서버에 존재하는 파일이 참조되는 경우 화이트리스트 정책 사용: 허용 파일에 대한 목록을 작성하고 목록의 범위 내 파일에 대해서만 제한적으로 접근, 다운로드할 수 있도록 설계
④ 다운로드한 소스코드나 실행파일은 무결성 검사를 실행해야 한다.
- 원격지에서 다운로드 받은 파일을 사용하거나 실행하는 기능을 구현해야 하는 경우 해당 파일과 파일의 체크섬 값(해시값 등)을 같이 다운로드 받아 파일에 대한 무결성 검사를 수행한 뒤 사용할 수 있도록 설계한다.
다. 진단 세부사항
① 업로드되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다. 업로드되는 파일의 타입, 크기, 개수 및 실행권한을 제한하도록 설계하고 있는지 확인한다.
ㅇ 업로드 가능한 파일의 타입, 크기, 개수와 저장 시 파일의 퍼미션을 정의하고 있는지 확인(업로드 기능을 지원하는 프레임워크, 라이브러리 사용 여부 확인 후 파일 속성 제한 설정 여부 확인)
ㅇ 허용되지 않는 파일 타입, 크기, 개수 업로드의 제한 기능 테스트 계획 수립 여부 확인
ㅇ 업로드 후 서버에 저장된 파일의 실행 제한 여부 점검 테스트 계획 수립 여부 확인
② 업로드되어 저장되는 파일은 외부에서 식별되지 않아야 한다. 업로드된 파일을 외부에서 식별되거나 직접 접근할 수 없도록 설계하고 있는지 확인한다.
ㅇ 저장 경로와 파일명을 외부에서 알 수 없도록 정의하는지 확인(난수 + 중복 안되도록)
ㅇ 원본 파일명과 저장경로/파일명의 매핑정보를 관리하도록 설계되어 있는지 확인
ㅇ 저장된 파일명, 경로가 외부에서 식별 가능한지 점검할 수 있는 테스트 계획 수립 여부 확인
③ 파일 다운로드 요청 시, 요청파일명에 대한 검증작업을 수행해야 한다. 파일 다운로드 요청 시 파일에 대한 검증작업이 이루어지도록 설계하고 있는지 확인한다.
ㅇ 파일 다운로드 요청방식의 안전한 설계 여부 확인(경로 조작 문자 포함 여부, DB정보를 이용하여 요청파일의 유효성 점검 여부)
ㅇ 조작된 파일명을 이용한 파일 다운로드 요청의 차단 여부 확인
④ 다운로드받은 소스코드나 실행파일은 무결성 검사를 실행해야 한다. 다운로드받은 소스코드와 실행파일에 대해 무결성을 검증하도록 설계하고 있는지 확인한다.
ㅇ 파일의 무결성 검사를 위한 값(예: 해시)의 제공 여부 확인
ㅇ 무결성 검사 수행 후 파일 다운로드하도록 절차가 설계되어 있는지 확인
ㅇ 변조된 파일에 대한 다운로드 처리가 차단되는지 점검할 수 있는 테스트 계획의 수립 여부 확인
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
설계단계 보안설계기준-인증 수행 제한 (1) | 2023.06.29 |
---|---|
설계단계 보안설계기준-인증 대상 및 방식 (0) | 2023.06.29 |
설계단계 보안설계기준-보안기능 입력값 검증 (0) | 2023.06.27 |
설계단계 보안설계기준-허용된 범위내 메모리 접근 (0) | 2023.06.27 |
설계단계 보안설계기준-HTTP 프로토콜 유효성 검증 (0) | 2023.06.23 |