La riduzione dei
privilegi in Windows
Marco Russo
DevLeap
http://blogs.devleap.com/marco
[email protected]
Agenda
Cosa è un utente con privilegi minimi
Perché è giusto farlo
Vivere senza essere amministratori
Prepararsi al grande salto
Gli strumenti
Sviluppare senza essere amministratori
Novità in Windows Vista
Regole di scrittura (riferimenti)
Utente con privilegi minimi
La maggior parte degli utenti usa un account di
amministratore locale della macchina
Qualsiasi operazione è consentita
Comodo per installare software e accedere a tutte le
configurazioni del sistema operativo
Rischio latente: eseguire del codice che,
volontariamente o no, abusa di questo privilegio
Utente “normale”
Si dice “con privilegi minimi” perché non può installare
nuove applicazioni e accedere a molte componenti
critiche del sistema
È un meccanismo di difesa, anche dai propri errori
prima che da attacchi esterni e/o codice maligno
Chi deve usare un utente amministratore?
Nessuno, nella pratica quotidiana
Soprattutto non per navigare su Internet e leggere mail
Ma io sono un sistemista!
Bene, quindi hai già due utenti, uno amministrativo per
le operazioni amministrative e uno personale per tutto
il resto. Vero? Bravo!
Ma io sono un programmatore!
Beh, se scrivi software su un computer attaccato a
una rete e magari anche a Internet, sei pur sempre un
utente come molti altri
Ma soprattutto, le applicazioni che scrivete sono
utilizzabili da un utente normale? Come le provate con
un utente amministratore?
Perché è giusto farlo
Perché è giusto avere un utente non
amministratore
I rischi
Azione
Programma in run automatico
Installazione e avviamento servizi
Connessione a server di rete
Installazione keylogger
Invio dati su porte TCP/IP
Installazione driver
Analisi traffico di rete (sniffing)
Controllo remoto PC
PARZ. = Vulnerabilità parziale
Admin
SI
SI
SI
SI
SI
SI
SI
SI
User
PARZ.
NO
SI
NO
SI
NO
NO
PARZ.
Privilegi minimi
Run with Least Privilege
Significa eseguire con il minimo dei privilegi
Si applica ad applicazioni Web e Windows
LPA: Least Privileged Account
Utente con privilegi minimi
Si applica a un utente che non è amministratore
In Windows, un utente che appartiene al gruppo Users di
default
Perché è giusto farlo
Un’applicazione andrebbe eseguita con il minimo
dei privilegi necessari
Limita i danni in caso di errore o attacco
Sicurezza, insomma...
Un’applicazione dovrebbe essere eseguibile con
il minimo dei privilegi necessari
Il programmatore deve pensarci
Non tutti i programmatori lo fanno
È un motivo per cui i sistemisti odiano i programmatori
Perché è giusto farlo
I vantaggi:
Conseguenze di eventuali virus: limitate
Riduce superficie di attacco
No spyware
Difficile che si installino, non hanno diritti sufficienti
Esperimento:
Un anno di navigazione con un PC senza antivirus,
senza anti-spyware e senza firewall
Ma tutti gli aggiornamenti installati tempestivamente
Dopo un anno: nessun virus, nessuno spyware
Attenzione: non è una garanzia, ma aiuta al 95%
Si resta sempre e comunque esposti a vulnerabilità 0day
Utente consapevole, non può essere considerato un utente medio
Vivere senza essere
amministratori
L’esperienza da utente
Create un logon associato al gruppo Users
No Administrators
No Power Users
Al logon scoprirete che:
Non potete installare nuove applicazioni
Non potete installare plug-in e ActiveX su Internet
Explorer
Non potete aggiornare le applicazioni esistenti
Alcune applicazioni già installate non si possono più
avviare o presentano dei problemi di funzionamento
Cos’è che non va?
Perché le applicazioni smettono di funzionare:
60% - Accesso a file/directory non autorizzato
39% - Accesso a Registry non autorizzato
<1% - Mancanza di privilegi sufficienti
Soluzioni
1.
Scrivere meglio il codice…
Ma non sempre si può
2.
Individuare i problemi e aumentare gli accessi al
minimo indispensabile (su file e registry)
Su file e registry, work around fino a nuova versione
3.
Aumentare i diritti dell’utente
Non è una soluzione, è un tornare al problema
Guida alla sopravvivenza
Il 99% dei problemi è causato da accessi non
autorizzati al File System e al Registry
Due tool indispensabili per la diagnosi:
FileMon
RegMon
Entrambi su www.sysinternals.com
Problemi di File System
Directory leggibili da Everyone e modificabili solo
da amministratori e power users:
C:\
C:\WINDOWS
C:\WINDOWS\SYSTEM32
C:\PROGRAM FILES
Spesso i programmi aprono in scrittura file in
queste directory
Anche se poi fanno solo operazioni di lettura
Comunque è un errore scrivere in queste directory,
ogni utente dovrebbe avere configurazioni separate
Problemi di Registry
Hive leggibili da Everyone e modificabili solo da
amministratori
HKEY_LOCAL_MACHINE
Spesso i programmi aprono in scrittura queste
chiavi di registry
Anche se poi fanno solo operazioni di lettura
Comunque è un errore scrivere in questa parte di
registry, ogni utente dovrebbe avere configurazioni
separate e usare HKEY_CURRENT_USER
Accessi a File e Registry
Windows Explorer
RegEdit
Perché tutti questi problemi
Molti in buona fede
Windows 9x non ha ACL (Access Control List)
Tutti gli utenti possono fare tutto (o quasi) su
disco e registry
Le applicazioni sviluppate su Windows 9x
funzionano su Windows 2000/XP/2003, ma
ignorano l’aspetto della security
Altre applicazioni non sono state mai testate da
utenti non amministratori…
Preparazione al grande salto
La vita dura dell’utente
Si può e si deve sviluppare con un utente non
amministratore
È l’unico modo per capire subito cosa succede ai
programmi sviluppati
È anche una questione psicologica: vivere sulla
propria pelle certe esperienze fa aumentare la
sensibilità al problema
È un modo più sicuro di usare un PC
Indipendentemente da firewall e antivirus
Come fare il grande salto
Caratteristiche dell’utente:
No gruppo Administrators
No gruppo Power Users
Sì gruppo Users
Per uno sviluppatore
Creare un gruppo “Developer” o “Advanced User”
Si definiranno le permission sul gruppo e non sull’utente
In caso di nuovi utenti sviluppatori sarà facile abilitarli
Associare l’utente a tale gruppo
Come fare il grande salto
Tre strade:
Cambiare il proprio utente (amministratore locale della
macchina) in un utente “normale”
Problema: ciò che è già installato resta accessibile all’utente
solo perché è owner di registry e directory
Si rischia di non percepire alcuni problemi
Creare un nuovo utente
Strada consigliabile
Si perdono i profili
Reinstallare tutto
Si perdono i profili
Si evitano “eredità” del passato
Ci vuole un sacco di tempo!!
Prepararsi psicologicamente
Perché questo avvertimento?
Tanti programmi e tante operazioni non funzioneranno
più come prima!
I primi due giorni sono i più duri
Ci saranno delle crisi…
Resistete! Potete farcela!
Dopo una settimana:
Vi sentirete meglio di prima
Avvertirete un maggiore controllo sulla macchina
Vi chiederete come avete fatto prima
Gli strumenti
RunAs
Il primo strumento da usare è RunAs
Consente di avviare un programma con le
credenziali di un altro utente
Richiede un logon a ogni esecuzione
Si può fare uno script con le password in chiaro ma…
bye bye security!
Va usato solo per le applicazioni che necessitano
realmente di un amministratore:
Configurazione di sistema
Console amministrative
FileMon, RegMon, ProcessExplorer
RunAsAdmin
Utility free
http://sourceforge.net/projects/runasadmin/
Consente di fare logon come amministratore ma
usando dei privilegi ridotti
Utile per usare utenti Amministratori in maniera
più sicura
Si può fare il RunAs dei programmi scegliendo
come modificare il token da associare al
processo
PrivBar
Utility free
http://www.speakeasy.org/~aaronmar/NonAdmin/PrivBar.zip
Visualizza il livello di privilegio con cui sono eseguiti
Explorer e Internet Explorer
RunAs, RunAsAdmin
e PrivBar
RunAs su Explorer
RunAs da Command Prompt
RunAsAdmin
PrivBar
Riparare le applicazioni scritte male
Individuare Registry e Directory di cui modificare
le ACL
Usare RegMon e FileMon
Di solito si trova un Access Denied poco prima
dell’interruzione del programma
Abbassare al minimo indispensabile i diritti delle ACL
Solo sulla directory interessata
Meglio (quando possibile) solo sul file interessato
Usare gruppo “Developer”/“Advanced User” piuttosto che il
singolo utente
FileMon
Utility free
http://www.sysinternals.com/Utilities/Filemon.html
Monitor degli accessi al file system
Intercetta tutte le chiamate di I/O
Può rallentare le operazioni, in particolare se nella
finestra si visualizza tutto senza filtri
Utile anche per analizzare il responsabile di
eccessive operazioni di I/O
RegMon
Utility free
http://www.sysinternals.com/Utilities/Regmon.html
Monitor degli accessi al registry
Intercetta tutte le chiamate alle API del Registry
Può rallentare le operazioni, in particolare se nella
finestra si visualizza tutto senza filtri
Utile anche per analizzare dove risiede la
configurazione di un programma
Talvolta non è dove dovrebbe essere
Es. configurazione per utente in HKLM\Software
Uso di FileMon e RegMon
Filtrare le operazioni ACCESS DENIED
Errore che dipende da insufficienza di privilegi
Identificazione del problema e possibili soluzioni:
Garantire l’accesso da un utente normale a
file/directory interessate
Workaround temporaneo se non è una propria applicazione
Segnalare il bug e installare poi una versione corretta
Modificare il codice di accesso alla risorsa
Se è un proprio programma – durante il debug questi problemi
emergono quasi completamente se non si è amministratori
Riparare applicazioni
scritte male…
FileMon
RegMon
Application Compatibility Toolkit
Alcune funzionalità di ACT consentono di
bypassare alcuni dei problemi più frequenti
LUA shim
Crea file system e registry virtuale in modo analogo a
quanto fa Vista
Richiede .NET 1.1 e SQL Server 2000 (o MSDE)
Sviluppare senza essere
amministratori
Indicazioni specifiche per i programmatori
Setup di Visual Studio .NET 2003
Visual Studio .NET 2003 crea alcuni gruppi a cui
uno sviluppatore deve appartenere:
VS Developers
Debugger Users
Inserire a mano gli utenti sviluppatori in questi
gruppi
Alcune attività restano agli amministratori:
Registrazione di componenti COM (regsvr32/regasm)
Installazione di assembly nella GAC (gacutil)
Installazione di componenti .NET nel catalogo COM+
(regsvcs)
Setup di Visual Studio 2005
Visual Studio 2005 usa solo un gruppo speciale:
Debugger Users
Inserire a mano gli utenti sviluppatori in tale
gruppo
Alcune attività restano agli amministratori (come
in VS.NET 2003):
Registrazione di componenti COM (regsvr32/regasm)
Installazione di assembly nella GAC (gacutil)
Installazione di componenti .NET nel catalogo COM+
(regsvcs)
Problemi di debug
Gruppo Debugger Users
A questo gruppo è assegnato il privilegio
SeDebugPrivilege
Un virus potrebbe sfruttare questo privilegio per alcuni
attacchi ai processi in esecuzione
Per le applicazioni .NET (managed) il debug al processo di un
altro utente richiede utente admin
Non è così per applicazioni Unmanaged
Problemi per chi sviluppa servizi o siti web
Workaround: in debug eseguire il servizio/sito web con
lo stesso utente con cui si fa il debug
Se debug remoto: richiesto privilegio
SeDebugPrivilege anche su macchina remota
Debug ASP.NET
Due aspetti
L’utente con cui gira l’applicazione
Usare lo stesso utente con cui si sviluppa per fare debug
I diritti sulle directory usate da ASP.NET
Abilitare i diritti su tali directory all’utente con cui gira l’applicazione
ASP.NET
Windows 2000/XP:
L’utente associato a ASPNET_WP.EXE è uno solo per tutta la macchina
Workaround: eseguire VS.NET con RunAs _solo_ limitatamente alla fase di
debug
Windows 2003:
Gli application pool di II6 aiutano nella gestione di diverse applicazioni
con credenziali differenti
Visual Studio 2005:
Si può usare “Visual Web Developer Web Server”.
Modifica utente ASP.NET
IIS 5 (fino a Windows XP)
Modificare tag processModel del file web.config
<processModel enable="true"
userName="DOMAIN\username"
password="pwd" / >
Usare ASPNET_SETREG per cifrare la password
senza lasciarla in chiaro (KB 329290)
IIS 6 (Windows 2003)
Creare un Application Pool
Assegnare utente sviluppatore all’application pool
Assegnare utente sviluppatore a gruppo IIS_WPG
Altrimenti non funziona con ASP.NET
Assegnare la Virtual Directory all’Application Pool
VB6
Brutte notizie
Non è pensato per essere utilizzato da utenti non
amministratori
Si può ovviare con le tecniche descritte prima
Usare FileMon e RegMon
Individuare punti in cui modificare le ACL
Molti problemi causati da componenti (ActiveX)
di terze parti
Anche qua si può ovviare con modifica di ACL
Problema: è un lavoro immane e si rischia di
tornare al punto di partenza (bassa security)
Novità in Windows Vista
Aumento della protezione in Windows Vista
Servizi eseguiti con Least-Privileged Account
Driver in modalità utente se non richiedono
funzioni disponibili solo nel kernel
Gestione diretta I/O, interrupt, accesso hardware,
istruzioni privilegiate della CPU
Un driver per un dispositivo collegato su USB non ne
ha bisogno
User Account Control
Gestione automatizzata del RunAs per tutti gli utenti
Windows XP
User
Admin
System
Services
Kernel
1. Pochi
layer
2. La
maggior
parte con
alti
privilegi
3. Controllo
limitato
tra I layer
Vista
Service
Hardening
User
Account
Control
(LUA)
Low rights
programs
LUA User
Low Privilege
Services
Admin
1. Maggior
numero di
layer
System
Services
Svc 6
Kernel
Service
1
D DD
D D D Service
2
Service
3
Svc 7
DD
D
User mode
drivers
2. Servizi
ripartiti
3. Ridotta la
dimension
e di layer
ad alto
rischio
Service hardening
Esecuzione con privilegi minimi (Least-privilege Account)
Riduce al minimo accesso a risorse
Riduce il potenziale danno e il numero di vulnerabilità
critiche nei servizi
Estende il modello di sicurezza esistente e fornisce
opzioni diverse in base alle caratteristiche del servizio
Good
Spostamento a un least privilege account (LPA)
Ristrutturazione del servizio in due parti dove necessario (separazione
zona critica dalle altre che possono usare LPA)
Eliminazione di privilegi Windows non necessari per singolo servizio
Fornisce regole per firewall
Better
Garantisce accesso al Sid del servizio attraverso ACL su risorse specifiche
Best
Usa SID-Servizio, ACL e “write-restricted token” per isolare i servizi
Cambiamenti ai servizi di Vista
Servizi comuni alle due piattaforme
Windows XP SP2
LocalSystem
Wireless Configuration
System Event
Notification
Network Connections
(netman)
COM+ Event System
NLA
Rasauto
Shell Hardware
Detection
Themes
Telephony
Windows Audio
Error Reporting
Workstation
ICS
Vista client
RemoteAccess
DHCP Client
W32time
Rasman
browser
6to4
Help and support
Task scheduler
TrkWks
Cryptographic Services
Removable Storage
WMI Perf Adapter
Automatic updates
WMI
App Management
Secondary Logon
BITS
Firewall Restricted
Removable Storage
WMI Perf Adapter
Automatic updates
LocalSystem
BITS
LocalSystem
Demand started
Network Service
Fully Restricted
Network Service
Network Restricted
Local Service
No Network Access
Network
Service
DNS Client
Local Service
SSDP
WebClient
TCP/IP NetBIOS helper
Remote registry
WMI
App Management
Secondary Logon
Local Service
Fully Restricted
DNS Client
ICS
RemoteAccess
DHCP Client
W32time
Rasman
browser
6to4
Task scheduler
IPSEC Services
Server
NLA
TrkWks
Cryptographic Services
Wireless Configuration
System Event Notification
Network Connections
Shell Hardware Detection
Rasauto
Themes
COM+ Event System
Telephony
Windows Audio
TCP/IP NetBIOS helper
WebClient
SSDP
Error Reporting
Event Log
Workstation
Remote registry
User Account Control (UAC)
Nome precedente: “LUA”
Utenti fanno logon come non-admin per default
Interfaccia utente per elevare privilegi ad
amministratore per operazioni specifiche
Applicazioni e tool amministrativi devono essere
“UAC area”
Differenziare le funzionalità disponibili in base ai
privilegi dell’utente
Applicare controlli di sicurezza corretti alle funzionalità
del prodotto
Approccio UAC
Migliorare la produttività garantendo le
permission solo quando necessario
Consente a utenti standard di eseguire funzionalità
chiave senza impattare sulle impostazioni globali
Aiuta a isolare i file di sistema e i dati da codice
maligno o errato
Limita i danni potenziali ai dati personali usando
Protected Mode IE
Tutte le applicazioni sono eseguite come utente
standard se non sono configurate diversamente
Isolamento a livello di processo di applicazioni
amministrative e ad alto rischio
Windows Vista UAC Goals
Tutti gli utenti sono Standard User per default

Token filtrato creato durante il logon

Solo applicazioni marcate appositamente ricevono il token non filtrato
Amministratori usano i privilegi completi solo per
operazioni e applicazioni amministrative
L’utente fornisce un consenso esplicito prima di usare
privilegi elevati
Alta compatibilità delle applicazioni

Redirezione dei dati



Consente a vecchie applicazioni di essere eseguite come utente
standard
Le impostazioni scritte su chiavi riservate del registry sono salvate in
un’immagine virtuale del Registry, visibile solo dal programma che le
ha effettuate
Rilevamento procedure installazione
UAC Architecture
Standard User Rights
Administrative Rights
Standard
User
Mode
Admin
logon
Admin
SplitPrivileges
Token
Standard User Privilege
Admin Privilege
Abby
Admin Token
“Standard User” Token
Admin Privilege
• Change Time
Zone
• Run IT Approved
Applications
• Install Fonts
• Install Printers
• Run MSN
Messenger
Admin Privilege
• Etc.
User Process
Contenuti di uno Standard User Token
Privilegi tipici di Standard User token
Bypass traverse checking (SeChangeNotify)
Shut down the system (SeShutdown)
Increase Working Set Size (SeIncreaseWorkingSet)
Remove computer from docking station (SeUndock)
Change Time Zone (SeChangeTimeZone)
Nuovo in Vista
Tutti gli altri privilegi sono rimossi
RID privilegiati impostati a DENY_ONLY
Es. Administrators, Enterprise Admins, Policy Admins,
Power User, etc. – tutti i gruppi che determinano lo
split del token
Come eseguire codice con privilegi elevati
Configurare un’applicazione che richiede privilegi
di amministratore attraverso il manifest
Individuazione installer
Application Compatibility shims (automatismo)
Tab Compatibility in Program Properties
Right-click “Run as Administrator” (Run
Elevated… in beta precedenti di Vista)
Esempi interfaccia utente
Richiesta elevazione privilegi
Interfaccia con livelli di warning diversi
Applicazione sistema operativo
Applicazione signed
Applicazione Unsigned
Conclusione
La security è un problema di tutti,
non solo di Microsoft
Chiunque scriva software è parte del problema
Ciascuno deve fare la sua parte
Per cominciare:
Scrivere applicazioni utilizzabili da utenti “normali”
Sviluppare con un utente non amministratore
Link utili
Bug di Visual Studio, KB833896,
http://support.microsoft.com/default.aspx?scid=kb;EN-US;833896
Uso di aspnet_setreg, KB329290,
http://support.microsoft.com/default.aspx?scid=kb;EN-US;329290
Developing Software in Visual Studio .NET
with Non-Administrative Privileges
http://msdn.microsoft.com/library/en-us/dv_vstechart/html/
tchDevelopingSoftwareInVisualStudioNETWithNon-AdministrativePrivileges.asp
Keith Brown - Libri e blog
http://pluralsight.com/blogs/keith/default.aspx
Why non admin – Wiki
http://nonadmin.editme.com
Using a Least-Privileged Account
http://www.microsoft.com/technet/security/secnews/articles/lpuseacc.
mspx
Link utili
Blog User Account Control in Vista
http://blogs.msdn.com/uac/
Blog Aaron Margosis
http://blogs.msdn.com/aaron_margosis/default.aspx
© 2005 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Regole di scrittura del codice
4 semplici regole
Separare dati setup e configurazione utente
Aprire solo in lettura se si deve leggere
Accedere a risorse con privilegi minimi
Memorizzare i dati per utente
Dati setup e configurazione utente
Dati setup
Informazioni sull’installazione
Directory con risorse
Impostazioni “globali” come porte TCP/IP per un servizio
Configurazione di un servizio
Scrivere durante l’installazione su:
Registry: hive HKLM (HKEY_LOCAL_MACHINE)
C:\Program Files\...
Dati setup e configurazione utente
Configurazione utente (su file)
Modelli, configurazioni su file (XML o altro):
C:\Documents and Settings\NOMEUTENTE\Application
Data\NOMEAZIENDA\NOMEAPPLICAZIONE\...
Modelli, configurazioni su file (XML o altro) per tutti gli
utenti:
C:\Documents and Settings\All Users\Application
Data\NOMEAZIENDA\NOMEAPPLICAZIONE\...
Directory in sola lettura per utenti “normali”
Ci scrivono solo i gruppi Administrators e Power Users
Per ottenere queste directory usare:
System.Environment.GetFolderPath
Vedere parametro Environment.SpecialFolder
Molti casi specifici già definiti
Dati setup e configurazione utente
Configurazione utente (su registry)
Configurazione globale (directory con dati, percorsi, impostazioni
definite in fase di Setup)
HKEY_LOCAL_MACHINE (abbreviato in HKLM)
Solo in lettura per utenti “normali”
Ci scrive soltanto il gruppo Administrators
Configurazione di partenza per tutti gli utenti:
HKEY_USERS\.DEFAULT
Contenuto copiato nel profilo di un utente al primo logon sulla
macchina, non interviene sui profili già esistenti
Solo in lettura per utenti “normali”
Ci scrive soltanto il gruppo Administrators
Configurazione specifica per ogni utente
HKEY_CURRENT_USER (abbreviato in HKCU)
Diritti completi per l’utente
Impossibile vedere la configurazione di un utente diverso (a meno
che non si sia Administrators)
Aprire in sola lettura
Il setup viene eseguito da un amministratore
Crea e modifica qualsiasi file e/o chiave di registry
Il programma viene eseguito da un utente
Dopo il setup accedere solo in lettura alle
informazioni di configurazione
Eseguire Open con richiesta diritti sola lettura
Effettuare solo operazioni Read
Errore comune:
Fare la Open con diritti di lettura e scrittura
In seguito, fare solo Read senza fare Write
Il problema è che la Open fallisce subito…
Morale: Open va READ ONLY
Accedere a risorse con privilegi minimi
Più in generale, l’accesso a una risorsa va fatto
richiedendo privilegi minimi
Aprire un file in lettura se non serve scrivere
Accedere a processi, thread e semafori senza
richiedere diritti più alti del necessario
Se si scrive un servizio o un sito web, assegnare un
utente con privilegi minimi per accedere alle risorse
necessarie al programma
Evitare LocalSystem come utente di default
Un errore (o un attacco) può essere devastante
Memorizzare i dati per utente
I dati dell’utente per default vanno su My
Documents
Environment.GetFolderPath(
Environment.SpecialFolder.Personal )
Diritti di ownership per l’utente
Ogni applicazione può vedere “tutti i dati” dell’utente
Anche per questo è importante evitare l’installazione di virus e
spyware
Dove mettere dati visibili e modificabili da tutti gli
utenti?
Memorizzare i dati per utente
Dove mettere dati visibili e modificabili da tutti gli
utenti?
Non esiste uno standard
Problema latente di sicurezza: i dati sono pubblici
Esempio: un MDB con la contabilità… non è una
buona idea renderlo accessibile a tutti
Possibile soluzione:
Individuare una directory comune e cambiare le ACL durante
il setup (una potrebbe essere
SpecialFolder.CommonApplicationData)
Resta il problema di aggiungere dei nuovi utenti in futuro:
deve farlo l’amministratore
NON LASCIARE DIRITTI A EVERYONE!!!
Scarica

La riduzione dei privilegi in Windows