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

Windows Vista Integrity Levels (parte 2)

Parte 1: http://blogs.ugidotnet.org/raffaele/archive/2009/01/27/windows-vista-integrity-levels-parte-1.aspx

Gli Integrity Levels sono un meccanismo per diminuire l'accesso ad un oggetto kernel di Windows (processi, thread, file, registry, etc. etc.). Quello che non ho ancora descritto è il modo per indicare quale azione si vuole negare.

Per rendere più elastico il sistema, esistono le Integrity Policy che stabiliscono quali sono le azioni negate:

  • No-read-up       lettura negata
  • No-write-up      scrittura negata
  • No-execute-up  esecuzione negata

La "No-execute-up" è stata pensata anche per impedire l'attivazione di oggetti COM. Le altre sono intuitive.

Il default che Windows assegna agli oggetti non esplcitamente marcati è:

Integrity Policy "No-write-up" e Integrity Level medium.

Il read-up viene consentito e significa per esempio che Internet Explorer in protected mode può leggere oggetti che siano superiori al livello Low. Questo è stato necessario per garantire la compatibilità dei plugin in IE ed è probabilmente necessario a qualsiasi altra applicazione che voglia essere posta in "sandboxing" con questo sistema.

Se un processo esegue del codice che accede a diversi tipi di oggetti kernel nel sistema, questa è la situazione risultante:

Integrity2       Integrity1

La prima volta che ho analizzato i token, non capivo perché i processi non potessero accedere in lettura ad altri processi. Poi ho aggiunto qualche altra riga di codice e sono andato a leggere la SACL nel security descriptor dell'oggetto processo ed è saltato fuori che le sue ACE sono impostate con "no-read-up" e "no-write-up".

Infatti il processo è anch'esso un oggetto kernel ma riceve in più il "no-read-up" impedendo così ad un malware che gira all'interno di Internet Explorer di accedere ad un altro processo di livello più alto nel sistema, nè in lettura nè in scrittura.

In Internet Explorer l'associazione tra "protected mode" e sito viene fatto tramite le "Zone" (Tools - Options - Security). Per esempio la posta web appartiene ai "trusted sites" e gira priva di protected mode. Mentre la home page di Facebook gira in protected mode in quanto nella zona "Internet" il protected mode è abilitato.

Se in una istanza (processo) di Internet Explorer navighiamo da un sito in protected mode verso uno senza protected mode (o viceversa), Internet Explorer forza l'apertura di una nuova finestra (processo).

image

Questo meccanismo che sembra solo noioso, permette di evitare a qualsiasi malware (anche fosse un potente Activex) che giri nella finestra protected mode di non poter accedere alle finestre di livello superiore (cioè tutte le nostre applicazioni che apriamo come normali utenti e naturalmente l'istanza di Iternet Explorer con la web mail).

Il malware non può inoltre accedere in scrittura al resto degli oggetti kernel (file e registry tanto per fare un esempio) ma ha accesso in lettura (decisione, come dicevo nel post precedente, necessaria per evitare problemi di compatibilita).
Per esempio IE può solo scrivere su oggetti marcati con low che di default sono: i temporary internet files, i cookies, il cestino e alcune chiavi di registry sotto HKCU\Software\Microsoft\Internet Explorer.

Questi meccanismi sono tutti sfruttabili dallo sviluppatore ma al momento non esiste nessun supporto a livello di Framework e, per quanto ne so, Internet Explorer è l'unica applicazione che ne fa uso, ma si spera che in un prossimo futuro tutte le applicazioni che hanno una superficie di attacco consistente (come Outlook) ne facciano uso.

Da tutto questo si evince che:

  • Il meccanismo degli Integrity Level deve essere capito da coloro che devono garantire o testare le problematiche di compatibilità delle applicazioni su Vista ed oltre.
  • Se si sviluppano applicazioni che hanno una superficie di attacco rilevante, è bene fare uso di questo meccanismo abbassando l'integrity level del processo.

Il funzionamento del protected mode di IE ha mille altre sfaccettature in cui però volutamente non entro nel merito perché mi interessa descrivere la prospettiva dello sviluppatore che vuole capire/usare gli integrity level e affini.

Windows 7 non introduce (al momento della attuale beta 1) alcuna novità in queste specifiche caratteristiche.

[more to come ...]

Parte 3: http://blogs.ugidotnet.org/raffaele/archive/2009/02/03/windows-vista-integrity-levels-parte-3.aspx

Print | posted on giovedì 29 gennaio 2009 19:40 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET