HTML5 개요 및 취약점
redjyjy@a3security.com
(A.K.A r3dy)
I. HTML5 개 요
1. 요 약
HTML5는 W3C에서 만들고 있는 차세대 웹 표준으로서 마이크로소프트, 모질라, 애플, 구글, 오페라 등 모든 웹 브라우저 벤더가 참여하고 있는 산업표준입니다. HTML5의 주요 목적은 과거 HTML의 호환성을 유지하면서 웹 개발자들이 실질적으로 부딪치는 문제를 해결하고 HTML문서가 좀더 의미 있으면서도 리치 웹 애플리케이션 기능을 수행할 수 있는 범용 표준을 만드는데 있습니다. HTML5에서는 기존의 HTML4보다 확장된 태그들을 지원하고 있으며, 문서 구조에 적합하게 header, footer, nav, section같은 구조화 마크업을 사용할 수 있습니다. XSS취약점이 존재한다면, 우회 할 수 있는 취약점 패턴이 증가하게 됩니다. 또한 HTML5 Cross Document Messaging기능이 규격에 추가됨에 따라 서로 다른 도메인간에 메시지 전송이 가능하므로 XSS취약점과 결합될 경우 이를 응용한 공격이 쉽게 이루어 질 수 있습니다.
2. 대상 시스템
- 마이크로소프트, 모질라, 애플, 구글, 오페라 등 HTML5를 지원하는 브라우저 |
II. 세부 분석
1. 내 용
HTML5에서는 기존의 HTML4보다 확장된 태그들을 지원합니다. 웹 어플리케이션 작성에 도움을 줄 다양한 API를 제공하여 이러한 요소가 많아짐에 따라 취약점 패턴도 함께 증가하게 됩니다.
HTML5에서 지원하는 확장된 태그를 이용하여 XSS취약점이 실행되는지 explorer와 opera를 이용하여 테스트 하였습니다.
다음은 explorer브라우저에서 XSS취약점이 존재하는 입력 값 부분에 악의적인 스크립트를 삽입한 화면입니다.
[그림 1] explorer 브라우저에서의 XSS (1)
다음은 스크립트가 실행되지 않은 화면입니다.
[그림 2] explorer 브라우저에서의 XSS (2)
다음은 opera브라우저 환경에서 XSS취약점이 존재하는 입력 값 부분에 HTML5에서 쓰이는 확장태그를 이용하여 악의적인 스크립트를 삽입한 화면입니다.
[그림 3] opera 브라우저에서의 XSS (1)
다음은 스크립트가 실행되어 XSS취약점이 발생된 화면입니다. HTML5를 지원하고 있는 opera브라우저에서는 확장된 태그로 인해 편리함을 갖췄지만, XSS취약점 패턴의 폭이 넓어진 것이라 할 수 있습니다.
[그림 4] opera 브라우저에서의 XSS (2)
2. 참고사항
URL) http://samples.msdn.microsoft.com/ietestcenter/html5.htm
위의 사이트에서 HTML5 Test Pages를 지원하고 있으니, 참고하시기 바랍니다.
[그림 5] HTML5 Test Pages
3. HTML5에서 추가, 수정 된 점
가. Javascript
HTML5에서 자바스크립트의 우선순위가 변경되었습니다. 기존HTML4에서는 뒤쪽에 선언된 자바스크립트가 실행되기 때문에 뒷부분에 악의적인 스크립트를 삽입하게 되면 공격자가 원하는 페이지로의 강제 이동(Page Defacement) 또는 Phishing Attack이 가능합니다. 하지만 우선순위가 변경된 HTML5에서는 앞쪽의 자바스크립트가 실행되기 때문에 공격자가 자바스크립트 뒷부분에 악의적인 스크립트를 삽입하더라도 앞쪽의 스크립트가 실행되게 됩니다. 이 부분은 공격 시 다른 방향을 모색해 봐야 할 듯 합니다.
자바스크립트를 두 개 이상 실행시킬 때, HTML4에서는 마지막으로 선언한 곳으로 이동하게 됩니다.
- HTML4
<script> Window.location = ”http://opera.com”; Window.location = http://a3sc.co.kr; << 이곳으로 이동 </script> |
동일하게 자바스크립트를 두 개 이상 실행시킬 때, HTML5에서는 첫 번째 선언한 곳으로 이동하게 됩니다.
- HTML5
<script> Window.location = ”http://opera.com”; << 이곳으로 이동 </script> <script> Window.location = http://a3sc.co.kr; </script> |
나. New Input elements
다음은 새롭게 추가된 Input elements입니다.
<input type=”date”> <input type=”week”> <input type=”datetime”> <input type=”time”> <input type=”number”> <input type=”range”> <input type=”email”> <input type=”url”> |
다. Attribute
다음은 정규식이 추가된 Attribute입니다. 정규식이 있어 찾고자 하는 정보를 보다 쉽게 추출할 수 있습니다.
<input type=”text” Pattern=”[0-9]{3}-[0-9]{3}-[0-9]{3} Title=”Enter phone number as xxx-xxx-xxx”> |
라. event
다음은 새롭게 추가된 event입니다.
<input type=”text” Pattern=”[0-9]{3}-[0-9]{3}-[0-9]{3} Oninvalid=”handle_myself(); return false;”> |
III. 대응 방안
1. 보안 대책
HTML5에서의 XSS취약점 대응방안으로는, 수정 및 추가된 부분이 있지만 기본적으로 XSS취약점 대응방안의 큰 틀에서 벗어나지 않습니다. 다음의 취약점 대응 권고사항을 지켜주시기 바랍니다.
가. 취약점 개요 및 대응 권고
XSS는 외부의 공격자가 정상적인 웹사이트를 악용하여 정상적인 웹사이트에 접속하려는 사용자로 하여금 공격자가 의도한 명령이나 작업을 수행하도록 하는 공격입니다. XSS를 이용한 공격 유형에는 사용자 쿠키 정보 추출을 통한 세션 가로채기 공격 등이 있습니다.
XSS 대응 방안은 사용자가 게시물을 업로드 할 수 있는 게시판의 경우와 사용자로부터 값을 입력 받는 경우로 나눌 수 있습니다.
- 사용자 게시판
운영상 필요한 경우 이외에는 사용자가 HTML을 사용하지 못하도록 하여야 합니다. 운영상 필요하여 HTML을 허용하여야 할 경우에는 스크립트 태그를 사용하지 못하도록 하여야 합니다. 사용자 태그뿐 아니라 본문에 “cookie” 나 “object”나 “document”와 특수한 문자열에 대한 체크를 하여 입력을 받지 못하도록 합니다.
- 파일의 argument로 값을 입력
HTML 태그가 입력되지 못하도록 하여야 합니다. 필터링 하여야 할 문자로는 <, >, & 등이 있고, 사용자 입력으로 원하는 값이 아닌 다른 모든 문자들을 필터링 하여야 합니다. 파일의 입력으로 받는 문자열일 경우에는 입력을 허용할 문자만을 선택하고 나머지는 필터링을 하거나 에러페이지로 이동하도록 합니다. 입력 값으로 <form>문을 작성할 때 다른 파일의 입력 값이 될 때와 같이 파일에 포함되어야만 할 때에는 입력 받은 문자는 URL Encoding을 하여 화면에 표시하도록 합니다.
- 입력 값 변환
<, >와 같은 문자들을 HTML에 표시하는 < 와 > 로 변환을 하여 저장을 하고 보여주는 방법이 존재합니다. 이 문자들이 HTML에서 <, >로 표시되기 때문에 화면에 나타날 때는 문제가 없습니다.
2. 관련 사이트
HTML5 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같습니다.
http://channy.creation.net/blog/776
http://channy.creation.net/project/html5/html4-differences/Overview_ko.html
http://www.hanb.co.kr/network/view.html?bi_id=1636
http://austinchau.blogspot.com/2008/11/html5-cross-document-messaging.html
http://samples.msdn.microsoft.com/ietestcenter/html5.htm
http://www.hagenburger.net/2009/03/html5-xhtml5-with-css-for-safari-firefox-opera-ie
※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.