Backdoors furtives et autres fourberies dans le noyau Arnaud - - PowerPoint PPT Presentation

backdoors furtives et autres fourberies dans le noyau
SMART_READER_LITE
LIVE PREVIEW

Backdoors furtives et autres fourberies dans le noyau Arnaud - - PowerPoint PPT Presentation

Backdoors furtives et autres fourberies dans le noyau Arnaud Ebalard <troglocan@droids-corp.org> Pierre Lalet <pierre@droids-corp.org> Olivier Matz <zer0@droids-corp.org> Les 45 prochaines minutes ... Injection de code


slide-1
SLIDE 1

Backdoors furtives et autres fourberies dans le noyau

Arnaud Ebalard <troglocan@droids-corp.org> Pierre Lalet <pierre@droids-corp.org> Olivier Matz <zer0@droids-corp.org>

slide-2
SLIDE 2

Les 45 prochaines minutes ...

  • Injection de code
  • Récupération de données
  • Emission de trames
  • Interaction
  • Furtivité
slide-3
SLIDE 3

Les intervenants

  • Un administrateur
  • augmenter le niveau de sécurité
  • HIDS avancé
  • Un “pirate”, pour agir avec ...
  • plus de discrétion
  • plus de pouvoir
slide-4
SLIDE 4

Le noyau

  • Interface entre le matériel et les processus
  • Coordination des processus
  • Gestion de l’accès aux ressources
  • Passage obligé des E/S
slide-5
SLIDE 5

Injection de code

slide-6
SLIDE 6

Patch des sources

  • Nécessité :
  • sources
  • configuration
  • redémarrage
  • Public visé : l’administrateur
slide-7
SLIDE 7

LKM

  • Code chargé dynamiquement pour

étendre les fonctionnalités du noyau

  • Développement simple
  • Relative furtivité
  • Pas forcément autorisé
slide-8
SLIDE 8

/dev/kmem (1/2)

  • Accès userland à l’espace noyau
  • Données binaires difficiles à manipuler,

symboles non résolus, allocation mémoire.

  • Sensibilité au reboot
  • Pas forcément accessible
slide-9
SLIDE 9

/dev/kmem (2/2)

  • Recherche des fonctions read et write

(par le début de leur code)

  • Recherche de la structure composée de

leurs adresses

read write

Table des appels systèmes

slide-10
SLIDE 10

Conclusion

  • Patch : simple, furtif, réservé aux admin.
  • LKM : simple, moins furtif, parfois

impossible.

  • /dev/kmem : très technique, accessibilité

aléatoire.

  • Patch du binaire (complément des

attaques dynamiques)

slide-11
SLIDE 11

Récupération de données

slide-12
SLIDE 12

User Space Noyau Matériel

Appels systèmes Pile réseau VFS Gestion mémoire FS

processus 1 processus 3 processus 2

Mémoire

Carte réseau Disque dur

Disque dur Carte réseau Drivers

1

slide-13
SLIDE 13

User Space Noyau Matériel

Appels systèmes Pile réseau VFS Gestion mémoire FS

processus 1 processus 3 processus 2

Mémoire

Carte réseau Disque dur

Disque dur Carte réseau Drivers

2

slide-14
SLIDE 14

User Space Noyau Matériel

Appels systèmes Pile réseau VFS Gestion mémoire FS

processus 1 processus 3 processus 2

Mémoire

Carte réseau Disque dur

Disque dur Carte réseau Drivers

3

slide-15
SLIDE 15

User Space Noyau Matériel

Appels systèmes Pile réseau VFS Gestion mémoire FS

processus 1 processus 3 processus 2

Mémoire

Carte réseau Disque dur

Disque dur Carte réseau Drivers

4

slide-16
SLIDE 16

User Space Noyau Matériel

Appels systèmes Pile réseau VFS Gestion mémoire FS

processus 1 processus 3 processus 2

Mémoire

Carte réseau Disque dur

Disque dur Carte réseau Drivers

5

slide-17
SLIDE 17

Hook d’appel système Version 1 : simple

  • Hook intéressant : read, write ...
  • Simplicité
  • Furtivité limitée
  • Nécessite l’accès à la table
slide-18
SLIDE 18

read faux_read Table des appels systèmes Linux : syscall_handler_t *sys_call_table[ ]; BSD : struct sysent sysent[ ];

slide-19
SLIDE 19

Hook d’appel système version 2 : JUMP

  • Aucune modification de la table
  • Recodage obligatoire de la routine
  • Dépendance vis-à-vis de l’architecture
  • Furtivité accrue
slide-20
SLIDE 20

read read faux_read

J U M P

Avant Après

slide-21
SLIDE 21

Interruptions

  • Retrouver l’adresse de l’IDT
  • Fournir l’adresse de notre routine
  • Réalisable par /dev/kmem ou LKM
  • Très bas niveau, extrêmement technique,

non portable

slide-22
SLIDE 22

Conclusion

  • Larges possibilités de hooks
  • Nombreuses techniques
  • Furtivité variable
slide-23
SLIDE 23

Emission de trames

slide-24
SLIDE 24

Juste avant le driver

  • Allocation mémoire
  • Remplissage de la structure représentant

la trame

  • Checksum
  • Mise en queue et émission
slide-25
SLIDE 25

Headers réseau

(ethernet + IP + UDP)

Données NULL

m_data m_data m_next m_next

m_hdr pkthdr MH_databuf MHLEN m_hdr M_databuf MLEN m_len m_flags = M_PKTHDR m_next m_data pktlen m_len m_next m_data

libre libre

slide-26
SLIDE 26

s = splnet(); /* If output queue is already full, we drop the packet */ if (IF_QFULL(ifq)) { m_freem(m); return -1; } /* Else we can enqueue our mbuf */ IF_ENQUEUE(ifq, m); /* If interface is active, we can start sending */ if (!(ifp->if_flags & IFF_OACTIVE)) (*ifp->if_start)(ifp); splx(s);

slide-27
SLIDE 27

Conclusion

  • Pas de difficulté technique majeure
  • Bas niveau, i.e. au plus proche du

driver

  • Furtivité (considérée plus tard)
slide-28
SLIDE 28

Interactions

slide-29
SLIDE 29

Interaction

  • Masquer
  • flux réseau
  • fichier
  • processus
  • Récupération de fichiers
  • Emission de trafic réseau
slide-30
SLIDE 30

Conclusion

  • Diminution de la furtivité
  • Valeur ajoutée
  • Attaques “génériques”
slide-31
SLIDE 31

Furtivité

slide-32
SLIDE 32

Locale

  • Masquer la présence d’un module
  • Réseau : masquer le trafic entrant/sortant
  • bpf
  • pile réseau
slide-33
SLIDE 33

Distante

  • NIDS
  • p0f
  • logs firewall
  • snort
  • Penser au retour
  • Trafic légitime
slide-34
SLIDE 34

BPF Driver Carte réseau Pile réseau

for (d = bp->bif_dlist; d != 0; d = d->bd_next) { // ++d->bd_rcount; if(filter(pkt, pktlen)) { ++d->bd_rcount; slen = bpf_filter(d->bd_filter, pkt, pktlen, pktlen); if (slen != 0) catchpacket(d, pkt, pktlen, slen, memcpy); } }

Masquage de trafic

slide-35
SLIDE 35

Conclusion

  • Capacité technique de l’attaquant
  • Paranoïa et capacités de l’adversaire
  • Architecture réseau
slide-36
SLIDE 36

Prévention

  • Limiter l’accès aux symboles
  • strip /bsd
  • System.map
  • Interdire les modules
  • Intégrité de l’image du noyau
  • Limiter les accès à /dev/kmem
  • Surveillance du traffic
  • Surveiller les reboot
slide-37
SLIDE 37

Des questions ?

slide-38
SLIDE 38

Remerciements

  • Laurent Oudot (recette de cuisine)
  • Fred, Phil et Serpillière pour la relecture
  • Team RSTACK
  • You guys rule !