recherche de vulnérabilités en environnement windows 32 bits et divulgation responsable kostya...
TRANSCRIPT
Recherche de vulnérabilités Recherche de vulnérabilités en environnement Windows en environnement Windows
32 bits et divulgation 32 bits et divulgation responsableresponsable
Recherche de vulnérabilités Recherche de vulnérabilités en environnement Windows en environnement Windows
32 bits et divulgation 32 bits et divulgation responsableresponsable
Kostya KortchinskyKostya KortchinskyResponsable du CERT Responsable du CERT [email protected]@renater.frfr
« 0days »« 0days »
DéfinitionDéfinitionVulnérabilité pour laquelle il n’existe pas de Vulnérabilité pour laquelle il n’existe pas de correctifcorrectif
Outil d’exploitation (« exploit ») d’une telle Outil d’exploitation (« exploit ») d’une telle vulnérabilitévulnérabilité
ChiffresChiffresUne Une vingtainevingtaine de « bons » 0days en circulation de « bons » 0days en circulation dans les milieux alternatifsdans les milieux alternatifs
Une valeur financière tournant autour de Une valeur financière tournant autour de 30003000 dollars et pouvant atteindre beaucoup plus !dollars et pouvant atteindre beaucoup plus !
Un temps de recherche d’une Un temps de recherche d’une dizainedizaine de jours pour de jours pour trouver une faille exploitable dans Windowstrouver une faille exploitable dans Windows
HistoriqueHistorique
Vulnérabilités précédemment découvertesVulnérabilités précédemment découvertesMS04-042MS04-042 : : Vulnerability in DHCP Could Allow Remote Code Vulnerability in DHCP Could Allow Remote Code Execution and Denial of ServiceExecution and Denial of Service
Logging Vulnerability - CAN-2004-0899Logging Vulnerability - CAN-2004-0899DHCP Request Vulnerability - CAN-2004-0900DHCP Request Vulnerability - CAN-2004-0900
MS04-045MS04-045 : Vulnerability in WINS Could Allow Remote Code : Vulnerability in WINS Could Allow Remote Code ExecutionExecution
Name Validation Vulnerability - CAN-2004-0567Name Validation Vulnerability - CAN-2004-0567Association Context Vulnerability - CAN-2004-1080Association Context Vulnerability - CAN-2004-1080
MS05-010MS05-010 : : Vulnerability in the License Logging Service Could Vulnerability in the License Logging Service Could Allow Code ExecutionAllow Code Execution
License Logging Service Vulnerability - CAN-2005-0050License Logging Service Vulnerability - CAN-2005-0050
MS05-017MS05-017 : : Vulnerability in Message Queuing Could Allow Code Vulnerability in Message Queuing Could Allow Code ExecutionExecution
Message Queuing Vulnerability - CAN-2005-0059Message Queuing Vulnerability - CAN-2005-0059
Plusieurs à venir prochainement …Plusieurs à venir prochainement …
MS04-045 : WINS (1/2)MS04-045 : WINS (1/2)(Vie publique)(Vie publique)
Avis Immunity, Inc.INSTANTANEA (1)
(1) : http://www.immunitysec.com/downloads/instantanea.pdf(2) : http://www.microsoft.com/technet/security/Bulletin/MS04-045.mspx(3) : http://www.frsirt.com/exploits/20041231.ZUC-WINShit.c.php(4) : http://www.snort.org/pub-bin/sigs.cgi?sid=3017
Avis MicrosoftMS04-045 (2)
Exploit publicK-Otik (3)
Sig
natu
re S
nort
(4)
MS04-045 : WINS (2/2)MS04-045 : WINS (2/2)(Vie privée)(Vie privée)
Premières rumeurs d’une vulnérabilité WINS, analyse du binaire Premières rumeurs d’une vulnérabilité WINS, analyse du binaire dans la fouléedans la foulée
Fin mai 2004Fin mai 2004
Soumissions des vulnérabilités au Soumissions des vulnérabilités au MSRCMSRCName Validation Vulnerability (CAN-2004-0567) : Name Validation Vulnerability (CAN-2004-0567) : 9 juin 20049 juin 2004
Toujours pas d’exploit public à ce jourToujours pas d’exploit public à ce jour
Context Association Vulnerability (CAN-2004-1080) : Context Association Vulnerability (CAN-2004-1080) : 16 juin 200416 juin 2004
Implémentation d’un exploit fiableImplémentation d’un exploit fiableFin juin 2004Fin juin 2004
Publication du correctifPublication du correctif14 décembre 200414 décembre 2004
Durée de vie du 0dayDurée de vie du 0day
6 mois 6 mois (c’est le minimum)(c’est le minimum)
IntroductionIntroduction
Trouver un Trouver un 0day0day est l’objectif de bon nombre de est l’objectif de bon nombre de chercheurs en sécuritéchercheurs en sécurité
Et de pirates aussi …Et de pirates aussi …
Comment ?Comment ?En l’achetant, en l’échangeantEn l’achetant, en l’échangeantEn le capturantEn le capturant
Pots de miel (j’attends toujours)Pots de miel (j’attends toujours)Investigations « forensiques »Investigations « forensiques »
En le découvrant (En le découvrant ( Objet de la suite de la présentationObjet de la suite de la présentation))
Pourquoi ?Pourquoi ?Pour s’introduire dans un système à jourPour s’introduire dans un système à jourPour la renommée, la publicitéPour la renommée, la publicité
En le publiant (de façon responsable, ou pas)En le publiant (de façon responsable, ou pas)
Pour le bien de l’humanité ?Pour le bien de l’humanité ?
Trousse à outilsTrousse à outils
DésassembleurDésassembleurL’indispensable L’indispensable IDAIDA Pro Pro de Datarescue (et son SDK) de Datarescue (et son SDK)
DébogueurDébogueurIDA Pro ou OllyDbg pour le IDA Pro ou OllyDbg pour le ring3ring3
SoftIce ou SoftIce ou WinDbgWinDbg pour le pour le ring0ring0
Analyseur réseauAnalyseur réseauEtherealEthereal et ses nombreux dissecteurs de protocoles et ses nombreux dissecteurs de protocoles
Outil de virtualisation de systèmesOutil de virtualisation de systèmesVMwareVMware Workstation pour un réseau de test complet Workstation pour un réseau de test complet
Aide à l’analyseAide à l’analyseSymbolesSymboles de déboguage Microsoft de déboguage Microsoft
Le Le PlatformPlatform SDK SDK Windows de Microsoft Windows de Microsoft
MéthodesMéthodes
FuzzingFuzzing
Analyse statiqueAnalyse statique
Analyse différentielleAnalyse différentielle
Trace d’exécutionTrace d’exécution
Analyse d’exécutionAnalyse d’exécution
Fuzzing (1/3)Fuzzing (1/3)
Soumission de Soumission de requêtesrequêtes et de et de paramètresparamètres illégitimesillégitimes à une application afin d’en étudier à une application afin d’en étudier le comportement dans une situationle comportement dans une situation non non prévueprévue par ses concepteurs par ses concepteurs
Le procédé peut être Le procédé peut être manuelmanuel ou ou complètement complètement automatiséautomatisé
Les moyens incluentLes moyens incluentL’utilisation de clients ou d’API existantsL’utilisation de clients ou d’API existants
Le re-jeu de paquets capturés et modifiésLe re-jeu de paquets capturés et modifiés
L’implémentation de clients personnalisésL’implémentation de clients personnalisés
Fuzzing (2/3)Fuzzing (2/3)
Clients et API existantsClients et API existantsProbable rejet ou modification des entrées Probable rejet ou modification des entrées invalidesinvalides
Moyen simple de capturer, analyser et construire Moyen simple de capturer, analyser et construire des requêtesdes requêtes
Peu ou pas de connaissances du protocole requisesPeu ou pas de connaissances du protocole requises
Clients personnalisésClients personnalisésA partir de trames légitimesA partir de trames légitimes
A partir de « frameworks »A partir de « frameworks »SPIKESPIKE par David Aitel, en C par David Aitel, en C
IOActiveIOActive PeachPeach par Michael Eddington, en Python par Michael Eddington, en Python
Connaissances du protocole nécessairesConnaissances du protocole nécessaires
Fuzzing (3/3)Fuzzing (3/3)
Application possible aux formats de fichiersApplication possible aux formats de fichiersModification de champs d’un fichier existantModification de champs d’un fichier existant
Génération de fichiers invalidesGénération de fichiers invalides
Ce qu’il faut surveillerCe qu’il faut surveillerCrash de l’applicationCrash de l’application
Déni de service, exécution de code arbitraire ?Déni de service, exécution de code arbitraire ?
Fuite d’informationFuite d’informationNécessite un analyseur réseauNécessite un analyseur réseau
Génération d’exceptionsGénération d’exceptionsNécessite un débogueurNécessite un débogueur
Analyse statique (1/4)Analyse statique (1/4)
DésassemblageDésassemblage et et auditaudit du code d’un binaire, afin d’y du code d’un binaire, afin d’y rechercherrechercher
Les appels à des fonctions potentiellement vulnérablesLes appels à des fonctions potentiellement vulnérables
Les agencements de code à risquesLes agencements de code à risques
Ne nécessite Ne nécessite paspas nécessairement l’exécution du nécessairement l’exécution du binairebinaire
Couvre la Couvre la totalitétotalité des fonctionnalités, connues ou non des fonctionnalités, connues ou non
Possibilité d’Possibilité d’automatiserautomatiser une partie de la recherche une partie de la recherche
La majorité du travail reste manuelleLa majorité du travail reste manuelleCompétences nécessaires très pointuesCompétences nécessaires très pointues
Analyse statique (2/4)Analyse statique (2/4)
Fonctions Fonctions potentiellementpotentiellement vulnérables vulnérables (exemples)(exemples)
strcpy, wcscpy (strcpy, wcscpy (MS03-001MS03-001 : Locator Service) : Locator Service)strcat, wcscat (strcat, wcscat (MS05-010MS05-010 : License Logging Service) : License Logging Service)sprintf, swprintf (sprintf, swprintf (MS05-017MS05-017 : MSMQ) : MSMQ)vsprintf, vswprintf (vsprintf, vswprintf (MS04-011MS04-011 : LSASS) : LSASS)memcpy, wmemcpy (memcpy, wmemcpy (MS04-045MS04-045 : WINS) : WINS)lstrcpyA, lstrcpyW (lstrcpyA, lstrcpyW (MS04-022MS04-022 : Task Scheduler) : Task Scheduler)CharToOemA (CharToOemA (MS04-034MS04-034 : Compressed Folders) : Compressed Folders)
Vulnérabilités de typeVulnérabilités de typeDébordement de tamponDébordement de tamponFormatage de chaîne de caractèresFormatage de chaîne de caractères
MS04-044 : ZipFldrMS04-044 : ZipFldr
DétailsDétailsL’attaquant contrôle les données en L’attaquant contrôle les données en arg_0arg_0
La fonction La fonction CharToOemACharToOemA ne vérifie pas la taille des buffers ne vérifie pas la taille des buffers
Le buffer destination fait Le buffer destination fait 264264 octets, est situé dans la pile octets, est situé dans la pile
La prise de contrôle de EIP est immédiateLa prise de contrôle de EIP est immédiate
MS04-010 : LlsSrvMS04-010 : LlsSrv
DétailsDétailsL’attaquant contrôle le contenu de L’attaquant contrôle le contenu de arg_0arg_0 et et arg_4arg_4
Les buffers destinations des fonctions Les buffers destinations des fonctions lstrcpyWlstrcpyW et et lstrcatWlstrcatW font 1024 octets, sont situés dans la section data du binairefont 1024 octets, sont situés dans la section data du binaire
Le débordement ne permet pas la prise de contrôle directe Le débordement ne permet pas la prise de contrôle directe du flux d’exécution, mais une ruse supplémentaire, oui du flux d’exécution, mais une ruse supplémentaire, oui
MS05-017 : MqSvcMS05-017 : MqSvc
DétailsDétailsL’attaquant contrôle la chaîne de caractères en L’attaquant contrôle la chaîne de caractères en arg_0arg_0
Le buffer destination de la fonction Le buffer destination de la fonction swprintfswprintf fait 300 octets, fait 300 octets, est situé dans la pileest situé dans la pile
L’alignement du buffer dépend de la longueur du nom L’alignement du buffer dépend de la longueur du nom NETBIOS de la machine hébergeant le serviceNETBIOS de la machine hébergeant le service
Analyse statique (3/4)Analyse statique (3/4)
Fonctions de « parsing » spécifiquesFonctions de « parsing » spécifiquesCopies de chaînes de caractères personnaliséesCopies de chaînes de caractères personnalisées
MS03-036 : MsgSvcMS03-036 : MsgSvc
Vulnérabilités plus pointuesVulnérabilités plus pointuesDébordement d’entiers et « wraps »Débordement d’entiers et « wraps »
A surveiller : LocalAlloc, GlobalAlloc, RtlAllocateHeapA surveiller : LocalAlloc, GlobalAlloc, RtlAllocateHeap
« Off-by-one »« Off-by-one »
Conversion de signes, comparaisons signées ou Conversion de signes, comparaisons signées ou nonnon
Vulnérabilités combinées complexesVulnérabilités combinées complexesMS05-010 : LlsSrvMS05-010 : LlsSrv
MS03-036 : MsgSvcMS03-036 : MsgSvc
DétailsDétailsL’attaquant contrôle le buffer source, dans lequel tout L’attaquant contrôle le buffer source, dans lequel tout caractère caractère 0x140x14 est remplacé par deux caractères est remplacé par deux caractères 0xd0xd et et 0xa0xa
Le buffer destination n’est cependant pas d’une taille Le buffer destination n’est cependant pas d’une taille suffisantesuffisante
Cela résulte en un débordement sur le tasCela résulte en un débordement sur le tas
Analyse statique (4/4)Analyse statique (4/4)
Une automatisation partielle du procédé est Une automatisation partielle du procédé est possible grâce à des plugins IDApossible grâce à des plugins IDA
Tentative d’évaluation de la Tentative d’évaluation de la longueurlongueur des des paramètres des fonctions sensiblesparamètres des fonctions sensiblesDétermination de la taille des allocations mémoireDétermination de la taille des allocations mémoireDétection des boucles de copie personnaliséeDétection des boucles de copie personnaliséeLocalisation de Localisation de bouclesboucles dans le code dans le code
La méthode a ses limitationsLa méthode a ses limitationsQualité du désassemblageQualité du désassemblageAppels dynamiques à des fonctions en C++ ou Appels dynamiques à des fonctions en C++ ou DelphiDelphiComplexité des structures et formats de donnéesComplexité des structures et formats de données
IDLIDL
Analyse différentielle (1/3)Analyse différentielle (1/3)
Identification d’une vulnérabilité suite à la publication Identification d’une vulnérabilité suite à la publication d’un correctifd’un correctif
Les détails d’une vulnérabilité corrigée peuvent ne pas être Les détails d’une vulnérabilité corrigée peuvent ne pas être communiquéscommuniqués
MS05-017 : MqSvcMS05-017 : MqSvc
Un éditeur peut être tenté de corriger des failles Un éditeur peut être tenté de corriger des failles silencieusementsilencieusement
MS04-007 : ASN.1 (Kill Bill)MS04-007 : ASN.1 (Kill Bill)
Une comparaison Une comparaison manuellemanuelle serait un travail serait un travail titanesquetitanesque
Automatisation de l’analyse et Automatisation de l’analyse et visualisationvisualisation des des différences grâce à des différences grâce à des graphesgraphes
BinDiff de Sabre SecurityBinDiff de Sabre Security
Analyse différentielle (2/3)Analyse différentielle (2/3)
Diffiepar Kostya Kortchinsky
Analyse différentielle (3/3)Analyse différentielle (3/3)
DiffieDiffiePlugin pour Plugin pour IDAIDA Pro 4.8 pour processeur « MetaPC » Pro 4.8 pour processeur « MetaPC »Analyse différentielle de deux binairesAnalyse différentielle de deux binaires
Analyse de fonctions par Analyse de fonctions par blocsblocsGénération de signatures type Génération de signatures type CRC32CRC32 pour chaque bloc et pour chaque bloc et pour chaque fonctionpour chaque fonctionMise en correspondance des fonctions des deux binairesMise en correspondance des fonctions des deux binairesMise en évidence des fonctions modifiéesMise en évidence des fonctions modifiéesVisualisation des différences grâce aux Visualisation des différences grâce aux graphesgraphes des des fonctionsfonctions
Algorithme de mise en correspondanceAlgorithme de mise en correspondanceNom des fonctionsNom des fonctionsSignaturesSignaturesPosition dans le binairePosition dans le binaireArbre d’appels aux fonctionsArbre d’appels aux fonctions
Trace d’exécutionTrace d’exécution
Surveiller les appels à des fonctions potentiellement Surveiller les appels à des fonctions potentiellement vulnérables au cours de l’exécution d’un binairevulnérables au cours de l’exécution d’un binaire
Moyen rapide mais superficiel de savoir ce qu’il se Moyen rapide mais superficiel de savoir ce qu’il se trametrame
Déterminer l’emplacement en mémoire des différents Déterminer l’emplacement en mémoire des différents paramètresparamètres
Pile, tas, section du binaire ?Pile, tas, section du binaire ?
Évaluer la possibilité d’influer sur ces derniersÉvaluer la possibilité d’influer sur ces derniers
Utilisation de (dum(b)ug) Utilisation de (dum(b)ug) ltraceltracePersonnalisation des fonctions à surveillerPersonnalisation des fonctions à surveiller
Possibilité d’inspecter les paramètres avant et après l’appelPossibilité d’inspecter les paramètres avant et après l’appel
Résolution des emplacements des buffers en mémoireRésolution des emplacements des buffers en mémoire
Analyse d’exécution (1/2)Analyse d’exécution (1/2)
Attacher un débogueur à un binaire en cours Attacher un débogueur à un binaire en cours d’exécution afin d’observer son fonctionnement d’exécution afin d’observer son fonctionnement
Suivi de l’exécution du binaire en fonction du Suivi de l’exécution du binaire en fonction du codecode ou ou des des donnéesdonnées
Mettre des points d’arrêt sur les fonctions à surveillerMettre des points d’arrêt sur les fonctions à surveillerVérifier les argumentsVérifier les arguments
Suivre les modifications apportées aux données dès leur Suivre les modifications apportées aux données dès leur réception par l’application auditéeréception par l’application auditée
Trouver une vulnérabilité dans le traitement apportéTrouver une vulnérabilité dans le traitement apporté
Indispensable à l’implémentation d’un exploit fiableIndispensable à l’implémentation d’un exploit fiableExaminer l’état des registres, de la mémoireExaminer l’état des registres, de la mémoire
Travail manuel et laborieuxTravail manuel et laborieux
Analyse d’exécution (2/2)Analyse d’exécution (2/2)
EIP = 0x43434343,c’est mauvais signe …
Ring 0Ring 0
Le mode noyau de Windows est un domaine encore Le mode noyau de Windows est un domaine encore peu explorépeu exploré
Il recèle pourtant bien des trésorsIl recèle pourtant bien des trésorsVulnérabilités du noyauVulnérabilités du noyau
Vulnérabilités des drivers systèmesVulnérabilités des drivers systèmesMS05-011 : MrxSmbMS05-011 : MrxSmb
AntivirusAntivirus et pare-feu fonctionnent généralement et pare-feu fonctionnent généralement grâce à des drivers systèmesgrâce à des drivers systèmes
Débogage Ring 0 possible avec WinDbg et VMwareDébogage Ring 0 possible avec WinDbg et VMware
L’audit des drivers de matériels laisse entrevoir des L’audit des drivers de matériels laisse entrevoir des possibilités séduisantespossibilités séduisantes
« Disclosure »« Disclosure »
Il existe plusieurs façons de divulguer des Il existe plusieurs façons de divulguer des failles, aux conséquences variablesfailles, aux conséquences variables
Vulnerability Sharing ClubsVulnerability Sharing ClubsClubs privés aux frais d’adhésion relativement chers dans Clubs privés aux frais d’adhésion relativement chers dans lesquels circulent des informations concernant les lesquels circulent des informations concernant les derniers « 0days »derniers « 0days »
Responsible disclosureResponsible disclosurePrincipe de divulgation responsable qui consiste à ne Principe de divulgation responsable qui consiste à ne transmettre l’information qu’au seul éditeur ou transmettre l’information qu’au seul éditeur ou constructeur, jusqu’à la mise à disposition du correctifconstructeur, jusqu’à la mise à disposition du correctif
Full disclosureFull disclosurePublication sans restrictions des détails concernant la Publication sans restrictions des détails concernant la vulnérabilité, que l’éditeur soit au courant, ou pasvulnérabilité, que l’éditeur soit au courant, ou pas
Microsoft Security Response Microsoft Security Response Center (MSRC)Center (MSRC)
Il s’agit du service de Microsoft chargé de la Il s’agit du service de Microsoft chargé de la gestion et de la résolution des vulnérabilités gestion et de la résolution des vulnérabilités et incidents de sécuritéet incidents de sécurité
Réception et tri des rapports de vulnérabilitéRéception et tri des rapports de vulnérabilitéDéveloppement et test des correctifsDéveloppement et test des correctifsCréation des bulletins de sécuritéCréation des bulletins de sécuritéPublication et envoi des avisPublication et envoi des avis
Le MSRC est joignable à l’adresseLe MSRC est joignable à l’adresse
[email protected]@microsoft.comUne première réponse arrive généralement Une première réponse arrive généralement dans les dans les 2 ou 32 ou 3 jours ouvrables suivant jours ouvrables suivant l’envoi du rapportl’envoi du rapport
ConclusionConclusion
Il existe de nombreux moyens d’auditer des Il existe de nombreux moyens d’auditer des binaires Windows 32 bitsbinaires Windows 32 bits
Pour des résultats Pour des résultats superficielssuperficiels, mais , mais rapidesrapides, il , il faudra préférer des méthodes faudra préférer des méthodes automatiséesautomatiséesPour une analyse en Pour une analyse en profondeurprofondeur, des méthodes , des méthodes manuellesmanuelles devront être appliquées devront être appliquées
Les 0days ne sont pas un mytheLes 0days ne sont pas un mytheLa fenêtre de vulnérabilité est de l’ordre de La fenêtre de vulnérabilité est de l’ordre de plusieurs moisplusieurs moisIl ne faut pas se fier qu’aux Il ne faut pas se fier qu’aux correctifscorrectifs, il est alors , il est alors déjà déjà trop tardtrop tardLes Les IDSIDS n’y peuvent pas grand-chose n’y peuvent pas grand-chose
Le moyen le plus simple pour s’en procurer Le moyen le plus simple pour s’en procurer est encore de les trouver soi-mêmeest encore de les trouver soi-même
LittératureLittérature
Dave Aitel – 0daysDave Aitel – 0daysHow hacking really worksHow hacking really works
Dave Aitel – TC0Dave Aitel – TC0Microsoft Windows, a lower Total Cost of OwnershipMicrosoft Windows, a lower Total Cost of Ownership
FX – BugsFX – BugsVulnerability finding methods in Windows 32 environments Vulnerability finding methods in Windows 32 environments comparedcompared
Ben Nagi – Zero DayBen Nagi – Zero DayVulnerability Research, Disclosure and EthicsVulnerability Research, Disclosure and Ethics
Barnaby Jack – Remote Windows Kernel ExploitationBarnaby Jack – Remote Windows Kernel ExploitationStep into the Ring 0Step into the Ring 0
Questions ?Questions ?Questions ?Questions ?
Remerciements :Remerciements :Dave, Halvar, Gera, Security Labs, Dave, Halvar, Gera, Security Labs,
Team Rstack, Sécurité.org, MicrosoftTeam Rstack, Sécurité.org, Microsoft
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