
Audit de sécurité du serveur et du client SSH (bannière, échange de clés, chiffrement, MAC, compression, compatibilité, sécurité, etc.)
ssh-audit est un outil pour l'audit de configuration des serveurs et clients SSH.
jtesta/ssh-audit (v2.0+) est la version actualisée et maintenue de ssh-audit, issue d'un fork de arthepsy/ssh-audit (v1.x) en raison de son inactivité.
usage: ssh-audit.py [-h] [-4] [-6] [-b] [-c] [-d] [-g min1:pref1:max1[,min2:pref2:max2,...] / <x-y[:step]>] [-j] [-l {info,warn,fail}] [-L] [-M custom_policy.txt] [-m] [-n] [-P "Built-In Policy Name" / custom_policy.txt] [-p N] [-T targets.txt] [-t N] [-v] [--conn-rate-test N[:max_rate]] [--dheat N[:kex[:e_len]]] [--get-hardening-guide platform] [--list-hardening-guides] [--lookup alg1[,alg2,...]] [--skip-rate-test] [--socks5 host:port] [--threads N] [host]
positional arguments: host target hostname or IPv4/IPv6 address
optional arguments: -h, --help show this help message and exit -4, --ipv4 enable IPv4 (order of precedence) -6, --ipv6 enable IPv6 (order of precedence) -b, --batch batch output -c, --client-audit starts a server on port 2222 to audit client software config (use -p to change port; use -t to change timeout) -d, --debug enable debugging output -g min1:pref1:max1[,min2:pref2:max2,...] / <x-y[:step]>, --gex-test min1:pref1:max1[,min2:pref2:max2,...] / <x-y[:step]> conducts a very customized Diffie-Hellman GEX modulus size test. Tests an array of minimum, preferred, and maximum values, or a range of values with an optional incremental step amount -j, --json enable JSON output (use -jj to enable indentation for better readability) -l {info,warn,fail}, --level {info,warn,fail} minimum output level (default: info) -L, --list-policies list all the official, built-in policies. Combine with -v to view policy change logs -M custom_policy.txt, --make-policy custom_policy.txt creates a policy based on the target server (i.e.: the target server has the ideal configuration that other servers should adhere to), and stores it in the file path specified -m, --manual print the man page (Docker, PyPI, Snap, and Windows builds only) -n, --no-colors disable colors (automatic when the NO_COLOR environment variable is set) -P "Built-In Policy Name" / custom_policy.txt, --policy "Built-In Policy Name" / custom_policy.txt run a policy test using the specified policy (use -L to see built-in policies, or specify filesystem path to custom policy created by -M) -p N, --port N the TCP port to connect to (or to listen on when -c is used) -T targets.txt, --targets targets.txt a file containing a list of target hosts (one per line, format 'HOST[:PORT]'; for UNIX socket servers, use 'unix:///path/socket'). Use -p/--port to set the default port for all hosts. Use --threads to control concurrent scans -t N, --timeout N timeout (in seconds) for connection and reading (default: 5) -v, --verbose enable verbose output --conn-rate-test N[:max_rate] perform a connection rate test (useful for collecting metrics related to susceptibility of the DHEat vuln). Testing is conducted with N concurrent sockets with an optional maximum rate of connections per second --dheat N[:kex[:e_len]] continuously perform the DHEat DoS attack (CVE-2002-20001) against the target using N concurrent sockets. Optionally, a specific key exchange algorithm can be specified instead of allowing it to be automatically chosen. Additionally, a small length of the fake e value sent to the server can be chosen for a more efficient attack (such as 4). --get-hardening-guide platform retrieves the hardening guide for the specified platform name (use --list-hardening-guides to see list of available guides). --list-hardening-guides list all official, built-in hardening guides for common systems. Their full names can then be passed to --get-hardening-guide. Add -v to this option to view hardening guide change logs and prior versions. --lookup alg1[,alg2,...] looks up an algorithm(s) without connecting to a server. --skip-rate-test skip the connection rate test during standard audits (used to safely infer whether the DHEat attack is viable) --socks5 host:port connect via a SOCKS5 proxy (implies --skip-rate-test) --threads N number of threads to use when scanning multiple targets (-T/--targets) (default: 32)
* si IPv4 et IPv6 sont tous deux utilisés, l'ordre de priorité peut être défini en utilisant `-46` ou `-64`.
* l'option batch `-b` affichera les sections sans en-tête et sans lignes vides (implique l'option verbose).
* l'option verbose `-v` préfixera chaque ligne avec le type de section et le nom de l'algorithme.
* un code de sortie de 0 est renvoyé lorsque tous les algorithmes sont considérés comme sûrs (pour un audit standard), ou lorsqu'un contrôle de politique réussit (pour un audit de politique).
Audit de base du serveur :```
ssh-audit localhost
ssh-audit 127.0.0.1
ssh-audit 127.0.0.1:222
ssh-audit ::1
ssh-audit [::1]:222
ssh-audit unix:///run/ssh-unix-local/socket
Pour exécuter un audit standard sur plusieurs serveurs (placez les cibles dans servers.txt, une par ligne au format HOST[:PORT]) :```
ssh-audit -T servers.txt
Pour auditer une configuration client (écoute sur le port 2222/tcp par défaut ; connectez-vous avec `ssh -p 2222 anything@localhost`) :```
ssh-audit -c
Pour auditer une configuration client, avec un listener sur le port 4567/tcp :``` ssh-audit -c -p 4567
Pour lister toutes les politiques intégrées officielles (astuce : utilisez les noms de politiques ainsi obtenus avec `-P`/`--policy`) :```
ssh-audit -L
Pour exécuter un audit de politique sur un serveur :``` ssh-audit -P ["policy name" | path/to/server_policy.txt] targetserver
Pour exécuter un audit de politique sur un client :```
ssh-audit -c -P ["policy name" | path/to/client_policy.txt]
Pour exécuter un audit de politique sur de nombreux serveurs :``` ssh-audit -T servers.txt -P ["policy name" | path/to/server_policy.txt]
Pour créer une politique basée sur un serveur cible (qu'on peut modifier manuellement):```
ssh-audit -M new_policy.txt targetserver
Pour exécuter l'attaque DoS d'épuisement du CPU DHEat (CVE-2002-20001) contre une cible en utilisant 10 sockets simultanés :``` ssh-audit --dheat=10 targetserver
Pour lancer l'attaque DHEat avec l'algorithme d'échange de clés `diffie-hellman-group-exchange-sha256` :```
ssh-audit --dheat=10:diffie-hellman-group-exchange-sha256 targetserver
Pour exécuter l’attaque DHEat en utilisant l’algorithme d’échange de clés diffie-hellman-group-exchange-sha256 avec des longueurs de paquets très petites mais non standard (cela peut entraîner la même épuisement du processeur, mais avec beaucoup moins d’octets par seconde envoyés) :```
ssh-audit --dheat=10:diffie-hellman-group-exchange-sha256:4 targetserver
## Screenshots
### Exemple d'audit serveur standard
Vous trouverez ci-dessous une capture d'écran de la sortie standard de l'audit serveur lors de la connexion à un service OpenSSH v5.3 non durci :

### Exemple d'audit de politique serveur
Vous trouverez ci-dessous une capture d'écran de la sortie de l'audit de politique lors de la connexion à une machine Ubuntu Server 20.04 non durcie (astuce : utilisez `-L`/`--list-policies` pour voir les noms des politiques intégrées à utiliser avec `-P`/`--policy`) :

Après avoir appliqué les étapes du guide de durcissement (voir ci-dessous), la sortie devient :

### Exemple d'audit client standard
Vous trouverez ci-dessous une capture d'écran de la sortie de l'audit client lorsqu'un client OpenSSH v7.2 non durci se connecte :

## Guides de durcissement
Des guides pour durcir la configuration du serveur et du client sont intégrés à l'outil (voir les options `--list-hardening-guides` et `--get-hardening-guide`). De plus, ils sont également disponibles en ligne à l'adresse : [https://www.ssh-audit.com/hardening_guides.html](https://www.ssh-audit.com/hardening_guides.html)
## Paquets pré-construits
Des paquets pré-construits sont disponibles pour Windows (voir la page [Releases](https://github.com/jtesta/ssh-audit/releases)), PyPI, Snap et Docker :
Pour installer depuis PyPI :```
$ pip3 install ssh-audit
Pour installer le paquet Snap :``` $ snap install ssh-audit
Pour installer depuis Dockerhub :```
$ docker pull docker.io/positronsecurity/ssh-audit
(Puis exécutez avec : docker run -it --rm -p 2222:2222 docker.io/positronsecurity/ssh-audit 10.1.1.1)
L'état des différents paquets pour d'autres plates-formes est disponible ci-dessous (via Repology) :
Pour plus de commodité, une interface web reposant sur l'outil en ligne de commande est disponible sur https://www.ssh-audit.com/.
--list-hardening-guides et --get-hardening-guide). Auparavant, ils n'étaient disponibles que sur https://ssh-audit.com/hardening_guides.html, mais ils sont désormais intégrés pour plus de commodité ; crédit partiel oam7575.allow_hostkey_subset_and_reordering pour permettre aux cibles d'avoir une liste de clés d'hôte plus stricte et/ou un ordre différent de celles-ci.getopt obsolète vers argparse ; crédit partiel oam7575.-b) n'active plus automatiquement le mode verbeux, en raison de résultats parfois déroutants ; les utilisateurs peuvent toujours activer explicitement le mode verbeux à l'aide de l'option .-P et -T simultanément.--conn-rate-test sur Windows.-T/--targets), l'option / sera désormais utilisée comme port par défaut (défini sur 22 si / n'est pas fourni). Les hôtes spécifiés dans le fichier peuvent remplacer ce défaut par un numéro de port explicite (c.-à-d. : "host1:1234"). Par exemple, avec , tous les hôtes de qui n'incluent pas explicitement de numéro de port utiliseront 222 par défaut ; avec (sans ), tous les hôtes utiliseront 22 par défaut.--dheat ; CVE-2002-20001).ecdsa-sha2-nistp* sur les clés d'hôte. De plus, elles sont désormais signalées comme potentiellement piégées (backdoor), tout comme les clés d'hôte standard.-m, --manual) est désormais disponible sur les builds Docker, PyPI et Snap, en plus du build Windows.python:3-slim à python:3-alpine, entraînant une réduction de 59 % de la taille de l'image ; crédit Daniel Thamdrup.-L -v pour les afficher).allow_algorithm_subset_and_reordering pour permettre aux cibles de réussir avec un sous-ensemble et/ou une liste réordonnée de clés d'hôte, de kex, de chiffrements et de MAC. Cela permet de créer une politique de référence où les cibles peuvent éventuellement mettre en œuvre des contrôles plus stricts ; crédit partiel .[email protected] et ssh-ed25519 à la fin de tous les types de certificats.additional_notes à la sortie JSON.ecdsa-sha2-curve25519, ecdsa-sha2-nistb233, ecdsa-sha2-nistb409, ecdsa-sha2-nistk163, ecdsa-sha2-nistk233, , , , , , , .[email protected].-g et --gex-test pour des tests granulaires de taille de module GEX ; crédit Adam Russell.[email protected], [email protected], , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .-jj est utilisé (utile pour le débogage).-d/--debug pour obtenir une sortie de débogage ; crédit Adam Russell.rsa-sha2-512 et rsa-sha2-256.gss-gex-sha1-eipGX3TCiQSrx573bT1o1Q==, gss-group1-sha1-eipGX3TCiQSrx573bT1o1Q== et gss-group14-sha1-eipGX3TCiQSrx573bT1o1Q==.hmac-ripemd160-96, AEAD_AES_128_GCM et .-m/--manual) ; crédit Adam Russell.[email protected].[email protected] et [email protected].[email protected] comme un échec en raison du hachage SHA-1.--lookup) effectue désormais des recherches insensibles à la casse d'algorithmes similaires ; crédit Adam Russell.[email protected].-L/--list-policies, -M/--make-policy et -P/--policy). Pour un tutoriel approfondi, voir https://www.positronsecurity.com/blog/2020-09-27-ssh-policy-configuration-checks-with-ssh-audit/.ssh-audit.1).--lookup) ; crédit Adam Russell.ssh-rsa1, , , , , , , , , , .[email protected], [email protected].des, 3des.-c / --client-audit).-j / --json ; crédit Andreas Jaggi).gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-gex-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-group14-sha1-, gss-group14-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-group14-sha256-toWM5Slw5Ew8Mqkay+al2g==, gss-group15-sha512-toWM5Slw5Ew8Mqkay+al2g==, diffie-hellman-group15-sha256, ecdh-sha2-1.3.132.0.10, .[email protected], [email protected], [email protected], diffie-hellman-group16-sha256, diffie-hellman-group17-sha512.des-cbc-ssh1, blowfish-ctr, twofish-ctr.hmac-sha2-56, hmac-sha2-224, hmac-sha2-384, , , , , , , .-vunix:///path/to/socket).--socks5 host:port) ; crédit partiel Michał Majchrowicz.mlkem768nistp256-sha256, mlkem1024nistp384-sha384.[email protected], mldsa-44, [email protected], mldsa-65, mldsa-87, ssh-mldsa-44, ssh-mldsa-65, ssh-mldsa-87, ssh-mldsa44, ssh-mldsa65, ssh-mldsa87.AEAD_CAMELLIA_128_GCM, AEAD_CAMELLIA_256_GCM.-p--port-p--port-T targets.txt -p 222targets.txt-T targets.txt-pgrasshopper-ctr128.mlkem768x25519-sha256, sntrup761x25519-sha512.allow_larger_keys pour permettre aux cibles de réussir avec des clés d'hôte, des clés CA et des clés Diffie-Hellman plus grandes. Cela permet de créer une politique de référence où les cibles peuvent éventuellement mettre en œuvre des contrôles plus stricts ; crédit partiel Damian Szuberski.NO_COLOR est définie (voir https://no-color.org/).gss-nistp384-sha384-*.[email protected].ecdsa-sha2-nistk283ecdsa-sha2-nistk409ecdsa-sha2-nistp224ecdsa-sha2-nistp192ecdsa-sha2-nistt571ssh-dsax509v3-sign-rsa-sha256[email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], kexAlgoDH14SHA1, kexAlgoDH1SHA1, kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, sm2kep-sha2-nistp256, [email protected], [email protected].[email protected], cast128-12-cbc, cast128-12-cfb, cast128-12-ecb, cast128-12-ofb, des-cfb, des-ecb, des-ofb.cbcmac-3des, cbcmac-aes, cbcmac-blowfish, cbcmac-des, cbcmac-rijndael, cbcmac-twofish, hmac-sha256-96, md5, md5-8, ripemd160, ripemd160-8, sha1, sha1-8, umac-128.nullpgp-sign-dsspgp-sign-rsaspki-sign-dssspki-sign-rsassh-rsa-sha2-256ssh-rsa-sha2-512x509v3-ecdsa-sha2-1.3.132.0.10x509v3-sign-dss-sha1x509v3-sign-rsa-sha1[email protected], diffie-hellman_group17-sha512, [email protected], [email protected], ecdh-sha2-1.2.840.10045.3.1.1, ecdh-sha2-1.2.840.10045.3.1.7, ecdh-sha2-1.3.132.0.1, ecdh-sha2-1.3.132.0.16, ecdh-sha2-1.3.132.0.26, ecdh-sha2-1.3.132.0.27, ecdh-sha2-1.3.132.0.33, ecdh-sha2-1.3.132.0.34, ecdh-sha2-1.3.132.0.35, ecdh-sha2-1.3.132.0.36, ecdh-sha2-1.3.132.0.37, ecdh-sha2-1.3.132.0.38, ecdh-sha2-4MHB+NBt3AlaSRQ7MnB4cg==, ecdh-sha2-5pPrSUQtIaTjUSt5VZNBjg==, ecdh-sha2-9UzNcgwTlEnSCECZa7V1mw==, ecdh-sha2-D3FefCjYoJ/kfXgAyLddYA==, ecdh-sha2-h/SsxnLCtRBh7I9ATyeB3A==, ecdh-sha2-m/FtSAmrV4j/Wy6RVUaK7A==, ecdh-sha2-mNVwCXAoS1HGmHpLvBC94w==, ecdh-sha2-qCbG5Cn/jjsZ7nBeR7EnOA==, ecdh-sha2-qcFQaMAMGhTziMT0z+Tuzw==, ecdh-sha2-VqBg4QRPjxx1EXZdV0GdWQ==, ecdh-sha2-wiRIU8TKjMZ418sMqlqtvQ==, ecdh-sha2-zD/b3hu/71952ArpUG4OjQ==, ecmqv-sha2, gss-13.3.132.0.10-sha256-*, gss-curve25519-sha256-*, gss-curve448-sha512-*, gss-gex-sha1-*, gss-gex-sha256-*, gss-group14-sha1-*, gss-group14-sha256-*, gss-group15-sha512-*, gss-group16-sha512-*, gss-group17-sha512-*, gss-group18-sha512-*, gss-group1-sha1-*, gss-nistp256-sha256-*, gss-nistp384-sha256-*, gss-nistp521-sha512-*, [email protected], [email protected].3des-cfb, 3des-ecb, 3des-ofb, blowfish-cfb, blowfish-ecb, blowfish-ofb, [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], cast128-cfb, cast128-ecb, cast128-ofb, [email protected], idea-cfb, idea-ecb, idea-ofb, [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], twofish-cfb, twofish-ecb, twofish-ofb[email protected], [email protected], [email protected], [email protected], hmac-whirlpool.AEAD_AES_256_GCMssh-gost2001ssh-gost2012-256ssh-gost2012-512spki-sign-rsassh-ed448x509v3-ecdsa-sha2-nistp256x509v3-ecdsa-sha2-nistp384x509v3-ecdsa-sha2-nistp521x509v3-rsa2048-sha256diffie-hellman-group1-sha256, kexAlgoCurve25519SHA256, Curve25519SHA256, gss-group14-sha256-, gss-group15-sha512-, gss-group16-sha512-, gss-nistp256-sha256-, gss-curve25519-sha256-.blowfish, AEAD_AES_128_GCM, AEAD_AES_256_GCM, [email protected], [email protected].[email protected], hmac-sha3-224, [email protected].### v2.2.0 (2020-03-11)ssh-rsa comme faible en raison de collisions SHA-1 pratiques.ecdsa-sha2-1.3.132.0.10, x509v3-sign-dss, x509v3-sign-rsa, [email protected], x509v3-ssh-dss, x509v3-ssh-rsa, [email protected], [email protected], [email protected] et [email protected].[email protected], [email protected], [email protected], [email protected], [email protected], [email protected], ecdh-sha2-curve25519, ecdh-sha2-nistb233, ecdh-sha2-nistb409, ecdh-sha2-nistk163, ecdh-sha2-nistk233, ecdh-sha2-nistk283, ecdh-sha2-nistk409, ecdh-sha2-nistp192, ecdh-sha2-nistp224, ecdh-sha2-nistt571, gss-gex-sha1- et gss-group1-sha1-.camellia128-cbc, camellia128-ctr, camellia192-cbc, camellia192-ctr, camellia256-cbc, camellia256-ctr, aes128-gcm, aes256-gcm et chacha20-poly1305.aes128-gcm et aes256-gcm.curve448-sha512ecdsa-sha2-1.3.132.0.10.idea-cbc, serpent128-cbc, serpent192-cbc, serpent256-cbc.[email protected], [email protected], hmac-ripemd, [email protected], [email protected], [email protected].hmac-sha3-256hmac-sha3-384hmac-sha3-512hmac-sha256hmac-sha512-t / --timeout) pour les délais d'attente de connexion et de lecture.