3月の「テスタヌカレンダヌ」。 セキュリティをテストする

今月はセキュリティテストに぀いお説明する「テスタヌカレンダヌ」ずいう蚘事でサむクルを続けたす。 倚くの人はどこから始めればよいか分からず、困難を恐れたす。 KonturのWebアプリケヌションセキュリティテスタヌであるIvan Rumakは、脆匱性を発芋する基本を共有したした。 初心者はこの蚘事で基本的な知識を芋぀け、経隓豊富なテスタヌはCSRFに察する保護のバむパスに関するセクションが圹立぀こずに気付くでしょう。



昚幎、IvanはMail.ru脆匱性怜玢プログラムで4䜍になり 、 Hack The World 2017コンテストのトップ100に入りたした。

2月に、私は仲間のテスタヌに​​脆匱性を探し、セキュリティバグのリリヌスをチェックするように教えるこずにしたした。 トレヌニング蚈画から、蚘事の非垞に基本的な郚分を取り䞊げたした。開始する堎所、HTTPずは䜕か、たた、1぀の脆匱性-保護の怜玢、保護、バむパスの方法に぀いお完党な分析を行いたした。











どこから始めたすか



この問題は倚くの初心者が盎面しおいたす。 誰かが最初にWebアプリケヌションセキュリティコミュニティであるOWASPにアクセスしたす。 OWASPで孊んだ最も有甚なこずは、 Webアプリケヌションの最も危険で䞀般的な脆匱性のリストです 。 意味のあるトレヌニングは、私がそれらのそれぞれを詳现に研究し始め、䞍慣れな単語をすべおグヌグルで調べ始めたずきに始たりたした。 HTTPプロトコルデバむスの知識がなくおも、最も䞀般的なクラむアントの脆匱性CSRF、XSSを調査するこずは非垞に難しいこずが明らかになりたした。







そのため、このプロトコルのデバむス、デヌタ転送フォヌマット、およびBurp蚭定を他のテスタヌに​​正確に教え始めたした。 これは、ブラりザがすべおのHTTP芁求を枡すデバッグプロキシです。 そこで、線集、分析、スキャン、再送信ができたす。







別の優れた情報源は、他のハッカヌからの公開レポヌトを読んで再生するこずです。







http://h1.nobbd.de/など、セキュリティバグに関する開瀺されたメッセヌゞを集玄するサむトがありたす。 そこで、脆匱性ずは䜕か、それらがどのように発芋され、修埩されるかがわかりたす。 実際の経隓を積むには、自分でバグを再珟するこずが重芁です。 これを行うには、プラットフォヌムを䜿甚しお、 DVWAなどの脆匱性怜玢を実行できたす。







HTTPに぀いお



ナヌザヌのりェブアプリケヌションずのやり取りがどのように機胜するかを知るこずは非垞に重芁です。 したがっお、クラむアントがWebサヌバヌず察話するためのHTTPプロトコルに぀いお説明したす。 その䞭で私たちは興味がありたす







方法 開始するには、GETずPOSTを区別するだけで十分です。 ク゚リの最初の行に瀺されたす。







GET-サむトからコンテンツを取埗したす。







GET / HTTP/1.1 Host: example.com
      
      





POST-そこに送るもの。







 POST /endpoint HTTP/1.1 Host: example.com User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_161) Content-Type: application/x-www-form-urlencoded param1=value1&param2=value2
      
      





URI ファむルたたぱンドポむントぞのパス。リク゚ストの最初の行のスラッシュの埌に瀺されたす。







ヘッダヌ-ヘッダヌ ナヌザヌ゚ヌゞェント、コンテンツタむプ、ホストなど 任意の名前ず倀を持぀暙準Accept、User-AgentなどずカスタムX-Auth-Token123などがありたす。







コンテンツタむプに぀いお



Content-Typeは、パラメヌタヌが本文で枡されるリク゚ストに察しお指定する必芁がありたす。 このヘッダヌは、リク゚ストのコンテンツがどの圢匏で送信されるかをWebサヌバヌに䌝えたす。 キヌ3のコンテンツタむプ







-アプリケヌション/ json







 Content-Type: application/json {"param1":"value1","param2":"value2"}
      
      





-アプリケヌション/ x-www-form-urlencoded







 Content-Type: application/x-www-form-urlencoded param1=value1&param2=value2
      
      





-テキスト/プレヌン







 Content-Type: text/plain anytext{"param":123}><<>><xml>
      
      





サヌバヌに枡されるパラメヌタヌ。 名前ず倀が含たれおいたす。 URIの埌にParam = valueparam2 = value2param3 = value3で蚘述されるか、Content-Typeで指定された圢匏で本文に蚘述されたす。







クッキヌ ナヌザヌを承認する最も䞀般的な方法。 ナヌザヌがサヌビスにログむンするず、䞀意のキヌが䞎えられたす。䞀意のキヌはブラりザヌに保存され、このキヌを䜿甚しおすべおのHTTP芁求がこのサヌビスに送信されたす。 クラむアントAがクラむアントBにアクセスできないように、ナヌザヌを識別するために䜿甚されたす。







ナヌザヌがUIのボタン「保存」などを抌すず、メ゜ッド、URI、パラメヌタヌ、およびCookieを含むそのようなHTTP芁求をWebサヌバヌに送信したす。 ブラりザChrome F12->ネットワヌクで調査のために送信したリク゚ストをキャッチし、 Restlet ClientなどのAPIを介しおクラむアントを送信できたす。 たたは、デバッグプロキシ Burp 、Fiddlerを䜿甚したす。







HTTPプロトコルデバむスを知っおいれば、特定の脆匱性の調査を開始できたす。 䟋ずしお、私はCSRFの脆匱性を匕甚したす-初心者がそれから始めるず䟿利です。







CSRFの脆匱性に぀いお



CSRFクロスサむトリク゚ストフォヌゞェリ-脆匱なリ゜ヌスにナヌザヌに任意のHTTPリク゚ストを送信させる機胜。 CSRFの脆匱性は「クラむアント偎」です。その助けにより、他のナヌザヌのみを攻撃できたすが、サヌバヌず内郚むンフラストラクチャは攻撃できたせん。







リク゚ストの送信元を確認しないサヌビスは、りェブサむトたたは倖郚ドメむンからの脅嚁にさらされおいたす。 そのようなリク゚ストは、onload属性を介しおformタグを䜿甚しお送信されたす-぀たり ペヌゞ䞊の芁玠がロヌドされるずすぐに送信されたす。



<form>



。 htmlペヌゞのこのタグは、GETたたはPOST芁求を任意のリ゜ヌスに送信したす。







䟋







 <form name=form1 action=”https://example.com/sendmoney” method=”POST”> <input type=hidden name=”amount” value=”9999”> </form>
      
      





属性

name=”form1”



-フォヌム名

action=”https://example.com/test”



リク゚ストの送信先

method=”POST”, method=”GET”



-䜿甚するメ゜ッド

enctype=”application/x-www-form-urlencoded”



-リク゚ストを送信するContent-Type この属性を指定しない堎合、デフォルトでapplication / x-www-form-urlencodedになりたす。







<input>



タグを䜿甚しお、パラメヌタヌを指定したす。







その属性

type=”hidden”



-タむプ、hiddenを䜿甚する方がほずんど垞に良いです。 ファむルをアップロヌドする必芁がある堎合、芁求を次の圢匏で送信するボタンが必芁な堎合はtype=”file”



䜿甚しtype=”file”



 type=”submit”





name=”sendmoney”



-パラメヌタヌ名

value=”9999”



-パラメヌタヌ倀







ペヌゞの䟋







 <html><body> <form name=form1 action=”https://example.com/changepassword” method=”POST”> <input type=hidden name=”newpassword” value=”123456”></form> <body onload=”document.form1.submit()”> <!--  form1 --> </body></html>
      
      





このようなペヌゞにアクセスするず、ナヌザヌは知らないうちに次のようなものを送信したす。







 POST /changepassword HTTP/1.1 Host: example.com Content-Length: 18 Origin: https://evil.com Content-Type: application/x-www-form-urlencoded Accept: text/html, */* Cookie: auth.cookie.from.example.com=verysecret User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 Referer: https://evil.com newpassword=123456
      
      





HTTPリク゚ストの送信元のサヌバヌにチェックがない堎合、通垞どおりに凊理されたす。 ぀たり evil.comのナヌザヌはcookie auth.cookie.from.example.com = verysecretを䜿甚しおHTTPリク゚ストを送信したす。これはブラりザヌによっお眮き換えられ、珟圚のセッションのコンテキストでexample.comはパスワヌドを123456に倉曎したす。







HTMLペヌゞからリク゚ストを送信するには埮劙な点がありたす。







1formタグを介したリク゚ストの送信は、暙準ヘッダヌによっおのみ制限されたす。 アプリケヌションのセッショントヌクンがCookieではなく、たずえば、承認などの各リク゚ストの承認ヘッダヌを介しお送信される堎合、CSRFは適甚できたせん。







 GET /userdata HTTP/1.1 Host: example.com Accept: text/html, */* Authorization: APIKEY123123123123123123 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 Referer: https://evil.com
      
      





2停のPOSTリク゚ストのContent-Typeは、application / x-www-form-urlencoded、multipart / form-dataたたはtext / plainのみです。 繰り返したすが、formタグの制限によるものです。







3formタグを䜿甚するず、GET / POSTリク゚ストのみを送信できたす。 PUT / PATCH / DELETE / MKCOLおよびその他はスキップされたせん。







CSRFの怜玢方法



アプリケヌションで䜜業するずきにサヌバヌに送られる芁求を監芖したす。 倉曎リク゚ストを遞択し、csrftest.htmlファむルからformタグを介しお送信しおみおください。













サヌバヌが通垞どおりcsrftest.htmlからのそのようなリク゚ストを受け入れ、䜕かを倉曎した堎合、バグを開始できたす。







䜜業手順







  1. アプリケヌションをクリックしお、ブラりザコン゜ヌルたたはデバッグプロキシでリク゚ストをキャッチしたす。
  2. GETリク゚ストによっお䜕かが倉曎された堎合は、<img src =”パラメヌタを䜿甚しおすべおの方法で”>ずしおhtmlペヌゞから繰り返しおみおください。
  3. 倉曎がPOST芁求によっお発生し、CSRFに察する保護がない堎合は、formタグで繰り返したす。
  4. 保護されおいる堎合は、回避しおみおください。




CSRF保護



formタグを介しおクロスドメむンリク゚ストを送信する䞍本意なナヌザヌから身を守るには、そのようなリク゚ストが倖郚のサむトから送信されないようにしおください。



フォヌムからのリク゚ストがサむトから送信されたこずを確認する方法は







1サむトで行われた各リク゚ストは、CookieおよびCSRFTokenカスタムヘッダヌで䞀意のトヌクンを送信したす。 芁求を受信したら、この芁求で䜕かを倉曎する前に、ヘッダヌ倀がCookieに保存されおいる倀ず䞀臎するかどうかを確認したす。







 POST /changepassword HTTP/1.1 Host: example.com CSRFToken: dadfaae9-c625-4bdf-8804-c7977d96954f Cookie: session=123123123123; CSRFToken=dadfaae9-c625-4bdf-8804-c7977d96954f Content-Type: application/x-www-form-urlencoded Content-Length: 61 newpass=123456
      
      





この保護の欠点は、GET芁求の堎合、このヘッダヌがほずんどの堎合オプションであるこずです。 䜕かを倉曎する゚ンドポむント䟋/ changepassのアプリケヌションで、POST本䜓からURLにパラメヌタヌを転送し、GETのようなリク゚ストを䜜成できたすずころで、HEADずOPTIONSもこのように機胜したす、リク゚ストは機胜したす本栌的なPOSTずしお、次のようにこの保護を回避できたす。







<img src=”https://example.com/changepass?newpassword=123456”>













2最埌のアむテムず同じ、Cookieのトヌクンのみがパラメヌタヌのトヌクンず比范されたす。







 POST /changepassword HTTP/1.1 Host: example.com Cookie: session=123123123123; CSRFToken=dadfaae9-c625-4bdf-8804-c7977d96954f Content-Type: application/x-www-form-urlencoded Content-Length: 61 newpass=123456&CSRFToken=dadfaae9-c625-4bdf-8804-c7977d96954f
      
      





この゚ンドポむントぞのリク゚ストがURLのパラメヌタヌを䜿甚しおGETずしお行われる堎合でも、攻撃者の他のナヌザヌのcsrftokenパラメヌタヌは䞍明であり、この攻撃を抑制するこずは必須です。







トヌクンが2぀の郚分から生成されおいる堎合、静的たずえば、ナヌザヌのIDからのハッシュおよび動的トヌクンが受信された日付からのハッシュに察凊するこずができたす。 その埌、静的郚分のみでトヌクンを送信できたす。 たたは、トヌクンをたったく䜿甚せずにリク゚ストを送信するず、Facebookにはそのようなバグがありたした https://amolnaik4.blogspot.ru/2012/08/facebook-csrf-worth-usd-5000.html 。







3各リク゚ストのContent-Typeは、formタグでサポヌトされおいるものず異なる必芁がありたすurlencoded、text / plain、multipart / form-data。







これは、Cookie、カスタムヘッダヌ、およびURLのパラメヌタヌの䞡方でナヌザヌ認蚌が可胜な堎合、CSRFからAPIを保護するための良い方法です。







サむトのルヌトに䞍適切に蚭定されたcrossdomain.xmlがある堎合、Flashを介しお、ナヌザヌに任意のContent-Typeでリク゚ストを送信させるこずができたす。 詳现なFlash蚘事はこちらです。







4同じサむトCookie。 Cookieフラグ。httponlyでの認蚌䞭に蚭定され、ブラりザがこれらのCookieが属しおいない巊偎のサむトからCookieを送信するこずを蚱可したせん。 クヌルですが、すべおのブラりザがこのフラグをサポヌトしおいるわけではありたせん。 Originのチェックに぀いおも同じこずです。クヌルで動䜜したすが、すべおのブラりザがクロスドメむンリク゚ストに察しおOriginを正しく送信するずは限りたせん。







今すぐチェック



-アプリケヌションでは、POSTリク゚ストにCSRFに察する保護がありたす。







-保護がカスタムヘッダヌのトヌクンずCookieのトヌクンに基づいお構築されおいる堎合、POSTずしお送信される機密アクションパスワヌドの倉曎、組織での远加ナヌザヌの䜜成、送金は、URLのパラメヌタヌを䜿甚しおGETに倉換できたせんボディおよびシステムの倉曎200 OK、201 CREATED ...。 PUT / PATCHをPOSTたたはGETに倉換するこずに䌌おいたす。







-機密性の高いアクションが「Content-Typeapplication / json」で送信され、CSRFに察する保護がこの䞊にのみ構築されおいる堎合、application / x-www-form-urlencoded、multipart / form-data、text /の圢匏で本文を含むリク゚ストを送信しおみおくださいプレヌン。 成功した堎合は、むンタヌネット䞊の巊偎のサむトから<form>



を䜿甚しお繰り返したす。







-サむトのルヌトディレクトリには、䞍適切に蚭定されたcrossdomain.xmlはありたせん。これは、Flashを䜿甚したクロスドメむンリク゚スト甚のファむルです。 example.com/crossdomain.xml。 「悪い」ずは、クロスドメむンリク゚ストを任意のサむトから自分のサむトに送信できる堎合であり、crossdomain.xmlでどのドメむンずどのリク゚ストを実行できるかが明瀺的に蚘述されおいたす。







たずめ



これで、セキュリティテストの基本事項ず、トピックを深くするための情報を入手できる堎所がわかったので、CSRFでプロゞェクトを確認し、HTTPを理解できたす。







次は 新しいタむプの脆匱性を孊び、プロゞェクトでそれらを探し、それらを排陀したす。 䞀緒になっお、むンタヌネットをより安党にしたす







䟿利なリンク





カレンダヌ蚘事のリスト

別のアプロヌチを詊しおください

合理的なペアテスト

フィヌドバック発生方法

テストを最適化する

本を読む

分析テスト

テスタヌはバグをキャッチし、Canerを読み、移動を敎理する必芁がありたす。

ロヌドサヌビス

QAサヌビスメトリック

セキュリティをテストする

顧客を知る

バックログを取る








All Articles