posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

Lo strong name è uno strumento di versioning, non di sicurezza

Leggendo un blog, sono arrivato a quello di Francesco che referenziava questo video.
Mi preme quindi fare una importante precisazione. Gli strong name non sono uno strumento che garantisca la sicurezza ma sono esclusivamente un meccanismo di versioning. La differenza è fondamentale.

Veniamo alla definizione che MSDN da dello strong name:

A name that consists of an assembly's identity, its simple text name, version number, and culture information (if provided) strengthened by a public key and a digital signature generated over the assembly.

In sostanza, dato un assembly, genero uno strong name con sn.exe, lo referenzio dentro l'attributo AssemblyKeyFile e alla compilazione ottengo un assembly firmato con strong name.

È questo un sistema che gaarantisce la sicurezza del nostro assembly o del codice che viene eseguito? No:

  • Alla WPC dell'anno scorso ho mostrato 'live' come eseguire il tampering di un assembly che era strong named. Ok, ho sfruttato un bug della CAS che avevo già mostrato al workshop security UGIdotNET, ma rimane comunque chiaro che esiste un abisso tra strong name e codesign con certificati digitali.
  • Non hanno un meccanismo di gestione delle chiavi, di scandenza e tantomeno di revoca e come invece fanno i certificati
  • Dal momento in cui siamo amministratori di un pc, possiamo disabilitare o rendere inutile qualsiasi policy di sicurezza relativa allo strong name (e quindi l'attacco del video sarebbe stato comunque possibile anche firmando con strong name l'assembly).
  • La Code Access Security usa lo strong name per dedurne la sua 'evidence' cioè per distinguere gli assembly.

Se volete un altro illustre parere con altre spiegazioni, rimando al blog del caro amico Valery.

Il bug che ho sfruttato alla WPC è stato solo una delle tante possibilità. Ero già amministratore su quel server grazie alla solita SQL Injection ed alti errori dell'amministratore distratto.

Che non ci debba fidare dell'integrità di un assembly firmato con strong name, c'è scritto ancora in MSDN:

Assemblies with the same strong name are expected to be identical.

Print | posted on giovedì 11 maggio 2006 18:38 |

Feedback

Gravatar

# re: Lo strong name è uno strumento di versioning, non di sicurezza

Ciao Luca, evidentemente mi sono spiegato male. Intendevo proprio la disabilitazione della CAS.
In sostanza, anche senza sfruttare il bug della CAS, puoi decompilare l'assembly, ricompilarlo senza strong name. Visto che (nel video) sei già amministratore di quel pc, puoi modificare la CAS o disabilitarla in modo che quell'assembly sia considerato valido anche senza essere firmato (o con una firma differente).
Quindi nello specifico caso del video, la firma con strong name è inutile.

Il caso che ho mostrato alla WPC era più complesso perché l'assembly firmato veniva eseguito sul client come "rich client" (diverso dagli smart client). Quindi ho mostrato come effettuare il tampering dell'assembly firmato con strong name, sfruttando appunto il famoso bug.
Però ripeto una volta che apri un varco in una rete come admin, è solo una questione di tempo.
11/05/2006 22:08 | Raffaele Rialdi
Gravatar

# re: Lo strong name è uno strumento di versioning, non di sicurezza

Si e' vero, ma il video e' solo una dimostrazione "accademica", anche l'autore lo dice.
E comunque anche senza riuscire ad aver lo status di admin, ma magari solo read/write permission sulla dir dell'assembly, in questo caso lo strong name puo essere utile per eveitare una sostituzione della dll.
12/05/2006 00:25 | Michele Bersani
Gravatar

# Delayed Signing

Quando abbiamo la necessità di riutilizzare la stessa versione di un componente che abbiamo scritto in
15/07/2007 18:50 | Mighell's blog
Gravatar

# Delayed Signing

Quando abbiamo la necessità di riutilizzare la stessa versione di un componente che abbiamo scritto in
15/07/2007 19:58 | Mighell's Mobile Blog
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET