Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur...

41
Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR

Transcript of Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur...

Page 1: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Protéger ses applications contre l'élévation de privilèges

Protéger ses applications contre l'élévation de privilèges

Nicolas RUFFIngénieur-Chercheur

EADS-CCR

Page 2: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Introduction

Les enjeux de la sécurité localeLes enjeux de la sécurité localeQui peut vouloir élever ses privilèges ?Qui peut vouloir élever ses privilèges ?

Les virus exécutés par des utilisateurs non administrateursLes virus exécutés par des utilisateurs non administrateursLes utilisateurs des terminaux en libre serviceLes utilisateurs des terminaux en libre serviceLes utilisateurs de clients légers (type Terminal Server)Les utilisateurs de clients légers (type Terminal Server)

Dans l'idéal, l'utilisateur ne devrait pas être Dans l'idéal, l'utilisateur ne devrait pas être administrateur local de son posteadministrateur local de son poste

Microsoft en a pris conscience et travaille sur des solutionsMicrosoft en a pris conscience et travaille sur des solutionsCommande RunAsCommande RunAsJeton "Restricted"Jeton "Restricted"Groupe "network operators" pour les nomadesGroupe "network operators" pour les nomadesVisual Studio 2005Visual Studio 2005

Rappel : il n'est pas nécessaire d'être administrateur local Rappel : il n'est pas nécessaire d'être administrateur local pour déboguer un processus !pour déboguer un processus !

Page 3: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Objectifs de la présentation

Présenter les erreurs "classiques" dans Présenter les erreurs "classiques" dans les applicationsles applications

Méthodes d'élévation de privilègesMéthodes d'élévation de privilègesUtilisateur -> AdministrateurUtilisateur -> AdministrateurAdministrateur -> SYSTEMAdministrateur -> SYSTEM

Avec des exemples issus de cas réelsAvec des exemples issus de cas réels

Donner des solutionsDonner des solutionsEn général simplesEn général simplesMais requièrent la plus grande attentionMais requièrent la plus grande attention

Un simple guillemet oublié peut ouvrir une Un simple guillemet oublié peut ouvrir une faille !faille !

Page 4: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Plan

HypothèsesHypothèsesTechniques d'élévation de privilègesTechniques d'élévation de privilèges

L'interface graphiqueL'interface graphiqueLes interfaces de communicationsLes interfaces de communications

Canaux nommésCanaux nommésLPCLPCDiversDiversRecommandations généralesRecommandations générales

L'ordre de recherche des exécutablesL'ordre de recherche des exécutables

ConclusionConclusionBibliographieBibliographieRemerciementsRemerciements

Page 5: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Hypothèses

Les attaques physiques sont exclues de Les attaques physiques sont exclues de l'étudel'étude

Si l'utilisateur peut redémarrer le poste sur un Si l'utilisateur peut redémarrer le poste sur un support externe, il pourra en prendre le contrôlesupport externe, il pourra en prendre le contrôle

ExemplesExemplesSupports bootables : CD, disquette, clé USB, disque Supports bootables : CD, disquette, clé USB, disque FireWire, …FireWire, …

Outils : BartPE, ERD Commander, Auditor, …Outils : BartPE, ERD Commander, Auditor, …

Le système est protégé "à l'état de l'art"Le système est protégé "à l'état de l'art"En particulier, à jour des correctifs de sécuritéEn particulier, à jour des correctifs de sécurité

Page 6: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique

Page 7: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (1/10)

ContexteContexteUne famille d'attaques appelée "shatter attacks"Une famille d'attaques appelée "shatter attacks"

"Découverte" en 2002 (?)"Découverte" en 2002 (?)

Conditions d'existenceConditions d'existenceUn "objet" (en général graphique) …Un "objet" (en général graphique) …

… … appartient à un processus privilégié (ex. SYSTEM)appartient à un processus privilégié (ex. SYSTEM)

… … accepte des messages provenant d'un processus accepte des messages provenant d'un processus utilisateurutilisateur

… … crée des processus ou redirige son flot d'exécution en crée des processus ou redirige son flot d'exécution en fonction du contenu d'un messagefonction du contenu d'un message

Volontairement (ex. WM_TIMER)Volontairement (ex. WM_TIMER)

Involontairement (ex. "buffer overflow")Involontairement (ex. "buffer overflow")

Page 8: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (2/10)

Exemple n°1 (trivial mais vrai)Exemple n°1 (trivial mais vrai)Un processus SYSTEM affiche une popupUn processus SYSTEM affiche une popup

L'utilisateur presse F1L'utilisateur presse F1

Dans le menu d'aide il choisit "Jump to url … Dans le menu d'aide il choisit "Jump to url … CMD.EXE"CMD.EXE"

Le shell qui apparaît est SYSTEMLe shell qui apparaît est SYSTEM

Cf. UTILMAN.EXE, qui peut être invoqué en Cf. UTILMAN.EXE, qui peut être invoqué en appuyant 5 fois sur la touche "shift"appuyant 5 fois sur la touche "shift"

Corrigé par MS03-025Corrigé par MS03-025

Cf. lien vers NOTEPAD dans la fenêtre de logonCf. lien vers NOTEPAD dans la fenêtre de logonCorrigé par MS06-009Corrigé par MS06-009

Page 9: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (3/10)

Exemple n°2 : les fonctions de callbackExemple n°2 : les fonctions de callbackMessage WM_TIMER envoyé à une fenêtreMessage WM_TIMER envoyé à une fenêtre

WPARAM TimerID, LPARAM lpfnCallbackWPARAM TimerID, LPARAM lpfnCallback

La fonction de callback est appelée avec les droits La fonction de callback est appelée avec les droits de la ciblede la cible

Sauf si le message est intercepté par l'application (rare)Sauf si le message est intercepté par l'application (rare)

Comportement corrigé par MS02-071Comportement corrigé par MS02-071Mais il existe d'autres messages utilisant des fonctions de Mais il existe d'autres messages utilisant des fonctions de CallbackCallback

Ex. LVM_SORTITEMS, LVM_SORTITEMSEX, Ex. LVM_SORTITEMS, LVM_SORTITEMSEX, EM_SETWORDBREAKPROCEM_SETWORDBREAKPROC

Page 10: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (4/10)

Exemple n°3 : les pointeurs de donnéesExemple n°3 : les pointeurs de donnéesCertains messages fournissent un pointeur vers la Certains messages fournissent un pointeur vers la zone de sortie des résultatszone de sortie des résultatsIl est alors possible d'écrire dans la mémoire avec Il est alors possible d'écrire dans la mémoire avec les droits de la cibleles droits de la cible

Ex. message HDM_GETITEMRECTEx. message HDM_GETITEMRECTlParam pointe vers une structure de type RECTlParam pointe vers une structure de type RECT

Attaque réelle sur les styles Windows XPAttaque réelle sur les styles Windows XP"CommCtrl 6.0 Button Shatter Attack""CommCtrl 6.0 Button Shatter Attack"

Cette attaque est en général "multi-stages"Cette attaque est en général "multi-stages"Un message met en place la structure cibleUn message met en place la structure cibleUn autre message provoque l'écritureUn autre message provoque l'écriture

Page 11: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (5/10)

Exemple n°4 : pointeurs de fonction Exemple n°4 : pointeurs de fonction dans des zones de données "user dans des zones de données "user defined"defined"

Exemple : les données privées d'une fenêtreExemple : les données privées d'une fenêtreAPI SetWindowLong() / SetWindowLongPtr()API SetWindowLong() / SetWindowLongPtr()Message GWL_USERDATAMessage GWL_USERDATA

Le service Messenger est vulnérableLe service Messenger est vulnérableCorrigé par MS04-032Corrigé par MS04-032

L'API AfxOldWndProc423() serait également L'API AfxOldWndProc423() serait également vulnérablevulnérable

Utilisée pour sous classer des fenêtres non-MFC Utilisée pour sous classer des fenêtres non-MFC dans une fenêtre MFCdans une fenêtre MFC

Page 12: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (6/10)

Le problème global des objets graphiquesLe problème global des objets graphiquesIls appartiennent au bureau de l'utilisateurIls appartiennent au bureau de l'utilisateur

… … qui peut modifier leur comportementqui peut modifier leur comportement… … qui peut leur envoyer des messagesqui peut leur envoyer des messages

Il ne faut pas leur faire confiance !Il ne faut pas leur faire confiance !Les cases grisées peuvent être réactivéesLes cases grisées peuvent être réactivéesLes fenêtres masquées peuvent être affichéesLes fenêtres masquées peuvent être affichées

Ex. contournement du mot de passe dans KAV v5.0.149, Ex. contournement du mot de passe dans KAV v5.0.149, v5.0.153v5.0.153

Le contenu du texte masqué peut être obtenuLe contenu du texte masqué peut être obtenuEx. outils Revelation, Asterisk LoggerEx. outils Revelation, Asterisk Logger

La taille limite de texte peut être modifiéeLa taille limite de texte peut être modifiéeEx. un message WM_USER envoyé au service "Still Ex. un message WM_USER envoyé au service "Still Image" provoque un "buffer overflow" (corrigé par MS00-Image" provoque un "buffer overflow" (corrigé par MS00-065)065)

Page 13: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (7/10)

De nombreuses applications sont concernéesDe nombreuses applications sont concernéesKerio Personal Firewall 2.1.4Kerio Personal Firewall 2.1.4Sygate Personal Firewall Pro 5.0Sygate Personal Firewall Pro 5.0McAfee VirusScan 7.0McAfee VirusScan 7.0WinVNC 3.3.6WinVNC 3.3.6……

Y compris des applications MicrosoftY compris des applications MicrosoftLe fameux UTILMANLe fameux UTILMANNetDDE crée une fenêtre appartenant à WINLOGONNetDDE crée une fenêtre appartenant à WINLOGONLa fenêtre "MM Notify Callback" appartient à WINLOGONLa fenêtre "MM Notify Callback" appartient à WINLOGONLe service "Messenger" crée une fenêtre appartenant à Le service "Messenger" crée une fenêtre appartenant à CSRSSCSRSS

Ex. net send localhost "hello" affiche une fenêtre SYSTEMEx. net send localhost "hello" affiche une fenêtre SYSTEM

Page 14: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (8/10)

Une complexité supplémentaire : les sessions Une complexité supplémentaire : les sessions multiplesmultiples

Principe : accès graphique simultané par plusieurs Principe : accès graphique simultané par plusieurs utilisateursutilisateurs

Utilisé par :Utilisé par :"Remote Desktop""Remote Desktop""Terminal Server""Terminal Server""Fast User Switching""Fast User Switching"Outils tiers tels que "Superior SU"Outils tiers tels que "Superior SU"

Implémentation :Implémentation :Fenêtre applicative Fenêtre applicative Bureau Bureau Window Station Window Station Session Session

Page 15: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Application WindowApplication WindowApplication WindowApplication Window

BureauBureau

Application WindowApplication WindowApplication WindowApplication Window

BureauBureau

Application WindowApplication Window

Application WindowApplication Window

BureauBureau

Window StationWindow Station

WM_INPUTWM_INPUTWM_KEYSTROKEWM_KEYSTROKE

Win32K.SYSWin32K.SYS

SessionSession

Application WindowApplication WindowApplication WindowApplication Window

BureauBureau

Application WindowApplication WindowApplication WindowApplication Window

BureauBureau

Application WindowApplication Window

Application WindowApplication Window

BureauBureau

Window StationWindow Station

WM_INPUTWM_INPUTWM_KEYSTROKEWM_KEYSTROKE

Win32K.SYSWin32K.SYS

SessionSession

Null DeviceNull Device

Clavier, souris, écrans locauxClavier, souris, écrans locaux

Page 16: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (9/10)

SessionSessionConserve l'état global de l'interface graphiqueConserve l'état global de l'interface graphiqueReçoit les entrées/sortiesReçoit les entrées/sorties

Window Station (ex. winsta0)Window Station (ex. winsta0)Gère le presse-papiersGère le presse-papiersUne seule Window Station est active sur la console à un instant Une seule Window Station est active sur la console à un instant TT

BureauBureauPlusieurs bureaux existent simultanémentPlusieurs bureaux existent simultanément

Ex. applications, SAS (winsta0\winlogon), écran de veilleEx. applications, SAS (winsta0\winlogon), écran de veille

Seules les fenêtres du même bureau peuvent communiquer Seules les fenêtres du même bureau peuvent communiquer entre ellesentre elles

OutilOutilLogonSessions de SysInternalsLogonSessions de SysInternals

Page 17: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesL'interface graphique (10/10)

RecommandationsRecommandationsLes objets graphiques doivent être créés dans le contexte de Les objets graphiques doivent être créés dans le contexte de sécurité de l'utilisateursécurité de l'utilisateur

Principe de séparation des privilègesPrincipe de séparation des privilègesAttention au RevertToSelf()Attention au RevertToSelf()

Ne pas envoyer de données sensibles dans l'espace Ne pas envoyer de données sensibles dans l'espace utilisateurutilisateur

Mots de passe masquésMots de passe masquésFenêtres masquéesFenêtres masquées

Ne pas rendre les services "interactifs" sauf exceptionNe pas rendre les services "interactifs" sauf exceptionRappel : contrôle de l'interactivitéRappel : contrôle de l'interactivité

Par service : flag SERVICE_INTERACTIVE_PROCESS (0x100)Par service : flag SERVICE_INTERACTIVE_PROCESS (0x100)Globalement : par la clé HKLM\SYSTEM\CCS\Control\Windows\Globalement : par la clé HKLM\SYSTEM\CCS\Control\Windows\NoInteractiveServicesNoInteractiveServicesVérification : par la commande "sc query type= interact"Vérification : par la commande "sc query type= interact"

Si besoin d'interactivité, utiliser un bureau différentSi besoin d'interactivité, utiliser un bureau différent

Page 18: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLes interfaces de communication

Page 19: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLes canaux nommés (1/5)

Rappel : qu'est-ce qu'un canal nommé ?Rappel : qu'est-ce qu'un canal nommé ?Canal de communication interprocessus (IPC)Canal de communication interprocessus (IPC)

Local ou distant (via SMB)Local ou distant (via SMB)

Implémenté sous forme de "filesystem driver"Implémenté sous forme de "filesystem driver"Pilote NPFS.SYSPilote NPFS.SYSAccès via "\\<machine>\pipe\<nom de canal>"Accès via "\\<machine>\pipe\<nom de canal>"AvantagesAvantages

Sémantique identique à celle d'un système de fichiersSémantique identique à celle d'un système de fichiersBénéficie du système d'ACLsBénéficie du système d'ACLs

OutilsOutilsPas d'outil MicrosoftPas d'outil MicrosoftOutils tiers PIPELIST, PIPEACLOutils tiers PIPELIST, PIPEACL

Page 20: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLes canaux nommés (2/5)

ContexteContexteUne famille d'attaques basée sur l'usurpation d'un canal Une famille d'attaques basée sur l'usurpation d'un canal nomménommé"Découverte" en 2000 (?)"Découverte" en 2000 (?)

MS00-053 : canal nommé prédictible utilisé par le SCMMS00-053 : canal nommé prédictible utilisé par le SCM

Conditions d'existenceConditions d'existenceUn client avec un niveau de privilège élevé (ex. SYSTEM) se Un client avec un niveau de privilège élevé (ex. SYSTEM) se connecte sur un canal nomméconnecte sur un canal nomméCe canal n'existe pas initialement ou limite le nombre Ce canal n'existe pas initialement ou limite le nombre d'instances simultanéesd'instances simultanéesLe nom du canal est prédictibleLe nom du canal est prédictibleLe niveau d'impersonation n'est pas limité par le clientLe niveau d'impersonation n'est pas limité par le client

Rappel des niveaux de QoS :Rappel des niveaux de QoS :Anonymous, Identification, Impersonation, DelegationAnonymous, Identification, Impersonation, Delegation

Ces niveaux sont passés dans le paramètre dwFlagsAndAttributes Ces niveaux sont passés dans le paramètre dwFlagsAndAttributes de CreateFile() par exemplede CreateFile() par exemple

Page 21: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLes canaux nommés (3/5)

Les services pouvant être démarrés par un utilisateur non Les services pouvant être démarrés par un utilisateur non privilégié sont des cibles intéressantesprivilégié sont des cibles intéressantes

Identifiables par la commande "sc sdshow"Identifiables par la commande "sc sdshow"Utilisent souvent des canaux nommésUtilisent souvent des canaux nommés

cf. outils PIPELIST, PIPEACLcf. outils PIPELIST, PIPEACL

Exemples réels exploitables via l'API Exemples réels exploitables via l'API ImpersonateNamedPipeClient()ImpersonateNamedPipeClient()

MS00-053 : canal nommé prédictible utilisé par le Service Control MS00-053 : canal nommé prédictible utilisé par le Service Control ManagerManager

\\.\pipe\net\NtControlPipeX\\.\pipe\net\NtControlPipeXX est incrémenté à chaque démarrage de serviceX est incrémenté à chaque démarrage de service

MS01-031 : canal nommé prédictible au démarrage du service TelnetMS01-031 : canal nommé prédictible au démarrage du service Telnet

CAN-2003-0496 : abus de la procédure 'xp_fileexist' dans SQL ServerCAN-2003-0496 : abus de la procédure 'xp_fileexist' dans SQL ServerPermet d'obtenir les droits du processus SQL ServerPermet d'obtenir les droits du processus SQL ServerCorrigé par l'ajout du privilège SeImpersonatePrivilege dans Windows Corrigé par l'ajout du privilège SeImpersonatePrivilege dans Windows 2000 SP4+ (cf. Q821546)2000 SP4+ (cf. Q821546)

Page 22: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLes canaux nommés (4/5)

Ça se compliqueÇa se compliqueLa connexion à un canal nommé et La connexion à un canal nommé et l'ouverture d'un fichier utilisent la même API l'ouverture d'un fichier utilisent la même API CreateFile()CreateFile()

Ex. la commande "runas cmd.exe" est traitée par Ex. la commande "runas cmd.exe" est traitée par le service RunAsle service RunAs… … donc la commande "runas \\.\pipe\hacker" donc la commande "runas \\.\pipe\hacker" permet (théoriquement) de gagner les droits permet (théoriquement) de gagner les droits SYSTEM !SYSTEM !

Théoriquement l'impersonation n'est possible Théoriquement l'impersonation n'est possible qu'après la première lecture/écriturequ'après la première lecture/écriture

Différence entre \\.\pipe et \\machine\pipe : la Différence entre \\.\pipe et \\machine\pipe : la contrainte est levée dans le deuxième cas !contrainte est levée dans le deuxième cas !

Page 23: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLes canaux nommés (5/5)

Le serveur vérifie-t-il le code de retour de Le serveur vérifie-t-il le code de retour de ImpersonateNamedPipeClient ?ImpersonateNamedPipeClient ?

Si le client demande SecurityAnonymous, l'appel échoueSi le client demande SecurityAnonymous, l'appel échoueDans ce cas le code continue à s'exécuter dans le contexte Dans ce cas le code continue à s'exécuter dans le contexte précédent (SYSTEM ?)précédent (SYSTEM ?)

Si un nouveau processus enregistre le même canalSi un nouveau processus enregistre le même canalLes connexions supplémentaires au delà du nombre d'instances Les connexions supplémentaires au delà du nombre d'instances simultanées sont servies par ce nouveau processussimultanées sont servies par ce nouveau processus

RecommandationsRecommandationsNe pas tomber dans les pièges précédentsNe pas tomber dans les pièges précédentsCréer les instances avec le flag Créer les instances avec le flag FILE_FLAG_FIRST_PIPE_INSTANCEFILE_FLAG_FIRST_PIPE_INSTANCE

Windows 2000 SP2+, Windows XPWindows 2000 SP2+, Windows XP

Ne pas abuser du privilège SeImpersonatePrivilegeNe pas abuser du privilège SeImpersonatePrivilegeWindows 2000 SP4+ (Q821546), Windows XP SP2Windows 2000 SP4+ (Q821546), Windows XP SP2

Page 24: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLPC (1/2)

Quelques failles classiques dans les LPCQuelques failles classiques dans les LPCDroits d'accès trop laxistesDroits d'accès trop laxistesVulnérabilités dans l'implémentation Vulnérabilités dans l'implémentation (noyau et clients)(noyau et clients)

Numéros de messages prédictiblesNuméros de messages prédictiblesAppel à NtImpersonateClientOfPort() permettant Appel à NtImpersonateClientOfPort() permettant de spécifier n'importe quel processus ciblede spécifier n'importe quel processus cibleNon utilisation du handle retourné par Non utilisation du handle retourné par NtAcceptConnectPort()NtAcceptConnectPort()Etc. etc.Etc. etc.

Cf. travaux de Todd Sabin sur Windows NT4Cf. travaux de Todd Sabin sur Windows NT4

Page 25: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLPC (2/2)

Vulnérabilités dans l'implémentation noyau des LPCVulnérabilités dans l'implémentation noyau des LPCDifférentes exploitations de l'API NtImpersonateClientOfPort()Différentes exploitations de l'API NtImpersonateClientOfPort()Corrigé par MS00-003 et MS00-091Corrigé par MS00-003 et MS00-091

Vulnérabilité applicative : NTLMSSPVulnérabilité applicative : NTLMSSPProblème d'index non vérifiéProblème d'index non vérifiéPort NtLmSecuritySupportProviderPortPort NtLmSecuritySupportProviderPortCorrigé par MS01-008Corrigé par MS01-008

Droits d'accès laxistes : DebPloitDroits d'accès laxistes : DebPloitLors d'un déboguage, le Session Manager (SMSS.EXE) communique Lors d'un déboguage, le Session Manager (SMSS.EXE) communique par LPCpar LPCPort DbgSsApiPortPort DbgSsApiPortCe port possède une ACL incorrecteCe port possède une ACL incorrecte

"Tout le monde" peut s'y connecter avec ZwConnectPort( DbgSsApiPort )"Tout le monde" peut s'y connecter avec ZwConnectPort( DbgSsApiPort )Corrigé par MS02-024Corrigé par MS02-024

Page 26: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesDivers (1/1)

Les communications avec le noyauLes communications avec le noyauCommunication Ring3/Ring 0 via l'API DeviceIoControl()Communication Ring3/Ring 0 via l'API DeviceIoControl()En mode "Neither I/O", le buffer passé en paramètre peut être En mode "Neither I/O", le buffer passé en paramètre peut être n'importe quelle adresse mémoiren'importe quelle adresse mémoire

Le driver doit opérer ses propres contrôles …Le driver doit opérer ses propres contrôles …Exemple de pilote exploitable : NAV 2002Exemple de pilote exploitable : NAV 2002Cf. travaux de S. K. ChongCf. travaux de S. K. Chong

Les espaces mémoire partagésLes espaces mémoire partagésAPI OpenFileMapping() / MapViewOfFile()API OpenFileMapping() / MapViewOfFile()Les droits d'accès à des espaces mémoire partagés peuvent être Les droits d'accès à des espaces mémoire partagés peuvent être trop laxistestrop laxistesCes espaces sont parfois utilisés pour des communications Ces espaces sont parfois utilisés pour des communications Ring0/Ring3 (!)Ring0/Ring3 (!)Exemple : Exemple : MS05-012 "COM Structured Storage Vulnerability"MS05-012 "COM Structured Storage Vulnerability"Cf. travaux de Cesar CerrudoCf. travaux de Cesar Cerrudo

Les RPCLes RPCNon présenté ici mais attention néanmoins …Non présenté ici mais attention néanmoins …

Page 27: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesRecommandations générales (1/1)RecommandationsRecommandations

Vérifier que les points de communication Vérifier que les points de communication (même non documentés) sont sécurisés(même non documentés) sont sécurisés

ACL (en local)ACL (en local)

Authentification du client + ACL (à distance)Authentification du client + ACL (à distance)

Dans le doute, ne pas utiliser les ACLs par défautDans le doute, ne pas utiliser les ACLs par défaut

Ne pas faire confiance aux données Ne pas faire confiance aux données provenant d'un niveau de privilège inférieurprovenant d'un niveau de privilège inférieur

Même si ces données ne sont pas théoriquement Même si ces données ne sont pas théoriquement "visibles" de l'utilisateur"visibles" de l'utilisateur

Page 28: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLa recherche d'exécutables

Page 29: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLa recherche d'exécutables (1/6)ContexteContexte

Nommer un fichier n'est pas une opération triviale …Nommer un fichier n'est pas une opération triviale …Compatibilité 8.3Compatibilité 8.3Problème des séparateurs (espaces, / vs. \)Problème des séparateurs (espaces, / vs. \)Caractères localisés et noms Unicode (préfixe \\?\)Caractères localisés et noms Unicode (préfixe \\?\)Liens symboliques et "hard links"Liens symboliques et "hard links"Alternate Data StreamsAlternate Data Streams

L'ordre de recherche des EXE et DLL peut être L'ordre de recherche des EXE et DLL peut être configuréconfiguré

Conditions d'existenceConditions d'existenceUn exécutable lancé avec des privilèges élevés Un exécutable lancé avec des privilèges élevés (typiquement un service) est désigné par un chemin (typiquement un service) est désigné par un chemin ambiguambiguUn exécutable lancé avec des privilèges élevés Un exécutable lancé avec des privilèges élevés charge des dépendances "au mauvais endroit"charge des dépendances "au mauvais endroit"

Page 30: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLa recherche d'exécutables (2/6)Erreurs classiquesErreurs classiques

Chemins contenant un espaceChemins contenant un espaceEx. HKLM\SYSTEM\CurrentControlSet\Services\MonService\Ex. HKLM\SYSTEM\CurrentControlSet\Services\MonService\

KO : ImagePath=C:\Program Files\Mon Service\MonService.exeKO : ImagePath=C:\Program Files\Mon Service\MonService.exe

OK : ImagePath="C:\Program Files\Mon Service\MonService.exe"OK : ImagePath="C:\Program Files\Mon Service\MonService.exe"

Dans le premier cas, "C:\Program.exe" est exécuté s'il existeDans le premier cas, "C:\Program.exe" est exécuté s'il existe

Exemple d'application vulnérable : MS AntiSpyware Beta 1 Exemple d'application vulnérable : MS AntiSpyware Beta 1

La pire erreur serait d'installer Windows dans un chemin La pire erreur serait d'installer Windows dans un chemin contenant des espaces contenant des espaces

Ex. "C:\Win XP"Ex. "C:\Win XP"

Page 31: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLa recherche d'exécutables (3/6)Ordre de recherche des EXEsOrdre de recherche des EXEs

Répertoire courantRépertoire courant%SystemRoot%\System32%SystemRoot%\System32%SystemRoot%%SystemRoot%Reste du %PATH%Reste du %PATH%

Note : sous Unix, ajouter "." dans le PATH de Note : sous Unix, ajouter "." dans le PATH de l'administrateur est considéré comme une faille de l'administrateur est considéré comme une faille de sécurité …sécurité …

D'où le problème des "chemins incomplets"D'où le problème des "chemins incomplets"Ex. clé Shell = "Explorer.exe"Ex. clé Shell = "Explorer.exe"

Lors du démarrage du système, %SystemDrive% est le Lors du démarrage du système, %SystemDrive% est le répertoire courantrépertoire courantSi le fichier C:\Explorer.exe existe, il sera utilisé comme shell Si le fichier C:\Explorer.exe existe, il sera utilisé comme shell utilisateur par WINLOGONutilisateur par WINLOGONCorrectif MS02-064 : le groupe "tout le monde" ne peut plus Correctif MS02-064 : le groupe "tout le monde" ne peut plus créer de fichiers dans la racinecréer de fichiers dans la racine

Page 32: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLa recherche d'exécutables (4/6)Ordre de recherche des DLLsOrdre de recherche des DLLs

Si la clé "HKLM\System\CCS\Control\Session Manager\Si la clé "HKLM\System\CCS\Control\Session Manager\KnownDLLs" existeKnownDLLs" existe

%SystemRoot%\system32%SystemRoot%\system32Répertoire de l'exécutableRépertoire de l'exécutableRépertoire courantRépertoire courant%SystemRoot%%SystemRoot%%PATH%%PATH%

SinonSinonRépertoire de l'exécutableRépertoire de l'exécutableRépertoire courantRépertoire courant%SystemRoot%\system32%SystemRoot%\system32%SystemRoot%%SystemRoot%%PATH%%PATH%

Cf. Q164501Cf. Q164501

Page 33: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLa recherche d'exécutables (5/6)Ordre de recherche des DLLs (suite)Ordre de recherche des DLLs (suite)

Clé SafeDllSearchMode (Windows 2000 SP3+)Clé SafeDllSearchMode (Windows 2000 SP3+)Toujours rechercher %SystemRoot%\system32 et Toujours rechercher %SystemRoot%\system32 et %SystemRoot% en premier%SystemRoot% en premier

Fichier .exe.local dans le répertoire de Fichier .exe.local dans le répertoire de l'applicationl'application

Force le chargement des DLLs à partir du répertoire Force le chargement des DLLs à partir du répertoire courantcourant

RecommandationsRecommandationsLa plupart des problèmes se posent lorsque La plupart des problèmes se posent lorsque l'utilisateur peut ajouter des fichiers dans le l'utilisateur peut ajouter des fichiers dans le répertoire courant de l'applicationrépertoire courant de l'application

Page 34: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

AttaquesLa recherche d'exécutables (6/6)

Cas des servicesCas des servicesLe chemin d'accès à l'exécutable peut être changé Le chemin d'accès à l'exécutable peut être changé par un utilisateur non privilégié si l'ACL le permetpar un utilisateur non privilégié si l'ACL le permet

Droit SC_CHANGE_CONFIGDroit SC_CHANGE_CONFIG

L'attaque est trivialeL'attaque est trivialesc config weakService binPath=c:\attack.exe obj=".\sc config weakService binPath=c:\attack.exe obj=".\LocalSystem" password=""LocalSystem" password=""

sc stop weakServicesc stop weakService

sc start weakServicesc start weakService

Exemple de services vulnérables : SSDP et UPnPExemple de services vulnérables : SSDP et UPnP

Page 35: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Conclusion

Créer des applications exécutées sous un compte Créer des applications exécutées sous un compte privilégié impose un devoir de rigueurprivilégié impose un devoir de rigueur

Les pièges sont nombreux et méconnusLes pièges sont nombreux et méconnusDe plus, le comportement du système varie selon la version De plus, le comportement du système varie selon la version de Windows et sa configurationde Windows et sa configuration

Tous les pièges n'ont pas été abordés iciTous les pièges n'ont pas été abordés iciLe service AT lance des tâches sous le compte SYSTEMLe service AT lance des tâches sous le compte SYSTEML'installation de pilotes d'imprimante permet de charger des L'installation de pilotes d'imprimante permet de charger des modules noyaumodules noyauEtc.Etc.

Mais j'espère que cette présentation vous sera Mais j'espère que cette présentation vous sera profitable !profitable !

Page 36: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Bibliographie

Shatter AttacksShatter AttacksShatter Attacks - How to break WindowsShatter Attacks - How to break Windows

http://security.tombom.co.uk/shatter.htmlhttp://security.tombom.co.uk/shatter.html

Shattering By ExampleShattering By Examplehttp://www.security-assessment.com/Papers/http://www.security-assessment.com/Papers/Shattering_By_Example-V1_03102003.pdfShattering_By_Example-V1_03102003.pdf

Win32 Message Vulnerabilities ReduxWin32 Message Vulnerabilities Reduxhttp://www.idefense.com/idpapers/Shatter_Redux.pdfhttp://www.idefense.com/idpapers/Shatter_Redux.pdf

Shooting the MessengerShooting the Messengerhttp://www.blackhat.com/presentations/bh-usa-04/bh-us-http://www.blackhat.com/presentations/bh-usa-04/bh-us-04-moore/bh-us-04-moore-whitepaper.pdf04-moore/bh-us-04-moore-whitepaper.pdf

Page 37: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Bibliographie

Canaux nommésCanaux nommésDiscovering and Exploiting Named Pipe Security Discovering and Exploiting Named Pipe Security Flaws for Fun and ProfitFlaws for Fun and Profit

http://www.blakewatts.com/namedpipepaper.htmlhttp://www.blakewatts.com/namedpipepaper.htmlLes travaux de Blake Watts sont la référence dans le Les travaux de Blake Watts sont la référence dans le domainedomaine

PipesPipeshttp://msdn.microsoft.com/library/default.asp?url=/http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/pipes.asplibrary/en-us/ipc/base/pipes.asp

RPCRPCWriting a Secure RPC Client or ServerWriting a Secure RPC Client or Server

http://msdn.microsoft.com/library/en-us/rpc/rpc/http://msdn.microsoft.com/library/en-us/rpc/rpc/writing_a_secure_rpc_client_or_server.aspwriting_a_secure_rpc_client_or_server.asp

Page 38: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Bibliographie

LPCLPChttp://www.bindview.com/Support/RAZOR/Advisories/2000/http://www.bindview.com/Support/RAZOR/Advisories/2000/adv_NTPromotion.cfmadv_NTPromotion.cfmhttp://www.bindview.com/Support/RAZOR/Advisories/2000/http://www.bindview.com/Support/RAZOR/Advisories/2000/LPCAdvisory.cfmLPCAdvisory.cfmhttp://www.bindview.com/Support/RAZOR/Advisories/2001/http://www.bindview.com/Support/RAZOR/Advisories/2001/adv_NTLMSSP.cfmadv_NTLMSSP.cfm

DeviceIoControl()DeviceIoControl()http://www.bellua.com/bcs2005/asia05.archive/http://www.bellua.com/bcs2005/asia05.archive/BCSASIA2005-T04-SK-BCSASIA2005-T04-SK-Windows_Local_Kernel_Exploitation.pptWindows_Local_Kernel_Exploitation.ppthttp://sec-labs.hack.pl/papers/win32ddc.phphttp://sec-labs.hack.pl/papers/win32ddc.php

Exemple NAV 2002Exemple NAV 2002http://www.scan-associates.net/papers/navx.chttp://www.scan-associates.net/papers/navx.c

En chinois dans le texte En chinois dans le texte http://www.xfocus.net/articles/200306/545.htmlhttp://www.xfocus.net/articles/200306/545.html

Page 39: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Bibliographie

Espaces mémoire partagésEspaces mémoire partagéshttp://www.bellua.com/bcs2005/http://www.bellua.com/bcs2005/asia05.archive/BCSASIA2005-T05-Cesar-asia05.archive/BCSASIA2005-T05-Cesar-Windows_IPC_Exploitation.pptWindows_IPC_Exploitation.ppt

Writing Secure Code, 2nd Ed.Writing Secure Code, 2nd Ed.Michael Howard, David LeBlancMichael Howard, David LeBlanc

http://www.microsoft.com/mspress/books/http://www.microsoft.com/mspress/books/5957.asp5957.asp

Page 40: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Remerciements

ContributeursContributeursJean-Baptiste MarchandJean-Baptiste Marchand

RelecteursRelecteursKostya KortchinskyKostya KortchinskyEric DetoisienEric DetoisienBenjamin CaillatBenjamin Caillat

Autres personnes impliquéesAutres personnes impliquéesCyril Voisin (Microsoft France)Cyril Voisin (Microsoft France)Equipe DCR/STI/C du Centre de Recherche EADSEquipe DCR/STI/C du Centre de Recherche EADSRstack TeamRstack Team

Page 41: Protéger ses applications contre l'élévation de privilèges Nicolas RUFF Ingénieur-Chercheur EADS-CCR.

Microsoft FranceMicrosoft France18, avenue du Québec18, avenue du Québec

91 957 Courtaboeuf Cedex91 957 Courtaboeuf Cedex

www.microsoft.com/france

0 825 827 8290 825 827 829

[email protected]@microsoft.com