ISBN XXX-XX-XXX-XXXX-X-XXXXX 웹어플리케이션취약점조치방법 (Ⅰ) 2016. 11
웹어플리케이션취약점조치방법 (Ⅰ) 2016. 11 부서 : 첨단연구망센터첨단연구망정보보호실제출자 : 이행곤 (hglee@kisti.re.kr) 최장원 (jwchoi@kisti.re.kr) 정용환 (paul7931@kisti.re.kr) 이형주 (lhj275@kisti.re.kr)
[ 목차 ] 제 1 장서론 1 제 2 장관련연구 2 제 1 절웹어플리케이션취약점유형 2 1. 개요 2 2. 웹취약점주요탐지유형 3 제 2 절웹취약점유형별주요탐지현황 2 제 3 장웹취약점유형별상세조치방안 2 제 1 절관리자페이지노출 4 제 2 절디렉터리나열 4 제 3 절시스템관리 4 제 4 절 WebDAV 4 제 5 절불필요한 Method 허용 4 제 6 절취약한파일존재 4 제 7 절계정관리 4 제 4 장결론 1 참고자료 2
제 1 장서론 최근웹을이용한침해사고를미연에방지하기위한하나의방법으로써웹취약점분석에관한연구가활발히진행되고있다. 네트워크환경이실생활에필수요소로자리잡은지금웹은모든응용계층중에가장많이사용하는프로토콜이되었다. 이러한환경의변화로많은양의웹응용프로그램들이등장하게되었고, 이들의취약점을이용한공격사례들이증가하게되었다. 웹서비스는개방된환경에서보안장비를거치치않고사용자와서버간통신이연결되는구조적인취약한특성으로인해악의적인공격자에의한공격타겟이되기쉽다. 이러한공격을보호하기위한대책으로보안장비도입을통한실시간모니터링, 보안정책관리등의보안조치를수행하고있다. 하지만이러한보안시스템들은웹어플리케이션취약점의근원적인문제해소를보장하지못한다. 따라서날로지능화되는공격기법에대응하기위해서는웹어플리케이션에대한지속적인취약점점검및개선조치가반드시필요한실정이다. 이에, 과학기술사이버안전센터에서는선제적인웹취약점제거를통해보안사고를미연에방지할수있도록자동화기반의취약점진단시스템을구축 보급하여대상기관에서운영중인웹사이트의균형적인보안수준향상을도모하고있다. 본기술보고서에서는실제운영되고있는웹사이트환경에서블랙박스테스트를통해주로탐지되는취약점패턴을중심으로취약점에대한상세한설명과취약점개선에필요한조치방안을기술하고자한다.
제 2 장 관련연구 제 1 절 웹어플리케이션취약점유형 본절에서는웹어플리케이션에서발생하는취약점의정의와주요탐지유형에 대하여살펴본다. 1. 웹취약점주요탐지유형 과학기술사이버안전센터에서정의한 17 개의취약점유형은아래와같다. 관리자페이지노출취약점일반적으로추측이가능한관리자페이지경로 등 를사용하거나 프로그램설계상의오류 인증미흡으로인해관리자메뉴에직접접근이가능하며권한인증이가능한취약점 디렉터리나열취약점서버내의모든디렉터리혹은중요한정보가포함된디렉터리에대해인덱싱이가능하게설정되어중요파일정보가노출될수있는취약점 시스템관리취약점응용프로그램설치중에생성되는설치 임시파일이존재하거나웹상에서윈도우로그인창이노출되는등시스템상설정미비로인해발생하는취약점 WEBDAV 취약점 IIS 일부버전의취약점으로악의적인 HTTP 요청을이용하여 FTP나시스템에직접접근하지않고원격에서파일을수정및처리가가능한취약점 불필요한 Method 허용취약점웹서비스제공시불필요한 등 허용으로외부공격자에의해악성파일을업로드하거나중요파일에대한조작이가능해지는취약점 취약한파일존재취약점웹루트하위에내부문서나백업파일, 로그파일, 압축파일과같은파일이존재할경우파일명을유추하여파일명을알아내고, 직접요청하여해킹에필요한서비스정보를획득할수있는취약점
계정관리취약점회원가입시에안전한패스워드규칙이적용되지않아서취약한패스워드로회원가입이가능할경우무차별대입공격을통해패스워드가누출될수있는취약점 실명인증취약점본인확인과정상에서취약한프로그램을악용하여사용자정보를변조하는공격으로관리자위장을통해개인정보를수집하거나기타공격에악용할수있는취약점 전송시개인정보노출취약점프로그램이보안과관련된민감한데이터를평문으로통신채널을통해서송 수신할경우, 통신채널스니핑을통해인가되지않은사용자에게민감한데이터가노출될수있는취약점 파일다운로드취약점외부입력값에대해경로조작에사용될수있는문자를필터링하지않는취약점을악용하여예상밖의접근제한영역에대한경로문자열구성이가능해져시스템정보누출, 서비스장애등을유발시킬수있는취약점 파일업로드취약점공격자가웹사이트에있는게시판이나자료실의파일업로드기능을이용하여공격자가만든특정공격프로그램을업로드하여웹서버의권한획득이가능한취약점 소스코드내중요정보노출취약점소스코드주석문에민감한정보 ( 개인정보, 시스템정보등 ) 이포함되어있는경우, 외부공격자에의해패스워드등보안관련정보가노출될수있는취약점 공개용웹게시판취약점공개용게시판을사용할경우인터넷에공개된각종취약점정보로인해홈페이지변조및해킹경유지로사용될수있는취약점 크로스사이트스크립트 (XSS) 취약점공격자가클라이언트스크립트를악용하여웹사이트에접속하려는일반사용자로하여금공격자가의도한명령이나작업을수행하는공격으로, 세션탈취, 웹사이트위변조, 악성스크립트삽입및실행, 접근경로리다이렉트등의다양한공격을유발할수있는취약점 구문삽입 (SQL-Injection) 취약점 URL 요청또는웹요청에포함되는웹어플리케이션에서입력폼및 URL입력란에 SQL 문을삽입하는형태의공격으로시스템내부정보를열람또는조작할수있는취약점 권한인증취약점웹어플리케이션상에서모든실행경로에대해서접근제어를검사하지않거나불완전하게
검사하는취약점을이용하여임의의명령실행이가능한악의적인파일을서버로업로드하여권한을탈취할수있는취약점 에러처리취약점웹서버에별도의에러페이지를설정하지않은경우, 에러메시지를통해서버데이터정보등공격에필요한정보가노출되는취약점 제 2 절 웹취약점유형별주요탐지현황 과학기술사이버안전센터에서는웹어플리케이션분야의취약점을탐지하기위하여다수의패턴을보유하고있으며, 앞서분류된웹취약점유형들이포함하고있는주요탐지패턴현황은아래와같다. 이번보고서에는전체 17개취약점유형중 7개의유형만다루도록한다. 순번취약점유형주요탐지패턴 1 관리자페이지노출취약점 [1-1] 관리자페이지노출 [2-1] 디렉토리목록화패턴발견 2 디렉터리나열취약점 [2-2] Microsoft FrontPage 디렉토리목록화 [2-3] Microsoft FrontPage _vti_cnf' 정보유출 [3-1] Apache Multivies Attack [3-2] HTTP Strict-Transport-Security 헤더누락 [3-3] 캐시화가능한 SSL 페이지발견 3 시스템관리취약점 [3-4] 세션쿠키에서 HttpOnly 속성누락 [3-5] 암호화된세션 (SSL) 쿠키의누락된보안속성 [3-6] HTTP.sys 원격코드실행 [3-7] 영구적쿠키에중요세션정보포함 [3-8] Microsoft FrontPage Extensions사이트손상 4 WEBDAV 취약점 [4-1] WebDAV 취약점 5 불필요한 Method 허용취약점 [5-1] TRACE 및 TRACK HTTP 메소드사용 [5-2] 안전하지않은 HTTP 메소드사용 [6-1] 파일대체버전, 애플리케이션테스트스크립트발견 [6-2] CMME 정보유출 6 취약한파일존재취약점 [6-3] URL 경로재지정을통한피싱 [6-4] PHP phpinfo.php 정보유출 [6-5] 임시파일및아카이브파일다운로드 7 계정관리취약점 [7-1] 올바르지않은계정잠금
제 3 장웹취약점유형별상세조치방안 제 1 절관리자페이지노출 일반적으로추측하기쉬운 URL(ex: /admin, /manager) 을사용하고있어, ID/ 패스워드에대한크랙또는접근허가정책에대해요청하는부분의정보를변경함으로써접근이가능한경우가존재하는데, 웹관리자의권한이노출될경우홈페이지의위 변조뿐만아니라취약점정도에따라서웹서버의권한까지도노출될위험성이존재함 [1-1] 관리자페이지노출 < 관리자페이지노출을통한비인가자접근 > 웹서비스관리자페이지경로가외부로노출되는취약점으로, URL 주소창에추측가능한페이지주소 ( 예시 : admin, adm, cms 등 ) 로관리자페이지가구성될경우관리자계정탈취로인한권한상승의위험이있음 < 관리자전용로그인페이지 >
1) 웹서버내에서의특정 IP주소에서만접근허용 ➀ 윈도우 IIS에서관리자 IP 설정방법 [ 설정 ] [ 제어판 ] [ 관리도구 ] [ 인터넷서비스관리자 ] [ 인터넷정보서비스 ] [ 관리자디렉터리선택후마우스우클릭 ] [ 등록정보 ] [ 디렉터리보안 ] [IP주소및도메인이름제한 ] [ 편집 ] <IIS 관리자 IP 설정 > ➁ 리눅스및유닉스의 아파치 (Apache) 환경설정방법 아파치웹서버의설정파일 httpd.conf Directory 내의 AllowOverride 옵션에서 AutoConfig 또는 All을추가하여관리자 IP만접근가능하도록제한예시 ) 관리자폴더 /usr/local/www/admin 에 192.168.1.1 만접근할수있도록설정한경우
제 2 절디렉터리나열취약점 디렉터리나열취약점유형은웹브라우저에서 URL 입력란에파일명이하를삭제하고바로디렉토리경로로접근을시도하였을경우디렉토리의하위내용이나열되는취약점으로, 공격자는내부에적재된파일정보와구성정보획득을통해웹어플리케이션의구조파악을통한민감정보유출의위험성이존재 < 디렉터리구조노출 > [2-1] 디렉토리목록화패턴발견 디렉터리인덱싱기능이활성화되어있을경우, 비인가자가외부에서웹서버내모든디렉토리및파일에접근이가능하여어플리케이션및서버의중요정보노출로인한추가공격에악용될수있는취약점
1) Windows [IIS] 제어판 > 관리도구 > IIS( 인터넷정보서비스 ) 관리자매뉴에서구축사이트 선택 > 화면중앙 IIS 박스의디렉터리검색선택사용안함클릭 <IIS 디렉터리검색기능비활성화 > 2) Apache 아파치 (Apache) 를웹서버로사용하는리눅스및유닉스 OS는아래와같은설정을통해디렉토리리스팅취약점을차단가능 <Directory /var/www/html > // 디렉토리경로 Options Indexes FollowSymLinks // 인덱스활성 Options FollowSymLinks // 인덱스비활성 3) Tomcat 톰캣 (Tomcat) 을웹서버로사용하는리눅스및유닉스 OS는아래와같은설정을통해디렉토리리스팅취약점을차단가능 - web.xml 파일설정예시 <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> 서비스설정후데몬재시작필수
[2-2] Microsoft FrontPage 디렉토리목록화 Frontpage 는 MicroSoft office에서기본적으로제공하는웹에디터로, 서버관리기능 (sercer extention) 보안설정이올바르지않을경우, 가상디렉토리및파일에접근이가능하여어플리케이션및서버의중요정보노출로인한추가공격에악용될수있는취약점 - 불필요할경우 Frontpage 서버관리기능 (Extensions) 제거 - C: \Program Files \Common Files \Microsoft Shared \Web server Extension 서브디렉터리에서아래의디렉토리삭제 \isapi \_vit_bin\_vti_adm \_vit_bin\_vti_aut \_vit_bin \admisapi \admincgi [2-3] Microsoft FrontPage _vti_cnf' 정보유출 Frontpage 는 MicroSoft office에서기본적으로제공하는웹에디터로, 서버관리기능 (server-extention) 보안설정이올바르지않을경우, 비인가자가내부디렉터리정보나파일경로등내부정보를가지고있는 _vti_cnf 폴더로접근가능한취약점 <Frontpage 기본경로유출 > - Microsoft Update 서비스를최신버전으로유지하도록권장 - 불필요할경우 Frontpage 서버관리기능 (Extensions) 제거
제 3 절디렉터리나열취약점 [3-1] Apache Multivies Attack Apache 에서제공되는 Multiviews 는다중언어지원옵션으로웹브라우저또는웹문서의종류에따라서가장적합한페이지를보여주는기능이며, 공격자가디렉터리에숨겨진파일을찾아중요정보를수집할수있는취약점 - Apache의구성파일에서 Multiviews 옵션기능제거여부확인파일경로 : <apache dir>/htdocs/httpd.conf <Directory "/htdocs"> Options MultiViews // multiviews 비활성화 AllowOverride All Order allow,deny Allow from all </Directory> - Apache 2.2 이후버전 <FilesMatch \.php$> // 파일확장자명 SetHandler application/x-httpd-php <FilesMatch> [3-2] HTTP Strict-Transport-Security 헤더누락 응용애플리케이션에서 HTTP Strict Transport Security(HSTS) 헤더가적용되지않아공격자가 HTTPS 스트리핑공격 (HTTPS 요청을 HTTP 로전환 ) 즉, SSL/TLS 연결을일반 HTTP 연결로변경하여민감한정보가평문형태로탈취될수있는취약점
[Windows IIS] - Windows IIS 경로 : C:\inetpub\wwwroot\web.config - 아래의볼드체구문추가 - 배포환경에서설정하기위해서는 web.release.config에아래와같은내용설정 <configuration> <system.webserver> <directorybrowse enabled="true" /> </system.webserver> <httpprotocol> <customheaders> <add name="strict-transport-security" value="max-age=31536000; includesubdomains" /> </customheaders> </httpprotocol> </configuration> [Apache] - Apache 경로 : /htdocs/httpd.conf - website.conf 및 httpd.conf 설정파일에서아래와같은내용설정 <VirtualHost xxx.xxx.xxx.xxx:443> Header always set Strict-Transport-Security "max-age=63072000; includesubdomains;" </VirtualHost> // max-age 값은밀리세컨드단위, 해당설정은 2년임. 즉 2년동안해당설정이유효함. [3-3] 캐시화가능한 SSL 페이지발견 로그인시사용자명, Password 등민감한정보들을보호하기위해 SSL을이용하여암호화를수행하는데, 사용중인브라우저에서민감한정보를캐싱하여발생하는취약점
민감한데이터가있는모든페이지에서캐싱기능을사용하지않도록설정 [ 시큐어코딩 ] response.setheader("cache-control", "no-cache"); response.setheader("pragma", "no-store, no-cache, must-revalidate"); [WINDOWS] SSL 세션정보의캐시유지시간값수정예시 ) ClientCacheTime 설정방법십진수데이터값선택 -> 밀리세컨드단위 (60000 = 1분 ) -> 비활성화는 0값처리 < 세션유지시간값수정 > [3-4] 세션쿠키에서 HttpOnly 속성누락 HttpOnly 는악의적인자바스크립트의접근을차단하기위한기능으로 HttpOnly 속성이누락될경우 XSS(Cross Site Scripting) 와같은공격자의변조된자바스크립트요청값에대한응답을통해세션하이재킹이발생할수있는위험이존재
스크립트가세션쿠키에접근하는것을보호하기위한 "HttpOnly" 속성설정 [ASP.NET] 파일경로 : systemroot\microsoft.net\framework\versionnumber\config\web.config Response.Cookies.Add(new { } 또는 Value = 쿠키값, Secure HttpCookie = true mycookie.httponly = true; HttpCookie( mycookie ) mycookie = new HttpCookie("myCookie"); Response.AppendCookie(myCookie); Web.config <httpcookies requiressl= true /> 2.0 환경에서는 httponly 가기본으로설정됨 [PHP] 파일경로 : /usr/local/lib/php.ini Session.cookie_httponly [TOMCAT] = True; 파일경로 : /webapps/app/meta-inf/context.xml context.xml <?xml version= 1.0 encoding= UTF-8?> <Context path= / 어플리케이션경로 usehttponly= true > Servlet 3.0 이후 web.xml설정 <session-config> <cookie-config> <http-only>true</http-only> </cookie-config> </session-config> [3-5] 암호화된세션 (SSL) 쿠키의누락된보안속성 암호화된 HTTPS 구간에서개인정보를쿠키로저장할때쿠키객체의보호를위한보안속성을적용하지않을경우공격자에게단순한평문형태로노출되는취약점
HTTPS 로만서비스하는경우 Cookie 객체의 setsecure(true) 메소드를호출 하여브라우저쿠키에데이터를저장하도록설정 [ 안전한코드예제 ] 1: 2: private final String ACCOUNT_ID = "account"; 3: 4: public void setupcookies(servletrequest r, HttpServletResponse response) { 5: String acctid = r.getparameter("accountid"); 6: // 계정유효성점검 7: if (acctid == null "".equals(acctid)) return; 8: String filtered_id = acctid.replaceall("\r", ""); 9: 10: Cookie c = new Cookie(ACCOUNT_ID, filtered_id); 11: // 민감한정보를가진쿠키를전송할때에는보안속성을설정하여야한다. 12: c.setsecure(true); 13: response.addcookie(c); 14: } [3-6] HTTP.sys 원격코드실행 HTTP 프로토콜스택 (HTTP.sys) 이특수하게조작된 HTTP 요청의구문을검증하지못하는취약점으로 IIS 서버로 http header 의 range 필드를특수하게조작한패킷을전송할경우블루스크린유발및공격자가원하는원격코드의실행이가능함 [ 취약한 OS 버전사용시보안패치수행 ] Windows 7 Windows Server 2008 R2 Windows 8 Windows Server 2012 Server Core 설치옵션 Windows 7(32비트시스템용 ) 서비스팩 1 Windows 7(x64 기반시스템용 ) 서비스팩 1 Windows Server 2008 R2(x64 기반시스템용 ) 서비스팩 1 Windows Server 2008 R2(Itanium 기반시스템용 ) 서비스팩 1 Windows 8 Windows 8.1 Windows Server 2012 Windows Server 2012 R2 Windows Server 2008 R2 (x64 기반시스템용 ) 서비스팩 1 (Server Core 설치 ) Windows Server 2012(Server Core 설치 )
[ 안전한코드예제 ] #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <arpa/inet.h> int connect_to_server(char *ip) { int sockfd = 0, n = 0; struct sockaddr_in serv_addr; struct hostent *server; if((sockfd = socket(af_inet, SOCK_STREAM, 0)) < 0) { printf(" \n Error : Could not create socket \n"); return 1; } memset(&serv_addr, '0', sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(80); if(inet_pton(af_inet, ip, &serv_addr.sin_addr)<=0) { printf(" \n inet_pton error occured\n"); return 1; } if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf(" \n Error : Connect Failed \n"); return 1; } return sockfd; } int main(int argc, char *argv[]) { int n = 0; int sockfd; char recvbuff[1024]; // Check server char request[] = "GET / HTTP/1.0 \r \n \r \n"; // our evil buffer char request1[] = "GET / HTTP/1.1 \r \nhost: stuff \r \nrange: bytes=0-18446744073709551615 \r \n \r \n"; } if(argc!= 2) { printf(" \n Usage: %s <ip of server> \n",argv[0]); return 1; } printf("[*] Audit Started \n"); sockfd = connect_to_server(argv[1]); write(sockfd, request, strlen(request)); read(sockfd, recvbuff, sizeof(recvbuff)-1); if (!strstr(recvbuff,"microsoft")) { printf("[*] NOT IIS \n"); exit(1); } sockfd = connect_to_server(argv[1]); write(sockfd, request1, strlen(request1)); read(sockfd, recvbuff, sizeof(recvbuff)-1); if (strstr(recvbuff,"requested Range Not Satisfiable")) { // 해당취약점에취약할경우 "Looks VULN" 화면이보임 printf("[!!] Looks VULN \n"); exit(1); } else if(strstr(recvbuff,"the request has an invalid header name")) { // 해당취약점에취약하지않을경우 "Looks Patched" 화면출력 printf("[*] Looks Patched"); } else // IIS 서버인지확인필요 printf("[*] Unexpected response, cannot discern patch status");
[3-7] 영구적쿠키에중요세션정보포함 영구적보관이되는쿠키는파일형태로디스크에저장되는데, 취약한시스템은쿠키파일경로가노출되어디스크에저장된사용자의쿠키정보가탈취될위험성이있으며, 이를통해권한상승및주요정보탈취가가능함 사용자인증정보와세션토큰과같은중요한세션정보가유지되지않도록 "non-permanent" 쿠키로저장 ( 설정을위해서는쿠키의 "Expires" 필드를설정하지않아야함 ) [JAVA] [3-8] Microsoft FrontPage Extensions사이트손상 Frontpage Extention 은 MicroSoft office 에서제공하는웹에디터인 Frontpage 의관리기능을제공하며모든사용자가접근이가능하도록초기설정되어있는데공격자는이를통해웹페이지에접근하여악의적인웹서버권한탈취및위 변조가가능한취약점 취약한파일접근권한설정 (AUATHOR.DLL, ADMIN.DLL) IIS 관리콘솔 -> 웹사이트의 _VTI_BIN 디렉토리 -> 하위파일선택 (_VTI_AUTH/AUATHOR.DLL, _VTI_ADMIN/ADMIN.DLL) -> 파일의등록정보 -> 보안탭선택 -> 익명액세스체크해제 <FrontPage 접근권한설정 >
제 4 절 WebDAV 취약점 [4-1] WebDAV 취약점 원격지에서웹서버상의컨텐츠를조작할수있는기능을제공하는 WebDAV 라이브러리파일의속성에읽기 / 쓰기권한이모두허용되어공격자가원격에서임의조작을통한웹페이지위변조가가능한취약점 [IIS 를사용하지않을경우 ] 서비스상태를 중지, 시작유형을 사용안함 설정 IIS 경로 : [ 제어판 ]-[ 컴퓨터관리 ]-[ 서비스 ]-[World Wide Web Publishing Service] <IIS 비활성화설정 > [WebDAV 기능이필요하지않을경우-1] 경로 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameter 설정방법 : DisableWebDAV 의 DWORD 값을만들어 '1' 로설정후 IIS를재시작 <WebDAV 실행서비스비활성화설정 >
[WebDAV 기능이필요하지않을경우 -2] 경로 : [ 제어판 ]-[ 관리도구 ]-[IIS 관리자 ]-[WebDAV 제작규칙 ]- WebDAV 사용안함 설정 <WebDAV 비활성화설정 > [WebDAV 기능을사용할경우 ] 경로 : [ 제어판 ]-[ 관리도구 ]-[IIS 관리자 ]-[WebDAV 제작규칙 ]-[WebDAV 설정 ] 방법 : <WebDAV 주요설정 > 표를참고하여권한설정적용 항목 설명 SSL 액세스필요 SSL 인증서필수사용여부 숨겨진파일나열허용 숨겨진파일공개여부 무제한수준의속성쿼리허용 지정된경로외에다른경로로의접근허용 익명속성쿼리허용 익명사용자접속을허용 쓰기잠금필요 파일쓰기 ( 업로드 ) 제한 알수없는 MIME 형식허용 알수없는확장자형식허용 <WebDAV 설정관련주요변수 >
제 5 절불필요한 Method 허용취약점 [5-1] TRACE 및 TRACK HTTP 메소드사용 TRACE 메소드요청시서버에서요청받은메시지를사용자에게그대로반환하는특성을악용하여공격자가악성스크립트를통한사용자의쿠키및중요정보를탈취할수있는취약점 1) CONNECT, PUT, DELETE, TRACE 메서드비활성화 [IIS] 윈도우IIS 관리창의서비스확장에있는WebDAV 허용을비활성으로변경 IIS Lockdown 툴사용ㄱ. IIS Lockdown Tool 설치ㄴ. Lockdown Tool에포함된 URLScan 설치 (URLScan은HTTP 요청을블로킹처리함으로 IIS 서버를보호 ) ㄷ. %windows directory%\system32\inetsrv\urlscan 경로이동ㄹ. 해당경로의 urlscan.ini 파일을아래와같이설정 [options] UseAllowVerbs=1 [AllowVerbs] GET HEAD POST 또는 [options] UseAllowVerbs=0 [AllowVerbs] TRACE TRACK CONNECT DELETE
[APACHE] Httpd.conf 그리고 httpd-ssl.conf 아래와같이설정 <Directory /> // 도메인경로 <LimitExcept GET POST> // 허용하는메서드 Order allow,deny deny from all </LimitExcept> </Directory> //get, post이외의메서드는모두비활성화 [TOMCAT] Web.xml 아래와같이설정 <security-constraint> <web-resource-collection> <web-resource-name></web-resource-name> <url-pattern>/*</url-pattern> <http-method>head</http-method> <http-method>delete</http-method> <http-method>put</http-method> <http-method>options</http-method> </web-resource-collection> </security-constraint> 2) 크로스사이트스크립트에준하는시큐어코딩 - 사용자입력 UI 에서스크립트입력거부및방지, 필터링 [5-2] 안전하지않은 HTTP 메소드사용 웹어플리케이션에서일반적으로사용하는 GET, POST 메소드이외의불필요한메소드를허용하였을경우공격자는이를이용하여파일삭제, 파일업로드등웹서버를인증없이조작이가능 GET 및 POST 를제외한메서드비활성화조치
제 6 절취약한파일존재취약점 [6-1] 파일대체버전, 애플리케이션테스트스크립트, 압축된디렉터리발견 웹서버구성시기본설치파일, 테스트용파일등웹서버운영에사용되지않은불필요한파일들이외부로노출되어해당파일을통해공격자가내부구성정보수집, 테스트용파일조작등 2차공격에악용될수있는취약점 1) 설치시자동배포되는샘플파일삭제 - 사용하지않는파일및테스트용도디렉토리 / 파일삭제후배포 ( 예 : ASP, JSP, PHP, JAVA, PERL, txt, html,js,zip,.war, tar 등 ) - 소스코드내사용하지않는코드삭제 ( 예 : 테스트 / 디버깅용도 main 함수 ) 2) 파일대체버전발견조치방안 - 가상웹서버루트아래에존재하는파일의대체버전조회후삭제 - 가상루트아래에는항상사용중인파일만있음을확인 3) 애플리케이션테스트스크립트발견조치방안 - 서버에서 test/temporary 스크립트를삭제 - 서버오퍼레이션에필수적인또다른스크립트가서버에존재하는지확인 4) 압축된디렉토리발견 - 압축된디렉토리파일에대한액세스제한또는제거 [6-2] CMME 정보유출 CMME(Content Management Made Easy) 는 PHP기반웹서버의관리편의를위해사용하는웹컨텐츠관리시스템으로웹서버의구성정보에관한중요정보를포함하고있으며접근권한이미흡할경우공격자는이에접근하여서버에대한내부정보를수집할수있는취약점
설정파일 ("data/admin/users", "info.php") 에대하여통해신뢰된사용자 액세스가가능하도록정책설정 [6-3] URL 경로재지정을통한피싱 공격자가 HTTP 매개변수조작을통해악의적인사이트로리다이렉션하여사용자를피싱사이트로접속하도록유인하는취약점으로사용자명, Password, 신용카드번호, 주민등록번호등민감한정보의탈취가가능한위험성이존재함 허용가능한 URL과도메인들의화이트리스트를설정하여악의적인사이트접근차단 [ 안전한코드예제 ] 1: 2: protected void doget(httpservletrequest request, HttpServletResponse response) 3: throws ServletException, IOException { 4: String query = request.getquerystring(); 5: 6: // 다른페이지이동하는 URL 리스트를만든다. 7: String allowurl[] = { "url1", "url2", "url3" }; 8: ArrayList arr = new ArrayList(); 9: for ( int i = 0; i < allowurl.length; i++ ) 10: arr.add(allowurl[i]); 11: 12: if (query.contains("url")) { 13: String url = request.getparameter("url"); 14: // url에대한유효성점검을한다. 만약 http:// 가있으면다른도메인으로 URL을 redirect로의심된다. 15: if (url!= null && url.indexof("http://")!= -1 ) { 16: url = url.replaceall("\r", "").replaceall("\n", ""); 17: // URL 목록에있지않으면요청을거부한다. 18: if (!arr.contains(url) ) throw new MyException(" 에러 ); 19: response.sendredirect(url); 20: } 21: } 22:
[6-4] PHP phpinfo.php 정보유출 서버의환경설정에대한많은정보를포함하고있는 phpinfo.php 페이지가공격자에게노출되어예제및샘플페이지, 설치정보등웹서버의구성정보를열람가능한취약점으로 2차공격수행에필요한정보가노출되는위험성존재 <PHP 구성정보노출 > 1) phpinfo.php 페이지삭제 rm /var/www/html/phpinfo.php ( 예시 ) 2) phpinfo() 비활성화 PHP 경로 : /usr/local/apache/conf/php.ini disable_functions = phpinfo()
[6-5] 임시파일및아카이브파일다운로드 URI에노출되는상대경로조작을통해임시파일에대한다운로드나열람이가능한취약점으로시스템구성시자동으로생성되는기본설치경로및임시파일이외부비인가자에게노출될경우공격자가경로를유추하여내부핵심정보를획득할수있는취약점 - 임시파일삭제또는웹시스템의가상디렉토리외부로이동 - 다운로드를허용할디렉토리를지정하여해당디렉토리를벗어나는위치의다운 로드요청에대해서는경고메시지와함께다운로드를금지하도록함
제 7 절계정관리취약점 [7-1] 올바르지않은계정잠금 취약한계정정책또는로그인실패에대한상세한오류메시지는공격자에게유용한정보를제공하며별도의인증수단이없을경우무차별대입공격이나사전대입공격에노출되어관리자권한을획득가능 1) 계정잠금정책설정 [WINDOWS] 경로 : [ 시작 ]-[ 설정 ]-[ 제어판 ]-[ 관리도구 ]-[ 로컬보안설정 ]-[ 계정정책 ]-[ 계정잠금정책 ] 계정잠금기간 : 계정잠금임계값에도달했을경우계정잠금상태를유지할기간 계정잠금임계값 : 사전공격방지를위하여지정횟수이상로그인실패시계정잠금 기간동안계정사용불가 < 계정잠금정책설정 > [CenOS 5] 경로 : \etc\pam.d\password-auth no_magic_root : root는패스워드잠금설정제외 deny=5 : 5회입력실패시패스워드잠금 unlock_time : 계정잠김후잠금해제되는시간 ( 초 ) reset : 접속시도성공시실패한횟수초기화
2) 오류메시지노출설정 [IIS] 경로 : [ 시작 ]-[ 설정 ]-[ 제어판 ]-[ 관리도구 ]-[ 인터넷서비스관리자 ]-[ 등록정보 ]-[ 사용자정의 ] 오류등록정보편집을통해사용자정의에러페이지를지정 계정잠금기간 : 계정잠금임계값에도달했을경우계정잠금상태를유지할기간 계정잠금임계값 : 사전공격방지를위하여지정횟수이상로그인실패시계정잠금 기간동안계정사용불가 [Apache] 경로 : /etc/httpd/conf/httpd.conf 유효하지않은요청은별도로만든사용자정의에러페이지로 Redirect 설정 <httpd.conf> ErrorDocument 404/error_page.html ServerSignature off //Error 페이지등에서노출되는웹서버버전정보를나타내지 않도록설정 [Tomcat] 경로 : <Tomcat home directory>\conf\web.xml 에러코드에따른포워딩페이지설정 <web.xml> 404 /error_page/404.jsp
제 4 장 결론 최근들어인터넷기술이고도화되면서, 정보개방의필요성이급증하고있다. 이에공공정보들이외부로오픈된인터넷을통해정보유통을통한소통의장으로활용되어사용자들은언제어디서나원하는정보를편리하게확인할수있는환경이제공되고있다. 하지만누구에게나접근이가능한인터넷의구조적인취약점은상당히많은위험성을가지고있으며, 실제웹어플리케이션을활용한침해사고가매년지속적으로증가하고있는추세이다. 특히애플리케이션계층은네트워크계층이나시스템계층에비해기술적으로고도화되어있고애플리케이션의종류도다양하기때문에대부분의보안관리자들이보안정책을수립하고적용함에있어가장많은어려움을겪는실정이다. 또한대부분의운영자들이홈페이지구축시사용자의편의성에만주안점을두는경향이있어보안대책에크게관심을갖지않는것도웹어플리케이션분야의침해사고발생증가의원인이되고있는것이다. 현재이루어지고있는웹공격의 90% 이상이웹애플리케이션을노린공격이라고해도과언이아니다. 결국안전한웹보안을구축하고자한다면홈페이지구축단계에서의철저한보안코딩을비롯하여근본적인취약점을최소화가필요하며, 지속적인취약점점검및보안조치수행을통해보다안전한웹어플리케이션환경을마련하여야할것이다.
참고자료 [1] Secure coding, http://cwe.mitre.org [2] JAVA, http://wikisecurity.net/guide:java [3] MS, https://technet.microsoft.com/library/security/ms13-078 [4] MS, http://insecure.org/sploits/microsoft.frontpage.insecurities.html [5] REDHAT, https://securityblog.redhat.com/2014/10/15/poodle-a-ssl3-vulnerability-cve-2014-3566/ [5] APACHE, http://www.apache.org/