보안/SW보안약점 진단원
[설계보안] 보안기능-업로드/다운로드 파일검증
re-bugger
2022. 6. 24. 20:30
분류: 보안기능 / 위험한 파일 형식 업로드, 부적절한 전자서명 확인, 무결성 검사 없는 코드 다운로드
가. 항목명
업로드/다운로드 파일의 검증
나. 취약점 설명
위험한 형식 파일 업로드 : 실행될 수 있는 스크립트 파일(ASP, JSP, PHP 등) 업로드가 가능한 경우 공격자가 웹을 직접 실행시켜 시스템 내부 명령어 실행 및 제어가 가능한 취약점
경로 조작 문자를 이용한 파일 다운로드: 외부입력값에 대한 경로조작을 이용해 시스템 정보 누출, 서비스 장애 등을 유발하는 취약점
무결성 검사 없는 코드 다운로드: 원격으로 소스코드/실행파일을 무결성 없이 다운로드 및 실행하는 경우 호스트 서버 변조, DNS 스푸핑 또는 코드 변조 등을 이용하여 악의적인 코드 실행이 가능한 취약점
다. 보안대책
① 파일의 타입, 크기, 개수, 실행권한을 제한
② 업로드되는 파일의 저장경로가 외부에서 식별되지 않도록 설계
③ 파일 다운로드 요청 시 요청 파일명에 대한 검증 수행
④ 다운로드 받은 소스코드/실행파일은 무결성 검사를 실행
라. 설계시 고려사항
① (업로드) 파일의 타입, 크기, 개수, 실행권한을 제한
- 업로드 파일의 크기 제한
- 프레임워크 사용 시: MultipartResolver. 컴포넌트의 속성 값을 설정
- 소스코드 사용: 업로드 기능을 가진 컴포넌트에서 직접 필터링
- 업로드 파일의 타입 제한
- 파일의 MIME-TYpE과 확장자 동시 검사
- 소스코드 사용: 업로드 기능을 가진 컴포넌트에서 직접 필터링
- 업로드 파일의 실행권한 제거
- 서버에서 업로드 경로의 파일 실행권한을 제거
② (업로드) 파일은 외부에서 식별되지 않도록 설계
- 외부에서 직접접근이 불가능한 경로 사용
- 파일이 저장되는 경로는 URL로 직접접근이 불가능하도록하고 컨트롤러 구현 시 허가된 파일에 대한 허가된 사용자만 다운로드 가능하도록 통제
- 저장 시 파일명은 랜덤하게 생성
- 공격자가 찾을 수 없도록 랜덤하게 생성된 파일명을 이용하여 디렉토리에 저장
③ (다운로드) 다운로드 요청 파일에 대한 검증작업
- 파일 다운로드 요청 시 경로 조작하는 문자 포함 점검 ( '..', '/', '\' )
- 허가된 사용자의 허가된 파일에 다운로드 요청 구분
- 화이트 리스트 정책으로 접근 통제
- 허용된 파일에 대한 목록을 작성하고 범위 안의 파일만 제한적으로 접근
④ 다운로드 받은 소스코드 및 실행파일은 무결성 검사를 수행
- 원격지에서 파일 다운로드 시 받을 파일과 저장된 파일의 체크섬 값(해시 값 등)을 같이 다운받아 무결성 검사를 수행
- 위험한 형식의 파일 업로드 대응 프레임워크 Java (Spring), PHP(CodeIgniter), ASP.NET(.NET Framework)
마. 진단기준 및 세부사항
① 파일 업로드 제한 정책
- 업로드 가능 파일의 타입, 크기, 개수, 퍼미션 정의
- 프레임워크 또는 라이브러리 사용여부 확인 후 파일의 속성을 제한
② 안전한 저장 위치
- 저장 경로와 파일명을 외부에서 알 수 없도록 정의
- 안전하 난수 / 파일명 중복체크
- 원본 파일명과 저장경로/파일명의 매핑정보를 관리하도록 설계
③ 파일 다운로드 시 검증작업
- 파일 다운로드 요청방식
- 요청 파일명에 대한 경로 조작 문자 포함 여부
- DB정보를 이용하여 요청 파일의 유효성 검증 여부
④ 다운로드 받은 소스코드/실행파일 무결성 검사
- 파일의 무결성 검사를 위한 값이 제공되도록 설계되어있는지 확인
- 무결성 검사 수행 후 파일 다운로드 가능하도록 설계
바. 안전한 보안설계의 예
No | 요구사항명 | 해결방안 | 검수기준 | 비고 |
1 | DB사용자 계정에 최소권한 부여 | 애플리케이션에서 사용하는 DB 사용자 계정은 애플리케이션에서 사용하는 테이블, 뷰, 프로시저에 대해서만 사용권한을 부여한다 | 애플리케이션에서 사용하는 DB사용자 계정은 테이블, 뷰, 프로시저에 대한 권한만 적용된다. | 지속적인 DB사용자 계정 관리가 필요 |