본문 바로가기

시스템/웹/포렌식 보안/웹 해킹/보안

파일 업로드 취약점 점검 및 보안

1. 취약성
대부분의 홈페이지는 사용자들을 위하여 여러 가지 종류의 게시판을 사용하고 게시판들은 파일을 첨부하는 기능 등 다양한 기능을 가지고 있는데 이런 게시판의 첨부파일 업로드를 기능을 악용하여 웹 서버의 권한이 노출될 수 있음..

 

2. 점검 방법
먼저 사용자 게시판에 파일첨부 기능이 있는지 조사한다.
 
) 게시판, 공개 자료실, 관리자 자료실, 이미지 자료실 등

첨부기능이 존재하는 경우, 확장자가 jsp, php, asp, cgi Server SideScript 프로그램을 업로드    
 
하여 업로드가 가능한지 조사한다. 이 때 클라이언트 프로그램에서 JavaScript, VBScript 등의

 
스크립트로 파일첨부를 차단하는 경우 차단기능을 수정하여 파일을 첨부한다.
홈페이지에 있는 디렉터리 정보를 이용하여 첨부한 Server Side Script프로그램의 위치를 조사한 후
 
브라우저 주소 창에서 해당 프로그램을 실행한다.
실행 창에서 프로그램 소유자를 조사하거나 중요정보가 존재하는지 조사한다.

 

3. 보호 대책
 
- 일반 대책
  A.
파일 업로드 기능 제한
 
게시판 첨부 파일 업로드, 사진 업로드 모듈등을 이용하여 악성 스크립트를 서버에 업로드 할 수 있습니다. 이를 실행시킬 수 있다면 해당 서버는 물론 해당Application Server와 신뢰관계를 맺고 있는 서버들(, Web DB서버, 내부 연동서버 등)들이 공격 당할 수 있는 가능성이 존재함.

 

B. Upload 파일을 위한 디렉터리에는 실행설정을 제거 (웹 서버)
Upload
파일을 위한 전용 디렉터리를 별도 생성하여 httpd.conf와 같은 웹 서버 데몬 설정파일에서
실행설정을 제거함으로써, Server SideScript Upload되더라도 웹 엔진이 실행하지 않게 환경을 설정함

 

C. 첨부파일의 확장자 필터링 처리
사용자가 첨부파일의 Upload 시도 시, Upload되는 파일의 확장자를 검토하여 적합한 파일인지를 검사하는 루틴을 삽입하여, 적합한 파일의 확장자 이외의 파일에 대해서는 업로드 되지 않도록 하며, 이런 필터링 규칙은 서버에서 구현해야 한다.

 

- 시스템 보안

웹 서버 구동은 반드시 관리자 권한이 아닌 일반 사용자 권한으로 구동하도록 한다. 외부사용자가 첨부파일을 이용하여 권한을 획득할지라도 최소한의 권한만을 사용할 수 있도록 한다.

 

A. IIS 보안 설정
설정→제어판→관리도구→인터넷 서비스 관리자 선택
해당 업로드 폴더에 오른쪽 클릭을 하고 등록정보→디렉터리→실행권한을 "없음" 으로 설정
 

 

B. Apache 설정 (httpd.conf 설정 파일 수정)
디렉터리에 대한 문서 타입을 컨트롤하기 위해 Directory 섹션의 AllowOverride 지시자에서FileInfo 또는 All추가

 

파일 업로드 디렉터리에 .htaccess 파일을 만들고 다음과 같이 AddType지시자를 이용하여 업로드 된 스크립트가 실행되지 않도록 설정한다. 또는 FileMatch 지시자를 이용하여 *.ph, *.inc, *lib Server Side Script 파일에 대해서 호출을 금지 시킨다.

 

※ 주의사항
1. Apache 서버의 경우 AllowOverride 지시자를 변경 시 apache restart가 필요하다.

2. 파일 업로드 되는 디렉토리에 운영에 필요한 Server Side Script가 존재하는지 확인한다.
 
파일 다운로드 프로그램이 아닌 직접 URL 호출을 통해 파일을 다운받는 경우FileMatch 지시자를

 
사용하면 차단 설정한 확장자의 파일 다운로드는 거부된다.

- 개발 언어별 대책

첨부 파일에 대한 검사는 반드시 Server Side Script에서 구현해야 한다.
첨부파일을 체크하여 특정 종류의 파일들만 첨부 가능하도록 하고 에러코드를 삽입하거나
 
첨부파일을 처리하는 파일 업로드 프로그램(php,php3, cgi, html, jsp )에서 모든 실행 가능한
 
파일은 첨부할 수 없도록 한다
프로그램에서 필터링을 할 경우 단순히 파일이름 기준으로 점검하지 말고 확장자 명에 대하여
 
검사하되 대소문자를 모두 검사하도록 한다.
너무 작거나 큰 파일을 처리하는 로직을 포함해야 하고, 임시 디렉터리에서 업로드 된 파일을
 
지우거나 다른 곳으로 이동시켜야 한다. 또한 폼에서 어떠한 파일도 선택되지 않았다면, 파일
 
업로드에 사용되는 변수를 초기화 시켜주어야 한다.
웹 서버 엔진 설정 시 업로드 된 디렉터리의 Server Side Script 언어의 실행 권한을 제거하고
 
업로드 된 파일이름을 임의로 변경하여 저장하는 것도 안전한 방법이다.