보안/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사용자 계정 관리가 필요