• Visite de GRID5000 :)
  • Conférence sur la sécurité des dns

Sécurisation des DNS : avec ipsec

Pas de commentaires.. :)

  • Conférence sur la corruption de la mémoire

Comment faire une attaque informatique ?

Recolter les informations :

  • Social engineering
  • Via le web
  • Source réseau : topologie : nmap etc..

Etape suivante :

attaque et exploitation

tirer profit d'une faille de sécurité dans un programme : buffer overflow, format string etc..

Utilisation d'un exploit :

Envoi d'un shell code

Type de payload :

  • Ajout d'un utilisateur
  • d'un service

Type de shellcode !

  • bind d'un shellcode

Se connecter à l'exterieur..

Ou utilisation d'un socket déjà existant pour etre invible.

Augmentation d'un privilège sur la machine.

Utilisation d'un backdoor :

Prendre le contrôle total de la machine.

Types de backdoor :

Modification d'un binaire, du noyau. L'idéal est de directement modifier la mémoire, avec des outils comme ptrace

Dernière étape :

Effacer les traces

Exemple d'une attaque tout en mémoire :

Execution à distance :

  • Syscall proxy
  • Remote userland

Syscall proxy :

Executer les appels systèmes sur la machine distante

un programme fait des appels système :

exemple : OPEN, READ, CLOSE

Dans le cas du syscall proxy, il y'a un client/serveur qui permets de déporter les appels système.

Seuls les appels système sont transférés a la machine distante. Ce qui permets d'executer les programmes chez l'attaquant.

Seconde technique :

Remote Userland Execve :

Remplacer un processus, par celui de l'attaquant. Tout cela en mémoire.

Une fois que le payload est installé, on install une backdoor :

Injection de librairies à distance, on peut le faire en assembleur, mais il est plus pratique de le faire en C

Grace aux librairies : ajout d'un petit code assembleur dlopen() grace à ptrace()

Rediriger une fonction à l'aide de GOT redirection

Tout est envoyé via une socket, stockée dans l'espace d'adressage du processus.dlopen(à écrit sur le disque, mais cela pose problème.

Alors il faut utiliser tmpfs, ou recoder dlopen(), c'est une fonction à recoder.

Constatations :

  • le serveur est condamné à mourrir, car la mémoire est corrompu
  • le serveur ne peut pas être relancé, le port est déjà bindé
  • le serveur ne peut être relancé, par manque de privilèges

... je vous passe les détails.. trop complexe :)