2013-01-24 16 views
7

Ho appena passato il nostro german VB.NET forums e c'era qualcosa di interessante che mi dava un po 'di mal di testa.Convalida di .NET Framework Assiemi

In realtà è possibile modificare gli assembly di .NET Framework che utilizzano ReflexIL o qualche altro editor IL. L'unica cosa che devi ignorare è la firma Strong Name dell'assembly. Dopo aver modificato l'assembly IL, è necessario eseguire sn.exe -Vr [assemblyname] in modo da saltare la convalida del nome sicuro. Dopodiché è necessario cancellare le immagini native memorizzate nella cache. Basta passare attraverso la directory C:\Windows\assembly ed eliminare tutte le immagini relative all'assieme. Quindi riavviare. Una volta effettuato l'accesso, eseguire ngen install [assemblyname]. Ora vengono generate le immagini native nuove.

Questo funziona. Ho verificato questa procedura nel mio ambiente virtuale (Windows XP x86). Ora la cosa che mi preoccupa di più è che puoi facilmente aggirare i metodi .NET VerifyHash o VerifyData dello RSACryptoServiceProvider. Anche questo funziona davvero. Un mio amico e io testati potrebbero verificare questo problema (see screenshots). E 'stato abbastanza facile.

Per esempio, se mi piacerebbe creare un sistema di licenze costruito sulle classi di crittografia di .NET Framework, potrebbe essere aggirato a livello di sistema perogni applicazione .NET sul sistema utilizzando il framework. Inoltre, tutti possono registro e modificare l'input di functios che chiamo solo agganciando i metodi.

Ora la mia domanda è: Poiché questo può essere un problema enorme, come posso fare qualcosa al riguardo? Ovviamente un utente malintenzionato potrebbe semplicemente modificare l'applicazione, ma non sarebbe così male come fare questo a livello di sistema. Stavo pensando ad una convalida del checksum del framework, ma poiché ci sono molti aggiornamenti diversi per .NET Framework, questo sembra impossibile.

Eventuali soluzioni o suggerimenti? Microsoft si prende cura di questo problema in qualche modo?

+5

È necessario eseguire di nuovo l'intero esercizio, ma questa volta senza nome utente e password amministratore. È un errore comune nell'analisi delle minacce, non ha senso bloccare la porta quando un intruso ha la chiave. –

+0

Inoltre, i sistemi di licenze sono in genere esercizi inutili. –

risposta

7

Se un utente malintenzionato ha accesso amministrativo al computer (necessario per l'attacco che hai descritto), hai praticamente perso. Qualsiasi cosa tu potessi fare potrebbe essere aggirata dall'attaccante.

Per questo motivo, penso che sia completamente inutile cercare di difendersi da questo tipo di attacco. Se hai a che fare con computer non affidabili e potenzialmente compromessi, non puoi semplicemente fidarti di loro per fare qualcosa di sensibile e devi farlo sul tuo server, o qualcosa del genere.

+0

So che non ha senso fare qualcosa al riguardo. Mi interessava solo il motivo per cui Microsoft rende tutto così semplice. Non era la risposta che stavo cercando, ma okay. – nikeee

+2

Non capisco il tuo modo di ragionare. Dici che non ha senso prevenire questo tipo di attacchi, ma pensi ancora che Microsoft dovrebbe spendere le risorse comunque? – svick

+0

Poiché MS ha accesso al kernel .NET Framework e CLR, potrebbero almeno renderlo un po 'più difficile. – nikeee

Problemi correlati