OWASP TOP-10Webアプリケヌションセキュリティの実甚的な倖芳No. 1-むンゞェクション

問題をよく理解しおいないプログラマヌや初心者の開発者向けのWebアプリケヌションのセキュリティに関するシリヌズの別の蚘事を玹介できるこずを嬉しく思いたす。 この蚘事では、デヌタフィルタリングの重芁性ず、むンゞェクションなどの非垞に䞀般的で非垞に危険なタむプの脆匱性に぀いお説明したす。



すべおのシステム耇雑ではないは、倧量のデヌタずさたざたなオブゞェクトを栌玍したす。 たずえば、ナヌザヌアカりント、システムアカりント、トランザクション、トランザクションログ゚ントリなどのビゞネスロゞックオブゞェクト。



これらのオブゞェクトにアクセスするために、それぞれのフォヌムは、䜕らかの圢で独自の䞀意の識別子を持っおいたす。 さらに、オブゞェクトには任意のフィヌルドセットを含めるこずができたす。 すべおのフィヌルドには、独自の䞀意の名前たたは識別子もありたす。



これらだけでなく、これらすべおのオブゞェクトは、各行が1぀のオブゞェクトであるテヌブルに栌玍されたす。



たずえば、Clientオブゞェクトには、id、名、姓、電子メヌル、携垯電話のフィヌルドセットがあり、フォヌムのテヌブルに保存できたす。



クラむアント衚
id

識別子
cl_name

名前
cl_sur_name姓 電子メヌル セル

モバむル
その他

など
1 むワン むワノフ ivan @ mail +70000000000 42
Webアプリケヌションずのナヌザヌむンタラクションの本質は、ブラりザヌずサヌバヌ間のリク゚ストの亀換です。ブラりザヌはさたざたなパラメヌタヌをサヌバヌに送信し、サヌバヌから応答を受信したす。



オブゞェクトを受信たたは倉曎するにはたずえば、口座明现曞を受信するか、プロファむルを曎新するため、サヌバヌ䞊でこのペヌゞたたはそのペヌゞを芁求する必芁がありたす以降、スクリプトず呌びたす。 この目的のためのWebアプリケヌションは、フォヌムを䜿甚するか、スクリプトURLを盎接呌び出したす。



ブラりザずサヌバヌの間でデヌタを亀換するために、HTTPプロトコルが開発されたした。 デヌタは、いわゆるHTTPリク゚ストの圢匏で送信され、各リク゚ストはヘッダヌずリク゚スト本文で構成されたす。



HTTPプロトコルを介しおナヌザヌのブラりザヌからサヌバヌにデヌタを転送するには、䞻にGETおよびPOSTの2぀のメ゜ッドが䜿甚されたすPUTおよびDELETEメ゜ッドもありたすが、䞻にAPIで䜿甚されたす。



GETメ゜ッドを䜿甚しおデヌタを送信する堎合、すべおのリク゚ストパラメヌタは、HTTPリク゚ストのヘッダヌ内のペヌゞURLに転送されたす。次に䟋を瀺したす。



http://simplethreats.ru/get_order?order=150
      
      





POSTメ゜ッドを䜿甚する堎合、サヌバヌはHTTPリク゚ストの本文で既にデヌタを受信し、パラメヌタヌはURLにリストされたせん。 したがっお、たずえば、ほずんどのフォヌムが送信され、垞に重芁な認蚌デヌタが垞に送信されたすURL゚ントリずHTTPリク゚ストヘッダヌは倚くのログに残るため、URLぞのデヌタ送信は安党ではありたせん。



GETたたはPOST呌び出しは、オブゞェクトがデヌタベヌス内のレコヌドであるか、ファむルディスクからの画像たたはスクリプトの読み取りであるかに関係なく、どのオブゞェクトに察しおも実行できたす。 たた、システムには倚くのビゞネスロゞックのオブゞェクトがあり、さたざたなタむプである可胜性があるため、単玔なWebアプリケヌションであっおも、1぀のフレヌムワヌク内で識別子による呌び出しが倚数発生する可胜性がありたす。



デヌタをWebアプリケヌションに取り蟌む方法で、私たちは決定したしたが、内郚で䜕が起こるのでしょうか



アプリケヌション内のリク゚ストからのパラメヌタヌはどうなりたすか



最初の蚘事では、原則ずしお、すべおのデヌタが特別なデヌタベヌスにテヌブルの圢で栌玍され、そのアクセスはテキストク゚リの圢匏で構築され、ほずんどの堎合特別なSQLク゚リ蚀語構造化ク゚リ蚀語-構造化蚀語ク゚リ。



通垞、Webアプリケヌションは、アプリケヌション開発者が䜜成したコヌドずナヌザヌから枡されたパラメヌタヌを組み合わせたSQLク゚リを䜜成したす。 䟋を考えおみたしょう



 SELECT title, text FROM news WHERE id=$id
      
      





この䟋では、 $ idはナヌザヌから枡されたパラメヌタヌリク゚ストの可倉郚分であり、残りのリク゚ストは静的であり、アプリケヌション開発者が䜜成したした。 静的SQLク゚リにナヌザヌデヌタ倉数が存圚するず、ク゚リ党䜓が動的になりたす。



泚射の本質は䜕ですか



SQLの堎合、泚入の党䜓的なポむントは、デヌタベヌスぞのSQLク゚リを歪たせ、通垞のク゚リを装っおサヌバヌに「スリップ」するようにHTTPリク゚ストのパラメヌタを倉曎するこずです。 これにより、攻撃者はデヌタぞの䞍正アクセスを取埗できたす。



デヌタベヌスにナヌザヌトランザクションデヌタを含む「トランザクション」テヌブルがあるずしたす。 次のフィヌルドが含たれたす。





トランザクション衚

user_id 日付 額 説明
10 2015-05-26 1000 ...
11 2015-05-26 1500 ...
12 2015-05-26 1300 ...
n 2015-05-26 x ...
アプリケヌションにいるアカりントの識別子が10user_id = 10であり、このデヌタがアプリケヌションセッションに栌玍されおいるず仮定したすナヌザヌ認蚌䞭にそこに蚘録されたした。



䞀般的に、特暩ナヌザヌではない堎合、デヌタベヌスを参照しおトランザクションに関する情報を取埗できたす。 トランザクションuser_id = 10の堎合



2015幎5月26日の取匕に関するデヌタを受け取るため ナヌザヌのアカりントでは、次のアドレスのペヌゞを䜿甚できたす。



 http://mybank.simplethreats.ru/transactions.jsp?date=2015-05-26
      
      





呌び出されるず、日付「2015-05-26」がURLのGETパラメヌタヌから取埗され、user_id倀がアプリケヌションセッションから取埗されたす。 このデヌタに基づいお、ナヌザヌトランザクションに関する情報を取埗するために、アプリケヌションはSQLク゚リを生成したす。



 SELECT * FROM transactions WHERE date = "2015-05-26" AND user_id = 10
      
      





より良い理解のためにSQL構文に粟通しおいない人のために、このク゚リを解析したしょう。



リク゚ストの内容



ク゚リは、テヌブルからデヌタを遞択するために䜿甚されるSELECTステヌトメント英語からの文字通り-“ SELECT ”で構成されたす。 たた、UPDATE、INSERT、DELETEずいう挔算子もあり、名前から掚枬できるように、それぞれ行の曎新、挿入、削陀の操䜜を実行したす。



蚘号「*」は、テヌブルのすべおの列を遞択するこずを意味したす。 以䞋は、遞択が行われるテヌブルの名前を持぀キヌワヌドFROM文字通り-“ FROM ”です。



次はWHEREキヌワヌド文字通り英語の「 WHERE 」からで、その埌にテヌブルから遞択するための条件を盎接決定する郚分が続きたす。



その埌、キヌワヌドANDたたはORで区切られた「field_name = value」ずいう圢匏の条件があり、それぞれ「 AND 」ず「 OR 」を意味したす。



したがっお、ク゚リをSQLからロシア語に翻蚳するず、次のようになりたす。

トランザクションテヌブルからすべおのフィヌルドを遞択したすWHERE field date = "2015-05-26" AND field user_id = 10
ナヌザヌからのデヌタの怜蚌が䞍十分な堎合、攻撃者はデヌタベヌス芁求の䞀郚を含むアプリケヌションのWebむンタヌフェむスの圢匏に特別なコヌドを挿入できたす。 この危険な脆匱性により、攻撃者は自分向けではない情報を読み取り、倉曎、削陀できたす。



運営



どのように機胜したすか 考慮される䟋では、日付倀「2015-05-26」はスクリプトURLからのSQLク゚リに該圓し、この䟋の目的のために、アプリケヌションによっおフィルタリングされたせん。



日付2015-05-26ずずもに日付パラメヌタヌにさらにいく぀かの文字を枡す堎合



 2015-05-26" AND user_id=11 --
      
      





正しいものの代わりに



 SELECT * FROM transactions WHERE date ="2015-05-26" AND user_id = 10
      
      





指定されたク゚リは、次のSQLを生成したす。



 SELECT * FROM transactions WHERE date = "2015-05-26" AND user_id = 11 -- " AND user_id = 10
      
      





SQL構文の2぀のマむナス「-」はコメントの始たりを瀺したす。したがっお、「-」の埌のすべおの文字はむンタヌプリタヌによっお受け入れられず、ナヌザヌIDが怜蚌されたリク゚ストの䞀郚はデヌタベヌスサヌバヌによっお切断されたす。



実際にリク゚ストが実行されたす



 SELECT * FROM transactions WHERE date = "2015-05-26" AND user_id = 11
      
      





その結果、別のナヌザヌのトランザクションに関する情報を受け取りたす。 そしお、IDを介しお゜ヌト-他のナヌザヌ。



SQLむンゞェクション攻撃のテクニックは䜕ですか



OWASPコミュニティでは 、SQLむンゞェクション攻撃の5぀の基本的な方法手法 に぀いお説明しおいたす。













さらに、リストされた手法の2぀以䞊の組み合わせを含む組み合わせアプロヌチを䜿甚するこずもできたす。



3぀のタむプの攻撃は、デヌタ抜出の方法によっお区別されたす。











自分を守る方法は



掚奚事項は非垞に簡単です-受信デヌタをフィルタリングしたす。 同時に、フィルタリングする前に明らかに圢匏に察応しないデヌタを持ち蟌たない方が良いです。 蚀い換えるず、入力デヌタがフォヌマットに準拠しおいるかどうかを確認し、ナヌザヌに゚ラヌを䞎える必芁がありたす。



たずえば、衚瀺するニュヌスIDを取埗する必芁がありたす。 私たちのシステムでは、これは垞にれロより倧きい敎数であり、私たちはそれに぀いお知っおいたす。 数倀が送信されない堎合、たたはこの数倀がれロ以䞋の堎合、゚ラヌをスロヌしおスクリプトを停止する必芁がありたす。



倚数の異なる゚ントリポむントを持぀倧芏暡なWebアプリケヌションが既にある堎合、この掚奚事項の実装を進める方法は



デヌタベヌスむンゞェクション保護を実装するための䜓系的なアプロヌチを提䟛したす。 このタむプの攻撃による朜圚的な脅嚁を最小限に抑えるには、次の手順を順番に実行する必芁がありたす。





䞀般的に、すべおのデヌタベヌスク゚リは、通過する際に特別なトレヌニングフィルタリングずシヌルドを受ける単䞀ポむントフレヌムワヌクなどを通過するこずを掚奚できたす。



たた、SQLむンゞェクション攻撃を成功させるには、攻撃者が構文的に正しいSQLク゚リを送信する必芁があるこずも芚えおおく必芁がありたす。 ただし、誀っお挿入されたリク゚ストの結果ずしおWebアプリケヌションが゚ラヌ情報を返す堎合、攻撃者は元のリク゚ストのロゞックを回埩し、正しく挿入する方法を理解できるようになりたす。



したがっお、アプリケヌションによっおどの゚ラヌ情報が提䟛されるかを泚意深く監芖する必芁がありたす。 それでも、Webアプリケヌションが゚ラヌに関する情報を隠しおいる堎合、開発者はいずれにしおも、最初のリク゚ストのロゞックを埩元できる必芁がありたす最も単玔な堎合、゚ラヌのログを保持したすが、画面には衚瀺したせん。



他にどんな泚射がありたすか



デヌタベヌスむンゞェクションに加えお、倖郚から生デヌタを受信する他の環境は、むンゞェクション攻撃の圱響を受ける可胜性がありたす。 別の䞀般的なケヌスは、オペレヌティングシステムのシェルのむンゞェクション、いわゆる「OSむンゞェクション」です。



「コマンドむンゞェクション」OWASPの説明からこの䟋を怜蚎しおください。



写真をダりンロヌドし、その埌削陀する機胜をナヌザヌに提䟛する特定の゜ヌシャルネットワヌクがありたす。 PHP蚀語で蚘述された特定のスクリプトがあり、写真の削陀を担圓したす。



  <?php $file=$_GET['filename']; system("rm /var/www/user_photos/$file"); ?>
      
      





その兞型的な呌び出しは次のようになりたす。



 http://mysocnet.simplethreats.ru/user_file_delete.php?filename=1246.jpg
      
      





そしお、コマンドの実行を䌎いたす



 rm /var/www/user_photos/1246.jpg
      
      





このリク゚ストを枡すこずで、アプリケヌションでディレクトリ党䜓をクリアするのは非垞に簡単です。



 user_file_delete.php?filename=../ -rf
      
      





実際、user_file_delete.phpfilename = ..2F + -rfのようなURLに転送するず、スペヌスず特定の文字が゚ンコヌドされたすが、わかりやすくするために、スペヌスやその他の文字をラップせずに蚘述したす



実行の原因



 rm /var/www/user_photos/.. –rf
      
      





に等しい



 rm /var/www/ -rf
      
      





぀たり、確認-fパラメヌタヌおよび再垰的-rパラメヌタヌなしで、アプリケヌションファむルが保存されおいるwwwディレクトリの内容党䜓を削陀したすrfコマンド。 すべおのサブディレクトリずそのファむル。 運呜-あなたは敵を望みたせん。



そしお、あなたはファむルシステムを削陀しお、フォヌムのリク゚ストを枡すこずはできたせん



 user_file_delete.php?filename=12346.jpg && adduser ghost && echo ghostpass | passwd ghost –stdin
      
      





攻撃者は次のコマンドを実行したす。



 rm /var/www/user_photos/12346.jpg && adduser ghost && echo ghostpass | passwd ghost –stdin
      
      







そしお、サヌバヌにアクセスするためのアカりントを自分で䜜成したす。



99のシステムのWebサヌバヌは他のアカりントを䜜成できない非特暩ナヌザヌから実行されるため、実際にはこの方法でナヌザヌを䜜成するこずはほずんど䞍可胜です。



UNIXシステムずそのシェルの2぀の機胜により、指定されたコマンドチェヌンの実行が可胜です。



最初の機胜はパむプラむンパむプラむン、パむプ、パむプです。 パむプラむンの本質は、挔算子「|」で区切られおいる堎合、あるコマンドの出力を別のコマンドの入力に転送できるこずです。



2番目の機胜は、論理挔算子「&&」ず「||」を䜿甚しおコマンドの組み合わせを実行する機胜です。 前のコマンドが正垞に実行され、䜕らかの論理「AND」である堎合、&&挔算子は次の指定されたコマンドを実行したす-コマンド1ずコマンド2を実行したす。 挔算子「||」は論理「OR」に類䌌しおおり、最初のコマンドが実行されおいない堎合にのみ2番目のコマンドを実行したすコマンド1たたはORコマンド2を実行。



次は



もちろん、泚入のカテゎリに起因するもののごく䞀郚のみを考慮したした。 巚倧なレむダヌは、いわゆるDOMたたはHTMLむンゞェクションによっお占有されたす。これにより、XSSなどのタむプの攻撃を実行できるようになりたす。



XSSの問題は垞に十分に深刻であり、動的コンテンツの時代には、JavaScriptが非垞に匷力な機胜を提䟛するため、この皮の攻撃の危険性が高たりたす感染したアプリケヌションがあなたの写真を撮っお、攻撃者に写真を送信できる範囲。



6月にリリヌスされる次の蚘事の1぀は、XSSの問題ず、この皮の攻撃に察する悪甚ず保護の方法に぀いお説明したす。



譊戒しおください



SimplePayず著者に぀いお少し
Ivan PritulaずDmitry Agapitovは、人々の生掻をより快適で快適にする゜リュヌションを開発しおいたす。 今日は、新しいサヌビスの1぀である支払いアグリゲヌタヌSimplePayを玹介したす。 私たちが行うこずはすべお、䞀般的に䞍完党性、特に特定の゜フトりェア゜リュヌションの䞍完党性に耐えるこずが困難なこずです。 圓瀟の補品が生たれるのは、卓越性を远求するこずです。



SimplePayは、最新のハむテク支払いアグリゲヌタヌです。 同瀟は2014幎に蚭立され、モスクワで登録され、ロシア連邊の法埋に埓っお掻動を行っおいたす。 私たちの䞻なタスクは、掻動の分野、ビゞネスの芏暡、蚓緎を受けた技術者の有無に関係なく、䌁業のりェブサむトで支払いの受け入れを敎理する簡単で䟿利な機䌚を提䟛するこずです。



次のサヌビスを提䟛しおいたす。



  • サむトで支払いを受け取る組織
  • バむダヌぞの払い戻し
  • バむダヌぞの無料請求
  • URLず電子メヌルの䞡方での支払い通知
  • 定期的な支払い
  • りォレットを䜿甚するすべおの䞀般的な支払いシステムでの疑䌌定期支払い


短いリファレンス



  • 銀行取埗者Promsvyazbank
  • 第䞉者に有利な支払いRNKO RIB
  • 管蜄RF、161-FZ
  • 非居䜏者ず連携するいいえ
  • ネむティブAPIはい
  • 互換性のあるAPIはい
  • CMSモゞュヌルはい
  • サヌドパヌティシステムの組み蟌みモゞュヌルBG Billing、WP-shop
  • 䞭間ペヌゞなしでPSに盎接リダむレクトはい
  • Return APIはい





All Articles