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

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

Embed Size (px)

Citation preview

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

Information Security Systems

Compromission physique par le bus PCI

Christophe Devine / Guillaume VissianSSTIC, 3 Juin 2009

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

2

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

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 l’architecture 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, …

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

3

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

État de l’art

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 d’hibernation 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 à Schmoocon’06 (mais rien en ligne) J. Rutkowska (2007), invisiblethings.com Nicolas Ruff (2008)

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

4

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Notre contribution

Au delà de l’attaque théorique: développement d’un « proof of concept » concret Utile dans certains scénario (tests d’intrusion par exemple)

Documenter notre démarche expérimentale et les problèmes d’implémentation rencontrés

Faire prendre conscience du danger posé par les attaques depuis le bus PCI ou PCI express

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

5

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

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 Aujourd’hui 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 2000. Très proche de PCI

PCI Express / ExpressCard Différent du PCI, mais autorise aussi le DMA

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

6

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Explication de la vulnérabilité

N’importe 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 l’adresse 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 d’accès à la DRAM.

Les CPU x86 (sauf les plus récents) n’implémentent pas d’unité de contrôle des E/S mémoire (IOMMU)

Pas de support dans les systèmes d’exploitation

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

7

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Avantages de l’attaque

Difficile à détecter par le système d’exploitation Nous ne répondons pas aux requêtes vers l’espace de configuration

Pas d’apparition 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, l’accè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

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

8

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

À la recherche du hardware perdu

L’attaque requiert l’accès direct au bus PCI

La plupart des chipsets PCI / Cardbus standards implémentent le PCI en interne Pas d’accès bas-niveau Solution : utiliser un FPGA (logique programmable)

Choix du hardware: Carte PCI, Raggedstone1 (environ 120 $) Carte Cardbus, COM-1300-C (environ 300 $)

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

9

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

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 d’erreur: « Memory Program Failed » Peut-être lié à la gestion de l’alimentation (CCLKRUN#) ? Solution temporaire : utiliser un vieil ordinateur (2002) pour flasher

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

10

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Remerciements spéciaux

Pierre T. pour sa contribution active à la découpe de câble en urgence

Allez Pierre ! Tu y es presque

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

11

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

À 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

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

12

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

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 d’amplification 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 d’horloge)

Exemple: inverseur

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

13

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

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 d’horloge

maximale

Toute la logique combinatoire s’exécute en parallèle Les éléments à mémoire sont mis à jour au front montant suivant

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

14

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Flot d’implémentation du matériel

1. Synthèse Code de haut niveau compilé dans des blocs : flip-flops,

adders…

2. Simulation du comportement Création d’un 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

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

15

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

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

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

16

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Des signaux PCI

Tous les signaux sont “actifs bas” (#) 0 = actif, 1 = inactif Explication électrique possible : la coupure d’un 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 qu’il 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

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

17

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

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 l’hôte) et CSERR# (signal d’erreur) en

état haut

CCLKRUN# Les PC portables récents ont une gestion d’énergie agressive Mis à 0 afin d’empêcher le contrôleur Cardbus de désactiver notre

horloge Ne respecte pas les specs., mais on s’en fiche – ça marche ;p

Beaucoup d’autres signaux laissés en flottant Signaux d’erreurs ignorés (encore une fois non respect des specs.) Toutes autres requêtes, notamment Configuration Space, sont

ignorées par la carte

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

18

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

(Ré) implementation de l’attaque winlockpwn

Patche MSV1_0.dll afin d’autoriser le login avec n’importe quel mot de passe Windows XP, offset / data codé en dur Patche la fonctionMsvpPasswordValidate()

Machine à état :

Démo time!

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

19

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

La conception d’un CPU (1/5)

Pourquoi avoir conçu et implémenté un processeur ? Les machines à état complexes sont difficiles à coder en VHDL Permet l’implé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 s’amuser à coder avec des zéros et des uns !

Une expérience enrichissante

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

20

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

La conception d’un 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 d’opérations basiques add, sub, mul, shl, etc. Opère sur des mots de 32 bits

Un jeu d’opération “plus évoluées” br, bnz, brz, ...

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

21

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

La conception d’un CPU (3/5)

Listing partiel des opcodes implémentés:Instruction Opcode (Hex) Opérande Destination

add 00 r1,r2 r3

sub 01 r1,r2 r3

mul 02 r1,r2 r3

div 03 r1,r2 r3

cmp 04 r1,r2 r3

or 05 r1,r2 r3

and 08 r1,r2 r3

addq (Add quick)

10 r1,ld r3

br (branch) 40 PC + addr 32b PC

bri (indexed branch)

41 r1 + addr 32b PC

brq 50 PC+lb PC

brz 42 r1 + addr 32b PC

shl 60 r1,r2 r3

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

22

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

La conception d’un CPU (4/5)

Exemple d’implé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;

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

23

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

La conception d’un CPU (5/5)

Un aperçu de l’ALU --[...] 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 if; -- [...] end case; end if; end process;end behaviour;

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

24

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Injection de code x86

Cas retenu : Windows x86

Problème : Pas d’accè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 1er shellcode dans un “trou” r-x (fin de .text) Mettre un hook inline afin d’appeler 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

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

25

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Injection de code x86

Quel processus doit être hooké ?

Notre choix: winlogon.exe Plus particulièrement: SASWndProc(), Privilèges SYSTEM, plus le confort d’un 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 d’adresse pour les instructions Load/Store 0x0000 0x7FFF : BlockRAM interne au FPGA Au-dessus: redirigé vers l’espace d’adressage PCI

Travail en cours…

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

26

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Protections

Méthode simple : Mettre de la colle à l’intérieur des ports PCI et PC Card Tout le monde n’en 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 n’est 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

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

27

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Conclusion

Le protocole PCI et l’architecture 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 d’attaque réussie

Informatique de confiance, cf. Loïc Duflot (2008, 2009) Intel TXT, IOMMU (VT-d) très peu utilisés

Futurs travaux Porter l’attaque sur ExpressCard, tester les adaptateurs Améliorer la porte dérobée afin de travailler avec d’autres OS

(Linux) Contourner l’IOMMU en ciblant d’autre périphériques du bus

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

28

<IS

S –

SS

TIC

200

9 –

Com

prom

issi

on p

hysi

que

par

le b

us P

CI

Q & A

Merci pour votre attention !

ce panda a compris la norme PCI !