.NET Security

La sicurezza nella applicazioni .NET è uno delle sfide maggiormente impegnative che ogni programmatore affronte quotidianamente. Questa categoria si vuole porre come strumento utile a tutte quelle persone che per passione o per motivi professionali vogliono rendere le loro applicazioni Sicure.
PrincipalPermission - Hacking Windows Impersonation

Essere a casa influenzato non porta solo svantaggi. Solo ora, ho trovato, un errore all'interno di una mia vecchia, ma ancora funzionante applicazione. Ecco la classe   public class ValidateUser { [PrincipalPermission(SecurityAction.Demand, Name=@"mainServer\Administrator")] public void AdminsOperations() { // codice... } } Il codice sembra corretto, e guardandolo così com'è non si nota alcun tipo di errore. In realtà l'errore c'è ma non si vede. Come la maggior...

posted @ lunedì 9 ottobre 2006 19:37 | Feedback (5)

[Security 33] Identity Permissions ed i suoi attributi

Nei precedenti post ho parlato degli oggetti IIDentity e IPrincipal. Quello di cui non abbiamo parlato sono i loro attributi e come utilizzarli per evitare di eseguire codice nel caso in cui l'utente non sia correttamente autorizzato. Nel caso si voglia proprio realizzare una struttura di questo tipo è necessario andare a lavorare sulla permission PrincipalPermission insieme ad alcuni suoi attribiti (PrincipalPermissionAttribute). PrincipalPermission ha tre proprietà da valorizzare. Authenticated Name Role Il loro funzionamento è presto illustrato dallo snippet di codice che segue.  [PrincipalPermission(SecurityAction.Demand, Role="TrustedUsers")] private static void RunTrustedUsersCode() { Console.WriteLine("Waaa appartengo al gruppo TrustedUsers!"); } Il metodo RunTrustedUsersCode può essere eseguito...

posted @ lunedì 9 ottobre 2006 15:37 | Feedback (129)

[Security 31] Windows/Forms/Passport-Identity

Come si può facilmente intendere dal nome, una WindowsIdentity identifica uno specifico utente Windows. La maggiore differenza che si può incontrare facendo la comparazione tra WindowsIdentity e GenericIdentity sta nella costruzione dell'oggetto. Una WindowsIdentity si propone con quattro costruttori, il primo argomento di questi è di tipo IntPtr. IntPtr windowsToken /* =...*/; IIdentity windowsUser = new WindowsIdentity(windowsToken, "NTLM", WindowsAccountType.Normal, true); Questo esempio mostra come il costruttore usi più argomenti. Il secondo argomento è dato dalla tipologia di autentificazione. Il terzo invece è valore di enumerazione di tipo WindowsAccountType, il quale,...

posted @ giovedì 31 agosto 2006 17:59 | Feedback (4)

[Security 32] L'interfaccia IPrincipal

Dando per scontato il nostro skill sul funzionamento delle identità nel mondo Microsoft .NET Framework, andremmo ora a coprire l'importantissimo argomento dell'interfaccia IPrincipal. Formata da due membri: Identity: una proprietà Read-Only legata alla Principal IsInRole:  un metodo che informa se Principal appartiene ad uno specificato gruppo. .NET espone due implementazioni di IPrincipal: GenericPrincipal e WindowsPrincipal, e proprio di queste andremmo a parlare. GenericPrincipal è l'implementazione più semplice di IPrincipal. Per crearne una è necessario sottoporre un oggetto basato su una interfaccia IIdentity accompagnato da una lista di ruoli alla quale essa appartiene. Per esempio.. string[] roles = {"administrators", "developers"}; IIdentity soloNome = new GenericIdentity("amarziali"); GenericPrincipal genericPrincipal = ...

posted @ giovedì 31 agosto 2006 17:59 | Feedback (238)

[Security 30] RSA | Identity Interface

L'interfaccia IIdentity è usata per definire informazioni relative all'utente. Generalmente, l'utente che sta eseguendo il codice. IIdentity definisce tre proprietà read-only: Name : Una stringa che definisce il nome logico dell'utente nel formato dominio\nome. AuthenticationType : Una stringa che definisce la tipologia di autentificazione usata per verificare l'utente (per esempio Kerebos e Passport). IsAuthenticated : Un valore  booleano che indica lo stato di autentificazione dell'utente. .NET fornisce queste quattro implentazioni di IIdentity: GenericIdentity (sec30) WindowsIdentity (sec31) FormsIdentity (sec32) PassportIdentity (sec33) Per ora parleremo di GenericIdentity. Come specificato dal nome GenericIdentity non è direttamente collegato ad alcun protocollo per...

posted @ mercoledì 30 agosto 2006 18:30 | Feedback (4)

[Security 29] .NET Security vs Operative System Security

  Riapro la serie .NET Security con un post, a mio modo di vedere, importante. Stiamo parlando della sicurezza di .NET ed il suo inevitabile scontro con la sicurezza del sistema operativo. Come abbiamo avuto modo di vedere, .NET ha molto da offrire quando si parla di permessions e di sicurezza in generale, tuttavia questo non significa che .NET sia immune o superiore alle policy di sicurezza definite dal sistema operativo. Ragionando per esempi, inviterei a verificare il funzionamento del seguente metodo. [method: FileIOPermission(SecurityAction.Demand,Write = IMAGE_DIR)]public void SalvaImmagine(string NomeImmagine){     FileName = IMAGE_DIR + NomeImmagine      if(true == File.Exists(NomeImmagine))     {        File.Delete(NomeImmagine));     } ...

posted @ giovedì 17 agosto 2006 10:03 | Feedback (5)

[Security 28] Link Demands

Durante l'analisi di un nuovo progetto, qualcuno (ndr guardandomi) ha posto la seguente domanda."Cosa significa chiedere i permessi per svolgere una determinata azione in un contesto generico applicativo? " La risposta a questa domanda può sembrare decisamente semplice, tuttavia non è proprio così ovvia. Pertanto, ho proposto di aprire un dibattito al riguardo. Ogniuno ha espresso la sua opinione ed il risultato generale è stato che, per richiesta di permessi s'intende il reclamare il permesso ad eseguire una determinata operazione su un determinato componente. La mia reazione è stata piuttosto inusuale, ho chiesto di realizzare un semplice snippet che chiamasse un metodo di...

posted @ martedì 27 giugno 2006 13:30 | Feedback (5334)

security whitepaper #1

Ultimamente sto postando poco, è vero, problemi di grande importanza mi stanno allontanando dal blog. Ma a parte questo, che non è il motivo di questo post, volevo informarvi che da circa quattro giorni sto lavorando ad una whitepaper che rilascerò (spero) la prossima settimana. Il titolo è in fase di definizione, ma i contenuti iniziano ad essere molti. Si parla di sicurezza delle web applications ed in generale dell'amministrazione remota dei contenuti (le famose aree admin). Tutto questo nasce con l'idea di sensibilizzare Programmatori/PM/Clienti riguardo ai problemi derivati da uno sviluppo non orientato alla sicurezza. Attualmente i contenuti sono : Remote Code Execution Come proteggersi dai Google...

posted @ mercoledì 14 giugno 2006 12:41 | Feedback (8)

[Security 27] NamedPermissions Set

Dopo l'introduzione fatta in precedenza, andiamo a scoprire definitivamente il significato dei NamedPermissions Set. Sia chiaro, il loro utilizzo non è che faccia la differenza.. ma sicuramente può aiutarci a sviluppare con maggiore ordine. Dopo essermi fatto le mie personali convinzioni entriamo nel tecnico. Come abbiamo capito, il permissions set ritornato dall'evidence dell'assembly in esecuzione non contiene tutte le permissions che ci sono state assegnate dai code groups. Per esempio, potrei usare l'oggetto FileStream senza problemi, ma l'oggetto FileIOPermissions non verrà mostrato nel permission set associato. Per riuscire a visualizzare tutte le permissions c'è da svolgere un lavoro in più. Il come lo vedremo nel prossimo post....

posted @ sabato 3 giugno 2006 19:00 | Feedback (5416)

[Security 26] Permissions Sets

E' vero; avevo detto che avrei parlato di ben altre cose, ma rileggendo la serie di post mi sono    accorto che stavo tralasciando una parte molto importante. I Named Permissions Sets . Cosa sono e come funzionano lo scopriremo nel prossimo post (sec 27). Ho scelto questa scaletta per facilitare la lettura a chi non avesse familiarità con i Permissions Sets.Come si può ben intuire un Set di Permissions è l'unione di due o più Permissions che un assembly può avere. Ricordiamoci sempre che esistono differenti policies, ogniuna delle quali con differenti code groups...

posted @ sabato 3 giugno 2006 16:34 | Feedback (5402)

Full .NET Security Archive