본문 바로가기
IT/해킹보안

파일 업로드 취약점?

by 모르면 모른다고 해 2012. 12. 8.
반응형

파일 업로드 취약점이란?

파일 업로드(File upload) 취약점은 애플리케이션 개발/운영 환경과 동일한 언어로 작성된 공격 파일을 웹 서버 측에 업로드 한 후, 원격으로 해당 파일에 접근하여 실행시키는 취약점이다. 

 

업로드 파일 확장자 제한 우회

웹 사이트의 게시판을 보면 글 작성 시 이미지 파일이나 틀정 문서를 업로드 하는 기능을 제공한다. 보통 대다수 유저들은 프로그래머가 의도한 대로 웹 페이지를 이용하지만, 악의적인 의도를 갖고 접속하는 사용자가 있기 마련이다. 그래서 실제 사이트에 저장되는 파일에 대해 검증이 필요하다. 그리고 그러한 방법으로 웹 프로그래머는 스크립트를 이용해 파일 확장자를 제한하였다.

다음은 일반적인 업로드 검증에 사용되는 JavaScript 코드 샘플

<script language = "javaScript>

..

if(! isDocFile(document.post.filename.value)) { alert ("문서파일 (doc, txt, zip, pdf)만 선택하실 수 있습니다.");

                                                               }

..

if("doc" == fileSuffix || "txt" == fileSuffix || "zip" == fileSuffix || "pdf" == fileSuffix || "" == fileSuffix)

                  return true;

                else 

                  return false;

파일 이름을 문자열 형태로 처리하며, 조건 문자(".")를 기준으로 fileSuffix 변수에 파일의 확장자를 문자열로 저장한다. 저장된 문자열을 허용된 파일 확장자(doc, txt, zip, pdf)와 비교하여 매치될 경우 true 값을 돌려주고, 그 외 확장자는 false 값을 돌려준다. 

일반적은 형태의 파일 이름을 생각하면 "파일명.확장자"의 형식을 갖고 있기 때문에 업로드 파일의 검증에는 최적의 코드이다. 

그러면, JavaScript 코드가 실제 사이트 접속 시 확장자 검증에 사용되는 과정을 살펴보아야 하는데, 먼저 사용자가 웹 사이트에 접속할 경우 웹 브라우저와 서버(웹 사이트) 간의 통신 과정을 살펴 보자.

<통신 과정>

웹 사이트에 접속하게 되면 서버클라이언트 브라우저간(크롬, 파이어폭스, IE)에 통신이 이루어 진다. (중요)

1. 웹 서버는 대기하고 있다가 클라이언트 웹 브라우저가 특정 페이지를 요청하게 되면

2. 사용자가 요청하는 웹 페이지에 포함된 JS파일, HTML코드, CSS 코드 등을 사용자의 웹 브라우저에 전송

3.,4 그러면 클라이언트 웹 브라우저는 이를 해석하여 화면에 보여주게 된다. 

그런데 문제는 클라이언트에서 사용하는 웹 브라우저는 일종의 클라이언트 프로그램이고, 이는 사용자가 얼마든지 원하는 정보만을 웹 브라우저에 제공할 수 있도록 한다. 

"JavaScript" 코드의 경우 웹 사이트에 접속하는 사용자의 PC, 엄밀히 말하면 웹 브라우저라는 프로그램에서 실행되는 코드로 최초 프로그래머가 제작한 코드의 의도를 얼마든지 피해갈 수 있는 허접이 존재한다. 

실제로 프록시 프로그램을 이용하여 클라이언트 웹 브라우저와 웹 사이트의 중간에서 클라이언트에서 다운되는 코드를 조작하는 과정을 통해 취약점을 확인 할 수 있다. 

<http 프록시>

 

파일 업로드 테스트

Web Server  Apache1.3.x 
 Application java verseion 1.3.1_03 
jakarta-tmocat-4.1.29
Tool  Paros 3.2.13(프록시 프로그램) 

 

대응방안

확장자 제한 우회를 통한 Server Side Page 실행을 막기 위해서는 서버에서 실행되는 디렉터리에 대한 권한 제한이나 server Side에서 확장자 검증이 필요하다. 

1. 확장자 실행권한 제한 서버 설정

Apache httpd.conf 파일 수정

<Directory ~ "/usr/local/apahce/htdoces/(upload|files)">

RemoveType .html .php

</Directory>

2. 업로드 디렉터리의 권한 제한 

윈도우 IIS 에서 업로드 된 파일이 실제로 실행이 되지 않도록 디럭터리의 실행 권한을 제거한다. 

3. 서버 사이드 인증

자바 스크립트를 통한 인증이 아닌 서버의 애플레이션 코드를 통해 확장자를 검증하는 방법.

애플레이션 코드에 하드코딩으로 검증하는 함수를 별도 구현한다. 

 

<PHP 코드 샘플>

 

 

출처 및 참고 

해킹, 침해사고 분석 | 송대근 지음 

반응형

댓글