참고사이트
http://www.kisa.or.kr/uploadfile/201312/201312161355109566.pdf
XSS취약점: 크로스 사이트 스크립팅 취약점
XSS공격은 웹 응용에 존재하는 취약점을 기반으로 웹 서버와 클라이언트간 통신 방식인
HTTP 프로토콜 동작과정 중에 발생한다. HTTP 프로토콜이란 웹 서버와 클라이언트간 서버에
저장된 웹 문서(일반적으로 HTML, 스크립트, 이미지)등을 클라이언트로 전달하기 위한 표준 규약이다.
먼저 클라이언트는 서버로 헤더 정보를 포함하여 관련 정보를 요청하면, 웹 서버는 클라이언트의 요청을 분석하여
요청한 자원 데이터 및 헤더를 포함하여 클라이언트로 응답을 보낸다.
XSS공격은 브라우저로 전달되는 데이터에 악성 스크립트가 포함되어 개인의 브라우저에 실행되면서 해킹을 하는 것이며,
이 공격용 악성 스크립트는 공격자가 웹 서버에 구현된 웹 애플리케이션의 XSS 취약점을 이용하여 서버 측 또는 URL에 미리 삽입을 해놓은 것이다.
XSS는 애플리케이션에서 브라우저로 전송하는 페이지에서 사용자가 입력하는 데이터를 검증하지 않거나, 출력 시 위험 데이터를 무효화 시키지 않을 때 발생!
공격방법은 3가지로 분류
1. 저장 XSS 공격
접속자가 많은 웹 사이트를 대상으로 공격자가 XSS 취약점이 있는 웹 서버에 공격용 스크립트를 입력시켜 놓으면, 방문자가 악성 스크립트가 삽입되어 있는 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식
가장 일반적인 방법은 게시판 같은 곳에 HTML 문서에 <script>를 이용하여 이 스크립트 태그 안에 악성 스크립트를 저장하는 방식이다. 즉 텍스트만 표시되도록 설계된 어떤 게시판에 <script> "악성 스크립트" </script>와 같은 태그를 포함한다.
이 경우에 게시판에는 태그가 나타나지 않으며 사용자는 확인할 수가 없다.
어떤 웹 페이지에 <script>alert(document.cookie)</script>가 포함되어 있는 어떤 페이지를 사용자가 읽을 때마다, 브라우저는 이 스크립트를 실행하면서 쿠키 값을 보여주게 된다.
즉 유명 온라인 게시판, 웹 기반 이메일 및 사용자 프로필 등에 악성 스크립트를 포함하면, 다른 방문자들이 해당 페이지를 읽어보이는 즉시 악성 스크립트가 브라우저에서 실행되면서 감염되므로 효과적이다!
2. 반사 XSS 공격
악성 스크립트가 포함된 URL을 사용자가 클릭하도록 유도하여 URL을 클릭하면 클라이언트를 공격하는 것
웹 애플리케이션의 지정된 변수를 이용할 떄 발생하는 취약점을 이용
검색 결과, 에러 메시지 등 서버가 외부에서 입력받은 값을 받아 브라우저에게 응답할 때 전송하는 과정에서 입력되는 변수의 위험한 문자를
사용자에게 그대로 돌려주면서 발생한다.
일반적으로 서버에 검색 내용을 입력하면, 검색 결과가 있는 경우에는 결과 값을 사용자에게 전달하지만 서버에서 정확한 결과가 없는 경우 서버는 브라우저에 입력한 값을 그대로 HTML문서에 포함하여 응답한다. 이 경우 HTML 페이지에 포함된 악성 스크립트가 브라우저에서 실행이 된다.
http://www.server.com/search/?q=<script>alert(document.cookie)</script>&x=0&y=0
서버가 반사한 HTML 데이터
<html>
<body>
<div id="pageTitleTxt">
<h2><span class="highlight">Search Results</span><br />
Search: "<script>alert(document.cookie)</script>"</h2>
</body>
</html>
즉, 사용자가 서버로 입력 한 값을 서버는 요청한 사용자의 브라우저로 악성스크립트를 반사시킨다. 반사 XSS 공격은 주로 사용자에게 악성 URL을 배포하여 사용자가 클릭하도록 유도하여 클릭한 사용자를 바로 공경한다. 즉, 사용자는 악성스크립트가 포함된 링크를 클릭한 순간 바로 악성 스크립트가 사용자의 브라우저에서 실행된다. 반사 XSS 공격은 이메일 메시지 또는 다른 웹 사이트와 같이 다양한 경로로 피해자 시스템에게 전달된다.
3. DOM기반 XSS 공격
DOM 환경에서 악성 URL을 통해 사용자의 브라우저를 공격
DOM(Document Object Model)이란 W3C 표준으로 HTML 및 XML 문서에 접근방법을 표준으로 정의하는 문서객체모델이다.
W3C에서는 DOM을 프로그램 및 스크립트가 문서의 컨텐츠, 구조 및 형식을 동적으로 접근 및 업데이트할 수 있도록 하는 언어 중립적인 이터페이스이다. 라고 정의되어 있다.
DOM은 HTML 문서를 계층적으로 보면서 컨텐츠를 동적으로 변경할 수 있다.
피해자의 브라우저가 HTML 페이지를 구문 분석할 때마다 공격 스크립트가 DOM 생성의 일부로 실행되면서 공격한다. 페이지 자체는 변하지 않으나, 페이지에 포함되어 있는 브라우저측 코드가 DOM 환경에서 악성코드로 실행된다.
이러한 DOM 페이지의 name변수에
아래와 같이 변수를 입력하면
http://www.server.com/page.html?name=<script>alert(document.cookie)</script>
브라우저에서 <script>의 내용이 실행되게 된다.
DOM 기반 XSS 공격을 예방기법을 회피하기 위한 방법으로 브라우저에서 #문자 뒤에 있는 값을 서버로 전송하지 않는 것을 이용한다.
http://server/page.html?name=David#<script>alert(document.cookie)</script>
XSS 공격의 피해
1. 쿠키 정보/세션 ID획득
쿠키란 웹 서버가 HTTP 헤더 중 Set-Cookie 필드로 브라우저에게 보내는 4KB 이하의 작은 텍스트 파일이다.
사용자가 웹 사이트를 이용하는 동안 사용자 브라우저에 저장된다.
사용자가 웹 사이트의 페이지를 클릭할 때마다 브라우저는 웹 서버에게 사용자의 상태를 다시 알려준다.
사용자 상태를 기록하기 위해 쿠키 값에 로그인, 버튼 클릭 등에 대한 정보를 저장한다.
세션 쿠키는 사용자가 웹사이트를 읽거나 방문하는 동안에만 임시로 메모리에 존재하는 쿠키이다.
쿠키 생성 시 쿠키 만료시기 또는 유효성 기간이 설정되어 있지 않은 경우에 세션 쿠키가 만들어진다.
브라우저에서는 사용자가 브라우저를 종료하면 세션 쿠키를 삭제한다.
웹 어플리케이션이 세션ID를 쿠키에 포함하는 경우 XSS 공격을 통해 클라이언트의 합법적인 세션 ID를 획득하여 불법적으로 정상 사용자로 가장할 수 있다.
2. 시스템 관리자 권한 획득
XSS 취약점을 이용하여 사용자 브라우저 취약점을 공격하여 PC를 완전히 통제할 수도 있다. 공격자는 XSS 취약점 있는 웹 서버에 다양한 악성 데이터를 포함시켜 놓은 후 사용자의 브라우저가 악성 데이터를 실행하는 경우 자신의 브라우저 있는 제로데이 취약점 또는 패치되지 않은 취약점을 공격하는 공격 코드가 실행되면서 사용자 시스템을 완전히 통제할 수 있다. 회사 등 조직의 개인의 PC가 해킹되는 경우, 조직의 내부 시스템으로 이동하여 내부의 중요 정보를 탈취하는 공격으로 이어질 수 있다.
3. 악성코드 다운로드
XSS 공격은 악성 스크립트 자체로만으로는 악성 프로그램을 다운로드 할 수 없지만, 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도하여 악성 프로그램을 다운로드 받는 사이트로 리다이렉트(redirect)하거나 트로이목마 프로그램을 다운로드하여 설치할 수 있다.
XSS 취약점 예방 기술
1. 입출력 값 검증 및 무효화
입력 데이터에 대한 길이, 문자, 형식 및 사업적 규칙 유효성을 검사
태그 문자 등 위험한 문자 입력 시 문자 참조(HTML entity)로 필터링
*HTML 문자 참조란 ASCII 문자를 동일한 의미의 HTML 문자로 변경
ex) <-><
HTML 문서에서 <sciript>l로 나타나서 브라우저에서 일반 문자로 인식하고 스크립트로 해석되어 실행되지는 않는다.
서버에서 브라우저로 전송 시 문자를 인코딩
CSS의 DIV엘리먼트에 다음과 같이 악성 자바스크립트를 숨길 수 있다.
<DIV STYLE="background-image: url(javascript:alert(document.cookie))">
그래서 HTML 속성에 들어가는 값도 반드시 인코딩해야 한다.
아이프레임의 경우 다음과 같이 악성 URL을 포함시켜 악성 자바스크립트가 포함된 페이지를 사용자가 읽으면서 브라우저를 공격할 수 있다.
<iframe src="악성 URL" width="0" height="0" frameborder="0"></iframe>
'웹 해킹 > 웹 해킹 개념' 카테고리의 다른 글
HEADER INJECTION (0) | 2018.02.12 |
---|---|
XSS 연습 (0) | 2018.02.10 |
세션변조 (0) | 2018.02.09 |
sql에서 연산자의 우선순위 (0) | 2018.02.09 |
blind sql injection (0) | 2018.02.09 |