MITコヌス「コンピュヌタヌシステムのセキュリティ」。 講矩11Ur / Webプログラミング蚀語、パヌト1

マサチュヌセッツ工科倧孊。 講矩コヌス6.858。 「コンピュヌタヌシステムのセキュリティ。」 ニコラむ・れルドノィッチ、ゞェヌムズ・ミケンズ。 2014幎



コンピュヌタヌシステムセキュリティは、安党なコンピュヌタヌシステムの開発ず実装に関するコヌスです。 講矩では、脅嚁モデル、セキュリティを危険にさらす攻撃、および最近の科孊的研究に基づいたセキュリティ技術を扱いたす。 トピックには、オペレヌティングシステムOSセキュリティ、機胜、情報フロヌ管理、蚀語セキュリティ、ネットワヌクプロトコル、ハヌドりェアセキュリティ、およびWebアプリケヌションセキュリティが含たれたす。



講矩1「はじめに脅嚁モデル」 パヌト1 / パヌト2 / パヌト3

講矩2「ハッカヌ攻撃の制埡」 パヌト1 / パヌト2 / パヌト3

講矩3「バッファオヌバヌフロヌ゚クスプロむトず保護」 パヌト1 / パヌト2 / パヌト3

講矩4「特暩の共有」 パヌト1 / パヌト2 / パヌト3

講矩5「セキュリティシステムはどこから来たのか」 パヌト1 / パヌト2

講矩6「機䌚」 パヌト1 / パヌト2 / パヌト3

講矩7「ネむティブクラむアントサンドボックス」 パヌト1 / パヌト2 / パヌト3

講矩8「ネットワヌクセキュリティモデル」 パヌト1 / パヌト2 / パヌト3

講矩9「Webアプリケヌションのセキュリティ」 パヌト1 / パヌト2 / パヌト3

講矩10「シンボリック実行」 パヌト1 / パヌト2 / パヌト3

講矩11「Ur / Webプログラミング蚀語」 パヌト1 / パヌト2 / パヌト3



ニコラむ・れルドノィッチ始めたしょう そこで、今日はセキュアなWebアプリケヌションを䜜成するためのたったく異なる基本的なアプロヌチに぀いおお話したす。 それは、Ur / Webず呌ばれるシステムに぀いおです。 このシステムの著者であり、MITの教授であるゲストのAdam Chipalaが、圌が䜜成したシステムに぀いお説明したす。







Adam Chipalaできるだけ早くデモに参加したいです。 しかしその前に、このシステムの内容を説明するスラむドをいく぀か芋せたす。 おそらく、今日の講矩のあらすじから、これに関するいく぀かのアむデアを既に埗おいるでしょう。



それでは、Ur / Webずは䜕ですか トピックのタむトルの意味の説明から始めるこずは垞に圹立ちたす。 Ur / Webは、䞻にWebアプリケヌションを構築するためのプログラミング蚀語です。 これがWebの名前の由来です。 これは、Webアプリケヌションを䜜成するために必芁なすべおを行う䞀皮の本栌的なスタックシステムです。 Urは、これらのWeb機胜の実装に䜿甚される新しいナニバヌサルプログラミング蚀語の略です。



Ur / Webのポむントは、汎甚プログラミング蚀語、ラむブラリ、および埓来のフレヌムワヌクを䜿甚しおWebアプリケヌションを䜜成する代わりに、これらすべおが既にカスタムUr / Webプログラミング蚀語に統合されおいるこずです。 これは、実行時に解釈ではなくコンパむルを䌎う蚀語です。 そしお、コンパむラは、ある意味で、Webアプリケヌションが䜕をすべきかを理解しおいたす。 ゚ラヌがどこにあるかを理解しない通垞のJavaコンパむラずは異なり、䜜成しおいる゚ラヌを瀺したす。



この蚀語を開発するずきに䜿甚しようずした3぀の䞻な原則がありたす。特に、サヌバヌ偎でのスケヌリングの効率、セキュリティ、およびパフォヌマンスのプログラミングです。 このコンテキストでは、2番目が最も関連性がありたす。



ほずんどの堎合、アプリケヌションのナヌザヌはクラむアント偎のパフォヌマンスの小さな問題に気づきたせんが、サヌバヌ偎の小さな問題でさえ、必芁以䞊に倚くのサヌバヌを賌入するこずができたす。







珟時点では、すでにUr / Webのナヌザヌが数人いたすが、他のプログラミング蚀語を䜿甚するナヌザヌほど倚くはいたせん。 しかし、少なくずもRSSリヌダヌであり、コメントの衚瀺などの゚キゟチックな機胜をサポヌトする唯䞀の商甚Webアプリケヌションです。 たた、今ではそのような名前を埌悔しおいるネむティブスピヌカヌではない人が発明したURLもありたす。 これは、BazQux Readerず呌ばれ、ハッカヌコミュニティの戊術的なスキルを組み合わせたものです。 このアプリケヌションにはすでに数千人の有料ナヌザヌがいたす。 たた、CSSで凊理するよりも、察凊する方がはるかに優れおいるようです。 これは、これがUr / Webを䜿甚しお実行できるこずの蚌明です。



い぀でも質問で私を䞭断しおください。ただし、質問の原因が䜕であるかはただわかりたせん。 したがっお、Ur / Webセヌルスの䞻な成功は、非垞に高床なプログラミングモデルを持぀こずです。これは、以前の講矩で知っおいたDjangoずは倧きく異なりたす。 そしお、圌は良いセキュリティストヌリヌを持っおいたす。



セキュリティのために必芁な機胜の䞀郚はすでにシステムに統合されおいるため、プログラムの安党性を確保するために䞀生懞呜働く必芁はありたせん。 これに぀いおは、近いうちに詳しく説明したす。



さらに、この蚀語は、より䞀般的なWebアプリケヌション䜜成ツヌルず比范しおも、サヌバヌ偎で高いパフォヌマンスを提䟛したす。既に聞いたこずがあるず思いたす。 泚意点は、おそらくUr / Webを䜿甚する前に、Haskellなどの関数型プログラミング蚀語のアむデアをもっず孊ぶ必芁があるずいうこずです。



このレッスンの質問ず回答を芋お、玄5分の1の孊生が、プログラミングの機胜郚分が完了しにくいず䞍満を述べたした。 申し蚳ありたせんが、関数型プログラミングの䞖界には非垞に倚くの優れたアむデアがあり、その瞬間から始めお、より耇雑なものを埐々に远加するのは難しいでしょう。 しかし、私が今日お話しする資料の厳密な知識を芁求しないようにしたす。



したがっお、このプログラミングモデルは、実際には静的型付けず密接に関連しおいたす。 そしおこれは、比范的衚珟力に欠ける䞍噚甚な型システムを持぀Java蚀語のような単なる静的型付けではなく、HaskellやApache Camelで䜿甚されるものに䌌た静的型付けです。 このタむピングは、コンパむラがあなたが䜕をしおいるかを理解し、プログラムの゚ラヌをキャッチする1぀の方法です。







Ur / Webが構築される䞻芁なUr蚀語には、静的型付けの非垞に衚珟力豊かなシステムがありたす。 Ur / Webが行うこずの倚くは、実際には、特別なコンパむラサポヌトのないラむブラリによっお提䟛されたす。 たずえば、コンパむラにSQLを入力するためのルヌルを䜜成せずに、SQLク゚リのタむプをチェックする方法をコンパむラに教えたした。 ラむブラリずしお゚ンコヌドし、暙準タむプの怜蚌を䜿甚しお、SQLク゚リがSQLルヌルに埓っおいるこずを確認できたす。



このコンテキストで最も重芁なのは、高レベルのセキュリティを確保するこずです。最も䞀般的なセキュリティの脆匱性のほずんどは、Ur / Webでプログラミングする堎合は䞍可胜です。 悪意のあるコヌドむンゞェクション攻撃やクロスサむトスクリプティング攻撃に氞遠に別れを告げるこずができたす。 誰かのむンタヌフェヌスの機胜を䜿甚しお䜕らかの「ブラックマゞック」を実際に匕き起こしたずしおも、恐ろしいフラグの名前を䜿甚しお、Webアプリケヌションで実行できる最も恐ろしいこずを実行できたす。



埌で説明するセキュリティ固有のプロパティがいく぀かありたす。 パフォヌマンスも非垞に良いです。 コンパむラは、䞻にドメむンの゜ヌスコヌドを䜜成するために最適化されおおり、Cで手曞きされたコヌドよりもはるかに生産的です。



したがっお、圌はWebアプリケヌションが䜕をしおいるのかを理解し、埓来の䞀般的な型コンパむラでは「キャッチ」されないこずを最適化できたす。 したがっお、サヌバヌ䞊で実行されるこのコンパむラヌによっお生成された゜ヌスコヌドは、Cコヌドず正垞に競合したす。パフォヌマンスを確保するためのコストず他の蚀語でのプログラミングの人件費を比范するず、Ur / Webはプログラマヌの生掻を倧幅に簡玠化するこずがわかりたす。



次のスラむドは、このサヌドパヌティのWebむンフラストラクチャフレヌムワヌクのパフォヌマンスの簡単なベンチマヌクを瀺しおいたす。



これは、さたざたなフレヌムワヌクによっおさたざたなWebプログラミングタスクが実行された最埌のテストの結果のスクリヌンショットです。







Ur / Webは、パフォヌマンステストに参加した60のフレヌムワヌクのうち4䜍になったこずがわかりたす。 このスクリヌンショットが撮られた埌、コンパむラにいく぀かの改良が加えられたした。 したがっお、次のラりンドでは、圌の結果によるず、圌は少し䞊に䞊がるず予想しおいたす。 基本的に、これはSQLを䜿甚しおHTMLペヌゞを生成する簡単な䟋です。 Ur / Webサヌバヌから毎秒玄100,000のリク゚ストを受信したすが、これはほずんどのアプリケヌションで十分です。 このスラむドは、より䞀般的なフレヌムワヌクのパフォヌマンスをわずかに倱うこずでセキュリティを匷化する高レベルモデルを䜿甚できるこずを瀺すこずが重芁です。



そこで、今日のプログラマヌが最も䞀般的なフレヌムワヌクを䜿甚しおWebアプリケヌションを䜜成するこずに぀いお考える私の印象を反映した写真から始めたしょう。 次に、Ur / Webが提䟛する別の芖点を瀺したす。これにより、このフレヌムワヌクでぱラヌが発生する可胜性のある倚くの問題が゚ラヌなしで進行したす。



メむン画像は、アプリケヌションのプロセス党䜓が䟝存するWebサヌバヌです。 そしお、このサヌバヌずやり取りするブラりザの党䜓がありたす。 サヌバヌは特定の状態のたたになり、これらすべおのブラりザヌずの察話が保蚌されたす。



通垞の状況では、ブラりザはWebサヌバヌにHTTPリク゚ストを送信しおWebサヌバヌずの察話を開始したす。HTTPリク゚ストには、URLが組み蟌たれおいたす。 その埌、WebサヌバヌはHTTPおよびHTMLペヌゞをブラりザヌに送り返したす。 ただし、Webサヌバヌが今埌どのような芁求を行う必芁があるかを刀断するために䜿甚できる組み蟌みのURLがいく぀かありたす。







このWebサヌバヌは、アプリケヌションのすべおのナヌザヌに共通の氞続ストレヌゞを提䟛するデヌタベヌスずも通信できたす。 この堎合、サヌバヌネットワヌクずデヌタベヌス間の䌚話には、䞀般的なSQLプロトコルが䜿甚されたす。 それが、Ur / Webの機胜に぀いお議論するずきに話すこずです。







最新のWebアプリケヌションは、ただのむンスタントペヌゞではありたせん。 ペヌゞ䞊で䜕かが倉曎されるたびに、サヌバヌに新しいリク゚ストを䜜成したす。その埌、モゞュヌルのペヌゞ党䜓が眮き換えられたす。 AJAXスタむルがあり、ブラりザは1ペヌゞの衚瀺䞭にWebサヌバヌに远加のHTTP芁求を送信し、ナヌザヌプログラムによっお凊理される応答を受信する堎合がありたす。 これは通垞、XMLやJSONなどのデヌタ衚珟、およびクラむアントずサヌバヌ間でデヌタを亀換するための他の単玔な圢匏を䜿甚したす。







次に、ブラりザがこの回答を返すず、ナヌザヌに衚瀺されるナヌザヌむンタヌフェむスを制埡するための任意のロゞックを実装するJavaScriptコヌドがありたす。







このJavaScriptコヌドは、サヌバヌがさたざたなAJAX呌び出しに䞎える応答を読み取るこずができたす。 次に、䞻にペヌゞに蚭定されおいるグロヌバルDOM倉数を倉曎するこずで衚瀺されるペヌゞを倉曎できたす。 プログラムのどの郚分でも、このグロヌバル倉数、぀たりペヌゞに任意に圱響を䞎えるこずができたす。 倚くの堎合、ペヌゞの䞀郚は、ドキュメントを蚘述するツリヌのノヌドによっお泚釈が付けられた文字列IDによっおスキャンされたす。



最埌に、もう1぀の耇雑な点は、Webサヌバヌがリク゚ストなしでブラりザヌず通信するこずを望む堎合があるこずです。 新しい電子メヌルメッセヌゞが衚瀺され、Webサヌバヌがこの新しいメッセヌゞに぀いおブラりザに通知したいずしたす。







そしお、これを行うための倚くの方法がありたす。たずえば、Comet-䞀定のHTTP接続により、Webサヌバヌがブラりザヌからの远加芁求なしにブラりザヌにデヌタを送信できるWebアプリケヌションのモデル、たたはブラりザヌずサヌバヌ間で通信するWebSockets二重プロトコルリアルタむムで。 原則ずしお、これらは同じものですが、抂念的には異なる方向にありたす。



そのため、これらのすべおのプロトコルず蚀語を画面に戻したいず思いたす。以前は黄色で䞀郚を遞択しおいたした。 講矩ノヌトを読んだ埌、セキュリティの点でこれらの匷調衚瀺されたすべおの郚分に共通するこずは誰でも掚枬したしたか







孊生それらはすべお、䜕でも配眮できる行です。



教授正しく、Webアプリケヌションのプログラミングに察する䞀般に受け入れられおいるアプロヌチでは、これらすべおは文字列です。 たた、プログラミング蚀語はそれらの䜿甚方法を理解しおいないため、ミスを避けるのに圹立ちたせん。 したがっお、たずえば、これらのものを文字列ずしお提瀺するず、コヌドむンゞェクション攻撃を受けたす。 私が知る限り、コヌドむンゞェクション攻撃は、䞻にプログラミング蚀語たたはフレヌムワヌクにプリミティブずしお、衚珟力のある蚀語でテキストの圢匏でプログラムを起動する特定の機胜を含めるこずの結果です。



プログラムずしお文字列を実行するためのUr / Webには組み蟌みのむンタヌプリタヌはありたせん。 そしおこれにより、最も䞀般的なWebアプリケヌション゚ラヌの倚くが構造的に䞍可胜になりたす。 したがっお、これらの遞択されたオブゞェクトはすべお非衚瀺になるか、特別なタむプで衚されるため、どのコヌドを扱っおいるかが明確になりたす。 ただし、これらの特殊なタむプの文字列ぞの自動キャストはありたせん。



スラむドは、Ur / Webが提䟛し、埓来のモデルにコンパむルされる代替モデルを瀺しおいたす。 これは、すべおの䞀般的なブラりザでの動䜜です。 しかし、プログラマヌはそれをより高いレベルで考え、前の図で起こりうる朜圚的な゚ラヌを回避できたす。







したがっお、リク゚ストに応答するWebサヌバヌがただありたす。 そしお、Webサヌバヌを䜿甚しようずしおいるこのブラりザヌ矀がただありたす。 ただし、最初の重芁な違いは、ブラりザヌがWebアプリケヌションの䜿甚を開始するずきに、URLを含むHTTP芁求のストリングを送信するだけではないこずです。



クラむアント呌び出しを䌎うこずなく、サヌバヌ䞊で最初のクラスの関数を実行したす。 そしお、サヌバヌはHTTPプロトコルのテキスト文字列だけでなく、厳密に型指定されたドキュメントツリヌで応答したす。 したがっお、HTML文字列の代わりに、プログラミング蚀語のツリヌが、最初のクラスのオブゞェクトになりたす。 たた、プログラムは文字列ではなく、この特定のツリヌを操䜜したす。



これらのツリヌにはそれぞれリンクが含たれおおり、それ自䜓はサヌバヌで呌び出すこずができる他の機胜の脚泚にすぎたせん。 ナヌザヌがこれらのリンクをクリックするず、ブラりザヌは関数を遞択し、このポむントに到達するために呌び出した元の関数ずしお抂念的にサヌバヌで呌び出したす。



たた、デヌタベヌスにリク゚ストを送信するWebサヌバヌがアクセスするデヌタベヌスむンタヌフェむスもありたす。 Ur / Webモデルでは、これは単なるテキストではなく、厳密に型指定されたSQL構文ツリヌです。 そしお、デヌタベヌスはテキストではなく、Urプログラミング蚀語の固有倀のレコヌドのリストで応答したす。







したがっお、文字列を誀っお「ネむティブ」衚珟に倉換したり、「ネむティブ」衚珟をデヌタベヌスが埓来提䟛しおいた他の圢匏に倉換したりするこずを心配する必芁はありたせん。



これは、Ur / Webセマンティクスが、アプリケヌションの実行䞭に実際に発生する可胜性のある倚くのスクリプトをプログラマが簡単に操䜜できるようにするための重芁な芁玠です。

リレヌショナルデヌタベヌスの䞖界には、他の䞊列スレッドで䞭断するこずなく䞀連の操䜜を実行できる暙準的なトランザクションのアむデアがありたす。 そしお、Ur / Webはこのモデルを適応させ、蚀語のセマンティクスに組み蟌みたす。 したがっお、クラむアントに代わっおサヌバヌで1぀の機胜を実行するず、デヌタベヌスぞのすべおのアクセスはアトミックブロックの圢匏で行われ、同じサヌバヌに察する他のすべおの同時リク゚ストによっお䞭断されるこずはありたせん。 これらのトランザクションはプログラミング蚀語に組み蟌たれおいるため、必芁な堎合でもこの動䜜を避けるこずはできたせん。



たた、同時リク゚ストの実行が本圓に簡単になり、リク゚ストの特定の組み合わせに䜕らかの倉曎がある堎合に発生するセキュリティ䞊の問題を回避できる可胜性がありたす。



この講矩の芁玄で瀺され、興味をそそられた質問の1぀に察する回答を取埗したいず思いたす。 したがっお、Ur / Webは、デッド゚ンドなどの䞊列実行の問題が原因でトランザクションが倱敗したこずを怜出し、トランザクションを自動的に再開したす。 誰かが質問に答えお、これが䞊行性の問題によるトランザクションの倱敗に䟝存するセキュリティ攻撃の開始を促進できるず曞いおいたす。 クラスに聞いおみたかったのですが、あなたが想像するように、誰かがそのような攻撃の䟋を挙げるこずができたすか デッドロック状態のトランザクションを自動的に再起動するシステムがある堎合、これはどのようにセキュリティ䞊の問題を匕き起こす可胜性がありたすか この質問には答えがありたせん。だから私は尋ねたす。 この質問には明癜な答えがあり、明らかに議論する䟡倀がありたす。







孊生たぶんこれは䜕らかのDoSサヌビスの倱敗を匕き起こす可胜性がありたすか 圌があなたが送信しおいるトランザクションを再開しようずしおいお、それが成功しないこずがわかっおいる堎合、単にこのプロセスを再開し、再詊行するこずができたす...



教授 OK、続けお...



孊生決しお成功しないずわかっおいるこずをシステムに匷制する堎合、䜕床も詊行しお、最終的にサヌビスを倱敗させるこずができたす。



教授そうですね。しかし、これを行うには、少なくずも2぀のスレッドが同時に動䜜する必芁がありたす。 これは機胜する可胜性がありたすが、サヌビス拒吊攻撃を仕掛けるこずができる堎合がありたす。 この堎合、芁求ハンドラヌが䜕床も䜕床も再起動され、意図的に競合を匕き起こすずいう事実を利甚し、このタむプの埓来の攻撃モデルの助けを借りお埗られるものに加えお、DoS攻撃の力を高める方法ずしおこれを䜿甚できたす。 たあ、私はそれを信じるこずができたす。



孊生これがトランザクションの倱敗を匕き起こす唯䞀の方法ですか



教授はい、これがクラッシュず自動再起動を匕き起こす唯䞀の方法です。



孊生条件付きで倱敗するサヌドパヌティが存圚する可胜性がありたす。 次に、これを䜿甚しお、他のナヌザヌの動䜜を監芖できたす。



: , - , - . . , , , . , . , , , . .







: , , , . , ?



: , , , .



: , , , ? , .



: , , . , .



: , , , , , ?



: , , , , , ? , – , . . , , .



: , , ?



: , , . , , , . , – .



, -. AJAX, .







, . , . , - .







, . , .



, Ur/Web , . — , . , , . — , , .



— , , , . , , , .



. Ur/Web- Ur/Web-. JavaScript, . , . .



, , . , . , , , . , , , .







. , , , , , . . , , JavaScript.



JavaScript , , , JavaScript .



, , Ur/Web- — . , , , . JSON. .







, , . , . . - .



, , , , . : «, », . «» .







, . , ?



: , ?



: RPC , . , .



— , . , , .



: ?



: HTTP-. , - , , , HTTP .

, , . . , Ur/Web. , .







, . , , URL- URL-. . , URL.



URL . - , URL. , HTML . HTML. , XML-, , .



- , . HTML- , .







, , . , , UTF-8. , .



, UTF-8, . - , Tangled Web ( ), Ur/Web, , .



ちなみに、このデモンストレヌション䞭はい぀でも、思い浮かぶ実隓を提案しおください。どのような゚ラヌをキャッチできるかをシステムで詊すこずができたす。



これは、Ur / Webの機胜を実蚌する最も生産的な方法だず思いたす。



27:45分



MITコヌス「コンピュヌタヌシステムのセキュリティ」。 レクチャヌ11Ur / Webプログラミング蚀語、パヌト2





コヌスの完党版はこちらから入手できたす 。



ご滞圚いただきありがずうございたす。 私たちの蚘事が奜きですか より興味深い資料を芋たいですか 泚文するか、友人に掚奚するこずで、私たちをサポヌトしたす。私たちがあなたのために発明した゚ントリヌレベルのサヌバヌのナニヌクな類䌌品のHabrナヌザヌのために30割匕 VPSKVME5-2650 v46 Cores10GB DDR4 240GB SSD 1Gbpsに぀いお20ドルたたはサヌバヌを分割する方法 オプションはRAID1およびRAID10、最倧24コア、最倧40GB DDR4で利甚可胜です。



VPSKVME5-2650 v46コア10GB DDR4 240GB SSD 1Gbpsたで 6か月の期間を支払う堎合は12月たで無料で 、 ここで泚文できたす 。



Dell R730xdは2倍安いですか オランダず米囜で249ドルからIntel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TVを2台持っおいるだけです むンフラストラクチャの構築方法に぀いお読む クラスRは、1米ドルで9,000ナヌロのDell R730xd E5-2650 v4サヌバヌを䜿甚しおいたすか



All Articles