素早さで: HD ムーアが Debian/Ubuntu OpenSSL の欠陥を悪用して新たな地上速度記録を樹立

  • Nov 27, 2023

聞いたことがない人のために説明すると、Debian パッケージャーは、Debian ベースのシステム (Debian と Ubuntu ファミリ全体) を使用して、SSL の作成時に使用される PRNG (擬似乱数ジェネレーター) に使用されるシードを削除します。 キー。 HD Moore 氏は、彼が Debian-OpenSSL Toys と呼ぶもののリリースにより、開発速度の新記録を樹立しました。

HD ムーア メタスプロイト
聞いたことがない人のために説明すると、Debian パッケージャーは、Debian ベースのシステム (Debian と Ubuntu ファミリ全体) を使用して、SSL の作成時に使用される PRNG (擬似乱数ジェネレーター) に使用されるシードを削除します。 キー。 さて、HD ムーアは、彼の言うところのリリースで活用速度の新記録を樹立しました。 Debian-OpenSSL おもちゃ.

HD のページでバグについて説明しています、以下に彼の説明を引用しました。

2008 年 5 月 13 日、Debian プロジェクトは 発表された Luciano Bello が配布していた OpenSSL パッケージに興味深い脆弱性を発見したとのことです。 問題のバグは、次のコード行を削除したことが原因で発生しました。 md_rand.c

MD_Update(&m, buf, j); [.. ] MD_Update(&m, buf, j); /* purify complains */
これらの行は 削除されました 彼らが引き起こしたからです ヴァルグリンド OpenSSL にリンクされたコード内の初期化されていないデータの使用に関する警告を生成する Purify ツール。 OpenSSL チームへのそのようなレポートの 1 つを参照できます。 ここ. このコードを削除すると、OpenSSL PRNG のシード処理に支障をきたすという副作用があります。 初期シードにランダム データを混合する代わりに、使用された唯一の「ランダム」値が現在のプロセス ID でした。 Linux プラットフォームでは、デフォルトの最大プロセス ID は 32,768 であるため、すべての PRNG 操作に非常に少数のシード値が使用されます。

んー... セキュリティツールが好きではありませんか? ここでお見せしますが、ツール セットがどれほど優れていても、私は Valgrind が好きですが、ツール セットがどのように機能するか、さらに重要なことに、コードがどのように機能するかを理解する必要があります。 初期化されていないデータに関する警告を無視する必要がある (または無視する必要がある) と言えるほど賢いツールはありません。 これは、達成しようとしている暗号化を効果的にレンダリングするためです。 去勢された。

この影響は信じられないほど大きく、 HDが言及しているように:

2006 年 9 月から 2008 年 5 月 13 日までに Debian ベースのシステム (Ubuntu、Kubuntu など) で生成されたすべての SSL キーと SSH キーが影響を受ける可能性があります。 SSL キーの場合、生成されたすべての証明書を再作成し、署名のために認証局に送信する必要があります。 Debian ベースのシステムで生成された認証局キーはすべて、再生成して取り消す必要があります。 ユーザーが SSH および公開キー認証を使用してサーバーにアクセスできるようにしているすべてのシステム管理者は、それらのキーを監査して、脆弱なシステムで作成されたものがないかどうかを確認する必要があります。 OpenSSL の PRNG に依存して転送データを保護するツールは、オフライン攻撃に対して脆弱になる可能性があります。 欠陥のあるシステムによって生成されたホスト キーを使用する SSH サーバーはトラフィックの復号化の対象となり、中間者攻撃はユーザーには認識されません。

Debian ソフトウェアを使用していないシステムでも、Debian システムで作成されたキーが使用されている場合には監査する必要があるため、この欠陥は厄介です。

上に HDのおもちゃ、下の「続きを読む」をクリックして続行してください...

これは時間を節約するために HD のページから直接抜粋したものですが、私は決して暗号通貨の専門家ではないためです。

おもちゃ

Debian と Ubuntu によって公開されたブラックリストは、キー空間がいかに小さいかを示しています。 新しい OpenSSH キーを作成する場合、特定のアーキテクチャ、キー サイズ、キー タイプで考えられる結果は 32,767 通りのみです。 その理由は、PRNG によって使用される唯一の「ランダム」データがプロセスの ID であるためです。 これらのブラックリストに一致する実際のキーを生成するには、ターゲット プラットフォーム用の正しいバイナリを含むシステムと、特定のプロセス ID を持つキーを生成する方法が必要です。 プロセス ID の問題を解決するために、次のように書きました。 共有ライブラリ これはプリロードでき、getpid() libc 呼び出しに対してユーザー指定の値を返します。

次のステップは、脆弱なシステムからの実際のバイナリとライブラリを含む chroot 環境を構築することでした。 ローカル ネットワーク上の Ubuntu システムからスナップショットを取得しました。 chroot環境全体を見つけることができます ここ 特定のタイプ、ビット数、プロセス ID を持つ OpenSSH キーを生成するために、chroot 環境内から実行できるシェル スクリプトを作成しました。 このシェルスクリプトを見つけることができます ここ. このスクリプトは、抽出された Ubuntu ファイルシステムのルート ディレクトリに配置されます。 キーを生成するには、次のコマンド ラインを使用してこのスクリプトを呼び出します。

# chroot ubunturoot /dokeygen.sh 1 -t dsa -b 1024 -f /tmp/dsa_1024_1
これにより、getpid() の値が常に数値「1」を返す新しい OpenSSH 1024 ビット DSA キーが生成されます。 これで、最初の事前生成された SSH キーが完成しました。 32,767 までのすべての PID に対してこのプロセスを継続し、その後 2048 ビット RSA キーに対してこのプロセスを繰り返すと、バグのあるバージョンの OpenSSL ライブラリを実行している x86 システムの有効なキー範囲をカバーしたことになります。 このキー セットを使用すると、 許可されたキーファイル。 このキー セットは、SSH サーバーが脆弱なホスト キーを使用していた場合に、以前にキャプチャされた SSH セッションを復号するのにも役立ちます。 1024 ビット DSA キーおよび 2048 ビット RSA キー (x86) 用の事前生成キー セットへのリンクは、以下のダウンロード セクションにあります。

これらのキーの興味深い点は、それらがプロセス ID にどのように関連付けられているかです。 ほとんどの Debian ベースのシステムは連続したプロセス ID 値を使用するため (システムの起動から増加してラップバック) 必要に応じて前後します)、特定のキーのプロセス ID は、そのキーがシステム起動からどのくらいの期間で使用されたかを示すこともできます。 生成された。 その逆を見ると、攻撃対象に基づいて総当たり攻撃中にどのキーを使用するかを決定できます。 ブート時に生成されるキー (SSH ホスト キーなど) を推測しようとする場合、PID 値が 200 未満のキーがブルート フォースに最適な選択肢となります。 ユーザー生成キーを攻撃する場合、有効なユーザー キーのほとんどが 500 より大きく 10,000 未満のプロセス ID で作成されたと想定できます。 この最適化により、SSH プロトコルを介したリモート ユーザー アカウントに対するブルート フォース攻撃が大幅に高速化されます。

近い将来、このサイトは更新され、脆弱なキーを使用して公開キー認証を許可する SSH アカウントにすぐにアクセスできるブルート フォース ツールが追加される予定です。 以下のデータ ファイルのキーでは、次の命名規則が使用されます。

/ Algorithm / Bits / Fingerprint-ProcessID and / Algorithm / Bits / Fingerprint-ProcessID.pub
特定の公開鍵の秘密鍵ファイルを取得するには、鍵のフィンガープリントを知る必要があります。 このフィンガープリントを取得する最も簡単な方法は、次のコマンドを使用することです。
$ ssh-keygen -l -f targetkey.pub 2048 c6:7b: 14:fa: ae: b6:89:e6:67:17:ee: 04:17:b0:ec: 4e targetkey.pub
エディターで公開キーを確認すると、キーのタイプが RSA であると推測できます。 この公開キーの秘密キーを見つけるには、データ ファイルを抽出し、次の名前のファイルを探す必要があります。
 rsa/2048/c67b14faaeb689e66717ee0417b0ec4e-26670
上記の例では、フィンガープリントはコロンを除いた 16 進数で表され、プロセス ID は「26670」として示されます。 この公開キーを認証に使用する脆弱なシステムに対して認証を行う場合は、次のコマンドを実行します。
$ ssh -i rsa/2048/c67b14faaeb689e66717ee0417b0ec4e-26670 root@targetmachine

ツール

- GetPID Faker 共有ライブラリ (4.0K) - Ubuntu ルート ファイルシステム (4.9M) - キー生成スクリプト (8.0K)

キー

- SSH 1024 ビット DSA キー X86 (30.0M) - SSH 2048 ビット RSA キー X86 (48.0M) - SSH 4096 ビット RSA キー X86 (94.0M)

よくある質問

Q: これらのキーを生成するのにどれくらい時間がかかりましたか? : x86 の 1024 ビット DSA キーと 2048 ビット RSA キーの場合は約 2 時間。 2.33Ghz で動作する 31 個の Xeon コアを使用しました。

Q: キー生成を複数のプロセッサーに分散するためのコードを共有してくれませんか? : いいえ。 このコードはこの特定のクラスター用にハードコードされており、クリーンアップするにはあまりにも不十分に書かれています。

Q: これらのキーを使用して SSH ユーザー アカウントをクラックするにはどのくらい時間がかかりますか? : これは、ネットワークの速度と SSH サーバーの構成によって異なります。 DSA-1024 と RSA-2048 の両方の 32,767 キーすべてを数時間以内に試行できるはずですが、ターゲット サーバー上のブルート フォース対策スクリプトに注意してください。

Q: 16384 ビット RSA キーを使用していますが、壊れる可能性がありますか? : はい、時間と処理能力の問題です。 普通の人間にとって、4096 ビットの鍵はすでに少し偏執的な側面があります。 考えられるすべての 4096 ビット キーは、翌日かそこら以内に利用可能になるはずです。 8192 ビット キーと 16384 ビット キーのすべての組み合わせを生成することは可能ですが、プロセッサーにはおそらくもっと良い使い方があるでしょう :-)

私が言えるのは、信じられないということだけです。 確かに重大な欠陥ですが、HD による所要時間はとんでもないものです... 彼は自分自身をプニー賞にノミネートさせようとしているのだと思います。 HD、しかし、あなたが投票パネルにいるならそれは不正行為です!

-ネイト。