2013-01-24 10 views
7

Ich ging gerade durch unsere german VB.NET forums und es gab etwas Interessantes, das mir einige Kopfschmerzen gibt.Validieren von .NET Framework Assemblies

Es ist tatsächlich möglich, bearbeiten Sie die die .NET Framework-Assemblys mit ReflexIL oder einem anderen IL-Editor. Die einzige Sache, die Sie umgehen müssen, ist die starke Namensunterschrift der Versammlung. Nach dem Ändern der Assembly-IL müssen Sie sn.exe -Vr [assemblyname] ausführen, um die starke Namensvalidierung zu übergehen. Danach müssen Sie die zwischengespeicherten nativen Bilder löschen. Gehen Sie einfach durch das Verzeichnis C:\Windows\assembly und löschen Sie jedes Bild, das zu Ihrer Baugruppe gehört. Dann neu starten. Wenn Sie angemeldet sind, führen Sie ngen install [assemblyname]. Jetzt werden die neuen nativen Bilder generiert.

Das funktioniert. Ich habe diesen Vorgang in meiner virtuellen Umgebung (Windows XP x86) verifiziert. Nun, die Sache, die mich am meisten beunruhigt, ist, dass Sie die .NET VerifyHash oder VerifyData Methoden der RSACryptoServiceProvider leicht umgehen können. Das funktioniert auch. Ein von mir und mir getesteter Freund konnte dieses Problem überprüfen (see screenshots). Das war ziemlich einfach.

Zum Beispiel, wenn ich ein Lizenzierungssystem für die .NET Framework-Kryptografie-Klassen gebaut schaffen würde, könnte es systemweite für jede .NET-Anwendung auf dem System umgangen werden, um den Rahmen verwendet wird. Außerdem kann jeder log und ändern den Eingang von Funktionen, die ich nur durch das Anhängen in die Methoden aufrufen.

Jetzt ist meine Frage: Da dies ein großes Problem sein kann, wie kann ich etwas dagegen tun? Natürlich könnte ein böswilliger Benutzer nur meine Anwendung bearbeiten, aber das wäre nicht so schlimm wie dieses systemweit zu tun. Ich habe über eine Framework-Prüfsummen-Validierung nachgedacht, aber da es viele verschiedene Updates für das .NET Framework gibt, scheint dies unmöglich zu sein.

Irgendwelche Lösungen oder Vorschläge? Behebt Microsoft dieses Problem in irgendeiner Weise?

+5

Sie müssen die gesamte Übung erneut ausführen, diesmal jedoch ohne einen Benutzernamen und ein Passwort für den Administrator. Es ist ein häufiger Fehler in der Bedrohungsanalyse, es hat keinen Sinn, die Tür zu verriegeln, wenn ein Eindringling den Schlüssel hat. –

+0

Auch Lizenzsysteme sind in der Regel Übungen in Vergeblichkeit. –

Antwort

7

Wenn ein Angreifer Administratorzugriff auf Ihren Computer hat (was für den beschriebenen Angriff erforderlich ist), haben Sie ziemlich viel verloren. Alles, was Sie tun könnten, könnte vom Angreifer umgangen werden.

Aus diesem Grund denke ich, es ist völlig sinnlos, sich gegen diese Art von Angriff zu verteidigen. Wenn Sie mit nicht vertrauenswürdigen, potentiell kompromittierten Computern umgehen müssen, können Sie ihnen einfach nicht vertrauen, dass sie etwas Sensibles tun, und Sie müssen es auf Ihrem eigenen Server tun, oder so ähnlich.

+0

Ich weiß, dass es sinnlos ist, etwas dagegen zu tun. Ich war nur daran interessiert, warum Microsoft es so einfach macht. Das war nicht die Antwort, die ich suchte, aber okay. – nikeee

+2

Ich verstehe Ihre Argumentation nicht. Sie sagen, dass es keinen Sinn macht, diese Art von Angriffen zu verhindern, aber Sie denken immer noch, Microsoft sollte trotzdem Ressourcen dafür ausgeben? – svick

+0

Da MS Zugriff auf den Kernel, das .NET Framework und die CLR hat, könnte es zumindest ein bisschen schwieriger werden. – nikeee

Verwandte Themen