Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
poodle-PoC — :poodle: Poodle (Padding Oracle On Downgraded Legacy Encryption) 攻撃 CVE-2014-3566 :poodle: | Kitploit
ツール/GitHubGitHub/mpgn/poodle-poc
暗号化/復号化ツール脆弱性分析エクスプロイトウェブセキュリティ暗号化ペネトレーションテスト学習と教育
GitHubmpgn/poodle-poc

poodle-PoC

🐩 Poodle (Padding Oracle On Downgraded Legacy Encryption) 攻撃 CVE-2014-3566 🐩

リポジトリを見る
26572143年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Poodle PoC 🐩 🐩 🐩

Poodle攻撃(Padding Oracle On Downgraded Legacy Encryption)の概念実装:

SSL 3.0へのフォールバックを利用する、インターネットおよびセキュリティソフトウェアのクライアントに対する中間者攻撃

Poodle攻撃は、使用されているTransport Layer SecurityがSSLv3の場合に、クライアントからサーバーに送信された暗号化データを取得することを可能にします。リクエストの暗号化に使用された秘密鍵を取得することはできません。

imgonline-com-ua-twotoone-luefsrwi2n8iqy

1. 🐩 攻撃の概念 🐩

SSLv3とCBC暗号モード

SSLv3はデータを暗号化・復号化し、保護するためのプロトコルです。この場合、CBC暗号モード連鎖 を使用します。平文は暗号アルゴリズム(AES、DES、3DES)に応じてブロックに分割され、長さは8または16の倍数になります。平文が長さを満たさない場合、欠けたスペースを補うために最後にパディングが追加されます。このREADMEを読む際には、暗号化と復号化の画像を開くことを強くお勧めします。

暗号化復号化
Ci = Ek(Pi ⊕ Ci-1), and C0 = IVPi = Dk(Ci) ⊕ Ci-1, and C0 = IV

基本的にこれは単純なXORにすぎません。このビデオ(私のものではありません)も見ることができます: https://www.youtube.com/watch?v=0D7OwYp6ZEc

SSLv3を使用してHTTPSで送信されるリクエストは、AES/DESとCBCモードで暗号化されます。TLS1.xに対するSSLv3の特徴はパディングです。SSLv3のパディングは、最後のバイトを除いてランダムなバイトで埋められ、最後のバイトはパディングの長さに等しくなります。

例:

T|E|X|T|0xab|0x10|0x02 ここで 0xab|0x10|0x02 はパディングです。
T|E|X|T|E|0x5c|0x01 ここで 0x5c|0x01 はパディングです。

また、最後のブロックはパディングの完全なブロックで埋められることがあり、つまり最後のブロックは最後のバイトを除いてランダムなバイトで埋められる可能性があります。

T|E|X|T|E|0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07 ここで |0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07 はパディングであり、攻撃者が知ることができるのは 0x07 だけです。したがって、攻撃者がパディングブロックに影響を与えることができれば、最後のブロックの最後のバイトがブロックの長さに等しいことを知ることができます。

パディングへの影響

攻撃者は、被害者にリクエストを送信させることができなければなりません(たとえばXSSを悪用したJavaScriptを使用して)。そうすれば、各リクエストのパスとデータを制御できます。

例: リクエストのパスに「A」バイトを追加する

root@kitploit:~
GET / HTTP/1.1\r\nSECRET COOKIE\r\n\r\n
GET /AAA HTTP/1.1\r\nSECRET COOKIE\r\n\r\nDATA

この手法により、攻撃者はパディングに影響を与えることができます。

HMAC

SSLv3は、平文の完全性をチェックし認証するために HMAC も使用します。

鍵付きハッシュメッセージ認証コード(HMAC)は、暗号学的ハッシュ関数(そのため「H」)と秘密の暗号鍵を組み合わせた、特定のタイプのメッセージ認証コード(MAC)です。

このため、攻撃者はリクエストを傍受して改変し、再度送信することはできません。サーバーが問題に遭遇した場合、HMACエラーを送信します。

MAC-then-encrypt

SSLv3プロトコルは次のルーチンを使用します。クライアントからデータを受信し、データを復号化し、HMACで完全性をチェックします。

MAC-then-Encrypt: 暗号文に対して完全性を提供しません。メッセージを復号化するまで、それが本当に正規のものか偽造されたものかを知る方法がないためです。 平文の完全性。 暗号スキームが可鍛的(malleable)である場合、メッセージを改変して有効に見せ、有効なMACを持たせることが可能かもしれません。もちろん、これは理論上の話であり、実際にはMAC秘密 > が保護を提供するはずです。 ここでは、MACは暗号化されているため、平文に関する情報も提供できません。

https://crypto.stackexchange.com/questions/202/should-we-mac-then-encrypt-or-encrypt-then-mac

つまり、サーバーに知られずに暗号文を改変できるということです。これは本当に素晴らしいことです :)

2. 🔑 暗号技術 🔑

まず、最後のブロックがパディングで完全に埋められている必要があります。前述のように、攻撃者はリクエストのパスを使用して、リクエストの長さをチェックします。

  • 元の暗号の長さを保存する
  • パスに1バイトを追加し、長さをチェックする
    • 長さが変わらない場合は、別のバイトを追加するなどする
    • そうでない場合: 暗号化リクエストの長さが変わるため、最後のブロックがパディングで完全に埋まっていることが分かる

最後のブロックは最後のバイトを除いてランダムなバイトで埋められているため、攻撃者はこの最後のブロック Cn を、復号化したいブロック Ci に置き換えることができます。改変されたリクエストはサーバーに送信されます。

サーバーは:

  • 最後のバイトの長さに基づいてパディングを削除する
  • リクエストからHMACを取得する = HMAC
  • 平文を取得する
  • hmac(平文) と HMAC を比較する
    • 等しければ => 正しいパディング
    • そうでなければ => 不正なパディング

最後のブロックを置き換えることで、攻撃者は最後のブロックの最後のバイト(パディングの長さ)も変更します。パディングブロックで置き換えられた最後のバイトが元のバイトと同じである確率は1/256であり、この場合パディングエラーは発生しません。攻撃者はこのXOR演算を使用して、ブロック Ci の最後のバイトを次の演算で取得できます:

Pn = Dk(Cn) ⊕ Cn-1
Pn = Dk(Ci) ⊕ Cn-1
Pn = Dk(Ci) ⊕ Cn-1
xxxxxxx7 = Dk(Ci) ⊕ Cn-1
Dk(Ci) = xxxxxxx7 ⊕ Cn-1
Pi ⊕ Ci-1 = xxxxxxx7 ⊕ Cn-1
Pi = Ci-1 ⊕ xxxxxxx7 ⊕ Cn-1

(xxxxxxx7 または xxxxxxx15 であり、xはランダムなバイト)

ブロックの最後のバイトは次のように取得できます: Pi[7] = Ci-1[7] ⊕ xxxxxxx7 ⊕ Cn-1[7] パディングの場合、攻撃者はSSLセッションを閉じて別のハンドシェイク(新しいAES鍵)を行い、新しい暗号を取得してから最後のブロックを置き換えるなどする必要があります(通常+300回のハンドシェイクが必要)。

1バイトが取得できたら、パスに1バイトを追加し、データから1バイトを削除することで、ブロックの他のすべてのバイトを取得できます:

バイトE,I,K,Oを取得するためのリクエスト
GET /a SECRET_COOKIE dataazerty PADDING_7
GET /aa SECRET_COOKIE dataazert PADDING_7
GET /aaa SECRET_COOKIE dataazer PADDING_7
GET /aaaa SECRET_COOKIE dataaze PADDING_7

TLS1.0について

TLS仕様ではサーバーにパディングのチェックが義務付けられているにもかかわらず、一部の実装はそれを適切に検証できないため、SSL 3.0を無効にしてもPOODLEに対して脆弱なサーバーが存在します。

TLSは通常Poodleに対して安全ですが、一部の実装はパディングをチェックしないため、SSLv3を使用しているのと同じことになります。これが一部のTLSバージョンが脆弱な理由です。

3. 💥 攻撃を開始する 💥

このリポジトリには3つのファイルがあります:

  • poodle-poc.py -> 前提条件を必要としない概念実証(PoC)
  • parallelization-poodle.py -> 並列化を使用した別の概念実証(非常に高速)
  • poodle-exploit.py -> 実際のシナリオのためのエクスプロイト
1. poodle-poc.py ファイル

このPoCは攻撃の背後にある暗号技術を探求します。このファイルにより、攻撃がどのように機能するかを簡単な方法で理解できます。

root@kitploit:~
python3 poodle-poc.py
2. poodle-poc.py ファイル

parallelization-poodle.py ファイルはプロジェクトであり、アイデアです :) 確認: https://github.com/mpgn/poodle-PoC/issues/1

root@kitploit:~
python3 parallelization-poodle.py

asciicast

3. poodle-exploit.py ファイル

これは実際のエクスプロイトです。ペンテスト中に、古いサーバーとブラウザを使用しているクライアントに対してPoodle攻撃の概念実証を行いたい場合に非常に便利です。悪意のあるプロキシのIPを正しいポートとともにブラウザの設定に設定するだけで、プロキシが残りを処理します。

前提条件:

  • クライアントとブラウザがプロトコルSSLv3 のみ で通信できることを確認してください。たとえばFirefoxで security.tls.version.min: 0 を使用してSSLv3のみを強制します。あるいは、クライアントがTLSも使用している場合は、ダウングレードを強制できます
  • サーバーが脆弱であることを確認し、ツール testssl.sh を使用してください image
  • クライアント側にJavaScriptを注入できることを確認してください(XSS)
  • クライアントとサーバー間の接続を傍受できることを確認してください

💀 これらの前提条件を満たしていれば、攻撃を開始できます 💀:

このエクスプロイトには2つのオプションがあります:

  1. クライアント側でプロキシのIPアドレスとポートを直接設定し、エクスプロイトを実行します(パート3へ)
  2. ARPスプーフィング攻撃を設定して、クライアントとサーバー間のすべてのトラフィックを自分のマシンにリダイレクトします
  • フォワーディングを有効にし、クライアントからプロキシへのトラフィックをリダイレクトするIpテーブルルールを設定します
root@kitploit:~
$> echo 1 > /proc/sys/net/ipv4/ip_forward
$> iptables -i vmnet1 -t nat -A PREROUTING -p tcp --dport 1337 -j REDIRECT --to-ports 1337
  • ツール arpspoof、ettercap、または bettercap を使用してARPスプーフィング攻撃を実行します
root@kitploit:~
$> bettercap -iface vmnet1
net.show
set arp.spoof.internal true
arp.spoof on
  1. プロキシを実行する
root@kitploit:~
⋊> ~/T/poodle-Poc on master ⨯ python3 poodle-exploit.py -h              13:10:24
usage: poodle-exploit.py [-h] [--start-block START_BLOCK]
                         [--stop-block STOP_BLOCK] [--simpleProxy SIMPLEPROXY]
                         proxy port server rport

Poodle Exploit by @mpgn_x64

positional arguments:
  proxy                 ip of the proxy
  port                  port of the proxy
  server                ip of the remote server
  rport                 port of the remote server

optional arguments:
  -h, --help            show this help message and exit
  --start-block START_BLOCK
                        start the attack at this block
  --stop-block STOP_BLOCK
                        stop the attack at this block
  --simpleProxy SIMPLEPROXY
                        Direct proxy, no ARP spoofing attack

$> python3 poodle-exploit.py 192.168.13.1 4443 192.168.13.133 443 --start-block 46 --stop-block 50

ブロックの選択: ブロックオプションを指定しない場合、すべてのブロックが復号化されますが、これには長い時間がかかる可能性があります。リクエストがどのようにフォーマットされるかを「把握」し、スクリプト request-splitter.py を使用して復号化したいブロックを特定することを強くお勧めします(理想的にはCookieブロック! :))

次に、悪意のあるJavaScriptコード(poodle.js)を、たとえばXSSを使用して脆弱なWebサイトに挿入します。Pythonスクリプトを起動し、help と入力してから search、最後に active と入力します。その間、JavaScriptとのやり取りは2回だけ必要です(searchコマンドとactiveコマンド)。

更新: 2018年1月4日: エクスプロイトにダウングレードオプションが追加されました。エクスプロイトがTLSプロトコルを検出したら、コマンド downgrade を入力してSSLv3.0にダウングレードします。

仕組み: ハンドシェイク中(hello clientの後)、エクスプロイトは handshake_failure 15030000020228 を送信し、ブラウザはデフォルトプロトコルとしてSSLv3.0を使用するhello clientを再送信するはずです。Chromeバージョン15でテストされましたが、Firefoxでは動作しません(Firefoxはプロトコル再ネゴシエーションをサポートしていないと思います)。#4 を確認してください。

エクスプロイトの全ビデオ:

ezgif-3-90a926f34356

Asciinema:

asciicast

コントリビューター

mpgn

ライセンス

MITライセンス

参照

  • https://en.wikipedia.org/wiki/POODLE
  • https://www.openssl.org/~bodo/ssl-poodle.pdf
ツールをダウンロード