2011-02-01 7 views
5

強い名前(.snkファイルに格納された鍵ペア)で署名すると、protect against forging assembliesが意味されます。強力な名前で署名すると、一連のアセンブリを偽造することからどのように保護できますか?

例:厳密な名前で署名されたアセンブリを出荷し、他の開発者が自分のアセンブリを使用するため、アセンブリに自分のキーペアの公開鍵を示す私のリファレンスが含まれるようになりました。一部のユーザーは、その開発者アセンブリと私のアセンブリをインストールし、その開発者のコ​​ードをうまく使用します。他の誰かが私のバージョンのように見えるアセンブリを作成しようとしていると、私は自分の鍵ペアを制御し、同じ鍵ペアで署名されていない偽造アセンブリがロードされないということは、 。さて、クール。

しかし、悪意のある人物が私のアセンブリと他の開発者の従属アセンブリの両方を偽造し、それらの両方を "出荷"するのを防ぐにはどうすればよいですか?彼らは私のアセンブリとその開発者のアセンブリをつかみ、両方を改ざんして、私のアセンブリの偽造されたバージョンにどんなキーでも署名し、従属アセンブリの偽造バージョンに参照を追加して署名し、両方とも出荷します。私は悪意を持って2つのアセンブリを「出荷」することは、1つのアセンブリを「出荷」することよりはるかに難しいことではないことを意味します。

強力な名前で署名すると、複数のアセンブリを偽造することからどのように保護できますか?

+0

あまりにも、そのアセンブリの名前が強くなりました。その文字列を引っ張っておけば、EXEで終わるでしょう。攻撃者がそれを置き換えることができれば、強力な名前を使用する際に残されているポイントはありません。 –

+0

@Hans Passant:あなたが正しいと思います。これを回答として追加してください。 – sharptooth

答えて

5

アセンブリの厳密な命名は、実際には署名されたアセンブリを保護することを意味しません。これは、署名されたアセンブリをロードしている他のアセンブリを保護するためです。

たとえば、EXEが信頼され、既知の場所(GAC、ネットワーク共有、インターネットなど)から既知のDLLをロードする場合は、あるレベルの厳密な名前を使用して実行できます組立が改ざんされていないという自信があります。

しかし、アセンブリー全体を逆アセンブルして再署名した場合、残りのアセンブリーをロードするコード行を書き換えることができます新しい(擬似)キーでそれらをロードします。

しかし、このような改ざんは明らかです。言い換えれば、強い名前の署名は、改ざんの明確な証拠を提供しますが、すべての場合にそれを防ぐものではありません。ローカル管理者が厳密な名前の検証を完全に無効にすることができるという事実(「開発」の目的のため)を加えて、強力な名前の署名が防弾セキュリティの仕組みではないことは明らかです。

Authenticodeとドライバの署名にも同じです。私たちはすべて、ユーザーに「セキュリティ警告を無視する」ように指示する製品を見てきました。これは基本的に、強力な名前検証が無効になっているか、アセンブリ全体が署名が剥奪された場合にEXEが行うことです。警告は無視されます。

0

強い命名はすべてについてです、よく... "命名"。私はここから引用します:Using Strong Name Signatures

"強力な名前は、.NET Frameworkアセンブリに固有のIDを与えるための強力なメカニズムを提供します。"

これはすべてこのメカニズムから得られるものです。それは、私があなたの議会と、それが参照するすべての議会を鍛造することができることを意味しますが、私はあなたが「それをした」ふりをすることはできません。私はふりをすることができませんは、これらのアセンブリの出版社です。

+0

私が見る問題は、インフラストラクチャ全体が公開鍵の公開を含まないことです。アセンブリをダウンロードし、それがあなたのものかどうかを知りたいとします。それ、どうやったら出来るの? – sharptooth

+0

@sharptooh - StrongNameCompareAssembliesなどの新しいICLRStrongNameインターフェイス(http://msdn.microsoft.com/en-us/library/dd409349.aspx)でできることがいくつかありますが、そのような種類のチェックを追加するとあなたのアプリでは、コールも偽造される可能性があります:-) –

+0

はい、まさに問題です。あなたの公開鍵を公開することができる中心的な方法はありません。これは、アセンブリ全体があなたからのものであることを検証するためのものではなく、後続のすべてのバージョンが最初のバージョンと同じパブリッシャのものであることを確認するためだけのものです。 – sharptooth

関連する問題