パッシブXSS脆弱性からAJAXワーム実装までの1ステップ

受動的なXSSの脆弱性は大きな危険をもたらさず、このことを心配する価値はないという意見に何度も出くわします。 そして、これは部分的に真実であるという事実にもかかわらず(他のより致命的なエラーと比較した場合)、脆弱なサイトにコードを埋め込む可能性は、ユーザーを欺くために重要な追加アクションを必要とする場合でも、深刻な結果、特に、さらに完全に傍受する能力につながる可能性がありますユーザーアクション。



AJAXワームとは何ですか?



AJAXワーム-ユーザーがこれらのリンクをクリックしたときに現在のページのコンテキストに残るようにその場所のページ上のリンクを変更し、本格的なAJAXナビゲーションをリクエストに置き換えるJavaScriptコード。 最も単純なバージョンでは、次のようにいくつかの行で実装されます。



1.ページ上のすべてのリンクを取得する

2.それらすべてを独自のハンドラーに追加する

3.クリックされたリンクアドレスでAJAXリクエストを実行する

4. 3で得られた結果でのページコンテンツの置換

5.新しいコンテンツへのリンクの感染



これが非常に単純化されたシナリオであることは明らかです。本格的な「戦闘」ワームは、ページタイトルの正しい変更と、ヘッダー内のcssファイルとjsファイルの接続を監視し、可能であれば、これらのブラウザーでURLスプーフィングを使用します。 ただし、受信したデータをすぐにbody要素に入れる最も簡単なオプションは完全に機能します。 実装例。



小さな余談-ネットワーク上のブラウザーから任意のページコードを取得できる場合、セキュリティ上の問題はさらに深刻になります。幸いなことに、最新のブラウザーはすべてクロスサイトリクエストを許可していません。 ただし、これは、ワームのあるページと同じドメインにある中間アプリケーションにリクエストを送信し、コンテンツをダウンロードする機能を実行することで回避できます。





最も単純な場合、このアプリケーションはphpの1行で実装されます。 少なくとも、戦闘オプションは、クライアントがデータを受信するのにかかる時間を最小限に抑えるためにダウンロードしたデータをキャッシュできる必要があり、非常に理想的な場合、Cookieの受信/送信をサポートし、プロキシのセットを介してリクエストを送信して、頻繁に輝くIPを提供しないようにしますログに。



この最も単純なバージョンでさえ、感染したページを取得して、ネットワークを「ナビゲート」し、実際には1つのページにとどまり、必要に応じてユーザーの動きとユーザーが入力したデータを記録します。 もちろん、ユーザーがページのアドレスが魔法のように同じままであることに気付いた場合、またはなじみのないドメインへのリクエストが常にステータスバーにハングしている場合、彼はすぐにアラームを鳴らすことができますが、私たちはとても賢く、平均的なユーザーはこの事実を無視するかもしれません。



この方法を使用すると、多くの汚いトリックを実行できますが、トラップのページに人を最初に閉じ込めるにはあまりにも多くのアクションが必要です。 そのようなページがあらゆる種類のブラックリストブラウザーにすぐに表示されるという事実は言うまでもありませんが、トラップページが他の誰かの、一見して完全に安全な、ユーザーに馴染みのあるドメインのページであることが判明した場合 これは、XSSの脆弱性を介して別のサイトにコードを埋め込む機会が失われる場所です。



賢い攻撃者が銀行のユーザーにフィッシング攻撃を行っているとします。 偽のサイトを作成する必要はありません。手紙でサイトの脆弱なページへのリンクを指定するだけで、ユーザーは信頼できるドメインに移動し、感染したゾーンにいることを確認できます。 さらに、サイトの検索など、彼が目の前で見ることは絶対に必要ではありません。javascriptを使用すると、コンテンツを任意に変更できます。つまり、ユーザーにインデックスまたは他のページを表示できます。



それだけでなく、要求されたデータは同じドメイン内にあり、直接AJAX要求によって取得できるため、攻撃者はデータを取得するための中間層の使用を完全に回避できます。 または、攻撃者は同じ脆弱なページを使用して、感染の可視性を最小限に抑えることができます。 この場合、ページ間の実際の遷移が発生し、ターゲットリンクは、たとえばURLのアンカーとしてエンコードできます。







そして、これらすべてをどうするか。



XSS脆弱性の存在を防止する- 手動および自動テスト、および外部からの正しいデータ保護ポリシーを備えたフレームワークの使用。



攻撃者が自分のコードをサイトのページに挿入した瞬間から、私たちは完全に制御を失い、保護スクリプトをコードから切り取ることができ、ユーザーが入力したデータはサードパーティのサーバーに転送されます。 唯一の半分の手段は、固定ログインフォームページであり、リファラーとログインスクリプト送信のIPアドレスを確認することであるため、攻撃者が自動的にシステムに侵入するのを防ぐことができます。 ただし、盗まれたデータを自分で使用することを防ぐことはできません。



All Articles