티스토리 뷰

반응형

 

 

 

가. 원인

  - 업로드되는 파일의 안정성을 검사하지 않고 업로드를 허용

  - 서버측에서 실행될 수 있는 스크립트 파일(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. 업로드한 파일의 데이터를 안전한 확장자의 파일의 데이터로 복사하여 사용할 경우

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday