Une partie du handshake SSH, envoyée avant l'authentification, est la liste des algorithmes pris en charge par chaque partie pour l'échange de clés, la signature de clé d'hôte, le chiffrement et le MAC. Lire les listes du serveur vous indique exactement ce qu'il va accepter, et les évaluer par rapport aux références modernes identifie les options faibles ou héritées. Cela sert deux objectifs : identifier l'ancienneté et la configuration du serveur (les anciennes versions proposent de larges ensembles hérités), et énumérer les attaques de cryptographie faible disponibles, puisque vous ne pouvez pas forcer un algorithme que le serveur ne propose pas.
# enumerate the four algorithm lists the server offers
nmap -p22 --script ssh2-enum-algos <target>
# interpret: look for weak entries in each list
# kex: diffie-hellman-group1-sha1, *-sha1, small GEX groups
# cipher: *-cbc, arcfour*, 3des, des
# mac: hmac-md5*, *-96 (truncated), non -etm
# hostkey: ssh-rsa (SHA-1) only, ssh-dss (DSA)
ssh -vv user@<target> 2>&1 | grep -iE 'kex:|cipher:|mac:' # what gets negotiated
Notes d'exploitation#
- Associez chaque liste proposée à sa faiblesse : KEX
group1/SHA-1 à la rétrogradation de l'échange de clés,-cbc/arcfour/3desaux chiffrements faibles,hmac-md5/-96aux algorithmes MAC faibles. - Les clés d'hôte
ssh-dss(DSA) etssh-rsalimité à SHA-1 indiquent un serveur ancien ; DSA est désactivé dans les versions modernes d'OpenSSH, donc sa présence est un fort signal d'ancienneté. - Vous ne pouvez attaquer que les algorithmes que le serveur propose, donc cette énumération est le préalable qui transforme les pages de cryptographie faible, de la théorie en une liste de cibles concrètes.
- Un ensemble d'algorithmes pleinement moderne (KEX curve25519, chiffrements ChaCha20/AES-GCM, MAC ETM) signifie que la surface cryptographique est fermée ; pivotez plutôt vers les vulnérabilités d'authentification et d'implémentation.