Test de SSH Risk Assessor

ssh communications security logoIl y a peu sur korben.info paraissait un article présentant un outil capable d’auditer l’implémentation de SSH sur un réseau : SSH Risk Assessor par la société SSH Communications Security (vous pouvez demander une invitation pour la beta sur le site). L’intérêt est évident, aujourd’hui toutes les entreprises et un certain nombre de particuliers technophiles utilisent ce protocole de communication. C’est un service extrêmement courant et tout aussi sensible qui est pourtant rarement au centre des préoccupations sécuritaires des entreprises. Analyser manuellement un environnement ssh pour estimer sa qualité est une activité extrêmement chronophage. Si cet outil tient ses promesses (ci-dessous), il constitue à lui seul une véritable mine d’heure !

Risk Reporting :

  • Generate a report to identify:
    • Total amounts of keys and related users
    • Host OS platforms and SSH versions
    • Known and unknown trust-relationships
    • Amount of root authorizations
    • User keys without command restrictions
    • User keys without source address or host
  • Scan environment for SSH user and host keys:Reachability analysis to determine potential damage due to a compromised private key
    • Duplicate/shared private keys
    • Private keys without passphrase protection
    • Key age, algorithms and lengths
    • User keys in non-root owned directories and writable by non-root users

Compare findings with :

  • Current IAM tracking to identify  undocumented and/or unauthorized keys
  • SSH version and access policies
  • Key cryptography policies
  • Key rotation practices

Compliance Reporting :

  • SOX DS 5.8 Cryptographic key management  for secure key storage and revocation
  • HIPAA Information Access requirements for key protection, strength, age, access and audit
  • NIST/FISMA section C.2.2 requirements for structured and documented process for key allocation, distribution and tracking. Key algorithm enforcement and tracking
  • NERC CIP-007-4 R5 Account Management requirements
  • PCI section 8.5.x access controls (SSH under consideration for PCI V3)

SSH Risk Assessor c’est quoi ?

Si vous avez eu la flemme de lire la feuille des features, je vous propose un petit résumé de ce qu’est SSH Risk Assessor.

La suite SSH Risk Assessor permet d’évaluer la sécurité de votre environnement SSH. Elle permet d’établir la liste des risques encourus par vos systèmes en mettant en évidence les faiblesses de configuration ou d’entretien de ce service : clé grabataires (trop faibles ou/et trop vieilles), clés passe partout (clé unique pour plusieurs systèmes)… Tout un tas de petites négligences ultra-fréquentes lorsque l’on est adepte du copier/coller de machines virtuelles !

Composition du programme

La solution se décompose en deux parties :

  • probe.pl est un script écrit en Perl qui permet de récupérer toutes les informations nécessaires à la construction d’un rapport détaillé sur l’état de votre machine, en ce qui concerne le SSH bien entendu ! Le fichier contenant ces informations est normalisé pour faciliter l’analyse et l’agrégation des données de tous les hôtes sur lesquels on aura lancé le script.
  • analyze est lui écrit en Python et a la particularité d’être compilé, dans un soucis de protection du code (et accessoirement de performance). Ce script va utiliser les fichiers créés par probe.pl, pour générer un rapport compréhensible et global en HTML, TXT ou CSV.

Quelques prérequis

  • python 2.6 ou plus (releases 3.x non supportées)
  • PErl 5.8 ou plus
  • ssh-keygen
  • sshpass (si vous choisissez d’utiliser la commande que je vais vous donner.)

Le script probe.pl doit être utilisé avec les privilèges root. En effet il va tenter de récupérer les clés des autres utilisateurs, ce qui ne peut se faire qu’avec des privilèges élevés… Mais ne vous inquiétez pas, le script n’altère pas vos confs, il se limite à de menues opérations de lecture et à la création de quelques fichiers temporaires… Mais vous pouvez auditer le code si bon vous semble ! :)

Comment ça marche ?

probe.pl

Le premier élément à utiliser est le script probe.pl. C’est lui qui permet de récupérer l’ensemble des informations liées au SSH. On peut par exemple l’utiliser pour auditer une machine locale :

 perl probe.pl > report

Ou distante, avec une commande à peine plus complexe :

ssh root@192.168.1.1 perl - < probe.pl > data/server_0

Si vous souhaitez automatiser cette tâche sans vous prendre la tête avec un outil de management, vous pouvez utiliser la commande ci-dessous :

for i in {1..254}; do sshpass -p conway ssh -o StrictHostKeyChecking=no root@192.168.1.$ENV$i perl - < probe.pl > data/server_$i & wait 1; done

Je vous met pas de 2>/dev/null et autres subtilités, l’ingénierie gobeline ça a aussi son charme ! ;)

Traitement post-probe

Vous l’avez sans doute remarqué, si la dernière commande manque bien de quelque chose c’est très certainement de subtilité ! Voici donc une commande qui vous permettra de faire un peu de ménage  dans votre dossier data/. Cette commande, lorsqu’elle est exécutée depuis un répertoire, supprime tous les fichiers vides du dossier et des sous dossiers que ce répertoire contient. Dans notre cas, les fichiers correspondant à chaque adresse IP où la connexion aura échoué !

find . -type f -empty -exec rm {} \;

Si vous souhaitez limiter ce nettoyage à l’endroit précis de votre système de fichier où vous vous trouvez, ajoutez simplement l’argument maxdepth qui limite la profondeur de recherche dans l’arborescence :

find . -maxdepth 1 -type f -empty -exec rm {} \;

Création du rapport avec analyze

La création du rapport se fait grâce au script analyze. Ce programme est capable de générer plusieurs types de fichiers : HTML, TXT ou CSV, mais le rapport HTML est le rapport le plus complet !

./analyze datafolder/ -o report.html
./analyze datafolder/ -o report.txt
./analyze datafolder/ -o report.csv

Remarque #1 : sans l’argument -o, le script transmet la version html du rapport sur la sortie standard.

./analyze datafolder/ > report.html

Remarque #2 : avec l’argument -o et une extension de fichier inconnue, le programme créer un rapport texte.

./analyze datafolder/ -o report.0x0ff

Le rapport

Bon, c’est un peu là ou le bât blesse (pour le moment). Le rapport traite un certain nombre de choses comme les types de systèmes utilisés, la version des serveurs SSH trouvés, la longueur des clés et leur chiffrement… Il fournit même des choses très intéressantes comme par exemple le nombre d’Authorized Keys présentes sur les serveurs scannés (ces fichiers qui permettent de se connecter à un système sans saisir de mot de passe) ! Le gros hic !, c’est que le rapport ne contient aucune indication sur quel hôte est concerné par chaque information présentée… Avouez que c’est quand même ballot si vous venez de scanner une centaine de postes… Alors, en attendant que la mise en page s’améliore, si vous voulez récupérer ces informations précieuses, il vous faudra parser vous même les fichiers créés par probe.pl !