IgnatiusHeo

설계단계 보안설계기준-업로드·다운로드 파일 검증 본문

자격/SW보안약점진단원

설계단계 보안설계기준-업로드·다운로드 파일 검증

Ignatius Heo 2023. 6. 27. 19:20

작성일: 230627

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(93~102p)

 

유형  입력데이터 검증 및 표현
설계항목  업로드·다운로드 파일 검증
설명
 업로드·다운로드 파일의 무결성, 실행권한 등에 관한 유효성 검증방법 설계 및 부적합한 파일에 대한 처리방법을 설계한다.

보안대책
 ① 업로드되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다.
 
 ② 업로드되어 저장되는 파일은 외부에서 식별되지 않아야 한다.

 ③ 파일 다운로드 요청 시, 요청파일명에 대한 검증작업을 수행해야 한다.

 ④ 다운로드 받은 소스코드나 실행파일은 무결성 검사를 실행해야 한다.

연관된
구현단계
- 위험한 형식 파일 업로드
https://cryptocurrencyclub.tistory.com/115
- 부적절한 전자서명 확인
https://cryptocurrencyclub.tistory.com/137
- 무결성 검사 없는 코드 다운로드
https://cryptocurrencyclub.tistory.com/142

 

가. 취약점 개요

 

ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 1. 특정 파일명을 유추하여 탈취? 2. 트로이목마?ㅋㅋ..

  1. 위험한 형식 파일 업로드: 서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 등)을 업로드하고 웹에서 직접 실행하여 시스템 내부 명령어를 실행하거나 제어
  2. 경로조작 문자를 이용한 파일 다운로드: 접근제한 영역에 대한 경로 문자열 구성이 가능해 시스템 정보누출, 서비스 장애 등을 유발할 수 있음
  3. 무결성 검사 없는 코드 다운로드: 호스트서버 변조, DNS 스푸핑 또는 전송 시 코드 변조 등의 방법을 이용하여 공격자가 악의적인 코드를 실행할 수 있음.

 

나. 설계시 고려사항

 

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

  • 크기 제한: 업로드되는 파일의 크기 제한은 프레임워크, 프로그램에서 설정할 수도 있다. Spring 프레임워크를 사용하는 경우 MultiPartResolver 컴포넌트 속성값을 설정하여 업로드 파일의 크기를 제한할 수 있다.
  • 타입 제한: 업로드되는 파일유형의 통제는 서버, 클라이언트가 동일한 정책을 적용하도록 설계해야 하며, 파일의 MIME-TYPE과 확장자가 동시에 검사 될 수 있도록 업로드 파일에 대한 필터링 기능을 구현한 공통모듈을 설계하여 모든 파일 업로드 기능에 적용하거나 업로드 기능을 가진 컴포넌트에서 직접 필터링하도록 시큐어 코딩 규칙을 정의한다.
  • 실행권한 제거: 업로드된 파일이 저장되는 디렉터리에 대한 디폴트 파일 또는 디렉터리 생성 권한을 확인하고, 업로드된 파일에 실행권한이 주어지지 않도록 시스템 설정을 확인. 파일이 읽기 권한을 가지고 있기만 해도 서버에서 파일을 읽어 실행할 수 있으므로 서버 설정으로 업로드 경로의 파일이 실행되지 않도록 설정해야 함.

 

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

  • 파일의 저장경로는 외부에서 직접 접근이 불가한 경로 사용: URL을 조작하여 업로드된 파일에 접근할 수 없으므로 통제가 가능함. 업로드된 파일을 다운로드하기 위해서는, 다운로드 처리를 수행하는 컨트롤러를 구현해야 하며, 컨트롤러 구현 시 허가된 파일에 대한 허가된 사용자만 다운로드 기능을 사용할 수 있도록 통제.
  • 업로드되어 저장되는 파일의 파일명은 랜덤 하게 생성하여 사용: 저장된 파일을 공격자가 찾을 수 없도록 랜덤하게 생성된 파일명을 이용하여 디렉토리에 저장. 업로드한 파일명과 저장된 파일명이 매핑될 수 있도록 DB 테이블 칼럼 설계 시 업로드/저장된 파일명이 함께 저장되도록 설계

 

③ 파일 다운로드 요청 시, 요청파일명에 대한 검증작업을 수행해야 한다.

  • 요청 파일명에 경로를 조작하는 문자의 포함 여부 확인: .. / \ 문자는 제거하고 사용
  • 허가된 사용자의 허가된 파일에 대한 요청인지 확인: 허가된 사용자와 파일인지를 확인하는 기능이 구현되도록 파일 다운로드 컴포넌트가 설계되어야 하며, 파일을 다운로드하는 사용자의 안전을 위해 파일에 대한 악성코드 또는 바이러스 검사를 수행한 뒤 파일이 다운로드되도록 기능을 설계한다.
  • 사용자 요청에 의해 서버에 존재하는 파일이 참조되는 경우 화이트리스트 정책 사용: 허용 파일에 대한 목록을 작성하고 목록의 범위 내 파일에 대해서만 제한적으로 접근, 다운로드할 수 있도록 설계

 

④ 다운로드한 소스코드나 실행파일은 무결성 검사를 실행해야 한다.

  • 원격지에서 다운로드 받은 파일을 사용하거나 실행하는 기능을 구현해야 하는 경우 해당 파일과 파일의 체크섬 값(해시값 등)을 같이 다운로드 받아 파일에 대한 무결성 검사를 수행한 뒤 사용할 수 있도록 설계한다.

 

 

다. 진단 세부사항

 

 ① 업로드되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다. 업로드되는 파일의 타입, 크기, 개수 및 실행권한을 제한하도록 설계하고 있는지 확인한다.

  ㅇ  업로드 가능한 파일의 타입, 크기, 개수와 저장 시 파일의 퍼미션을 정의하고 있는지 확인(업로드 기능을 지원하는 프레임워크, 라이브러리 사용 여부 확인 후 파일 속성 제한 설정 여부 확인)

  ㅇ  허용되지 않는 파일 타입, 크기, 개수 업로드의 제한 기능 테스트 계획 수립 여부 확인

  ㅇ  업로드 후 서버에 저장된 파일의 실행 제한 여부 점검 테스트 계획 수립 여부 확인

 

 ② 업로드되어 저장되는 파일은 외부에서 식별되지 않아야 한다. 업로드된 파일을 외부에서 식별되거나 직접 접근할 수 없도록 설계하고 있는지 확인한다.

  ㅇ  저장 경로와 파일명을 외부에서 알 수 없도록 정의하는지 확인(난수 + 중복 안되도록)

  ㅇ  원본 파일명과 저장경로/파일명의 매핑정보를 관리하도록 설계되어 있는지 확인

  ㅇ  저장된 파일명, 경로가 외부에서 식별 가능한지 점검할 수 있는 테스트 계획 수립 여부 확인

 

 ③ 파일 다운로드 요청 시, 요청파일명에 대한 검증작업을 수행해야 한다. 파일 다운로드 요청 시 파일에 대한 검증작업이 이루어지도록 설계하고 있는지 확인한다.

  ㅇ  파일 다운로드 요청방식의 안전한 설계 여부 확인(경로 조작 문자 포함 여부, DB정보를 이용하여 요청파일의 유효성 점검 여부)

  ㅇ  조작된 파일명을 이용한 파일 다운로드 요청의 차단 여부 확인

 

 ④ 다운로드받은 소스코드나 실행파일은 무결성 검사를 실행해야 한다. 다운로드받은 소스코드와 실행파일에 대해 무결성을 검증하도록 설계하고 있는지 확인한다.

  ㅇ  파일의 무결성 검사를 위한 값(예: 해시)의 제공 여부 확인

  ㅇ  무결성 검사 수행 후 파일 다운로드하도록 절차가 설계되어 있는지 확인

  ㅇ  변조된 파일에 대한 다운로드 처리가 차단되는지 점검할 수 있는 테스트 계획의 수립 여부 확인

 

 

 

끝.