1 / 27

Best practices per lo sviluppo di applicazioni per Windows 7 e Windows Vista

Best practices per lo sviluppo di applicazioni per Windows 7 e Windows Vista. Raffaele Rialdi. Email: malta@vevy.com Blog: http://blogs.ugidotnet.org/raffaele Profilo: https://mvp.support.microsoft.com/profile/raffaele. Windows versione 6.0 e 6.1.

vadin
Download Presentation

Best practices per lo sviluppo di applicazioni per Windows 7 e Windows Vista

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Best practices per lo sviluppodi applicazioni perWindows 7 e Windows Vista Raffaele Rialdi Email: malta@vevy.com Blog: http://blogs.ugidotnet.org/raffaele Profilo: https://mvp.support.microsoft.com/profile/raffaele

  2. Windows versione 6.0 e 6.1 • 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

  3. Fase 1:Riduzione dei privilegi

  4. Il token • È 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

  5. La Logon in Vista e 2008 2. Creazione token Administrator 1. Logon LSA (LSALogonUser) 4. Token 3. Rimozione privilegi Primary Token(restricted) Linked Token(full) Explorer.exe (token restricted)

  6. Il token restricted • 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 Token full Token restricted SeShutdownPrivilege SeChangeNotifyPrivilege SeUndockPrivilege SeIncreaseWorkingSetPrivilege SeTimeZonePrivilege SeIncreaseQuotaPrivilege SeMachineAccountPrivilege SeSecurityPrivilege SeTakeOwnershipPrivilege SeLoadDriverPrivilege SeSystemProfilePrivilege SeSystemtimePrivilege SeProfileSingleProcessPrivilege SeIncreaseBasePriorityPrivilege SeCreatePagefilePrivilege SeBackupPrivilege SeRestorePrivilege SeShutdownPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeChangeNotifyPrivilege SeRemoteShutdownPrivilege SeUndockPrivilege SeManageVolumePrivilege SeImpersonatePrivilege SeCreateGlobalPrivilege SeIncreaseWorkingSetPrivilege SeTimeZonePrivilege SeCreateSymbolicLinkPrivilege

  7. Tools per risolvere i problemicon Low User Account • LUA Buglight (A. Margosis) • http://blogs.msdn.com/aaron_margosis/archive/2008/06/13/lua-buglight-2-0-preview.aspx • Standard User Analyzer • Parte dell'Application Compatibility Toolkit - ACT 5.0 • http://www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&displaylang=en • Process Monitor (FileMon + RegMon) • Sul sito di SysInternals (ora diventato Technet) • Application Verifier (codice nativo C++) • http://msdn.microsoft.com/en-us/library/ms220931.aspx

  8. Elevare un processo da codice • 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 processoL'informazione di elevazione viene ricavata: • Dal manifest embedded o esterno • Nel database 'application compatibility' (registry) • Ricerca euristica di un installer C# Process p = new Process(); ProcessStartInfo psi = new ProcessStartInfo(@ "cmd.exe"); psi.UseShellExecute = true; psi.Verb = "runas"; p.StartInfo = psi; p.Start(); C++ 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);

  9. Elevare un oggetto COM da codice • 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 = <nome> • 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: • http://msdn.microsoft.com/en-us/library/ms679687.aspx

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

  11. Integrity Levels ABC • 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

  12. Cosa può fare un processo? Low Medium High Processi ProcessoMedium Low Medium High Oggetti Read + Write Read

  13. Integrity levels degli utenti 'noti'

  14. UIPI • 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

  15. fASE 2:Dove mettereConfigurazioni e dati?

  16. Setup dell'applicazione • 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

  17. Configurazioni e Dati applicativi • 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\...

  18. La virtualizzazione di file e registry • 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 File System User mode Applicazione Vista Applicazione Legacy \Windows\App.ini kernel mode Luafv.sys Ntfs.sys \Windows\App.ini Access Denied \Users\<user>\AppData\Local\VirtualStore\Windows\App.ini

  19. Demo virtualizzazione ntfs

  20. FASE 3:Best practices

  21. Il Manifest • È 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 <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges><requestedExecutionLevel level='requireAdministrator' uiAccess='false' /> </requestedPrivileges> </security> </trustInfo></assembly>

  22. Manifest e Windows 7 • 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 • <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> • <application> • <supportedOS Id="{77777777-7777-7777-7777-777777777777}"/> • <supportedOS Id="{66666666-6666-6666-6666-666666666666}"/> • </application> • </compatibility>

  23. Il principio del least-privilege • Afferma la necessità che l’accesso 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

  24. Lo shield • 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

  25. Altre • 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

  26. Per concludere • Informazioni su Windows 7 • http://www.microsoft.com/windows/windows-7 • Provate Windows 7 beta 1 • http://msdn.microsoft.com/en-us/dd353271.aspx • Windows Developer Center • http://msdn.microsoft.com/windows • Windows 7 Developer Guide • http://msdn.microsoft.com/en-us/library/dd371748(VS.85).aspx • Download di Windows SDK 7.0 beta 1 • http://www.microsoft.com/downloadS/details.aspx?familyid=A91DC12A-FC94-4027-B67E-46BAB7C5226C&displaylang=en • Windows 7 Application Quality Cookbook • http://code.msdn.microsoft.com/Windows7AppQuality • Integrity Levels e UIPI • http://blogs.ugidotnet.org/raffaele/archive/2009/01/27/ windows-vista-integrity-levels-parte-1.aspx

  27. © 2009 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.

More Related