Best practices per lo sviluppo di applicazioni per windows 7 e windows vista l.jpg
This presentation is the property of its rightful owner.
Sponsored Links
1 / 27

Best practices per lo sviluppo di applicazioni per Windows 7 e Windows Vista PowerPoint PPT Presentation


  • 111 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Best practices per lo sviluppo di applicazioni per windows 7 e windows vista l.jpg

Best practices per lo sviluppodi applicazioni perWindows 7 e Windows Vista

Raffaele Rialdi

Email: [email protected]

Blog: http://blogs.ugidotnet.org/raffaele

Profilo: https://mvp.support.microsoft.com/profile/raffaele


Windows versione 6 0 e 6 1 l.jpg

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


Fase 1 riduzione dei privilegi l.jpg

Fase 1:Riduzione dei privilegi


Il token l.jpg

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


La logon in vista e 2008 l.jpg

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)


Il token restricted l.jpg

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


Tools per risolvere i problemi con low user account l.jpg

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


Elevare un processo da codice l.jpg

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);


Elevare un oggetto com da codice l.jpg

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


Integrity levels l.jpg

http://blogs.ugidotnet.org/raffaele/

archive/2009/01/27/windows-vista-integrity-levels-parte-1.aspx

Integrity Levels


Integrity levels abc l.jpg

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


Cosa pu fare un processo l.jpg

Cosa può fare un processo?

Low

Medium

High

Processi

ProcessoMedium

Low

Medium

High

Oggetti

Read + Write

Read


Integrity levels degli utenti noti l.jpg

Integrity levels degli utenti 'noti'


Slide14 l.jpg

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


Fase 2 dove mettere configurazioni e dati l.jpg

fASE 2:Dove mettereConfigurazioni e dati?


Setup dell applicazione l.jpg

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


Configurazioni e dati applicativi l.jpg

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\...


La virtualizzazione di file e registry l.jpg

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


Virtualizzazione ntfs l.jpg

Demo

virtualizzazione ntfs


Fase 3 best practices l.jpg

FASE 3:Best practices


Il manifest l.jpg

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>


Manifest e windows 7 l.jpg

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>


Il principio del least privilege l.jpg

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


Lo shield l.jpg

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


Altre l.jpg

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


Per concludere l.jpg

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


Slide27 l.jpg

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


  • Login