나만의 연습장

XSS 공격의 피해 및 예방법 본문

웹 해킹/XSS Attack

XSS 공격의 피해 및 예방법

My-Berr 2018. 11. 19. 11:18

!!!경고!!!

본 게시물에는 해킹 기법에 관련한 정보가 포함되어 있습니다.

이를 사용하여 악용할 시에는 법적 문제가 발생할 수 있으며

공격으로 인한 사고에 대해서 작성자는 절대 책임지지 않습니다.


이 페이지를 열함하였다는 것은 이에 동의한  것으로 간주합니다.


XSS 공격의 피해


<script>alert(document.cookie)</script> 이 스크립트는 쿠키 값을 출력하는 악성 스크립트이지만, 이 스크립트 대신 다양한 공격용 코드로 대체하면 쿠키정보 및 세션 정보획득, 클라이언트 프로그램 해킹 등 다양한 방법으로 클라이언트 시스템을 공격할 수 있다.


1) 쿠키 정보/세션ID획득

쿠키란 웹 서버가 HTTP 헤더 중 Set-Cookie 필드로 브라우저에게 보내는 4KB 이하의 작은 텍스트 파일이며, 사용자가 웹 사이트를 이용하는 동안 사용자 브라우저에 저장된다. 사용자가 웹 사이트의 페이지를 클릭할 때마다 브라우저는 웹 서버에게 사용자의 상태를 다시 알려준다. 사용자 상태를 기록하기 위해 쿠키 값에 로그인, 버튼 클릭등에 대한 정보를 저장한다.
세션 쿠기는 사용자가 웹사이트를 읽거나 방문하는 동안에만 임시로 메모리에 존재하는 쿠키이다. 쿠키 생성 시 쿠키 만료시기 또는 유효성 기간이 설정되어 있지 않은 경우에 세션쿠키가 만들어 진다. 브라우저에서는 사용자가 브라우저를 종료하면 세션쿠키를 삭제한다.
웹 애플리케이션이 세션ID를 쿠키에 포함하는 경우 XSS 공격을 통해, 클라이언트의 합법적인 세션ID를 획득하여 불법적으로 정상 사용자로 가장할 수 있다.


2) 시스템 관리자 권한 획득

XSS 취약점을 이용하여 사용자 브라우저 취약점을 공격하여 PC를 완전히 통제할 수도 있다. 
공격자는 XSS 취약점 있는 웹 서버에 다양한 악성 데이터를 포함시켜 놓은 후, 사용자의 브라우저가 악성 데이터를 실행하는 경우 자신의 브라우저에 있는 제로데이 취약점 또는 패치되지 않은 취약점을 공격하는 공격 코드가 실행되면서 사용자 시스템을 완전히 통제할 수 있다. 회사 등 조직의 개인의 PC가 해킹되는 경우, 조직의 내부 시스템으로 이동하여 내부의 중료 정보를 탈취하는 공격으로 이어질 수 있다.


3) 악성코드 다운로드

XSS 공격은 악성 스크립트 자체만으로는 악성 프로그램을 다운로드 할 수 없지만, 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도하여 악성 프로그램을 다운로드 받는 사이트로 리다이렉트하거나, 트로이목마 프로그램을 다운로드하여 설치할 수 있다.



XSS 취약점 예방 기술


1. 입・출력 값 검증 및 무효화

XSS 취약점을 근본적으로 제거하기 위해서는 스크립트 등 해킹에 사용될 수 있는 코딩에 사용되는 입력 및 출력 값에 대해서 검증하고 무효화시켜야 한다. 입력 값에 대한 유효성 검사는 데이터가 입력되기 전에 가능하면, 입력 데이터에 대한 길이, 문자, 형식 및 사업적 규칙 유효성을 검사해야 한다.

출력 값을 무효화하기 위해서는 XSS 공격은 기본적으로 <script> 태그를 사용하기 때문에 XSS공격을 차단하기 위해 태그 문자 (<,>)등 위험한 문자 입력 시 무자 참조(HTML entity)로 필터링하고, 서버에서 브라우저로 전송 시 문자를 인코딩하는 것이다. HTML 문자 참조란 ASCII문자를 동일한 의미의 HTML문자로 변경하는 과정이다.

예를 들어, 문자"<"는 동일한 의미의 HTML "&lt;"로 변경한다. HTML 엔터티는 대부분의 인터프리터에서 특수한 의미를 가지지 않으며 ,단순한 문자로 처리된다. 이렇게 인코딩하면 사용자는 <script>가 <script>로 보이지만 HTML문서에서는 &lt;script&gt;로 나타나서 브라우저에서 일반 문자로 인식하고 스크립트로 해석되어 실행되지 않는다.

 ASCII 문자

참조 문자 

ASCII 문자 

참조 문자 

 &amp;

&quot; 

&lt; 

&#x27; 

>

&gt; 

&#x2F; 

&#40; 

&#41; 


위 그림은 HTML 문서에서 악성 스크립트에 포함되어 브라우저에서 실행될 수 있는 문자와 대체 문자를 정리한 것이다. 악성 스크립트는 많은 HTML 태그안에 포함을 할 수 있으므로 반드시 위 그림에 있는 위험문자의 경우 출력 값을 이스케이핑 해야 한다.


CSS의 DIV 엘리먼트에 다음과 같이 악성 자바 스크립트를 숨길 수 있다.

<DIV STYLE="background-image: url(javascript:alert(document.cookie))">


그래서 HTML 속성에 들아가는 값도 &#xHH으로 반드시 인코딩 해야한다.

아이 프레임의 경우 다음과 같이 악성 URL을 포함시켜 악성 자바스크립트가 포함된 페이지를 사용자가 읽으면서 브라우저를 공격 할 수 있다.

<iframe src="악성 URL" width="0" height="0" frameborder="0"></iframe>



2. 보안 라이브러리

 1) AntiXSS

AntiXSS 라리브러리는 마이크로소프트사에서 개발한 공개용 XSS 취약점 예방 라이브러리이다.
AntiXSS 라이브러리는 ASP.net 애플리케이션 개발 환경에서 사용되며, 현재 ASP.net4.5이후 버전에만 사용이 가능하다. 이 라이브러리는 입력 값을 검증하여 서버로 악성 스크립트로 입력되지 못하는 기능과 위험한 문자를 인코딩하는 함수를 제공한다.


 2) OWASP ESAPI 라이브러리
  OWASP는 포괄적인 애플리케이션 보안을 위해 웹 응용 취약점을 대응할 수 있는 오픈 소스 ESAPI 라이브러리를 개발하여 제공하고 있다. ESAPI에는 총 14개의 API가 있으며, 이 중 XSS취약점을 예방하기 위해 API는 validator와 encoder가 있다. validator는 입력 값을 필터링하는 기능을 하고 있음, encoder는 출력 값을 인코딩 및 디코딩 기능을 가지고 있다.
라이브러리는 자바,php,NET,ASP, 자바스크립트 및 파이썬 등 다양한 애플리케이션 개발언어를 지원하고있다.   



3. 브라우저 확장 프로그램

애플리케이션 개발 시 이용하는 라이브러리 이외에도 사용자가 XSS 공격을 예방할 수 있는 프로그램도 있다. NoScpirt는 파이어폭스 등 모질라 기반의 브라우저에서 실행되는 오픈 소스 확장 프로그램으로, 화이트 리스트 기반으로 신뢰된 사이틔 자바스크립트, 플래쉬, 실버라이트 및 액티브X 등 동적 스크립트만 브라우저에서 실행하도록 하여 XSS 공격을 예방 할 수 있다.


'웹 해킹 > XSS Attack' 카테고리의 다른 글

XSS 공격  (2) 2018.11.19
Comments