vendredi, juin 2 2006, 11:44
SSTIC Rennes Day 3 (début de la journée)
Par Alex - Conférences - Lien permanent
- 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 :)
aucun commentaire