La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Jean-Yves Poublan Microsoft France

Présentations similaires


Présentation au sujet: "Jean-Yves Poublan Microsoft France"— Transcription de la présentation:

1 Jean-Yves Poublan Microsoft France
User Account Control Développement des applications Windows Vista dans le respect d’UAC Jean-Yves Poublan Microsoft France

2 UAC – User Account Control C'est quoi?
Moindre privilège par défaut Exécution en tant qu'utilisateur standard même si on est membre des administrateurs Mécanismes Ouverture de session interactive en mode restreint Passage en mode élevé avec consentement Contrôle via niveaux d'intégrité Virtualisation des ressources pour les applications "legacy" Généraliser l'utilisation du poste de travail Windows Vista en mode non privilégié ("non admin" ou "utilisateur standard") L'objectif est la protection du système contre: Actions accidentelles Actions malveillantes Windows Vista s'est lui-même adapté pour permettre/encourager une utilisation en tant que Standard User Visualiser l'horloge système et calendrier Positionner le fuseau horaire Configurer WEP (Wired Equivalent Privacy ) Modifier la configuration du power management Ajout d'imprimantes et autres dispositifs pour lesquels les pilotes ont étés installés ou approuvés par une Group Policy Installation de contrôles ActiveX à partir de sites Web approuvés par l'administrateur Création et configuration de connections VPN Installation des mises à jour Windows Update critiques

3 Jeton filtré Local Security Authority (LSA) vérifie les credentials
Administrateur ouvre une session avec l'IHM de winlogon Local Security Authority (LSA) vérifie les credentials Jeton administrateur Windows XP 1.Examination du jeton pour privilèges élevés Lancement d'explorer.exe Lancement d'explorer.exe Jeton filtré Windows Vista 2. Privilèges élevés sont retirés du jeton

4 Jeton filtré Il y a création de deux sessions de logon (LUID) et jetons (token) correspondant Jeton normal Jeton filtré (privilèges de l'utilisateur standard) Les jetons sont liés GetTokenInformation(TokenLinkedToken, & TOKEN_LINKED_TOKEN) Lors d'une ouverture des session interactive (interactive logon - LogonUser): Administrateur (AAM – Admin Approval Mode) Deux sessions Jeton normal (élevé) et jeton filtré Utilisateur standard (OTS – Over The Shoulder) Une session Utilisateur standard avec privilèges supplémentaires "non sensibles" Jeton normal (avec ces privilèges supplémentaires) Exemple: SeSystemtimePrivilege Utilisateur avec privilèges supplémentaires jugés "sensibles" Jeton normal (avec tous les privilèges) et jeton filtré, mais seuls les privilèges "sensibles" sont retirés Exemple: SeImpersonatePrivilege Terminologie: Administrateur = utilisateur qui est administrateur Le builtin administrateur n'est pas sujet à UAC et ne reçoit qu'un jeton non filtré avec pleins privilèges. Configurable par policy

5 Démo Outils 4/2/2017 1:53 PM Whoami Logonsessions Procexp
© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

6 Jeton filtré Plus précisément
Administrateur = posséder l'un de ces groupes: DOMAIN_GROUP_RID_ADMINS DOMAIN_GROUP_RID_CONTROLLERS DOMAIN_GROUP_RID_CERT_ADMINS DOMAIN_GROUP_RID_SCHEMA_ADMINS DOMAIN_GROUP_RID_ENTERPRISE_ADMINS DOMAIN_GROUP_RID_POLICY_ADMINS DOMAIN_ALIAS_RID_ADMINS DOMAIN_ALIAS_RID_POWER_USERS DOMAIN_ALIAS_RID_ACCOUNT_OPS DOMAIN_ALIAS_RID_SYSTEM_OPS DOMAIN_ALIAS_RID_PRINT_OPS DOMAIN_ALIAS_RID_BACKUP_OPS DOMAIN_ALIAS_RID_RAS_SERVERS DOMAIN_ALIAS_RID_PREW2KCOMPACCESS DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS DOMAIN_ALIAS_RID_CRYPTO_OPERATORS Ces RIDs sont inclus dans le jeton filtré, mais marqués comme USE_FOR_DENY_ONLY USE_FOR_DENY_ONLY = l'obtention d'un accès à une ressource ne peut se faire par vertu de l'appartenance au groupe.

7 Jeton filtré Plus précisément
Privilèges jugés "sensibles" SeCreateTokenPrivilege SeTcbPrivilege SeTakeOwnershipPrivilege SeBackupPrivilege SeRestorePrivilege SeDebugPrivilege SeImpersonatePrivilege SeRelabelPrivilege SeLoadDriverPrivilege

8 Jeton filtré Plus précisément
UAC affecte LogonUser(LOGON32_LOGON_INTERACTIVE) Les autres ouvertures de session via LogonUser (Réseau, Batch, Service, Réseau texte clair) ne sont pas affectées et ne reçoivent qu'un jeton seul jeton – en principe non filtré Cas de l'accès distant Mesure contre le loopback La session réseau distante est dotée d'un jeton filtré lorsque l'utilisateur est un compte local membre du groupe des administrateurs (de la machine distante) Clé de registre LocalAccountTokenFilterPolicy=1 pour désactiver ce filtrage Peut être nécessaire pour administrer une machine Workgroup à distance On ne peut administrer une machine à distance avec un compte local à la machine, il faut utiliser un compte du domaine Par défaut, le compte Builtin\Administrator n'est pas affecté par UAC Configurable par Security Policy SSPI – "LUA Remote" En principe, le jeton "filtre" du SSPI ne contient pas de lien vers un jeton plein privileges (il n'y a qu'une session de logon). Dans ce cas, une élévation "à la UAC" n'est techniquement pas possible. (vérification à faire) Un processus ayant suffisamment de privilèges (principalement SeImpersonatePrivilege) pourrait: LogonUser – retourne le jeton filtré GetTokenInformation(TOKEN_LINKED_TOKEN) pour obtenir le jeton non filtré ImpersonateLoggedonUser(avec jeton non filtré) Ou - CreateProcessAsUser(avec jeton non filtré)

9 Développement d'une application
Concevoir, développer et tester pour le mode utilisateur standard, non admin Si une application fonctionne correctement en mode utilisateur standard sous Windows XP, il y a de fortes chances qu'elle fonctionnera correctement avec UAC Outils SUA LUA Buglight

10 S'exécuter en mode non admin
Problèmes fréquents Accès en écriture aux ressources non accessibles aux utilisateurs standard Program Files HKEY_LOCAL_MACHINE Création/Ouverture d'une ressource avec plus de droits que nécessaire Même si on n'utilise pas ces droits Mauvaise utilisation des dossiers pour stocker données et états de l'application Attention a MAXIMUM_ALLOWED

11 Sauvegarde données/états Recommandations
Données de l'utilisateur \Users\<username>\ par type de données "Documents", "Pictures", etc… %userprofile% L'utilisateur utilise ces données "directement" Créer sous-dossier, ou nouvelle catégorie si nécessaire Données de l'application (état) par utilisateur E.g. settings par utilisateur Utilisateur n'interagit pas "directement" avec ces données Spécifiques à la machine \Users\<Username>\Appdata\Local %localappdata% HKCU Pour l'utilisateur quelque soit la machine \Users\<Username>\Appdata\Roaming %appdata%

12 Sauvegarde données/états Recommandations
Données partagées entre utilisateurs \Users\Public\ par type de données "Documents", "Pictures", etc… %public% Interaction "directe" des utilisateurs Configuration initiale de l'application lors de l'installation pour cette machine (affecte tous les utilisateurs) Administrateur seulement pour écriture HKLM \ProgramData\ %allusersprofile% E.g. Shortcuts du menu Démarrer pour tous les utilisateurs L'utilisateur n'interagit pas avec ces données %AllUsersProfile% (\ProgramData – anciennement \Documents and Settings\All Users)

13 S'exécuter en mode non admin
Ne pas coder les chemins en dur, mais utiliser le système pour localiser les dossiers Variables d'environnement %userprofile%, %localappdata%, %appdata%, %public% Environment.GetEnvironmentVariable() Special folders SHGetFolderPath(CSIDL_APPDATA) Environment.GetFolderPath(), Environment.SpecialFolder Continue à fonctionner sous Vista, même si les noms ("MyDocuments") ne sont plus bon => équivalences ("Documents") Known folders Nouveau sous Vista pour prendre en compte la nouvelle interface de l'explorer SHGetKnownFolderPath() IKnownFolderManager "Rely on the operating system to find a file for you, rather than hard coding the file locations as part of the application" Voir Kenny Kerr pour les known folders: Ainsi qu'exemple du SDK Windows: Samples\winui\Shell\AppPlatform\ExplorerBrowserControl

14 Chemins de sauvegarde données d'état Tableau de synthèse
Variable environnement Special Folder Known Folder Chemin Recommandation d'usage %userprofile% - \Users\<username> Profil – Données par utilisateur %appdata% ApplicationData AppData AppData\Roaming Etat par utilisateur - indépendant de la machine %localappdata% LocalApplicationData Local AppData AppData\Local Etat par utilisateur - spécifique pour cette la machine %public% - Public \Users\Public Données/états partagés entre utilisateurs %allusersprofile% CommonApplicationData Common AppData \ProgramData Configuration par machine lors de l'installation (pas d'accès en écriture utilisateur standard) Pre Vista/Longhorn: ALLUSERSPROFILE=C:\Documents and Settings\All Users APPDATA=C:\Documents and Settings\jyp\Application Data HOMEPATH=\Documents and Settings\jyp TEMP=C:\DOCUME~1\aaron\LOCALS~1\Temp TMP=C:\DOCUME~1\aaron\LOCALS~1\Temp USERPROFILE=C:\Documents and Settings\jyp Vista/Longhorn: ALLUSERSPROFILE=C:\ProgramData APPDATA=C:\Users\aaronp\AppData\Roaming HOMEPATH=\Users\jyp LOCALAPPDATA=C:\Users\jyp\AppData\Local ProgramData=C:\ProgramData PUBLIC=C:\Users\Public TEMP=C:\Users\jyp\AppData\Local\Temp TMP=C:\Users\jyp\AppData\Local\Temp USERPROFILE=C:\Users\jyp

15 Vista Bridge Samples VistaBridge class KnownFolders class UACManager
Wrappers managés pour nouvelles API Vista non encore disponibles .Net Framework 2.0 Fait partie de Windows SDK .NET Framework 3.0 Samples Dans le package CrossTechnologySamples.exe class KnownFolders Gestion des known folders Vista class UACManager ShellExecute CoCreateAsAdmin

16 Démo Analyse d'un programme 4/2/2017 1:53 PM
© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

17 Inclure un manifeste <?xml version="1.0" encoding="utf-8" ?>
<assembly xmlns="urn:schemas-microsoft-com:as mv.v1" manifestVersion="1.0"> <assemblyIdentity version=" " processorArchitecture="X86" name="AppName" type="win32" /> <description>App Description</description> <trustInfo xmlns="urn:schemas-microsoft.com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" /> </requestedPrivileges> </security> </trustInfo> </assembly>

18 Manifeste requestedExecutionLevel
asInvoker Application testée pour non-admin requireAdministrator Prompt selon policy, si nécessaire ouverture session logon admin Pas d'exécution sans admin (AAM ou OTS) highestAvailable Application sera lancée avec jeton non-filtré, si disponible Prompt selon policy, mais pas de changement d'identité (pas d'OTS) Un manifeste est nécessaire et utile pour Permettre à un programme nécessitant mode admin de n'être exécuté que dans ce mode Permettre au shell d'ajouter le bouclier en surimpression à l'icône du programme Permettre à un programme de se soustraire à la virtualisation Etc…

19 Inclure un manifeste Visual Studio 2005
Assez direct avec un projet VC++ "Additional Manifest Files" Un peu plus compliqué avec un projet VC# Créer fichier manifeste <appname>.exe.manifest Rajouter fichier de ressources au projet <appname>.rc et y inclure référence au manifeste #define RT_MANIFEST 24 #define APP_MANIFEST 1 APP_MANIFEST RT_MANIFEST <appName>.exe.manifest Compiler le fichier de ressource avec un "pre-build event" “<path to SDK>\rc.exe” $(ProjectDir)$(ProjectName).rc Rajouter la ressource compilée au script du projet à la main Unloader le projet et ouvrir le fichier .csproj avec l'éditeur, puis rajouter l'élément MSBuild suivant: <PropertyGroup> <Win32Resource>appName.res</Win32Resource> </PropertyGroup>

20 4/2/2017 1:53 PM Démo Manifeste © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

21 Elévation de privilège Principes
Une application peut avoir besoin de s'exécuter pour tout ou partie en mode admin UAC contrôle et prend charge l'élévation de privilège L'élévation (le passage d'un jeton filtré à un jeton non filtré) se produit toujours à une frontière de processus Elévation = création d'un nouveau processus On a donc deux types processus ou applications Processus s'exécutant avec le jeton filtré (moindre privilège) Processus élevé, s'exécutant avec le jeton non filtré

22 Elévation de privilège Principes
Conditions pour lesquelles UAC va effectuer une élévation de privilège (lancer le processus avec le jeton non filtré) Indication explicite du manifeste (embarqué, ou externe) L'exécutable se trouve dans la base de compatibilité des applications Vista Intégrée à l'OS L'exécutable est détecté comme étant un programme d'installation Demande explicite du processus parent ShellExecute avec verbe "runas" E.g. Explorer.exe - click droit "Run as administrator" ou propriétés de la shortcut Moniker d'élévation COM avec CoGetObject CreateProcess Sous XP, le verbe "runas" cree un token restreint… Kenny Kerr wrote: If on the other hand you want to create an elevated process regardless of what application information is available then you can specify the little-known “runas” verb with ShellExecute. This has the effect of requesting elevation regardless of what an application’s manifest and compatibility information might prescribe. The runas verb is not actually new to Windows Vista. It was available on Windows XP and Windows 2003 and was often used to create a restricted token directly from the shell. This behavior has however changed. Here is a simple example: ::ShellExecute(0, // owner window                L"runas",                L"C:\\Windows\\Notepad.exe",                0, // params                0, // directory                SW_SHOWNORMAL); Sous Windows XP Commande Runas puis "Current User/Protect my computer" (Windows XP) Désactive Administrator – use for deny only NT AUTHORITY\RESTRICTED (S ) dans les Restricted SIDs, mais pas le SID de l'utilisateur Le code ne peut accéder aux ressources de l'utilisateur (profil) Peut accéder en lecture seule a HKLM/HKCU de par l'ACE pour RESTRICTED API SAFER - SaferComputeTokenFromLevel (utilisée par DropMyRights)

23 Elévation de privilège Principes - ShellExecute
RAiLaunchAdminProcess(child.exe) CreateProcessAsUser(child.exe) parent.exe AppInfo Service child.exe 2. RPC ShellExecute Consent.exe 1. ERROR_ELEVATION_REQUIRED 3. Nouveau parent CreateProcess Bernard Ourghanlian: ShellExecute appelle CreateProcess. CreateProcess appelle "Fusion" (examination du manifeste), "AppCompat" (consultation de la base de compatibilité des applications, et "Strongbox" (détection de programme d'installation) pour voir si l’un quelconque de ces mécanismes identifie l’application comme requérant une élévation de privilèges. CreateProcess appelle NtCreateProcess avec un nouveau drapeau indiquant que l’application a besoin d’être exécutée avec un niveau de privilège élevé. Si ce drapeau est positionné, NtCreateProcess contrôle si l’appelant a le privilège SeTcbPrivilege ; si non, l’appel est rejeté avec une erreur CreateProcess retourne cette erreur ShellExecute examine spécifiquement ce type d’erreur pour, lors de la réception de ce statut, appeler le nouvel Application Information Service (voir plus loin) pour tenter une exécution avec des privilèges élevés Utilisateur standard Local System Administrateur

24 Elévation de privilège
4/2/2017 1:53 PM Démo Elévation de privilège © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

25 Élévation de code Le bouclier
Indique que l'action nécessite une élévation Toute demande d'élévation doit être prévisible et corrélée à une action indiquée par le bouclier Si l'application est marquée requireAdministrator, le shell affiche l'icône avec le bouclier en surimpression Toute demande d'élévation non corrélée à une action précédente immédiate sur un élément reconnaissable par le bouclier doit être considérée comme suspecte L'icône du bouclier est le standard pour indiquer que l'action nécessitera les droits d'admin Windows Vista offre des mécanismes pour facilement rajouter le bouclier sur les éléments de l'interface homme machine

26 Élévation de code Rajouter le bouclier
Boutons C++ SendMessage(GetDlgItem(hWnd, IDOK), BCM_SETSHIELD, 0, TRUE); Macro (commctrl.h) Button_SetElevationRequiredState(hwndButton, fRequired); C# Attention: this.button1.FlatStyle=System.Windows.Forms.FlatStyle.System; Menus Un peu plus compliqué – voir littérature [DllImport("user32.dll")] public extern static int SendMessage(IntPtr hwnd, uint msg, uint wParam, uint lParam); private const uint BCM_FIRST = 0x1600; private const uint BCM_SETSHIELD = BCM_FIRST + 0x000c; public static int Button_SetElevationRequiredState(IntPtr hwnd) { return SendMessage(hwnd, BCM_SETSHIELD, 0, 1); }

27 Démo Métaphore du bouclier 4/2/2017 1:53 PM
© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

28 Signature Authenticode
Permet d'identifier l'origine du code et de s'assurer de son intégrité pour le consentement UAC Policy: Only elevate executables that are signed and validated Par défaut: disabled

29 Signature IHM consentement Avec signature Sans signature
Application système

30 Signature A intégrer dans le processus de développement/production
Nécessite planification Whitepaper Code Signing Best Practices Signature de test Obtenir un certificat de signature auprès d'une CA ou générer un certificat auto-signé de test makecert -r -pe -ss My -n "CN=<company name>" <certfile>.cer Signer le code signtool signwizard Rajouter le certificat dans le magasin des racines de confiance Vérifier la signature signtool verify /pa /v <exefile> Commandes de signature peuvent être intégrées dans les étapes "post-build" d'un projet VS

31 Signature d'un exécutable
4/2/2017 1:53 PM Démo Signature d'un exécutable © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

32 Niveaux d'intégrité Les niveaux d'intégrité sont définis par le biais de SIDs appelés "Label SID" Low S (0x1000) – Protected Mode IE Medium S (0x2000) – Applications utilisateur High S (0x3000) – Processus élevé par UAC System S (0x4000) - Local System/Local Service Positionnés sur le jeton Niveau d'intégrité du code Positionnés sur les ressources (SACL) Niveau d'intégrité des ressources Règle de la dominance

33 Niveaux d'intégrité Contrôle d'accès – Politique No-Write-Up
Ressources No-Write-Up High Utilisateur Medium Jeton niveau MEDIUM Pas d’écriture vers le haut (No Write-Up) Lecture sans restriction : Sauf pour les processus en tant qu’objet ; isolation des processus. No Read-up pour les processus. Low Jeton niveau LOW Lecture Ecriture

34 Niveaux d'intégrité Contrôle d'accès – Politique No-Read-Up
Objets process, thread, token No-Write-Up/No-Read-Up High Utilisateur Medium Jeton niveau MEDIUM Pas d’écriture vers le haut (No Write-Up) Lecture sans restriction : Sauf pour les processus en tant qu’objet ; isolation des processus. No Read-up pour les processus. Low Jeton niveau LOW Lecture Ecriture

35 Niveaux d'intégrité Windows Integrity Mechanism
Utilisé par UIPI (User Interface Privilege Isolation ) Une application de niveau inferieur ne peut pas Faire SendMessage ou PostMessage vers un processus de plus haut niveau Utiliser des hooks pour monitorer un processus de plus haut niveau Procéder à l'injection d'une DLL dans un processus de plus haut niveau Prévention des "shatter attacks" Cependant, certaines ressources sont toujours partagées entre processus de différents niveaux Desktop Windows, Desktop heap read-only shared memory, Global Atom table, Clipboard

36 Compatibilité Virtualisation
Permet à un programme "legacy" nécessitant droits d'admin de continuer à fonctionner avec UAC Beaucoup d'applications "legacy" fonctionnent correctement en mode utilisateur standard si ce n'est pour leurs accès en écriture à HKLM\Software et %ProgramFiles% Solution: rediriger ces accès vers des zones "per user" accessibles sans droits d'admin Initiative temporaire Non disponible pour les applications 64 bits Si manifeste => la virtualisation n'est pas effective Configurable par policy (enabled/disabled)

37 Configuration d'UAC Secpol.msc - Local policies – Security Options
UAC est désactivable - Activé par défaut Ensemble des administrateurs en Admin Approval Mode Enabled/Disabled Autres policies Mode d’approbation de l’administrateur builtin Prompt pour l’élévation de privilège des administrateurs Consent/Credentials/No prompt Prompt pour l’élévation de privilège pour les utilisateurs standards Credentials/No prompt(denial) Détection des programmes d'installation Ne permettre l'élévation que des applications ayant une signature valide Ne permettre l'élévation des applications UIAccess que si elles sont installées dans répertoire sûr Basculer vers un desktop sécurisé pour le prompt d' élévation Virtualisation des fichiers / de la base de registre Admin Approval Mode Over the shoulder

38 Synthèse des recommandations
Une bonne application Windows Vista/UAC Est conçue et testée pour un fonctionnement non-admin si possible Comporte un manifeste indiquant son niveau d'exécution requis Sauvegarde ses paramètres par utilisateur dans les dossiers/clés de registre dédiés à cet effet Ne demande pas plus de droits que nécessaire Factorise les fonctions nécessitant élévation dans un exécutable séparé, et utilise le paradigme du bouclier pour la gestion de l'IHM Comporte une signature Authenticode pour ses binaires Effectue sa configuration initiale "par machine" lors de l'installation et non lors de la première exécution Fait levier sur la technologie MSI 4.0 pour son installation Obtient le logo Windows Vista

39 Références Whitepaper UAC Vista – MSDN Whitepaper UAC Vista – Technet
Version finale – pour téléchargement (Format Word) Version précédente (Beta 1) Whitepaper UAC Vista – Technet COM elevation moniker Blog Kenny Kerr Blog Jim Allchin

40 Votre potentiel, notre passion TM
4/2/2017 1:53 PM Votre potentiel, notre passion TM © 2007 Microsoft France © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Télécharger ppt "Jean-Yves Poublan Microsoft France"

Présentations similaires


Annonces Google