본문 바로가기

보안/시큐어코딩

[HTML5 시큐어코딩] HTML5 신규기능에 대한 보안 위협

HTML5는 

HTML5는 기존의 HTML이 가지는 제약사항(브라우저 자체 기능만으로 동영상재생, 파일업/다운로드, 그래픽구현)을 해결하기 위해 사용하는 비표준플러그인(Flash,SilverLight,ActiveX)등의 사용으로 인해 플랫폼 의존을 가지는 클라이언트 프로그램의 개발로 인한 비효율성, 비호환성등을 문제점을 해결하기 위해 "플랫폼, 장치에 의존적이지 않은 애플리케이션구현"을 위한 표준화 솔루션이다.


HTML5는 

audio,video,source,canvas,embed와 같은 각종 태그및 속성, CORS, Web Storage, Web Socket, Geolocation,File API등 다양한 신규 기능들을 제공하며, 크롬,사파리,파이어폭스,오페라,익스플로어등 주요 웹브라우저에서 이러한 기능이 구현 될 수 있도록 지속적으로 업데이트하고 있다.


HTML5의 신규 기능 요약 정리


 기능

 설명

  신규 요소(element)

 audio,video,source,canvas,embed 와 같은 신규 태그와 각 태그에 대한 세부 기능을 설정할 수 있는 속성(attribute)들이 추가되었다.

  CORS(Cross Orign 

  Resource Sharing)

 CORS는 브라우저가 XHR(XMLHttpRequest)을 이용하여 Cross Orign 요청을 가능하게 한다.  이것은 서로 다른 도메인간의 자원을 공유할 수 있게 해주며, SOP(Single Orign Policy) 제약 완화를 위해 사용될 수 도 있다.

  Web Storage

 브라우저에서 구현된 5MB 정도 크기의 저장공간을 말하며, 각 도메인에 따라 별도로 저장된다. 웹 애플리케이션이 정보유지나 관리를 위해 이 저장 장치를 사용할 수 있다.

  Web Socket

 웹서버와 사용자간의 지속적인 연결을 기반으로 전이중(Full Duplex) 통신을 가능하게 하므로 실시간 통신(주식정보, 채팅...)이 필요한 애플리케이션에서 사용가능한다. 

  Geolocation

 사용자의 위치정보를 브라우저에서 측정할 수 있다. 모바일 기기에서 유용하게 사용될 수 있는 기능이다.


<참고> SOP(Single Orign Policy-동일출처정책)은 웹브라우저들이 보안을 위해 자바스크립트로 다른 도메인의 웹페이지에 접근하는것을 못하도록 막아놓은 제약 조건이다. 즉 호스트나 응용계층의 프로토콜, 포트번호가 일치하지 않은 곳으로 부터 요청발생을 제한하는 정책이다. 기존에는 SOP를 우회하기 위해 Server-Side Proxy, JSONP 등 다양한 편법을 사용하였지만 웹서비스 구현이 복잡해지고 성능저하의 단점을 가지고 있었다.


HTML5의 신규 기능에서 발생될 수 있는 위협 요약 정리


신규 요소(element)


각 요소에서 사용하는 속성값들의 경우 경우 XSS 필터에 포함되어 있지 않으면서 자바스크립트를 실행하는데 사용될 수 있다.

ex)  <video><source onerror="alert('xss')"></source></vidoe>

      <textarea autofocus onfocus="alert('xss')"/>


HTML5 신규 엘리먼트 관련  보안 위협은 공격자들이 악용할 수 있는 공격범위를 더 넓게 만들었다. 기존 XSS 필터에 포함되지 않으면서 자바스크립트를 실행하는데 사용될 수 있는 onfocus, autofocus 와 같은 속성이 사용되기 때문이다.



CORS(Cross Orign Resource Sharing)


웹페이지상에서 자바스크립트를 이용하여 XHR(XMLHttpRequest)을 다른 도메인으로 발생시킬 수 있도록 해 주는 기능이다. 즉 XHR 기반 Cross Origin 요청을 이용하여 자원을 공유해야 하는 브라우저와 서버 사이의 대화방법을 정의한다.




     [그림1] CORS 동작방식  [출처: Intenet& Security Focus 2013 12월호]



CORS 관련보안위협?


CORSXHR을 다른 도메인으로 발생시킬때 사용자에게 허가 요청을 하지 않는다. 이것은 사용자 세션을 도용한 접근제어와 관련된 보안문제를 발생시킬 수 있다.


CORS 관련 보안 위협은 다음과 같이 분류할 수 있다.


1. 접근제어 우회:  사용자가 속해 있는 내부 네트워크에 존재하는 웹사이트가 Access-Control-Allow-Orign 응답 헤더를 잘못 정의했을 경우 공격자는 외부에서 직접 접근할 수 없는 내부 네트워크의 웹사이트에 접속할 수 있다.


2. CORS와 WebSocket을 이용한 원격쉘: XHR 과 Web Socket 기술을 이용하면 사용자의 브라우저 세션을 탈취하고 행동을 제어할 수 있다.


3. CORS와 WebSocket을 이용한 웹기반: CORS와 Web Socket 기술을 이용하며 사용자의 브라우저들을 제어하여 다양한 정보를 수집하거나 명령을 내릴 수 있다.


4. CORS와 WebSocket을 이용한 DDoS 공격: CORS와 Web Worker를 이용하면 보다 효고적으로 DDoS 공격을 수행 할 수 있다.



Web Storage


HTML5 이전 버전에서는 클라이언트 측에서 웹애플리케이션관련 컨텐츠를 저장할 때 주로 쿠키를 사용하였다. 하지만 쿠키는 도메인 사이트별로 20개, 4K 크키를 넘을 수 없다는 제약사항이나, 서버로 요청이 날라갈때 마다 해당 도메인에 대한 쿠키값이 모두 포함되어 전달되므로 해서 불필요한 오버헤더, 웹션탈취와 같은 문제점을 야기 시켰다.


Web Storage는 웹사이트와 관련된 컨텐츠를 사용자의 컴퓨터에 저장하고 이후 자바스크립트를 이용하여 접근하여 통제하는 것이 가능하다. 또한 컴퓨터에 저장할 수 있는 용량도 브라우저마다 조금은 다르겠지만 보통 도메인당 5MB 정도의 크기를 사용할 수 있다.


웹 스토리지는 세션 스토리지와 로컬 스토리지로 구분할 수 있다.

Session Storage는 기본적으로 로컬 스토리지와 유사하지만 브라우저 또는 탭을 종료하는 경우 데이터가 삭제된다.

Local Storage는 모든 텍스트값을 저장할 수 있다. key-value쌍으로 구분되어 저장되며, key을 통해 값에 접근할 수 있다. 사용자나 웹애플리케이션에 의해서 생성/삭제 될 수 있으며, 브라우저 종료시에도 값이 삭제되지 않는다.




 [그림2] 세션 스토리지 vs 로컬 스토리지      [출처: Intenet& Security Focus 2013 12월호]



웹스토리지 관련 가장 큰 보안 이슈 해당 영역에 저장되어 있는 데이터에 대한 불법적인 접근을 사용자가 인지 할 수 없다는 것이다. 웹 스토리지에 대한 모든 접근및 제어는 자바 스크립트를 통해 이루어지므로 XSS 등 스크립트 기반의 취약점이 있는 사이트의 경우 공격자는 사용자의 브라우저에 있는 모든 웹 스토리지 데이터를 사용자 모르게 조작하거나 가져 갈 수 있다.  즉 웹 스토리지 자체의 취약점은 아니지만 쿠키에 비해 저장공간이 커 다양한 정보가 저장될 수 있으며, 또한 유출될 수 있다. 




Web Socket


HTTP는 브라우저가 서버에 요청을 해야만 서버가 응답 하는 구조로 설계되어 있다. 이러한 구조는 채팅이나 주식정보와 같은 실시간 데이터를 전달해야 하는 경우 제한적이다.  또한 한번의 요청을 위해 세션연결/종료를 반복해야 하는 오버헤더도 크다.  한번의 세션 형성을 통해 전이중 통신이 가능한 기술에 대한 요구사항이 커지고 되었고 이것을 반영한것이 웹 소켓이다.




[그림3] 웹 소켓 동작 원리           [출처: Intenet& Security Focus 2013 12월호]


웹 소켓의 보안 위협은 사용자의 허가 없이 다른 도메인으로 연결 요청을 발생 시킬 수 있으며, 이 연결에 대해 사용자에게 알려주지 않기 때문에 사용자 모르게 브라우저를 통해 다른 도메인에 있는 시스템과 통신 채널을 생성하여 데이터 송수신이 가능하다.



Geolocation


HTML5의 Geolocation API는 브라우저 자체 기능만으로 단말의 위치 정보계산이 가능하다.  스마트 단말의 경우 GPS, 3G, 4G 네트워크 정보등을 기반으로 위치 정보가 수집된다. 


Geolocation 의 보안 위협은 Geolocation API를 사용해야 하는 경우 사용자의 동의를 받도록 설계되어 있지만 동일 도메인에서는 한번의 동의를 통해 사용자의 위치 정보를 지속적으로 수집할 수 있다. 이 경우 사용자가 위치 정보 수집을 위한 악성 링크를 클릭하는 경우 자신의 위치 정보를 공격자에게 지속적으로 전송할 수 있다.  즉 단순히 사이트 방문만으로도 사용자의 위치 정보가 노출 될 수 있개 때문에 위험성이 크다. 



File API


자바스크립트를 이용하여 파일 시스템에 있는 파일의 데이터를 읽을 수 있도록 지원한다. 이 기능으로 인해 HTML5에서는 플러그인 없이도 시스템에 있는 파일을 유연하게 다룰 수 있게 되었다.


File API의 보안 위협은 현재까지는 없다. 악성 자바스크립트를 브라우저에 삽입한다 하여도 사용자가 자의적으로 파일을 선택하지 않는 이상 공격자는 아무런 공격을 수행할 수 없다. 하지만 사회 공학적 기법을 활용하여 사용자의 시스템에 있는 파일을 탈취하는것이 전혀 불가능한것은 아니다.