BinCAT Purrfecting binary static analysis 8 juin 2017 Philippe - - PowerPoint PPT Presentation

bincat
SMART_READER_LITE
LIVE PREVIEW

BinCAT Purrfecting binary static analysis 8 juin 2017 Philippe - - PowerPoint PPT Presentation

BinCAT Purrfecting binary static analysis 8 juin 2017 Philippe Biondi, Raphal Rigo, Sarah Zennou, Xavier Mehrenberger Plan Introduction Dmonstration Sous le capot Conclusion 2 Biondi, Mehrenberger, Rigo, Zennou :: BinCAT Plan


slide-1
SLIDE 1

BinCAT

Purrfecting binary static analysis

8 juin 2017

Philippe Biondi, Raphaël Rigo, Sarah Zennou, Xavier Mehrenberger
slide-2
SLIDE 2

Plan

Introduction Démonstration Sous le capot Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

2

slide-3
SLIDE 3

Plan

Introduction Démonstration Sous le capot Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

3

slide-4
SLIDE 4

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

4

slide-5
SLIDE 5

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

5

slide-6
SLIDE 6

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

6

slide-7
SLIDE 7

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

7

slide-8
SLIDE 8

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

8

slide-9
SLIDE 9

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

9

slide-10
SLIDE 10

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

10

slide-11
SLIDE 11

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible x86 . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

11

slide-12
SLIDE 12

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible langage inter- médiaire . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

12

slide-13
SLIDE 13

BinCAT (Binary Code Analysis Toolkit)

Analyseur d’exécutables

extensible langage inter- médiaire . . . x86 . . . statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées . . . types CFG avec sauts indirects taint analysis valeurs . . . Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

13

slide-14
SLIDE 14

Plan

Introduction Démonstration Sous le capot Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

14

slide-15
SLIDE 15

Exemple : keygenme

$ ./get_key Usage: ./get_key company department name licence

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

15

slide-16
SLIDE 16

Exemple : keygenme

$ ./get_key Usage: ./get_key company department name licence $ ./get_key company department name wrong_serial

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

16

slide-17
SLIDE 17

Exemple : keygenme

$ ./get_key Usage: ./get_key company department name licence $ ./get_key company department name wrong_serial Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7] Invalid serial licence

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

17

slide-18
SLIDE 18

Exemple : keygenme

$ ./get_key Usage: ./get_key company department name licence $ ./get_key company department name wrong_serial Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7] Invalid serial licence $ ./get_key company department name 025E60CB0[...]

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

18

slide-19
SLIDE 19

Exemple : keygenme

$ ./get_key Usage: ./get_key company department name licence $ ./get_key company department name wrong_serial Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7] Invalid serial licence $ ./get_key company department name 025E60CB0[...] Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7] Thank you for registering !

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

19

slide-20
SLIDE 20

Keygenme : principe

argv[0] department company name CRC CRC CRC CRC

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

20

slide-21
SLIDE 21

Keygenme : principe

argv[0] department company name CRC CRC CRC CRC mul

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

21

slide-22
SLIDE 22

Keygenme : principe

argv[0] department company name CRC CRC CRC CRC mul sprintf

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

22

slide-23
SLIDE 23

Keygenme : principe

argv[0] department company name CRC CRC CRC CRC mul sprintf

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

23

slide-24
SLIDE 24

Keygenme : principe

argv[0] department company name CRC CRC CRC CRC mul sprintf SHA-1

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

24

slide-25
SLIDE 25

Keygenme : principe

argv[0] department company name CRC CRC CRC CRC mul sprintf SHA-1 hex encode

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

25

slide-26
SLIDE 26

Keygenme : principe

argv[0] department company name CRC CRC CRC CRC mul sprintf SHA-1 hex encode license

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

26

slide-27
SLIDE 27

Démo 1 : Utilisation de BinCAT

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

27

slide-28
SLIDE 28

Démo 2 : Teinte

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

28

slide-29
SLIDE 29

Plan

Introduction Démonstration Sous le capot Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

29

slide-30
SLIDE 30

Architecture

plugin IDA IDA

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

30

slide-31
SLIDE 31

Architecture

plugin IDA IDA exécutable bincat

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

31

slide-32
SLIDE 32

Architecture

plugin IDA IDA exécutable bincat configuration, binaire...

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

32

slide-33
SLIDE 33

Architecture

plugin IDA mode local IDA exécutable bincat configuration, binaire... résultats, logs

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

33

slide-34
SLIDE 34

Architecture

plugin IDA mode distant IDA exécutable bincat serveur web REST REST

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

34

slide-35
SLIDE 35

Architecture

plugin IDA mode distant IDA exécutable bincat serveur web REST REST

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

35

slide-36
SLIDE 36

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132| Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

36

slide-37
SLIDE 37

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

state4

IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

37

slide-38
SLIDE 38

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

Décodeur PC, contexte, segments

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

38

slide-39
SLIDE 39

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

Décodeur langage intermédiaire

eax ← (eax + 0x1); zf ← eax=0 ? 1 : 0; sf ← (eax >> 0x1f)=1 ? 1 : 0; . . .

inc eax

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

39

slide-40
SLIDE 40

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

Décodeur langage intermédiaire

eax ← (eax + 0x1); zf ← eax=0 ? 1 : 0; sf ← (eax >> 0x1f)=1 ? 1 : 0; . . .

inc eax

intermédiaire

eax ← (eax + 0x1); zf ← eax=0 ? 1 : 0; sf ← (eax >> 0x1f)=1 ? 1 : 0; . . .

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

40

slide-41
SLIDE 41

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

Décodeur langage intermédiaire

eax ← (eax + 0x1); zf ← eax=0 ? 1 : 0; sf ← (eax >> 0x1f)=1 ? 1 : 0; . . .

Générateur d’états

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

41

slide-42
SLIDE 42

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

Décodeur Générateur d’états state5

EIP=0x0804123D EAX=0x00080000 ZF=0 mem[0x1000]=|303132| Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

42

slide-43
SLIDE 43

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

Décodeur Générateur d’états state5

EIP=0x0804123D EAX=0x00080000 ZF=0 mem[0x1000]=|303132|

state4

IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132|

state5

EIP=0x0804123D EAX=0x00080000 ZF=0 mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

43

slide-44
SLIDE 44

Reconstruction du graphe de flot de contrôle

state1 state2 state3 state4 state5

IP=0x08041236 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|323130| IP=0x08041238 EAX=0x00000000 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804123A EAX=0x12345678 EBX=0x87654321 mem[0x1000]=|303132| IP=0x0804143D EAX=0x12345678 EBX=0x8765432? mem[0x1000]=|303132| EIP=0x0804123C EAX=0x0007FFFF ZF=1 mem[0x1000]=|303132| EIP=0x0804123D EAX=0x00800000 ZF=0 mem[0x1000]=|303132|

Décodeur Générateur d’états state5

EIP=0x0804123D EAX=0x00080000 ZF=0 mem[0x1000]=|303132|

si nouveau

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

44

slide-45
SLIDE 45

Validation théorique : l’analyse statique par interprétation abstraite

  • les opérations sur les valeurs/taint/type sont faites sur des objets abstraits

qui représentent des ensembles de valeurs/taint/type ex : 0 ≡ {0}, ? ≡ {entiers}, Struct ≡ {structures C}

  • les calculs abstraits sont toujours une surapproximation du calcul réel
  • exemple d’approximation : l’élargissement ∇ des boucles
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

45

slide-46
SLIDE 46

Validation théorique : l’analyse statique par interprétation abstraite

  • les opérations sur les valeurs/taint/type sont faites sur des objets abstraits

qui représentent des ensembles de valeurs/taint/type ex : 0 ≡ {0}, ? ≡ {entiers}, Struct ≡ {structures C}

  • les calculs abstraits sont toujours une surapproximation du calcul réel
  • exemple d’approximation : l’élargissement ∇ des boucles

s1: esi = 0x1000, uint32* while esi < 0x8000

  • esi = esi + 4
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

46

slide-47
SLIDE 47

Validation théorique : l’analyse statique par interprétation abstraite

  • les opérations sur les valeurs/taint/type sont faites sur des objets abstraits

qui représentent des ensembles de valeurs/taint/type ex : 0 ≡ {0}, ? ≡ {entiers}, Struct ≡ {structures C}

  • les calculs abstraits sont toujours une surapproximation du calcul réel
  • exemple d’approximation : l’élargissement ∇ des boucles

s1: esi = 0x1000, uint32* s2: esi = 0x1004, uint32* s′

2 = s1∇s2

esi = 0x????????, uint32* while esi < 0x8000

  • esi = esi + 4
  • Principe :
  • ce qui est stable est gardé
Ex : type
  • ce qui est instable est
surapproximé Ex : valeur Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

47

slide-48
SLIDE 48

Validation théorique : l’analyse statique par interprétation abstraite

  • les opérations sur les valeurs/taint/type sont faites sur des objets abstraits

qui représentent des ensembles de valeurs/taint/type ex : 0 ≡ {0}, ? ≡ {entiers}, Struct ≡ {structures C}

  • les calculs abstraits sont toujours une surapproximation du calcul réel
  • exemple d’approximation : l’élargissement ∇ des boucles

s1: esi = 0x1000, uint32* s2: esi = 0x1004, uint32* s′

2 = s1∇s2

esi = 0x????????, uint32* s3: esi = 0x????????, uint32* s′

3 = s′ 2∇s3

esi = 0x????????, uint32* while esi < 0x8000

  • esi = esi + 4
  • Principe :
  • ce qui est stable est gardé
Ex : type
  • ce qui est instable est
surapproximé Ex : valeur Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

48

slide-49
SLIDE 49

Validation théorique : l’analyse statique par interprétation abstraite

  • les opérations sur les valeurs/taint/type sont faites sur des objets abstraits

qui représentent des ensembles de valeurs/taint/type ex : 0 ≡ {0}, ? ≡ {entiers}, Struct ≡ {structures C}

  • les calculs abstraits sont toujours une surapproximation du calcul réel
  • exemple d’approximation : l’élargissement ∇ des boucles

s1: esi = 0x1000, uint32* s2: esi = 0x1004, uint32* s′

2 = s1∇s2

esi = 0x????????, uint32* s3: esi = 0x????????, uint32* s′

3 = s′ 2∇s3

esi = 0x????????, uint32* s2 s3 sn ⊑ ⊑ ⊑ while esi < 0x8000

  • esi = esi + 4
  • Principe :
  • ce qui est stable est gardé
Ex : type
  • ce qui est instable est
surapproximé Ex : valeur
  • Théorème 1 : la suite (s′
i ) est

ultimement stationnaire

  • Théorème 2 : le point fixe s′
f est

une surapproximation de la trace d’exécution réelle

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

49

slide-50
SLIDE 50

Validation théorique : l’analyse statique par interprétation abstraite

  • les opérations sur les valeurs/taint/type sont faites sur des objets abstraits

qui représentent des ensembles de valeurs/taint/type ex : 0 ≡ {0}, ? ≡ {entiers}, Struct ≡ {structures C}

  • les calculs abstraits sont toujours une surapproximation du calcul réel
  • exemple d’approximation : l’élargissement ∇ des boucles

s1: esi = 0x1000, uint32* s2: esi = 0x1004, uint32* s′

2 = s1∇s2

esi = 0x????????, uint32* s3: esi = 0x????????, uint32* s′

3 = s′ 2∇s3

esi = 0x????????, uint32* s2 s3 sn ⊑ ⊑ ⊑ while esi < 0x8000

  • esi = esi + 4
  • Principe :
  • ce qui est stable est gardé
Ex : type
  • ce qui est instable est
surapproximé Ex : valeur
  • Théorème 1 : la suite (s′
i ) est

ultimement stationnaire

  • Théorème 2 : le point fixe s′
f est

une surapproximation de la trace d’exécution réelle

  • des techniques existent pour

retrouver de la précision

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

50

slide-51
SLIDE 51

Validation empirique

  • La théorie est correcte
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

51

slide-52
SLIDE 52

Validation empirique

  • La théorie est correcte
  • En théorie, l’implementation aussi
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

52

slide-53
SLIDE 53

Validation empirique

  • La théorie est correcte
  • En théorie, l’implementation aussi
  • En pratique, nombreuses sources de bug : décodeur, opérations abstraites,

etc.

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

53

slide-54
SLIDE 54

Validation empirique

  • La théorie est correcte
  • En théorie, l’implementation aussi
  • En pratique, nombreuses sources de bug : décodeur, opérations abstraites,

etc. = ⇒ nombreux tests unitaires

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

54

slide-55
SLIDE 55

Validation empirique

  • La théorie est correcte
  • En théorie, l’implementation aussi
  • En pratique, nombreuses sources de bug : décodeur, opérations abstraites,

etc. = ⇒ nombreux tests unitaires

  • tests BinCAT vs CPU : > 67.000 tests sur ≃ 55 instructions
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

55

slide-56
SLIDE 56

Validation empirique

  • La théorie est correcte
  • En théorie, l’implementation aussi
  • En pratique, nombreuses sources de bug : décodeur, opérations abstraites,

etc. = ⇒ nombreux tests unitaires

  • tests BinCAT vs CPU : > 67.000 tests sur ≃ 55 instructions
  • tests BinCAT vs tests QEMU : 87% des tests couverts sur ≃ 105
instructions Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

56

slide-57
SLIDE 57

Validation empirique

  • La théorie est correcte
  • En théorie, l’implementation aussi
  • En pratique, nombreuses sources de bug : décodeur, opérations abstraites,

etc. = ⇒ nombreux tests unitaires

  • tests BinCAT vs CPU : > 67.000 tests sur ≃ 55 instructions
  • tests BinCAT vs tests QEMU : 87% des tests couverts sur ≃ 105
instructions P A W S O M E ! ! ! Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

57

slide-58
SLIDE 58

Performances de l’analyseur

Exemple : keygenme:

  • 6407 instructions analysées
  • espace mémoire : 90 Mo de mémoire vive
  • temps d’analyse : 6 s
  • moyenne: ≃ 1060 instructions/s

Tests QEMU :

  • 209 120 instructions analysées
  • espace mémoire : 2,3 Go de mémoire vive
  • temps d’analyse : 23 min 30 s
  • moyenne: ≃ 150 instructions/s
Intel Core i7-6700K CPU @ 4,00GHz Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

58

slide-59
SLIDE 59

Plan

Introduction Démonstration Sous le capot Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

59

slide-60
SLIDE 60

Conclusion

Analyseur d’exécutables

extensible langage inter- médiaire x86 statique base théorique intégré à IDA analyses avant/ arrière propriétés calculées types CFG avec sauts indirects taint analysis valeurs Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

60

slide-61
SLIDE 61

Améliorations de l’existant

BinCAT extensible langage inter- médiaire x86 statique base théorique intégré à IDA analyses avan- t/arrière propriétés calculées reconstruction du CFG avec sauts indirects résolus types taint valeurs
  • reconstruction de types plus

précise

  • insertion de nouveaux types à
partir d’heuristiques. Ex : détection de structures sur la pile
  • distinction de différentes sources

de teinte

  • raffinement des calculs lors d’une

analyse arrière

  • modélisation de fonctions de

bibliothèques standard

  • override de valeurs et de types

dans IDA

  • définitions mémoire dans IDA
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

61

slide-62
SLIDE 62

Futures fonctionnalités

BinCAT extensible langage inter- médiaire x86 x86-64 ARM statique base théorique intégré à IDA analyses avan- t/arrière propriétés calculées reconstruction du CFG avec sauts indirects résolus reconstruction de types valeurs taint analysis recon- struction d’objets (C++)
  • approximations moins grossières dans le calcul des valeurs : utilisation

d’intervalles

  • reconstruction d’objets complexes (C++)
  • décodeurs x86-64 et ARM
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

62

slide-63
SLIDE 63

Merci !

  • projet partiellement financé par la DGA MI
  • sources disponibles (licence AGPL)

https://github.com/airbus-seclab/bincat docker run -p 5000:5000 airbusseclab/bincat

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

63

slide-64
SLIDE 64

Couverture x86

ADD PUSH ES POP ESOR PUSH CS 2 bytes

ADC PUSH SS POP SSSBB PUSH DS POP DS AND ES: DAASUB CS: DAS XOR SS: AAACMP DS: AAS

INCDEC

PUSHPOP

PUSHA POPA BOUND ARPL FS: GS: OPSIZE: ADSIZE: PUSH IMUL PUSH IMUL INSB INSW OUTSB OUTSW

JNO JNO JB JNB JZ JNZ JBE JA JS JNS JP JNP JL JNL JLE JNLE

Grp1 Grp1 Grp1 TEST XCHGMOV LEA MOV POP

NOP XCHG EAX CWD CDQ CALL WAIT PUSHF POPF SAHF LAHF

MOV EAX MOVS CMPS TEST STOS LODS SCAS

MOV

SHIFT RETN LES LDS MOV ENTER LEAVE RETF INT3 INT INTO IRETD

Grp2 AAM AAD SALC XLATFPU

LOOPNZ LOOPZ LOOP JCXZ IN OUT CALL JMP JMPF JMPS IN OUT

LOCK: INT1 REPNE: REP: HLT CMC Grp3 CLC STC CLI STI CLD STD Grp4 Grp5

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

64

slide-65
SLIDE 65

Couverture x86 - deuxième table Grp6 Grp7 LAR LSL

CLTS INVD WBINVD

UD2 NOP

SSE PrefetchSSE1 HINT NOP

MOV CR DR

SSE

WRMSR RDTSC RDMSR RDPMC SYSENTER SYSEXIT GETSECSMX MOVBE

SSE

CMOV

SSE

MMX SSE

MMX SSE VMX

MMX SSE

JNO JNO JB JNB JZ JNZ JBE JA JS JNS JP JNP JL JNL JLE JNLE

SETNO SETNO SETB SETNB SETZ SETNZ SETBE SETA SETS SETNS SETP SETNP SETL SETNL SETLE SETNLE PUSH FS POP FS CPUID BT SHLD PUSH GS POP GS RSM BTS SHRD FENCE IMUL

CMPXCHG LSS BTR LFS LGS MOVZX POPCNT UD BTx BTC BSF BSR MOVSX

XADDSSE CMPXCHGBSWAP

MMX SSE MMX SSE

MMX SSE

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

65

slide-66
SLIDE 66

Treillis actuellement implémentés

⊤ . . . ⊥ 7

  • 4

. . . . . . très précis peu précis ⊑ ⊤ untainted tainted ⊥ ⊤ int struct . . . . . . int32 uint32 ⊥ très précis peu précis ⊑

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT

66