Dev Environment/개발 기타 자료

jQuery, bootstrap cdn 의 속성 : integrity, crossorigin

jaiyah 2016. 10. 20. 09:18

integrity, crossorigin

The folks over at MaxCDN graciously provide CDN support for Bootstrap's CSS and JavaScript. Just use these Bootstrap CDN links.

부트스트랩 CDN 에는 다음과 같은 intergrity, crossorigin 인 attribute 가 있습니다.

html
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" integrity="sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ==" crossorigin="anonymous">
	
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css" integrity="sha384-aUGj/X2zp5rLCbBxumKTCw2Z50WgIr1vs/PFN4praOTvYXWlVyh2UtNUU0KAUhAX" crossorigin="anonymous">
	
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js" integrity="sha512-K1qjQ+NcF2TYO/eI3M6v8EiNYZfA95pQumfvcVrTHtwQVDG+aHRqLi/ETn2uB+1JqwYqVG3LIvdm9lj6imS/pQ==" crossorigin="anonymous"></script>


위 attribute 가 있는 이유는 보안때문입니다.

Intergrity 는 보안과 관련된 속성인데 알약 블로그에 상세히 설명되어 있어 그 내용을 발췌했습니다.



JavaScript를 기반으로 한 DDoS 공격

DDoS란 Distributed Denial of Service의 약자로, DoS공격이 발전된 형태입니다.

DDoS 공격은 공격자 수에서 Dos 공격과 가장 큰 차이가 있습니다.

DoS 공격은 하나의 클라이언트가 특정 서버에 수많은 접속시도를 하는 것이며, DDoS 공격은 다수의 클라이언트가 특정 서버에 적게는 한 번에서 많게는 수 만번의 접속을 시도하는 것입니다.


DDoS 공격의 방어 기술과 장비들이 발전하면서, DDoS 공격 방법도 함께 진화하고 있습니다.

초창기의 DDoS 공격이 악성코드에 감염된 좀비 PC들(봇넷)을 이용했다면, 최근에는 NTP, SNMP, DNS 등을 활용한 증폭 공격 등 그 방식이 점차 지능화, 고도화되고 있습니다.

GitHub 가 당한 DDoS 공격또한 조사결과 Javascript를 이용한 DDoS 공격으로 확인되었습니다.



JavaScript를 이용한 DDoS 공격 원리

다양한 기능 구현과 편리성 등의 이유로 많은 홈페이지에서 Javacsript를 HTML과 함께 사용하거나 <script src="">와 같은 html태그를 이용하여 원격으로 서버로부터 Javascript 파일을 로드합니다. Web2.0에서는 자바스크립트 내의 내용을 비동기로 로드할 수 있습니다. Web2.0은 사용자와의 상호작용을 중요시 생각하므로 사용자가 새로운 컨텐츠를 제작하면 웹 서버에 실시간으로 동기화 할 뿐만 아니라, 동일한 홈페이지에서 다른 사용자들 함께 커뮤니케이션할 수 있도록 제작되었습니다. 심지어 다른 홈페이지들끼리도 정보를 공유할 수 있습니다.

Javascript로 제작된 HTTP(S) 요청은 브라우저로 하여금 더 다양한 기능을 구현할 수 있도록 만들어져 있습니다. 그러나 또 다른 한편으로는 이러한 특징을 이용한 공격으로 웹 브라우저가 사이버 공격의 가해자가 될 수도 있습니다. 브라우저는 자바스크립트가 켜져 있도록 기본설정되어 있으므로 사용자가 임의로 자바스크립트 실행 기능을 끄지 않는다면 자동으로 사용자 브라우저에서 실행됩니다. 만일 사용자가 아래와 같은 자바스크립트가 포함된 웹 페이지에 접속을 한다면, 자신도 모르게 해당 스크립트에 명시되어 있는 웹 페이지에 접속하게 됩니다.

javascript
 function imgflood() { 
  var TARGET = 'victim-website.com'
  var URI = '/index.php?'
  var pic = new Image()
  var rand = Math.floor(Math.random() * 1000)
  pic.src = 'http://'+TARGET+URI+rand+'=val'
}
setInterval(imgflood, 10)

해당 스크립트는 공격하고자 하는 웹페이지에 이미지 클릭버튼을 만들어 놓고, 해당 이미지를 클릭하면 'victim-website.com' 페이지에 요청을 보냅니다. 사용자가 해당 스크립트가 포함되어 있는 페이지를 방문한다면, 'victim-website.com'페이지에 DDoS 공격을 하는 사람 중에 한명이 되는 것과 마찬가지입니다.



만약 공격자가 웹페이지에 악성 Javascript를 업로드 해 놓는다면, 해당 웹페이지를 방문하는 사용자들이 한 명의 DDoS 공격자가 되며, 이는 다른 DDoS 공격과 같이 대량의 좀비 PC가 필요하지 않습니다.



취약한 JavaScript를 공유하는 서버

대부분의 웹 페이지에는 일반적으로 JavaScript DB를 갖고 있습니다. 이는 트래픽을 절약과 성능 향상 등의 이유로 IDC와 같은 다른 서버에 저장을 해 놓습니다. 즉, 만일 웹 페이지에 제 3의 서버 스크립트 주석이 포함되어 있다면 사용자는 자동으로 해당 웹페이지에 접속하여 자동으로 JavaScript를 다운받아 실행하게 된다. 만약 JavaScript 중에 DDoS 공격 코드가 들어있다면, 방문자는 DDoS 공격의 한 사람이 되는 것입니다.




Subresource Integrity

위에서 설명한 바와 같이 다른 서버상에 존재하는 JavaScript를 이용한 공격은 조금 오래된 방법입니다.

지금의 HTTP는 스크립트의 실행을 제한하는 어떠한 매커니즘도 갖고 있지 않습니다.

하지만 W3C는 SRI라는 스크립트 실행을 제어할 수 있는 새로운 기능을 추가했습니다.

이는 해쉬값으로 스크립트를 증명하며 만약 해쉬값이 브라우저 값과 일치하지 않으면 실행되지 않습니다.

예를 들어 아래와 같은 스크립트가 있습니다.

html
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>


이 경우, 브라우저는 자동으로 해당 .js 파일을 내려 받으며 파일의 악성여부를 판단하지 않은 채 바로 실행합니다.

브라우저 역시 해당 파일의 악성여부를 판단할 수 없습니다.

하지만 웹페이지의 해쉬값이 스크립트의 해쉬값과 일치하지 않는 경우 SRI는 브라우저에게 스크립트를 실행금지 명령을 전달합니다.

html
<script src="https://code.jquery.com/jquery-1.10.2.min.js
	 integrity="sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg=" crossorigin="anonymous""></script>

홈페이지 관리자는 서버에 아래와 같은 주석을 등록하여, 사용자가 악의적인 공격에 사용되는 것을 막을 수 있습니다.

현재 SRI를 지원하는 브라우저는 Chrome, Firefox 및 Swing 등이 있습니다.


중간자 공격이란?

중간자 공격이란 브라우저(사용자)와 서버 사이에서 데이터를 가로채어 수정하는 공격으로, HTML내용을 수정하거나 JavaScript를 수정하는 등의 다양한 악의적인 행위를 할 수 있습니다.


이런 중간자 공격방식을 이용하면, JavaScript 스크립트를 DDoS 공격 스크립트가 포함된 악의적인 스크립트로 바꿔치기 할 수 있습니다. 그러나 이 공격은 패킷이 공격자가 속한 네트워크를 지나가야만 한다는 점에서 제한이 있습니다.



이러한 공격은 암호화된 HTTPS 통신을 통해 예방할 수 있습니다.





Jaehee's WebClub