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

Information Security Systems Compromission physique par le bus PCI Christophe Devine / Guillaume Vissian SSTIC, 3 Juin 2009.

Présentations similaires


Présentation au sujet: "Information Security Systems Compromission physique par le bus PCI Christophe Devine / Guillaume Vissian SSTIC, 3 Juin 2009."— Transcription de la présentation:

1 Information Security Systems Compromission physique par le bus PCI Christophe Devine / Guillaume Vissian SSTIC, 3 Juin 2009

2 1 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Introduction De quoi allons-nous parler ? La plupart des ordinateurs portables ont un port PC Card Les nouveaux modèles, un port ExpressCard (ou les deux) Point de vue du public : sans danger NdA : Tout comme le FireWire il y a 4 ans. Pourtant: le protocole PCI et larchitecture x86 fournit un accès DMA (« direct memory access ») non restreint via le port PC Card Accès à la mémoire physique : à quel point est-ce dangereux? Compromission complète du système (noyau), voire SMRAM ou tables ACPI ? Rapide et furtif, Plug-and-pwn Possibilité de ne laisser aucune trace disque (forensics) Plusieurs méthodes de persistance: modification du MBR, re-flash du BIOS, …

3 2 < ISS – SSTIC 2009 – Compromission physique par le bus PCI État de lart Travaux précédents : Silvio Cesare (1998), sd & devik (2001) : compromission au travers de /dev/{k}mem sous Linux crazylord (2002) : compromission via \Device\PhysicalMemory Brian Carrier et Joe Grand (2004) : acquisition de mémoire physique depuis le bus PCI Maximillian Dornseif (2005) et Adam Boileau (2006) : compromission par un port FireWire Nicolas Ruff et Matthieu Suiche (2007) : le fichier dhibernation Joanna Rutkowska (2007) : defeating hardware RAM acquisition Damien Aumaitre (2008) : voyage au cœur de la mémoire Utilisation offensive de PC Card mentionnée par : David Hulton à Schmoocon06 (mais rien en ligne) J. Rutkowska (2007), invisiblethings.com Nicolas Ruff (2008)

4 3 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Notre contribution Au delà de lattaque théorique: développement dun « proof of concept » concret Utile dans certains scénario (tests dintrusion par exemple) Documenter notre démarche expérimentale et les problèmes dimplémentation rencontrés Faire prendre conscience du danger posé par les attaques depuis le bus PCI ou PCI express

5 4 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Clarification des termes PCI : Peripheral Component Interconnect Début du développement par Intel in 1992, peu de changements depuis Adresse ou donnée sur 32-bit, horloge à 33 MHz au maximum Aujourdhui utilisé pour des périphériques basse vitesse : audio, … Quelques variations : horloge à 66-MHz, bus de 64 bits, PCI-X (à ne pas confondre avec PCI Express), AGP (2001) PC Card = format physique (type I, II, III) Deux protocoles électriques utilisés par les cartes PC Cards PCMCIA : années 90, 16-bit (similaire à ISA) Cardbus : 32-bit, depuis Très proche de PCI PCI Express / ExpressCard Différent du PCI, mais autorise aussi le DMA

6 5 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Explication de la vulnérabilité Nimporte quel périphérique PCI peut demander le contrôle du bus Typiquement, pour lire ou écrire dans la mémoire de la cible Communément appelé bus mastering ou direct memory access Chaque cible décode ladresse physique et répond si cela correspond à sa propre plage mémoire Exemple: 0 MiB – 1024 MiB Mémoire DDR principale du PC [troutrou ftw] 3072 MiB – 3200 MiB mémoire LAN interne 3200 MiB – 3456 MiB mémoire graphique interne Le contrôleur mémoire (Northbridge) est responsable de la gestion des requêtes daccès à la DRAM. Les CPU x86 (sauf les plus récents) nimplémentent pas dunité de contrôle des E/S mémoire (IOMMU) Pas de support dans les systèmes dexploitation

7 6 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Avantages de lattaque Difficile à détecter par le système dexploitation Nous ne répondons pas aux requêtes vers lespace de configuration Pas dapparition de nouveaux périphériques (pop-up) Plus furtif que les accès DMA via FireWire (qui demandent un driver) Très rapide Avec une horloge à 33 MHz, laccès total est de quelques secondes. Permet une compromission rapide du PC / poste nomade cible Difficile à bloquer Mais nous verrons des mesures de protections dans la conclusion

8 7 < ISS – SSTIC 2009 – Compromission physique par le bus PCI À la recherche du hardware perdu Lattaque requiert laccès direct au bus PCI La plupart des chipsets PCI / Cardbus standards implémentent le PCI en interne Pas daccès bas-niveau Solution : utiliser un FPGA (logique programmable) Choix du hardware: Carte PCI, Raggedstone1 (environ 120 $) Carte Cardbus, COM-1300-C (environ 300 $)

9 8 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Firmware FAIL Raggedstone1 et COM-1300-C ont quelques problèmes Réponse du vendeur: on y travaille ! Raggedstone1 empêche le système de booter Le BIOS stoppe, parfois des écrans bleus… Concerne les systèmes Core 2 les plus récents. Solution temporaire : re-flasher le firmware depuis un autre PC COM-1300-C ne peut être flashée sur les ordinateurs récents Message derreur: « Memory Program Failed » Peut-être lié à la gestion de lalimentation (CCLKRUN#) ? Solution temporaire : utiliser un vieil ordinateur (2002) pour flasher

10 9 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Remerciements spéciaux Pierre T. pour sa contribution active à la découpe de câble en urgence Allez Pierre ! Tu y es presque

11 10 < ISS – SSTIC 2009 – Compromission physique par le bus PCI À la recherche de la documentation Les spécifications PCI et PC Card sont payantes Specs. propriétaires (et chères). Google est votre ami ! PC Card Standard, volume 2: Electrical Specification Beaucoup de documentation en ligne sur le VHDL Peter J. Ashenden – The VHDL Cookbook – 1990 Hwang – Microprocessor Design with VHDL – 2004 De nombreux cours et tutoriaux, par ex. EPFL/LAP+LSL Différents codes sources VHDL dispo. sur opencores.org En particulier : rs1_7seg_pci, exemple de bloc PCI pour RS1 Aussi, ComBlock fournit des sources VHDL partielles

12 11 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Quelques bases des circuits digitaux De quoi les puces sont-elle composées ? Manifestement des transistors (beaucoup), technologie CMOS Un transistor est principalement un composant damplification du signal Utilisé dans les circuit électriques en tant que switch (valve électrique) Interconnectés pour créer: Une logique combinatoire, A <= B et C Des éléments à mémoire (flip-flops), mis à jour sur un évènement (front dhorloge) Exemple: inverseur

13 12 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Bases des signaux électriques Plein de valeurs possibles : Fortement forcé, 0 (terre) or 1 (environ Vcc) Faiblement forcé, L (état bas faible) ou H (état haut faible) Des résistances sont utilisées pour créer les signaux faibles Lit 0 ou 1, mais peut être outrepassé Flottant (impédance haute, Z) Attention aux temps de propagation des signaux Dépend de la complexité de la logique combinatoire Le délai pour atteindre un état stable limite la vitesse dhorloge maximale Toute la logique combinatoire sexécute en parallèle Les éléments à mémoire sont mis à jour au front montant suivant

14 13 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Flot dimplémentation du matériel 1. Synthèse Code de haut niveau compilé dans des blocs : flip-flops, adders… 2. Simulation du comportement Création dun banc de test et vérification que le design se comporte comme prévu 3. Translation, mapping & routage Des contraintes externes (pins) sont appliquées Les blocs de base sont mappés dans les ressources du FPGA Look-up tables, registres, ressources de routage 4. Génération du fichier de programmation 5. Programmation du matériel

15 14 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Le PCI bus-mastering démystifié En majuscules : signaux contrôlés par la carte Cardbus En minuscules : signaux contrôlés par la cible (bridge) Ci-dessous : exemple décriture de 4 octets

16 15 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Des signaux PCI Tous les signaux sont actifs bas (#) 0 = actif, 1 = inactif Explication électrique possible : la coupure dun fil lit 1 par défaut Reset et horloge : CRST#, CCLK, CCLKRUN# Requête de bus-mastering : CREQ#, CGNT# Byte enable, data, parité : CBE#[4], CAD[32], CPAR Signaux contrôlés par le maitre : CFRAME#, indique quil reste des DWORD à traiter CIRDY#: indique que le master est prêt à lire ou écrire Signaux contrôlés par la cible : CDEVSEL#: indique que la cible répond à la requête CTRDY#: indique que la cible est prête à lire ou écrire

17 16 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Toujours plus de signaux PCI ! CFRAME# doit être mit en état haut (H) suivant les specs Sinon certains PC portables gèlent Aussi CINT# (interruption de lhôte) et CSERR# (signal derreur) en état haut CCLKRUN# Les PC portables récents ont une gestion dénergie agressive Mis à 0 afin dempêcher le contrôleur Cardbus de désactiver notre horloge Ne respecte pas les specs., mais on sen fiche – ça marche ;p Beaucoup dautres signaux laissés en flottant Signaux derreurs ignorés (encore une fois non respect des specs.) Toutes autres requêtes, notamment Configuration Space, sont ignorées par la carte

18 17 < ISS – SSTIC 2009 – Compromission physique par le bus PCI (Ré) implementation de lattaque winlockpwn Patche MSV1_0.dll afin dautoriser le login avec nimporte quel mot de passe Windows XP, offset / data codé en dur Patche la fonctionMsvpPasswordValidate() Machine à état : Démo time!

19 18 < ISS – SSTIC 2009 – Compromission physique par le bus PCI La conception dun CPU (1/5) Pourquoi avoir conçu et implémenté un processeur ? Les machines à état complexes sont difficiles à coder en VHDL Permet limplémentation de fonctions évoluées, itération Pour mettre notre propre opcode backdoor dedans :p Le code x86 à injecter est sur le FPGA dans un BlockRAM Relativement furtif Pour samuser à coder avec des zéros et des uns ! Une expérience enrichissante

20 19 < ISS – SSTIC 2009 – Compromission physique par le bus PCI La conception dun CPU (2/5) Design: Architecture type RISC 256 registres généraux 3 bits conditionnel V[ulnérable] (int/float overflow) N[égatif] et Z[ero] PC (Program Counter) Unité de contrôle ALU (Arithmetic Logical Unit) : Un jeu dopérations basiques add, sub, mul, shl, etc. Opère sur des mots de 32 bits Un jeu dopération plus évoluées br, bnz, brz,...

21 20 < ISS – SSTIC 2009 – Compromission physique par le bus PCI La conception dun CPU (3/5) Listing partiel des opcodes implémentés: InstructionOpcode (Hex)OpérandeDestination add00r1,r2r3 sub01r1,r2r3 mul02r1,r2r3 div03r1,r2r3 cmp04r1,r2r3 or05r1,r2r3 and08r1,r2r3 addq (Add quick) 10r1,ldr3 br (branch)40PC + addr 32bPC bri (indexed branch) 41r1 + addr 32bPC brq50PC+lbPC brz42r1 + addr 32bPC shl60r1,r2r3

22 21 < ISS – SSTIC 2009 – Compromission physique par le bus PCI La conception dun CPU (4/5) Exemple dimplémentation: la procédure add procedure add (result : inout bit_32; op1, op2 : in integer; V, N, Z : out bit) is begin if op2 > 0 and op1 > integer'high-op2 then int_to_bits(((integer'low+op1)+op2)-integer'high-1, result); V := '1'; elsif op2 < 0 and op1 < integer'low-op2 then int_to_bits(((integer'high+op1)+op2)-integer'low+1, result); V := '1'; else int_to_bits(op1 + op2, result); V := '0'; end if; N := result(31); Z := bool_to_bit(result = X"0000_0000"); end add;

23 22 < ISS – SSTIC 2009 – Compromission physique par le bus PCI La conception dun CPU (5/5) Un aperçu de lALU --[...] begin --[...] memoryread(PC, true, current_instr); -- Read the memory... if reset /= '1' then add(PC, bits_to_int(PC), 1, temp_V, temp_N, temp_Z); op := current_instr(31 downto 24); -- Get next instruction opcode r3 := bits_to_natural(current_instr(23 downto 16)); r1 := bits_to_natural(current_instr(15 downto 8)); r2 := bits_to_natural(current_instr(7 downto 0)); i8 := bits_to_int(current_instr(7 downto 0)); -- Call the required function case op is -- [...] when op_br => -- Basic branch memory_read(PC, true, displacement); if reset /= '1' then add(PC, bits_to_int(PC), 1, temp_V, temp_N, temp_Z); add(effective_addr, bits_to_int(PC), bits_to_int(displacement),temp_V, temp_N); if ((cm_V and cc_V) or (cm_N and cc_N) or (cm_Z and cc_Z))= cm_i then PC := effective_addr; end if; -- [...] end case; end if; end process; end behaviour;

24 23 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Injection de code x86 Cas retenu : Windows x86 Problème : Pas daccès à la mémoire virtuelle, les pages peuvent être partout en mémoire physique… Possibilités : Reconstruire la disposition de la mémoire virtuelle depuis les objets noyau (difficile) Utiliser un point fixe, par ex.: adresse de chargement du noyau Supposer la non fragmentation des images PE Mapping linéaire entre physique / virtuel Injecter un 1 er shellcode dans un trou r-x (fin de.text) Mettre un hook inline afin dappeler le shellcode Le shellcode alloue la mémoire et place des marqueurs afin que le FPGA les détecte et insère le shellcode de 2 ème niveau

25 24 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Injection de code x86 Quel processus doit être hooké ? Notre choix: winlogon.exe Plus particulièrement: SASWndProc(), Privilèges SYSTEM, plus le confort dun environnement Win32 Conservé sur les différentes versions de Windows Note : Les protections MMU (pages en lecture seule) sont outrepassées Les accès DMA ne passent pas par la MMU du CPU Note : Espace dadresse pour les instructions Load/Store 0x0000 0x7FFF : BlockRAM interne au FPGA Au-dessus: redirigé vers lespace dadressage PCI Travail en cours…

26 25 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Protections Méthode simple : Mettre de la colle à lintérieur des ports PCI et PC Card Tout le monde nen a pas forcément envie… Sur les portables: désactiver les pilotes Cardbus Penser aussi à désactiver les pilotes FireWire Les nouveaux processeurs ont une IOMMU Doit être activé dans le noyau (CONFIG_DMAR) Ce nest pas le cas sur le.config du noyau Debian Autres protections Joanna Rutkowska (2007) : il est possible de configurer le bus HyperTransport afin de causer un déni de service Si plus de 4 GiB de RAM, patcher le kernel pour réserver les 4 premiers giga-octets aux accès DMA

27 26 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Conclusion Le protocole PCI et larchitecture x86 ont été conçus à un moment où la sécurité matérielle était inexistante… Les consoles de jeu modernes sont plus évoluées Xbox360 : une clef unique par CPU PS3 : pas encore dattaque réussie Informatique de confiance, cf. Loïc Duflot (2008, 2009) Intel TXT, IOMMU (VT-d) très peu utilisés Futurs travaux Porter lattaque sur ExpressCard, tester les adaptateurs Améliorer la porte dérobée afin de travailler avec dautres OS (Linux) Contourner lIOMMU en ciblant dautre périphériques du bus

28 27 < ISS – SSTIC 2009 – Compromission physique par le bus PCI Q & A Merci pour votre attention ! ce panda a compris la norme PCI !


Télécharger ppt "Information Security Systems Compromission physique par le bus PCI Christophe Devine / Guillaume Vissian SSTIC, 3 Juin 2009."

Présentations similaires


Annonces Google