Blog: Profilo:
Blog La versione di Windows è dwMajorVersion.dwMinorVersion OSVERSIONINFOEX (GetVersionEx) contiene queste informazioni Major = 5 Windows 2000, XP, 2003 Minor = 0 Windows 2000 Minor = 1 Windows XP Minor = 2 Windows XP 64 bit, 2003, 2003 R2 Major = 6 Windows Vista, 2008, Windows 7, 2008 R2 Minor = 0 Windows Vista, Windows 2008 wProductType = VER_NT_WORKSTATION Vista Minor = 1 Windows 7, Windows 2008 R2 wProductType = VER_NT_WORKSTATION Windows 7 Windows 7 R2 (Server) solo per hardware a 64 bit
Blog
È una struttura dati che ogni processo ottiene dal sistema operativo in cambio delle credenziali (user/pwd) In pratica è la carta di identità di un utente che contiene: L'identità dell'utente sotto forma di "SID" I gruppi a cui appartiene l'utente I privilegi assegnati all'utente Alla logon la shell (explorer.exe) avrà il nostro token Ogni volta che facciamo "doppio click" su un'applicazione questa eredita il token dal processo che l'ha lanciato (explorer.exe) Se facciamo doppio click su un virus e siamo amministratori del PC, il virus avrà un token da amministratore
Blog LSA (LSALogonUser) 1. Logon 2. Creazione token Administrator 3. Rimozione privilegi Primary Token (restricted) Linked Token (full) Explorer.exe (token restricted) 4. Token
Blog Esplicite deny sui gruppi administrators e domain admin Mandatory label (Integrity Level) medium (invece di high) Virtualization allowed Default Dacl non contiene administrators Eliminazione di quasi tutti i privilegi SeIncreaseQuotaPrivilege SeMachineAccountPrivilege SeSecurityPrivilege SeTakeOwnershipPrivilege SeLoadDriverPrivilege SeSystemProfilePrivilege SeSystemtimePrivilege SeProfileSingleProcessPrivilege SeIncreaseBasePriorityPrivilege SeCreatePagefilePrivilege SeBackupPrivilege SeRestorePrivilege SeIncreaseQuotaPrivilege SeMachineAccountPrivilege SeSecurityPrivilege SeTakeOwnershipPrivilege SeLoadDriverPrivilege SeSystemProfilePrivilege SeSystemtimePrivilege SeProfileSingleProcessPrivilege SeIncreaseBasePriorityPrivilege SeCreatePagefilePrivilege SeBackupPrivilege SeRestorePrivilege SeShutdownPrivilege SeChangeNotifyPrivilege SeUndockPrivilege SeIncreaseWorkingSetPrivilege SeTimeZonePrivilege SeShutdownPrivilege SeChangeNotifyPrivilege SeUndockPrivilege SeIncreaseWorkingSetPrivilege SeTimeZonePrivilege Token full Token restricted SeShutdownPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeChangeNotifyPrivilege SeRemoteShutdownPrivilege SeUndockPrivilege SeManageVolumePrivilege SeImpersonatePrivilege SeCreateGlobalPrivilege SeIncreaseWorkingSetPrivilege SeTimeZonePrivilege SeCreateSymbolicLinkPrivilege SeShutdownPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeChangeNotifyPrivilege SeRemoteShutdownPrivilege SeUndockPrivilege SeManageVolumePrivilege SeImpersonatePrivilege SeCreateGlobalPrivilege SeIncreaseWorkingSetPrivilege SeTimeZonePrivilege SeCreateSymbolicLinkPrivilege
Blog LUA Buglight (A. Margosis) buglight-2-0-preview.aspx Standard User Analyzer Parte dell'Application Compatibility Toolkit - ACT E9-B581-47B0-B45E-492DD6DA2971&displaylang=en Process Monitor (FileMon + RegMon) Sul sito di SysInternals (ora diventato Technet) Application Verifier (codice nativo C++)
Blog Il token di un processo non può essere cambiato Si può elevare il processo (che farà apparire UAC) grazie alla API ShellExecute (C++) o alla classe Process (.NET) Le API CreateProcess NON elevano il processo ma tornano ERROR_ELEVATION_REQUIRED se è necessario elevare il processo L'informazione di elevazione viene ricavata: 1. Dal manifest embedded o esterno 2. Nel database 'application compatibility' (registry) 3. Ricerca euristica di un installer wchar_t wszDir[MAX_PATH]; GetSystemDirectory(wszDir,_countof(wszDir)); wcscat_s(wszDir,_countof(wszDir),L"\\cmd.exe"); HINSTANCE h = ShellExecute(0, L"runas", wszDir, 0, 0, SW_SHOWNORMAL); wchar_t wszDir[MAX_PATH]; GetSystemDirectory(wszDir,_countof(wszDir)); wcscat_s(wszDir,_countof(wszDir),L"\\cmd.exe"); HINSTANCE h = ShellExecute(0, L"runas", wszDir, 0, 0, SW_SHOWNORMAL); C++ Process p = new Process(); ProcessStartInfo psi = new "cmd.exe"); psi.UseShellExecute = true; psi.Verb = "runas"; p.StartInfo = psi; p.Start(); Process p = new Process(); ProcessStartInfo psi = new "cmd.exe"); psi.UseShellExecute = true; psi.Verb = "runas"; p.StartInfo = psi; p.Start(); C#
Blog COM Elevation Moniker può elevare un COM object L'applet del control panel per il cambio dell'ora usa questo sistema Per essere "elevabili" gli oggetti COM devono: Essere marcati nel registry HKLM\Software\Classes\CLSID\{CLSID}\Elevation\Enabled = 1 Avere un nome che verrà mostrato da UAC HKLM\Software\Classes\CLSID\{CLSID}\LocalizedString = Se possiedono un'icona (...\Elevation\IconReference=...) verrà mostrata nella dialog di UAC Per elevare l'oggetto si usa CoGetObject con questa sintassi: Elevation:Administrator!new{GUID} Elevation:Highest!new{GUID} Elevation:Highest!clsid{GUID} Listato di CoCreateInstanceAsAdmin:
Blog archive/2009/01/27/windows-vista-integrity-levels-parte-1.aspx
Blog Sono un meccanismo per diminuire l'accesso agli oggetti rispetto alle tradizionali Access Control List I fattori sono due: Integrity Level (Low, Medium, High, System) Integrity Policy (no-read-up, no-write-up, no-execute-up) Questi fattori sono presenti: Nel token di ogni processo Nel security descriptor degli oggetti kernel (file, registry, etc.) Windows confronta questi fattori ad ogni accesso Esempio: il "protected mode" di Internet Explorer
Blog Low Medium High Low Medium High Processo Medium Read + Write Read Processi Oggetti
Blog LocalSystemSystem LocalServiceSystem NetworkServiceSystem AdministratorsHigh Backup OperatorsHigh Network Configuration Operators High Cryptographic OperatorsHigh Authenticated UsersMedium Everyone (World)Low AnonymousUntrusted
Blog User Interface Privilege Isolation Permette di impedire ad un processo con un integrity level più basso di... eseguire SendMessage o PostMessage di certi messaggi Internamente Windows ha una "blacklist" dei messaggi vietati tra cui WM_USER + x realizzare thread hook monitorare con i journal hook iniettare dll... verso un processo di livello più alto
Blog
Impostazioni globali e read-only Creare la struttura di cartelle necessarie all'applicazione Salvare nella Program Files le impostazioni globali e read-only Installare i certificati digitali Applicare le ACL su cartelle e certificati Installare oggetti COM in HKLM Il setup.MSI viene eseguito con privilegi elevati Creare una "custom action" per eseguire operazioni non previste dalla configurazione del Setup MSI
Blog L'utente ha diritto di Read/Write su queste cartelle Le "Documents" sono quelle per i dati Le "Application" sono quelle per le configurazioni Il setup crea una sottocartella con il nome Azienda e/o Applicativo C:\users\raf\Documents\Visual Studio 2008\... Cartella XP C:\Documents and Settings\... Cartella Vista/Win7 User Con divi sa App C++ SHGetKnownFolder Path.NET Environment. GetFolderPath( Environment. SpecialFolder....) All Users\ Application Data C:\ProgramDataSi FOLDERID_ ProgramData Common ApplicationData raf\Application Data C:\Users\raf\ AppData\Roaming Si FOLDERID_ RoamingAppData ApplicationData raf\Local Settings\ Application Data C:\Users\raf\ AppData\Local Si FOLDERID_ LocalAppData LocalApplicationData raf\My Documents C:\Users\raf\ Documents Si FOLDERID_ Documents MyDocuments (non disponibile)C:\Users\PublicSi FOLDERID_ Public GetEnvironmentVariable ("public") - raccolta di cartelle Solo Win7 Si- FOLDERID_ DocumentsLibrary (usare PInvoke)
Blog Gli applicativi NON devono scrivere: nelle cartelle di sistema: Program Files, Windows, System32 nel registry sotto le key HKLM / HKCR A partire da Vista le operazioni di scrittura sono virtualizzate Solo se l'applicazione non ha un manifest Solo se il token contiene il flag "Virtualization Enabled" Solo su macchine a 32 bit User mode kernel mode Luafv.sys Ntfs.sys Applicazione Legacy Applicazione Legacy \Windows\App.ini \Users\ \AppData\Local\ VirtualStore\Windows\App.ini \Windows\App.ini Access Denied \Windows\App.ini Access Denied Applicazione Vista Applicazione Vista File System
Blog
È una struttura dati, tipicamente inserita nelle risorse dell'eseguibile che permette di informare il sistema operativo se è opzionale o necessario che il processo sia elevato Visual Studio gestisce i manifest sia in progetti VC++ che.NET A partire da Vista esiste la sezione requestedElevationLevel che può assumere tre valori: asInvoker: Assume i diritti dell'utente highestAvailable: richiede l'elevazione se l'utente è amministratore, non la richiede se l'utente è solo user requireAdministrator: richiede sempre l'elevazione
Blog A partire da Windows 7 esiste la sezione CompatibilityInfo Indica la versione di Windows per cui è stata studiata l'applicazione Windows 7 cambia il comportamento di servizi/api a seconda del manifest API: GetOverlappedResult API: ReadFileEx RPC: exception handling RPC: Thread pool management Desktop Windows Manager: Fail/Lock bit blitting Le applicazioni prive di CompatibilityInfo saranno considerate "legacy" dal sistema operativo Quelle funzionalità di API/RPC/DWM saranno come su Windows Vista
Blog Afferma la necessità che laccesso ad una risorsa deve essere 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
Blog Button SendMessage(GetDlgItem(hWnd, IDOK), BCM_SETSHIELD, 0, TRUE); Hyperlink Mettere un'icona IDI_SHIELD vicino Menu contestuali IContextMenu ha il supporto specifico per il Shield Menu di Popup Ricavare l'icona da SHSTOCKICONINFO e disegnarla
Blog L'architettura di Winlogon e sessioni è cambiata Nuovi credential provider nel processo di logon Isolamento della "Session 0" L'interattività con il desktop deve essere evitata Nuovo servizio di Interattività per facilitare la migrazione Nuove API COM per pilotare il Firewall Service Restart Policy limitata a 3 restart Protected Mode di Internet Explorer I plugin devono essere testati e tenere conto degli integrity levels MSMQ Client per Windows 2000 non più disponibile
Blog Informazioni su Windows 7 Provate Windows 7 beta 1 Windows Developer Center Windows 7 Developer Guide Download di Windows SDK 7.0 beta 1 A-FC B67E-46BAB7C5226C&displaylang=en Windows 7 Application Quality Cookbook Integrity Levels e UIPI windows-vista-integrity-levels-parte-1.aspx
©2009 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.