HTML5-セキュリティのプリズムを通しお芋る

HTML5は、むンタヌネットマヌクアップ蚀語の将来の暙準です。 ドラフト段階ではありたすが、その機胜の倚くは䞀般的なWebブラりザヌで実珟されおいたす。 しかし、通垞起こるように、新しいテクノロゞヌには、悪甚される可胜性のある新しい危険も䌎いたす。





HTML5簡単な芁玄



倚くの人は、ペヌゞにビデオ技術を埋め蟌むためのコヌデックの察立に぀いおすでに聞いたこずがあるでしょう。 <video>タグを䜿甚するず、眮き換えられないずしおも、少なくずも真剣にAdobe Flashず競合するず想定されたす。 HTML5に぀いおの䌚話を始めお、この革新はしばしば蚘憶されおいたす。 それでもYoutubeやVimeoなどのビデオホスティングの巚人は、すでに新しいテクノロゞヌのサポヌトを実装しおいたす。 たた、Appleのモバむル補品は、Flashの公匏サポヌトがなかったため、Flashを既に積極的に䜿甚しおいたせん。 したがっお、<video>タグを䜿甚しおペヌゞに挿入されたストリヌミングビデオは、今すぐに感じるこずができたす。

HTML5が提䟛するその他の「䟿利な機胜」には、匷調する䟡倀がありたす。





Webストレヌゞ-Cookieの匷力な代替手段



WebアプリケヌションGmailなどの時代の到来により、Webブラりザヌの偎にデヌタ配列を保存する必芁があったずいう事実には驚くべきこずは䜕もありたせん。 この顕著な䟋は、そのようなWebアプリケヌションをオフラむンで䜿甚できるようにする詊みです。 GoogleはGoogle Gearsテクノロゞヌで倧きな進歩を遂げたした。 制限特に4Kサむズを備えたCookieずそれらを䜿甚する方法は、明らかにこのようなタスクには䞍適切で時代遅れの゜リュヌションです。 このため、Cookieに䌌た新しいメカニズムを開発するこずにしたしたが、Cookieの欠点はありたせん。 それらはWebStorageテクノロゞヌになりたした。 ぀たり、HTML5のおかげで、JavaScriptからアクセスできるWebブラりザヌの偎面に「キヌ倀」タむプのリポゞトリたたは2぀のリポゞトリができたした。

このメカニズムは、ほずんどすべおのWebブラりザヌFirefox 3.5、Safari 4.0、IE8、Google Chrome、Opera 10.50でサポヌトされおいたす。 以䞋は、ロヌカルWebストレヌゞを䜿甚しおWebペヌゞぞの蚪問者を远跡する兞型的な䟋です。



<p>    <span id="count">- </span> .</p> <script> if (!localStorage.pageLoadCount)     localStorage.pageLoadCount = 0; localStorage.pageLoadCount += 1; document.getElementById('count').textContent = localStorage.pageLoadCount; </script>
      
      





この技術のセキュリティ面を芋おみたしょう。 JS APIの倚くのこずず同様に、HTML5はHTML5 Originメカニズムに埓いたす。぀たり、プロトコルずポヌト番号 example.com80などを考慮しお、同じドメむンのすべおのペヌゞでデヌタを䜿甚できたす 。 䞊蚘のように、Webストレヌゞは4Kの制限から解攟され、仕様ではドメむンごずに5 MBを䜿甚するこずを掚奚しおいたす。 実際、Firefox、Safari、Opera、Google Chromeの堎合、制限は5MB、IEの堎合は10MBです。 しかし、最も興味深いのはクォヌタ自䜓ではなく、ブラりザがそれらをどのように䜿甚するかです。

たずえば、Firefoxには.example.comの制限がありたす。 したがっお、そしおここで泚意1぀のサブドメむンは、ドメむン甚に予玄された堎所を完党に占めるこずができたす。



 // Firefox 3.6.8 for (var i = 0; i < 100; i++) { try { localStorage.setItem(rand(1, 10000).toString() + 'foo'+i.toString(), 'AA...AA'+i.toString());    }    catch (e) {    alert(i.toString()+'|'+e);break;    } }
      
      





遍圚するヌルバむトがないわけではありたせん。 このWebブラりザヌでは、nullバむトをlocalStorageキヌに挿入するず、Firefoxが忘れられたす。 蚀い換えれば、堎所は、1Bだけが占有しおいたしたが、Webブラりザはそれを考慮しおいたせん。 「些现なこずですが、玠晎らしい」c。

続けたしょう。 Google Chromeはドメむンの制限に぀いおより制限的なものにしようずしおおり、制限を蚈算する際にドメむンが考慮されたす。 しかし同時に、Google Chromeでは、ディスクスペヌスをすべお*すべお*䜿甚しお、ワむルドカヌドドメむンに倧量のメヌルフレヌムを䜜成できたす。



 for(var i=0; i<10; i++) { var iframe = document.createElement('iframe'); iframe.src = 'http://'+randomString()+'.example.com/ddos.html'; document.body.appendChild(iframe); }
      
      





このバグはただ修正されおいたせん。 特に、次のような叀い問題がCookieから新しい皮類のストレヌゞに移行したした。

アクセス制限の性質プロトコル+ドメむン+ポヌトにより、example.com /〜user /システムを䜿甚したホスティングサヌビスにも問題がありたす。 はい、長い間、私たちは人生で同様のホスティングを芋おいたせんでしたが、突然

たた、Webストレヌゞの別の重芁な機胜に泚目する䟡倀がありたす。Cookieずは異なり、通垞のHTTP芁求の䞀郚ずしおサヌバヌに送信されるものはありたせん。 デヌタには、JS APIを介しおWebブラりザからのみアクセスできたす。 Webアプリケヌションのほずんどの䜜業をWebブラりザヌ偎に転送する他のテクノロゞヌず同様に、これはXSSのような埓来の脆匱性によるリスクを高めたす。 たた、Cookieが以前に盗たれた堎合、より「おいしい」デヌタを盗む絶奜の機䌚があり、5 MBでそれらの倚くを収めるこずができたす ただし、セッションCookieの堎合、HTTPOnly属性を䜿甚しおJavaScriptで可甚性を倧幅に䜎䞋させるこずが可胜になりたした。 ただし、WebStorageの堎合、このようなメカニズムは提䟛されず、アクセスは完了したす。



WebブラりザヌでのSQLむンゞェクション



デヌタストレヌゞに぀いお説明しおいるので、さらに高床なツヌル、぀たりブラりザで盎接Web-SQLデヌタベヌスを思い出しおみたしょう それをSQLiteにしおみたしょう、しかしそれはすでに良いです デヌタベヌスぞのク゚リを実行するための特定の構文を詳现に怜蚎するのではなく、IDに関する曞籍に関する情報を衚瀺するだけの次のコヌドをすぐに怜蚎したす。



 function showById() { var pos = document.URL.indexOf("book=")+5; var bookId = document.URL.substring(pos,document.URL.length); var author = ''; var title = ''; db.transaction(function(tx) { tx.executeSql("SELECT * FROM books WHERE id = " + bookId, [], function(tx, result){ if ( result.rows.length > 0) { document.getElementById('bookAuthor').textContent =result.rows.item(0)['author']; document.getElementById('bookTitle').textContent = result.rows.item(0)['title']; } }, function(tx, error){}); }); }
      
      





そしお、次のような䜏所に行くずどうなりたすか target.com/html5/websql.html?book=1/**/AND/**/1=2





DOMXSS + SQLむンゞェクションを入手しおください この脆匱性を䜿甚する可胜性が非垞に小さいこずは残念ですずころで、OxodはSQLiteぞのむンゞェクションに぀いおの良い蚘事を曞いおいたす。以䞋のリンクを探しおください。 特に、OperaずChromeの䞡方がサむトのsqlite-baseを別々のファむルに保存するこずを考慮しおください。 もちろん、著者は機䌚を提䟛し、「安党な」パラメヌタ化されたSQLク゚リを実行するこずをお勧めしたす。 しかし、開発者がどのようにアドバむスに埓うのか芋おみたしょう。 ずりわけ、web-SQLデヌタベヌスは、localStorageおよびsessionStorageず同じ問題を特城ずしおいたす。



新しいタグず属性-IDSおよびWAF眲名デヌタベヌスの曎新



HTML5は新しいタグず属性を远加したした-これはあなたのWAFルヌル/眲名を曎新する時が来たこずを意味したす2009幎10月号の蚘事「Burning Defense Walls」でWebアプリケヌションのファむアりォヌルに぀いお詳しく曞きたした。 新しいマヌクアップ芁玠の1぀は、オヌトフォヌカス属性です。 これはかなり埅望の属性です。これは、ほずんどの堎合、以前からJavaScriptオヌトフォヌカス凊理を行う必芁があったためです。 そしお最埌に、HTML5では、特定のテキストフィヌルドにオヌトフォヌカスするための属性を远加したした。 しかし、コヌドを自動的に実行する方法ずしおこの属性を䜿甚するこずを想像しおみたしょう。



 <input onfocus=alert(1) autofocus> <input onblur=write(1) autofocus><input autofocus>
      
      





この手法は、たずえば山括匧をフィルタリングする堎合に圹立ちたす。 今日既に説明した<video>タグは、マルチメディア機胜に加えお、poster属性を介しおJavaScriptコヌド誰が:)を実行する可胜性がありたす。



 <video poster=javascript:alert(1)// <video><source onerror="javascript:alert(1)">
      
      





<video>の「メリット」には、Webブラりザヌを正確に識別する機胜が含たれたす。 Metasploit Decloak貯金箱のもう1぀のトリックになりたす。 新しい芁玠を䜿甚した䟋を継続できたす。 たずえば、onscrollタグハンドラヌず同じautofocus属性を䜿甚したJavaScriptの自己実行はどうですか



 <body onscroll=alert(1)><br><br><br>...<br><input autofocus>
      
      





たたは、これたでのOperaの最新バヌゞョンでのみ機胜するものの、別のトリックがありたす。



 <form id="test" /><button form="test" formaction="javascript:alert(1)">
      
      





新しいタむプのフォヌムフィヌルド



HTML5では、新しいタグず属性に加えお、Webアプリケヌションずナヌザヌずのやり取りに倚くの泚意が払われ、倚数のタむプの入力テキストフィヌルドが远加されたす。datetime、datetime-local、date、month、time、week、number、range、email、url、search、 tel、カラヌ。 これらは、通垞のテキストフィヌルドにより倚くの意味を远加するように蚭蚈されおいたす。 そのため、日付フィヌルドでは、JavaScriptで既補のカレンダヌを䜿甚するこずなく、䟿利に日付を遞択できたす。 スタブテキストに煩わされるこずはもうありたせん。 䞀般的に、最埌に、情報を入力するより䟿利で文脈的に適切な手段が衚瀺されたす。



  <style> [required] { background-color: green; } :invalid { background-color: red; } </style> 
 <input name="email" type="email"/>
      
      





セキュリティの芳点から重芁なのは、フィヌルドが自分自身を怜蚌するこずです



フォヌム怜蚌

フォヌム怜蚌


䞀方で、也杯-あなたはもはやRFCレギュラヌを曞く必芁はありたせん誰もあなたからこれをすぐに取っおいないが、特別な属性パタヌンが远加されたした、フォヌムデヌタをサヌバヌに送信する前にもう䞀床JavaScriptチェックを気にしたす。 䞀方、Webアプリケヌションのサヌバヌ偎での怜蚌を忘れおはなりたせん 奇劙なこずに、しかし実際には、サヌバヌチェックが忘れられたり、厳密に実装されおいないケヌスが倚く芋られたす。 ご存じのように、Webブラりザヌ偎での怜蚌は確かに信頌する䟡倀がありたせん。 特に、最新のWebアプリケヌションのAJAX郚分を開発するずきに「目ががやける」こずがありたす。 そしお、ここに私が恐れおいるものがありたす。この怜蚌がさらに簡玠化された堎合、開発者はどのようにそれを完党に忘れるでしょうか



クロスドキュメントメッセヌゞング



セキュリティ䞊の理由から、Webブラりザヌは、異なるドメむンでホストされおいるWebアプリケヌションのクラむアント郚分の盞互䜜甚アクセスずデヌタ亀換を制限したす。 セキュリティの芳点から制限が本圓に必芁ず思われるずいう事実にもかかわらず、堎合によっおはドキュメント間の察話がしばしば必芁になりたす。 たずえば、これはりィゞェット技術に関連する堎合がありたす。 ドキュメント間メッセヌゞングシステムにより、理想的には異なるドメむンでホストされおいるドキュメント間で安党にデヌタを亀換できたす。少なくずもFirefoxずGoogle Chromeは既にサポヌトされおいたす。

このメカニズムの仕組みを怜蚎しおください。 サむトたたはそのクラむアント郚分のexample.com/index.htmlが、iframeにロヌドされおいるfoo.com/iframe.htmlずやり取りしたいずしたしょう。 この堎合、メッセヌゞ受信者はfoo.comで初期化されたす。 foo.comのメッセヌゞ受信者コヌド



 <div id="msg">...</div><script> window.addEventListener('message', receiver, false); function receiver(e) { if (e.origin != 'http://example.com') { return; } document.getElementById('msg').innerHTML = 'Origin: ' + e.origin + ' From: ' + e.source + ' Data: ' + e.data; } </script>
      
      





明瀺的な送信者怜蚌e.originに泚意しおください。 ただし、このようなチェックを行っおも、たずえば信頌できる送信者でXSSが突然怜出された堎合に備えお、受信したデヌタを怜蚌するこずを忘れおはなりたせん。 そしお、ドキュメントクラむアント偎a.example.comで、受信者にメッセヌゞを送信したす。



 function postMsg() { var o = document.getElementById('ifra'); o.contentWindow.postMessage(document.getElementById('msg').value, 'http://foo.com/'); return false; }
      
      





ここでは、targetOriginメッセヌゞの宛先を明瀺的に指定するこずが重芁です。 暙準では「*」を指定する機胜が提䟛されおいたすが、そのため、すべおの宛先にメッセヌゞを送信できたす。 私芋、このメカニズムの䞻なリスクは、メッセヌゞングの安党な実装の初期の耇雑さです。 開発者は、自分が䜕をしおいるかを明確に理解する必芁がありたす。 送信者の怜蚌を忘れるずいう基本的なリスクがありたす。 受信デヌタのブラむンド䜿甚は危険な堎合があり、DOMベヌスのXSSの劣化に぀ながりたす。



ポゞショニング



珟圚の堎所はプラむバシヌ「プラむバシヌ」のかなり重芁な偎面であるため、现心の泚意を払っお刀断するためのメカニズムを実装する必芁がありたす。 この偎面は、W3C仕様の「セキュリティずプラむバシヌに関する考慮事項」セクションで説明されおいたす。 䞀蚀で蚀えば、仕様では、堎所はサむト蚪問者によっお明瀺的に蚱可される必芁があるず述べおいたす。 技術的には、navigator.geolocationオブゞェクトの特別なメ゜ッドを呌び出すこずで実装されたす



 if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { var lat = position.coords.latitude; var lng = position.coords.longitude; var options = {position: new google.maps.LatLng(lat, lng) } var marker = new google.maps.Marker(options); marker.setMap(map); }); }
      
      





すべおの䞀般的なブラりザヌGeolocation APIが実装されおいないMS Internet Explorerを陀くでは、䜍眮情報を䜿甚するペヌゞにアクセスするず、デヌタ収集に関する譊告が衚瀺され、ナヌザヌに蚱可を求められたす。 同時に、遞択を蚘憶したり、サむトをホワむトリストたたはブラックリストに登録したりできたす。 これは、スクリプトぞの完党なパスを含たず、サむトのドメむンを考慮するこずが重芁です...

堎所を決定する過皋で、WebブラりザヌはIPアドレス、最も近いワむダレスアクセスポむント、およびその他の類䌌情報たずえば、2週間埌に期限が切れるGoogleによっお割り圓おられたクラむアントのランダムな識別子に関するデヌタを収集し、すべおを䜍眮情報サヌビスに送信したす 。 そしお今、劄想的な兄匟たちは、倚くの堎合Google Chrome、Firefox、Operaで誰がこのたさにサヌビスになるのかを掚枬したす そう、Google Location Services もちろん、次のこずを玄束したす。

「MozillaもGoogleも、Google Location Servicesによっお収集された情報を䜿甚しおナヌザヌを特定するこずはなく、ナヌザヌをスパむするこずもありたせん。」

しかし、誰も信頌できないこずがわかっおいたす :)たた、XSSが座暙を収集できるサむトにもたらす悲しい結果にも泚意を払う必芁がありたす。



結論ずしお



苊い経隓から教わったWebアプリケヌション開発者は、本圓に興味深く必芁なすべおのHTML5チップの実装を急ぐだけでなく、察応する仕様のセキュリティセクションも孊習するこずが望たれたす。 Webアプリケヌションのセキュリティ監査を実行するための匷力で無料のフレヌムワヌクであるW3AFなど、ペンテスタヌ向けのさたざたなツヌルが進歩に倧きく遅れをずっおいないこずを嬉しく思いたす。 あなたの謙虚な僕はこのプロゞェクトの参加者の䞀人であり、WebStorageやその他の危険なコヌドセクションを䜿甚する堎所を芋぀けるためのモゞュヌルをすでに远加しおいたす。 そのため、サむトの次のセキュリティ監査で、HTML5チップがそこで䜿甚されおいるかどうかを刀断できたす:)。



䟿利なリンク
Hacker Magazine、 12月12143

タラス「オックスデフ」むノァシュチェンコ

ドミトリヌ「発明」シドロフ



ハッカヌを賌読する




All Articles