.net/c#アプリケーションは、呼び出されたdllが偽造に置き換えられないようにどうやって保証するのでしょうか?
https://www.itsvse.com/thread-4173-1-1.html (出典:建築家) 前回、DLLが他人によって偽造されて実行されることをテストしましたが、どうやって防ぐのでしょうか?
署名紹介:
アセンブリ署名(ストロングネーム署名とも呼ばれる)は、アプリケーションやコンポーネントに一意のアイデンティティを与え、他のソフトウェアが明示的にアプリケーションやコンポーネントを識別し参照できるようにします。 強力な名前はアセンブリの単純なテキスト名、バージョン番号、地域情報(提供されている場合)、公開鍵/秘密鍵ペアで構成されます。
例えば、強力なネーミングにより、アプリケーションの作成者や管理者は共有コンポーネントで使用されるサービスの正確なバージョンを指定できます。 これにより、異なるアプリケーションが異なるバージョンを指定しても、他のアプリケーションに影響を与えません。 また、コンポーネントの強力な名前をセキュリティ証拠として用いて、2つのコンポーネント間で信頼関係を築くこともできます。
アセンブリに強く署名するには、購入したコードでデジタル証明書に署名する必要はありません。.NETが提供するSNツールでSNKファイルを生成でき、このファイルを保存することでアセンブリの署名を保証できます。
しかし、アセンブリの強力な署名は実行ファイルに対するデジタル署名とは異なります(たとえアセンブリがexeファイルであっても)。 MSDNには明確にexeファイルは強く署名すべきではないと書かれています(私は署名しましたが)。 ファイルのデジタル署名とは、実際にはファイルシステムレベルで任意のファイルに署名を付け、オペレーティングシステムにそのファイルの発行元を伝えることです。 ファイルのプロパティダイアログで「デジタル署名」タブを見ることができます。
dllに強く署名し、通常通り実行可能なプログラムで呼び出します。
もしDLLを偽造DLLに置き換えたらどうでしょうか? テストしてみると、実行がエラーであることが分かり、これにより呼び出しDLLの偽造を効果的に防げます(テストして署名済みのdllコードを修正し、再生成しましたが、プログラムが正しく署名されていれば通常通りアプリケーションを呼び出せるはずです!!)
誤差は以下の通りです:
このダイアログの代わりにリアルタイム(JIT)デバッグを呼び出す方法についての詳細は、 このメッセージの最後をご覧ください。
珍しいテキスト**************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) ファイル名:「dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e」 TestDll.Form1.button1_Click_1(オブジェクトセンダー、EventArgs e) In System.Windows.Forms.Control.OnClick(EventArgs e) In System.Windows.Forms.Button.OnClick(EventArgs e) In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) At System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons buttons, Int32 clicks) In System.Windows.Forms.Control.WndProc(Message& m) In System.Windows.Forms.ButtonBase.WndProc(Message& m) In System.Windows.Forms.Button.WndProc(Message& m) In System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) In System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
警告:アセンブリバインディングのログはオフになっています。 アセンブリバインディング失敗ログを有効にするには、レジストリ値 [HKLM\Software\Microsoft\Fusion!" EnableLog(DWORD)は1に設定されています。 注:アセンブリバインディングの失敗ログにはパフォーマンスペナルティが発生します。 この機能をオフにするには、[HKLM\Software\Microsoft\Fusion!]のレジストリ値を削除してください。 EnableLog)。
ロードアセンブリ************** MSCORLIB アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2098.0 開発元:NET47REL1LAST ベースコード:file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDLL アセンブリバージョン:1.0.0.0 Win32バージョン:1.0.0.0 基本コード:file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2094.0 ビルド元:NET47REL1LAST 基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- システム アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2093.0 ビルド:NET47REL1LAST 基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- システム。図面 アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2046.0 ビルド:NET47REL1 ベースコード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration(システム・構成) アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2046.0 ビルド:NET47REL1 基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2098.0 開発元:NET47REL1LAST ベースコード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2046.0 ビルド:NET47REL1 基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources(システム.Windows.Forms.resources) アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2046.0 ビルド:NET47REL1 基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll ---------------------------------------- mscorlib.resources アセンブリバージョン:4.0.0.0 Win32バージョン:4.7.2046.0 ビルド:NET47REL1 基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JITデバッグ************** リアルタイム(JIT)デバッグを可能にするために、 これはアプリケーションやコンピュータの.configファイル(machine.config)のsystem.windows.formsセクションで設定する必要があります jitDebuggingの値。 アプリケーションをコンパイルする際にも有効化する必要があります デバッグ。
例えば:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
JITデバッグ後の処理されていない例外は有効化されます このマシンに登録されたJITデバッガに送信されます。 この対話で扱われるのではなく。
|