Laden...

Assembly durch starken Namen eindeutig identifizierbar?

Letzter Beitrag vor 11 Jahren 3 Posts 1.082 Views
Assembly durch starken Namen eindeutig identifizierbar?

Hallo,

Ich arbeite im Moment an einem großen Projekt, bei dem Sicherheit eine wichtige Rolle spielt. Wir wollen autorisierten Personen die Möglichkeit geben, selbst Plugins dafür zu entwickeln.

Zur Überprüfung dieser Autorisierung haben wir an starke Namen gedacht, die von uns in Form von PFX-Dateinen an berechtigte Personen verteilt werden. Jeder Schlüssel ist dem Entwickler eindeutig zuzuordnen und jedes Plugin wird beim Laden darauf geprüft.

Die Frage ist nun wie sicher diese Strategie tatsächlich ist. Ich werde aus den Informationen, die man dazu findet, nicht wirklich schlau. Teilweise liest man, dass ein potentieller "Schädling" mit HEX-Editor einfach die Signatur auf ein selbst erstelltes Plugin übertragen kann.
Stimmt das?

Danke im Voraus!

Hallo theYoRecords,

ich denke ihr wollt etwas anderes - siehe What's the Difference, Part Five: certificate signing vs strong naming

Wie leicht das Tauschen geht steht z.B. in Assign strong name to third part DLL

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Hallo Gü!

Vielen Dank für deine Antwort!

Ich kenne den Unterschied zwischen Strong Names und Authenticode.
Der Grund, warum ich dieses Problem mit Strong Names lösen wollte, ist z.B. der, dass ich hier kein Zertifikat kaufen muss und dieses Zertifikat (und alle damit ausgestellten) nicht warten (erneuern) muss.

Hilfreiche Informationen konnte ich aus dem zweiten Link leider keine filtern. Ich habe mir den Artikel auf Codeproject durchgelesen auf den verwiesen wird aber konnte das lokal nicht wirklich reproduzieren.
Zwar habe ich es geschafft den Public Key von einem authorisierten auf ein "Fake-Plugin" zu übertragen, jedoch konnte dieses dann nicht einmal geladen werden, da sich schon das .NET Framework aufregte, dass die Signatur nicht verifiziert werden konnte.

Im ersten Artikel steht ja folgendes:

The purpose of a strong name is solely to ensure that when you load an assembly by name, you are loading exactly the assembly you think you are loading.

und wenn das tatsächlich so ist, ist mein Problem damit ja gelöst. Das Programm hätte ja Zugriff auf eine Datenbank mit allen authorisierten Public Keys. Wenn der benutze Key darin nicht vorkommt, wird es nicht geladen.
Und sollte eine authorisierte Person ein "böses" Plugin schreiben, kann es dieser Persoon im Nachhinein ohne Probleme zugeordnet werden.

Also sofern diese Aussage oben stimmt und es keine funktionierende Möglichkeit gibt, einen starken Namen von einem Plugin auf das nächste zu übertragen (ohne den privaten Key zu besitzen), sehe ich da kein Problem.
Oder was überseh ich da?

MFG Yo