web-dev-qa-db-ja.com

有効なデジタル証明書を抽出して他のプログラムに配置する方法

私は卒業生としてこの問題に取り組んでいますが、助けが必要です。

  • 有効なデジタル証明書を抽出して他のプログラムに配置するにはどうすればよいですか?
  • 他の実行可能ファイルにデジタル証明書を配置して有効にすることはできますか?

私は試しました disitool Didier Stevens:

disitool.py extract signed-file signature

しかし、これは実行可能ファイルにデジタル署名するためのツールではありません。私はこれにsigntoolを使用しています。署名をあるファイルから別のファイルに追加またはコピーすると、署名は無効になります。

私もMimiKatzを試しましたが、成功を見つけることができません。参照 hackcon2013-ダーティリトルシークレットは、侵入テストクラスでは教えませんでした

2
adrián

あなたが求めていることは可能ですが、かなり難しいです。まず最初に、いくつかのアイデアを理解する必要があるため、ここで説明します。

まず、署名スキーム。あなたは間違いなくWeb上のデジタル署名スキームを見て、きっと質問するかもしれません-それでは、なぜファイル全体に署名しないのですか?まあ、それに対する答えは、少なくともRSAの場合、あなたは 既存のキーのみの偽造攻撃 に自分を開放するということです。つまり、公開鍵を知っているだけで、さまざまなメッセージのペアに対して有効な署名を生成できます。

これに対する解決策は、メッセージダイジェスト、つまりハッシュを使用することです。暗号的に安全なハッシュ関数は、プリイメージだけでなく、衝突への耐性も備えています。

それでは、あなた(そしてNSA、そしてロシアの犯罪組織全体)が何をしたいのかを説明します。他の場所で見つけたデジタル署名を使用して、有効なデジタル署名を持っていると署名されたファイルを渡す必要があります。はい。できることは2つあります。

  1. それらの公開鍵を取得し、有効なメッセージ/署名ペアを生成して、実際に機能するハッシュのプリイメージを見つけてみてください。幸運を。私が知っているMD5でさえ、プリイメージ攻撃はありません。
  2. あなたは彼らが使用したハッシュ値との衝突を見つけて、最後に署名をキャットすることを試みることができます。

番号2はまさに flameマルウェア の作者がしたことです-彼らは有効な署名を取り、MD5衝突を利用してそれを有効にしました。

動作する実行可能ファイル全体で、私はあなたが言うと聞きますか?どのようにセグメンテーション違反をしませんでしたか?!まあ、ちょっと待って。デジタル署名は、ルートCAからコードまでの証明書チェーン全体を支えています。ルートCAはローカルストアにあるため、信頼します。彼らの署名は有効であるため、彼らが署名するものを信頼します。それらの「もの」は、他のオブジェクトに署名できる中間証明書になる可能性があります。各署名をチェックするとき、それらはすべて秘密鍵でのみ作成できる有効な署名であるため、チェーンを信頼します。

したがって、バイナリのハッシュとの衝突を見つけるのではなく、別の証明書のハッシュを使ってそれを実行し、その衝突を使用して、何かに署名してチェーンで有効な証明書を生成できます。

残念ながら nSA 誰かがすでにMD5でこれを行っていて、世界が問題を発見しました。 MD5証明書は過去のものになり、SHA1も廃止される予定ですが、 念のため です。私の知る限り、現時点では、有効なSHA256衝突をオンデマンドで生成する方法は誰にもわかりません。

したがって、a)証明書チェーンをターゲットにする必要があります。ASN.1パーサーは悪であり、b)SHA256を破壊するためです。

これを再現したい場合は、Windowsのコピーをお勧めしますXPまだMD5証明書を受け入れます(Windowsの更新を許可しないでください)。opensslでいくつかのMD5証明書を生成してから、炎の結果を再現するには:)

2
user68774