ソース:
脆弱性:Clickjacking
訳:
クリックジャッキングとは何ですか?
- クリックジャッキングは、おとり Web サイト内の他のコンテンツをクリックすることで、ユーザーがだまされて、隠しWeb サイト上の実行可能なコンテンツをクリックさせるインターフェース ベースの攻撃で。 次の例を考えてみ。
- Web ユーザーはおとり Web サイト (おそらく、電子メールで提供されるリンク) にアクセスし、ボタンをクリックして賞品を獲得し。
- 知らないうちに、攻撃者にだまされて別の隠しボタンを押され、その結果、別のサイトのアカウントに支払いが行われてしまい。
- これはクリックジャッキング攻撃の例で。
この技術は、ボタンや隠しリンクを含む、目に見えない操作可能な Web ページ (または複数のページ) を iframe 内に組み込むことに依存し。 - iframe は、ユーザーが予期したおとりWeb ページのコンテンツの上にオーバーレイされ。
- この攻撃は、 ユーザーがボタンのクリックなどのアクションを実行する必要があるのに対しCSRF 攻撃はユーザーの知識や入力なしにリクエスト全体を偽造することに依存するという点でCSRF攻撃とは違い。
CSRF攻撃:
CSRF 攻撃に対する保護は、多くの場合、 CSRF トークン(セッション固有の使い捨ての番号またはナンス) の使用によって提供され。
ターゲット セッションは、本物の Web サイトから読み込まれたコンテンツとドメイン上で発生するすべてのリクエストで確立されるため、クリックジャッキング攻撃は CSRF トークンによって軽減されず。
CSRF トークンはリクエストに組み込まれ、通常どおりに動作するセッションの一部としてサーバーに渡されます。
通常のユーザー セッションとの違いは、プロセスが非表示の iframe 内で発生することで。
基本的なクリックジャッキング攻撃を構築する方法
クリックジャッキング攻撃は CSS を使用してレイヤーを作成および操作し。
攻撃者は、おとり Web サイトにオーバーレイされた iframe レイヤーとしてターゲットWeb サイトを組み込み。
style タグとパラメータを使用した例は次のとおりです。
<head>
<style>
#target_website {
position:relative;
width:128px;
height:128px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
position:absolute;
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
...decoy web content here...
</div>
<iframe id="target_website" src="https://vulnerable-website.com">
</iframe>
</body>
クリックバンディット
上記のようにクリックジャッキングの概念実証を手動で作成することもできますが、実際にはかなり面倒で時間がかかる可能性があり。
実際のクリックジャッキングをテストする場合は、代わりに Burp のClickbandit ツールを使用することをお勧めし。
これにより、ブラウザを使用してフレーム化可能なページ上で必要なアクションを実行し、適切なクリックジャッキング オーバーレイを含む HTML ファイルを作成できるようになり。
これを使用すると、HTML や CSS を 1 行も記述することなく、インタラクティブな概念実証を数秒で生成できます。
Clickbandit:
事前入力フォーム入力によるクリックジャッキング
フォームの入力と送信を必要とする一部の Web サイトでは、送信前に GET パラメーターを使用してフォーム入力を事前に入力でき。
他のWeb サイトでは、フォームを送信する前にテキストが必要な場合があります。
GET 値は URL の一部を形成するため、攻撃者が選択した値を組み込むようにターゲット URL を変更することができ、基本的なクリックジャッキングの例のように、おとりサイト上に透明な「送信」ボタンが重ねられ。
フレームバスティングスクリプト
クリックジャッキング攻撃は、Web サイトがフレーム化できる場合には常に可能で。
したがって予防技術は、Web サイトのフレーミング機能を制限することに基づいて。
Web ブラウザを通じて実行される一般的なクライアント側の保護は、フレームバスティングまたはフレーム分割スクリプトを使用することで。
これらは、独自のブラウザ JavaScript アドオンまたは NoScript などの拡張機能を介して実装でき。
スクリプトは、次の動作の一部またはすべてを実行するように作成されることがよくあり。
- 現在のアプリケーション ウィンドウがメイン ウィンドウまたはトップ ウィンドウであることを確認して強制します。
- すべてのフレームを表示し、
- 非表示のフレームをクリックしないようにします。
- 潜在的なクリックジャッキング攻撃を傍受し、ユーザーにフラグを立てます。
フレームバスティング手法は多くの場合、ブラウザーやプラットフォームに固有であり、HTML の柔軟性により、通常、攻撃者によって回避される可能性があり。
フレームバスターは JavaScript であるため、ブラウザのセキュリティ設定によって動作が妨げられるか、ブラウザが JavaScript をサポートしていない可能性があって。
フレームバスターに対する攻撃者の効果的な回避策は、HTML5 iframe を使用することで、sandbox
属性。
これをallow-forms
または allow-scripts
値と設定されていると、 allow-top-navigation
値が省略されている場合、iframe がトップ ウィンドウであるかどうかを確認できないため、フレーム バスター スクリプトを無力化でき。
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>
どちらも allow-forms
そして allow-scripts
この値では iframe 内で指定されたアクションが許可されますが、トップレベルのナビゲーションは無効になり。
これにより、フレームバスティング動作が抑制され、ターゲットサイト内での機能が許可され。