Perché .NET è più sicuro???

.NET Security

Ho letto il post .NET e Virus Writing di Matteo G.P. Flora ed i commenti tra cui quello di Lawrence Oluyede e Pierre Greborio e ne aprofitto per rispondere a questa domanda "latente": Perché .NET è più sicuro???

Parlando di sicurezza, questa domanda non ha nessun significato se prima non si precisa proteggere cosa e da chi?

.NET aiuta in maniera innovativa ed efficace un utente a proteggere il proprio PC durante l'esecuzione di ogni programma .NET che potrebbe potenzialmente contenere codice malizioso.

Questo significa che è responsabilità dell'utente assicurarsi

  1. di avere installato una versione genuina (non manomessa) e funzionante del .NET Framework
  2. di avere le configurazioni di sicurezza (le security policy Enterprise, Machine ed User) adeguate (tipicamente la configurazione di default predisposta dal fornitore del .NET Framework vanno bene)
  3. di avere le configurazioni delle security zone (quelle accessibili dalle opzioni IE ) adeguate (tipicamente la configurazione di default di W2K3 vanno bene)

Invece la sicurezza di .NET *NON* è pensata per aiutare (in maniera determinante e innovativa rispetto le tecnologie precedenti) il programmatore a proteggere ossia impedire l'accesso o l'esecuzione di parti riservate del proprio codice .NET (ossia non aiuta più di altre tecnologie la protezione della proprietà intelletttuale del codice o il rispetto di meccanismi di licenza) da parte dell'utente quando un programma .NET  viene eseguito sulla macchina dell'utente.

Questo significa che l'utente può aggirare ogni meccanismo di sicurezza del .NET Framework in barba al programmatore agendo sul proprio PC nei seguenti modi:

  1. Disabilitando i controlli di sicurezza del .NET Framework agendo sui file di configurazione
  2. Utilizzando la Reflection per accedere o anche eseguire qualsiasi classe o metodo del programma per quanto privato o protetto possa essere
  3. Eseguire il programma con una versione del .NET Framework manomessa per ignorare i controlli di sicurezza

Infine .NET  *NON* è pensato per aiutare  (in maniera determinante e innovativa rispetto le tecnologie precedenti) il programmatore a implementare le seguenti caratteristiche di sicurezza di un software: autenticazione, autorizzazione, riservatezza, integrità, non ripudiabilità(=paternità).

In questo infatti l'aiuto innovativo in questo viene dalla Crittografia e Crittoanalisi (in una parola Crittologia) e limplementazione degli strumenti Crittografici è disponibile per ogni piattaforma e per ogni tecnologia (.NET lo fa con la libreria la libreria System.Security.Cryptography che fornisce gli strumenti di criptografia, System.Security e System.Web.Security per autenticazione e autorizzazione).

 

Chiarito questo (che non è poco ;-) posso rispondere alla domanda:
<>

  1. Perché i precedenti sistemi (Unix, Windows NT, Digital VMS, ...)  eseguono il codice di un programma con i privilegi dell'utente che lo manda in esecuzione mentre .NET definisce (e permette di configurare) i privilegi con cui il programma viene eseguito in base a:
    • l'origine del programma da eseguire (da internet, da un particolare sito internet fidato, da un folder di rete, dal disco locale, ...)
    • l'autore (persona o organizzazione) del programma
    • opzionalmente un cerificato X.509 emesso da una certification authority sul tipo Verisign
    • il nome e la versione del programma
    • un codice hash che grazie alla tecnologia delle chiavi pubbliche/private garantisce l'autenticità delle informazioni ai 3 punti precedenti
    Questo fornisce tutti gli strumenti utili a rendere inoffensivi programmi ricevuti da internet (download/mail) che si avviano più o meno automagicamente ed in generale ogni programma di dubbia provenienza.
  2. Perchè .NET mette a disposizione una serie di strumenti che facilitano il programmatore nel realizzare programmi Server liberi dai più pericolosi bug che possono essere sfruttati per attaccare il programma e la sicurezza del sistema che lo esegue:
    • lo strumento di gran lunga più rilevante di tutti perché del tutto automatico è la gestione automatica della memoria e la verificabilità matematica del codice che proteggono i programmi .NET managet dal bug più frequente e più dannoso per la sicurezza: il buffer overflow
    • in seconda battuta perché potenzialmente disponibili in qualsiasi tecnologia (ma realmente disponibili ed effetive in .NET) ci sono:
      • le classi che permettono di evitare lo scripting injection (per rappresentare non come stringhe ma con semantica tippizzata Url, Nomi File e Directory, Parametry di comandi Sql, Periferiche, ... )
      • i controlli automatici di ASP.NET per evitare il Cross-Site-Scripting
      • strumenti come il FxCop che permettono l'ispezione automatica del codice e l'individuazione di possibili buchi alla sicurezza
      • l'utilizzo della CAS per realizzare programmi e librerie che utilizzano i minimi privilegi necessari inibendo quelli non necessari e quindi solo pericolosi
      • ...

Questo fa la differenza.

Concludo con questo link sempreverde:
Security Tips - Defend Your Code with Top Ten Security Tips Every Developer Must Know

 

Tags :   |

Print | posted @ Thursday, September 30, 2004 4:22 AM

Comments on this entry:

Gravatar # re: .NET e Virus Writing
by LastKnight .NET Blog at 9/30/2004 4:35 AM

Comments have been closed on this topic.