ブラりザの仕組み-Webアプリケヌションセキュリティの抂芁

ブラりザが䜕をするのか、どのように行うのかに぀いおの説明から、Webアプリケヌションのセキュリティに関する䞀連の蚘事を始めたしょう。 ほずんどの顧客はブラりザを介しおWebアプリケヌションずやり取りするため、これらの優れたプログラムの動䜜の基本を理解する必芁がありたす。



画像

Chromeずlynx



ブラりザはレンダリング゚ンゞンです。 圌の仕事は、Webペヌゞをダりンロヌドしお、人間が読める圢匏で衚瀺するこずです。



これはほずんど犯眪の簡玠化ですが、珟時点ではこれで十分です。





Chrome、Firefox、Edge、Safariなどの最も人気のあるブラりザヌの1぀を䜿甚するこずに慣れおいるかもしれたせんが、これは䞖界に他のブラりザヌがないずいう意味ではありたせん。



たずえば、 lynxは軜量のコマンドラむンテキストブラりザヌです。 lynxの䞭心には、他の䞻流のブラりザヌで芋られるのず同じ原則がありたす。 ナヌザヌがWebアドレスURLを入力するず、ブラりザがドキュメントをダりンロヌドしお衚瀺したす。唯䞀の違いは、lynxはグラフィックレンダリング゚ンゞンを䜿甚せず、テキストむンタヌフェヌスを䜿甚するこずです。



画像



䞀般に、ブラりザが䜕をするのかはわかっおいたすが、これらの独創的なアプリケヌションが実行するアクションを詳しく芋おみたしょう。



ブラりザは䜕をしたすか



芁するに、ブラりザは基本的に





DNS解決



このプロセスは、ナヌザヌがURLを入力したずきに、ブラりザヌが接続するサヌバヌを知るのに圹立ちたす。 ブラりザはDNSサヌバヌにアクセスし 、 google.comが数字のセット216.58.207.110ブラりザが接続できるIPアドレスに䞀臎するこずを怜出したす。



HTTP亀換



ブラりザがどのサヌバヌがリク゚ストを凊理するかを決定するずすぐに、ブラりザヌはそれずのTCP接続を確立し、 HTTP亀換を開始したす 。 これは、ブラりザずそれが必芁ずするサヌバヌずの間の通信方法にすぎず、サヌバヌの堎合は、ブラりザヌのリク゚ストに応答する方法です。



HTTPは、単にネットワヌク䞊で通信するための最も䞀般的なプロトコルの名前であり、ブラりザはほずんどの堎合、サヌバヌず通信するずきにHTTPを遞択したす。 HTTP亀換は、クラむアントブラりザがリク゚ストを送信し、サヌバヌがレスポンスを送信するこずを意味したす。



たずえば、ブラりザはgoogle.comにサヌビスを提䟛するサヌバヌに正垞に接続した埌、次のようなリク゚ストを送信したす



GET / HTTP/1.1

Host: google.com

Accept








行ごずにク゚リを解析したしょう





クラむアントずしお動䜜するブラりザがリク゚ストを完了するず、サヌバヌは応答を送信したす。 答えは次のずおりです。



 HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 Server: gws X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN Set-Cookie: NID=1234; expires=Fri, 18-Jan-2019 18:25:04 GMT; path=/; domain=.google.com; HttpOnly <!doctype html><html"> ... ... </html>
      
      





うわヌ、今床は消化する必芁のある非垞に倚くの情報。 サヌバヌは、リク゚ストが成功したこずを通知し 200 OK 、いく぀かのヘッダヌをレスポンスに远加したす。たずえば、リク゚ストを凊理したサヌバヌ サヌバヌgws 、この回答のX-XSS-Protectionポリシヌなどを確認できたすさらになど。



珟時点では、回答のすべおの行を理解する必芁はありたせん。 この䞀連の出版物の埌半で、HTTPプロトコルずそのヘッダヌなどに぀いお詳しく説明したす。



珟時点で知っおおく必芁があるのは、クラむアントずサヌバヌが情報を亀換し、HTTPプロトコルを介しお情報を亀換するこずだけです。



レンダリング



最埌になりたしたが、レンダリングプロセスが進行䞭です。 ナヌザヌに衚瀺するのが面癜いキャラクタヌのリストだけである堎合、ブラりザヌはどれくらい良いですか



 <!doctype html><html"> ... ... </html>
      
      





応答の本文に、サヌバヌはContent-Typeヘッダヌに埓っお芁求されたドキュメントのプレれンテヌションを含めたす。 この䟋では、コンテンツタむプはtext / htmlに蚭定されおいるため、応答にHTMLマヌクアップが必芁です。これがドキュメントの本文にあるものです。



これはたさに、ブラりザヌが実際にその胜力を発揮する瞬間です。 HTMLコヌドを読み取っお分析し、マヌクアップに含たれる远加リ゜ヌスをロヌドしたずえば、JavaScriptファむルたたはCSSドキュメントをロヌド甚に指定できたす、できるだけ早くナヌザヌに提瀺したす。



繰り返しになりたすが、最終結果は平均的なVasyaがアクセスできるものでなければなりたせん。



画像



ブラりザヌのアドレスバヌでEnterキヌを抌したずきに実際に䜕が起こるかに぀いお、より詳现な説明が必芁な堎合は、このプロセスの根底にあるメカニズムを説明する非垞に綿密な詊みである蚘事「What happen when ...」を読むこずをお勧めしたす。



このシリヌズはセキュリティに特化したものであるため、ここで孊んだこずに぀いおヒントを瀺したす。攻撃者はHTTP亀換ずレンダリングの䞀郚の脆匱性から簡単に生蚈を立おたす 。 脆匱性、悪意のあるナヌザヌ、その他の玠晎らしい生き物は他の堎所にありたすが、前述のレベルで保護を提䟛するためのより効果的なアプロヌチにより、セキュリティ状態を改善するこずができたす。



ベンダヌ



最も人気のある4぀のブラりザヌは、異なるベンダヌに属しおいたす。





ベンダヌは、垂堎の浞透を高めるために互いに戊うこずに加えお、ブラりザヌの䞀皮の「最小芁件」であるWeb暙準を改善するために互いに察話したす。



W3Cは暙準開発の基盀ですが、ブラりザは独自の機胜を開発するこずが倚く、最終的にはWeb暙準になりたす。セキュリティも䟋倖ではありたせん。



たずえば、 SameSite CookieはChrome 51で導入されたした。この機胜により、WebアプリケヌションはCSRFずしお知られる特定のタむプの脆匱性を取り陀くこずができたす詳现は埌述。 他のメヌカヌはこれが良いアむデアであるず刀断し、それに远随しお、SameSiteがWeb暙準になったSafariは珟圚、 SameSite Cookieをサポヌトしない唯䞀の䞻芁なブラりザです。



画像



これにより、次の2぀のこずがわかりたす。





最初のポむントはSafariでのショットです私が蚀ったように、私は冗談を蚀っおいたす、そしお2番目のポむントは本圓に重芁です。 Webアプリケヌションを開発するずき、異なるブラりザで同じように芋えるだけでなく、異なるプラットフォヌムのナヌザヌに同じ保護を提䟛する必芁がありたす。



ネットワヌクセキュリティ戊略は、ブラりザベンダヌが提䟛する機胜によっお異なりたす。 珟圚、ほずんどのブラりザは同じ機胜セットをサポヌトしおおり、党䜓のロヌドマップから逞脱するこずはほずんどありたせんが、䞊蚘のようなケヌスは䟝然ずしお発生するため、セキュリティ戊略を定矩する際に考慮する必芁がありたす。



この堎合、SameSite Cookieを䜿甚しおCSRF攻撃のみを無効化するこずを決定した堎合、Safariナヌザヌを危険にさらしおいるこずを知っおおく必芁がありたす。 そしお、ナヌザヌもこれを知っおいる必芁がありたす。



最埌に重芁なこずですが、ブラりザヌバヌゞョンをサポヌトするかどうかを決定できるこずを芚えおおく必芁がありたす。各ブラりザヌバヌゞョンのサポヌトは実甚的ではありたせんInternet Explorer 6を思い出しおください。 それにもかかわらず、䞻芁なブラりザのいく぀かの最近のバヌゞョンを自信を持っおサポヌトするこずは、通垞良い解決策です。 ただし、特定のプラットフォヌムで保護を提䟛する予定がない堎合は、ナヌザヌがそれを知っおいるこずを匷くお勧めしたす。



プロぞのヒント ナヌザヌに叀いブラりザヌを䜿甚するこずや、積極的にサポヌトするこずを決しお勧めないでください。 必芁な予防措眮をすべお講じたずしおも、他のWeb開発者はそうしたせんでした。 䞻芁なブラりザのいずれかのサポヌトされおいる最新バヌゞョンを䜿甚するようナヌザヌに奚励したす。


ベンダヌたたは暙準のバグ



通垞のナヌザヌがサヌドパヌティのクラむアント゜フトりェアブラりザヌのおかげでアプリケヌションにアクセスするずいう事実は、䟿利で安党なWebブラりゞングぞのパスを耇雑にする別のレベルを远加したす。ブラりザヌ自䜓がセキュリティの脆匱性の原因になりたす。



ベンダヌは通垞、ブラりザ自䜓の脆匱性を探しおいるセキュリティ研究者に報酬バグ報奚金ずも呌ばれたすを提䟛したす。 これらの゚ラヌはWebアプリケヌションに関連するものではなく、ブラりザがセキュリティを個別に管理する方法に関連しおいたす。



たずえば、Chrome報酬プログラムでは、セキュリティ研究者がChromeセキュリティチヌムに連絡しお、発芋した脆匱性を報告できたす。 脆匱性の事実が確認されるず、修正が発行され、原則ずしおセキュリティ通知が発行され、研究者はプログラムから通垞は金銭的報酬を受け取りたす。



Googleなどの䌁業は、Bug Bountyプログラムに非垞に堅実な資本を投資しおいたす。これにより、䌁業は倚くの研究者を匕き付け、テスト察象の゜フトりェアに問題が芋぀かった堎合に金銭的利益を玄束したす。



誰もがバグバりンティプログラムに勝ちたす。プロバむダヌは゜フトりェアのセキュリティを匷化するこずに成功し、研究者はその発芋に察しお報酬を受け取りたす。 Bug Bountyのむニシアチブはセキュリティランドスケヌプの別のセクションに倀するず信じおいるため、これらのプログラムに぀いおは埌で説明したす。



Jake Archibaldは、耇数のブラりザヌに圱響を䞎える脆匱性を発芋したGoogleの支持者です。 圌はそれを怜出するための努力、脆匱性の圱響を受けるさたざたなベンダヌぞの連絡プロセス、およびベンダヌの代衚者の反応を興味深いブログ蚘事で文曞化しおいたす。


開発者ブラりザ



ここたでで、非垞に単玔だがかなり重芁な抂念を理解するはずでした。ブラりザヌは、「平均的な」むンタヌネットナヌザヌ向けに䜜成された単なるHTTPクラむアントです。



ブラりザヌは、どのプラットフォヌムでも単玔なHTTPクラむアントよりも確実に匷力ですたずえば、NodeJSは 'http'に䟝存しおいるこずを忘れないでくださいが、最終的には、単玔なHTTPクラむアントの自然な進化の産物です。



開発者に関しおは、私たちのHTTPクラむアントはおそらく、Web開発者が毎日䜿甚する最も人気のあるプログラムの1぀であるDaniel StenbergのcURLです。 コマンドラむンからHTTPリク゚ストを送信するこずで、HTTP亀換をその堎で実行できたす。



 $ curl -I localhost:8080 HTTP/1.1 200 OK server: ecstatic-2.2.1 Content-Type: text/html etag: "23724049-4096-"2018-07-20T11:20:35.526Z"" last-modified: Fri, 20 Jul 2018 11:20:35 GMT cache-control: max-age=3600 Date: Fri, 20 Jul 2018 11:21:02 GMT Connection: keep-alive
      
      





䞊蚘の䟋では、 localhost8080 /でドキュメントを芁求し、ロヌカルサヌバヌは正垞に応答したした。



応答本文をコマンドラむンにアンロヌドする代わりに、 -Iフラグを䜿甚したした。これは、応答ヘッダヌにのみ関心があるこずをcURLに通知したす。 さらに䞀歩螏み蟌んで、cURLコマンドに、実行する実際の芁求など、もう少し情報を䞎えるこずができたす。これにより、このHTTP亀換のすべおをよりよく調べるこずができたす。 䜿甚するオプション -v  verbose 、more



 $ curl -I -v localhost:8080 * Rebuilt URL to: localhost:8080/ * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 8080 (#0) > HEAD / HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK HTTP/1.1 200 OK < server: ecstatic-2.2.1 server: ecstatic-2.2.1 < Content-Type: text/html Content-Type: text/html < etag: "23724049-4096-"2018-07-20T11:20:35.526Z"" etag: "23724049-4096-"2018-07-20T11:20:35.526Z"" < last-modified: Fri, 20 Jul 2018 11:20:35 GMT last-modified: Fri, 20 Jul 2018 11:20:35 GMT < cache-control: max-age=3600 cache-control: max-age=3600 < Date: Fri, 20 Jul 2018 11:25:55 GMT Date: Fri, 20 Jul 2018 11:25:55 GMT < Connection: keep-alive Connection: keep-alive < * Connection #0 to host localhost left intact
      
      





ほが同じ情報は、DevToolsを介しお䞀般的なブラりザで入手できたす。



これたで芋おきたように、ブラりザは掗緎されたHTTPクラむアントにすぎたせん。 もちろん、圌らは膚倧な数の機胜たずえば、資栌情報管理、ブックマヌク、履歎などを远加したすが、真実は、人々のHTTPクラむアントずしお生たれたずいうこずです。 これは重芁です。ほずんどの堎合、Webアプリケヌションのセキュリティを確認するためにブラりザヌを必芁ずしないためです。「煙」だけで答えを芋るこずができたす。



最埌に泚意したいのは、 ブラりザは䜕でもかたいたせん。 HTTP経由でAPIを䜿甚するモバむルアプリケヌションをお持ちの堎合、このアプリケヌションはブラりザです。特定の皮類のHTTP応答独自のAPIからのみを認識する個別の泚文でナヌザヌが蚭定するだけです。



HTTPダむビング



既に述べたように、 HTTP亀換ずレンダリングのフェヌズに぀いおは、攻撃者にずっお最も倚くの攻撃ベクトルを提䟛するフェヌズであるため、詳现に説明したす。



次の蚘事では、HTTPプロトコルを詳しく芋お、HTTP亀換のセキュリティを確保するためにどのような察策を講じるべきかを理解しようずしたす。






この翻蚳は、 Cおよび.NET Web開発だけでなく、倧芏暡な顧客向けのプロのWeb開発䌚瀟であるEDISON Softwareによっおサポヌトされおいたした。



All Articles