
Sicherheitsaudit für SSH-Server und -Clients (Banner, Schlüsselaustausch, Verschlüsselung, MAC, Komprimierung, Kompatibilität, Sicherheit usw.)
ssh-audit ist ein Werkzeug zur Überprüfung der SSH-Server- und -Client-Konfiguration.
jtesta/ssh-audit (v2.0+) ist die aktualisierte und gepflegte Version von ssh-audit, die aufgrund von Inaktivität von arthepsy/ssh-audit (v1.x) abgezweigt wurde.
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)
* Wenn sowohl IPv4 als auch IPv6 verwendet werden, kann die Prioritätsreihenfolge durch Verwendung von `-46` oder `-64` festgelegt werden.
* Der Batch-Schalter `-b` gibt Abschnitte ohne Kopfzeile und ohne leere Zeilen aus (impliziert den Verbose-Schalter).
* Der Verbose-Schalter `-v` stellt jeder Zeile den Abschnittstyp und den Algorithmusnamen voran.
* Ein Exit-Code von 0 wird zurückgegeben, wenn alle Algorithmen als sicher gelten (bei einer Standardprüfung) oder wenn eine Richtlinienprüfung erfolgreich ist (bei einer Richtlinienprüfung).
Einfache Serverüberprüfung:```
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
Um einen Standard-Audit gegen viele Server durchzuführen (platzieren Sie die Ziele in servers.txt, eines pro Zeile im Format HOST[:PORT]):```
ssh-audit -T servers.txt
Um eine Client-Konfiguration zu überprüfen (lauscht standardmäßig auf Port 2222/tcp; verbinden mit `ssh -p 2222 anything@localhost`):```
ssh-audit -c
Um eine Client-Konfiguration zu prüfen, mit einem Listener auf Port 4567/tcp:``` ssh-audit -c -p 4567
Um alle offiziellen eingebauten Richtlinien aufzulisten (Hinweis: verwenden Sie die resultierenden Richtliniennamen mit `-P`/`--policy`):```
ssh-audit -L
Um eine Richtlinienprüfung gegen einen Server durchzuführen:``` ssh-audit -P ["policy name" | path/to/server_policy.txt] targetserver
Um einen Policy-Audit gegen einen Client durchzuführen:```
ssh-audit -c -P ["policy name" | path/to/client_policy.txt]
Um einen Policy-Audit gegen viele Server durchzuführen:``` ssh-audit -T servers.txt -P ["policy name" | path/to/server_policy.txt]
Um eine Richtlinie basierend auf einem Zielserver zu erstellen (die manuell bearbeitet werden kann):```
ssh-audit -M new_policy.txt targetserver
Um den DHEat-CPU-Erschöpfungs-DoS-Angriff (CVE-2002-20001) gegen ein Ziel mit 10 gleichzeitigen Sockets auszuführen:``` ssh-audit --dheat=10 targetserver
Um den DHEat-Angriff mithilfe des Schlüsselaustauschalgorithmus `diffie-hellman-group-exchange-sha256` auszuführen:```
ssh-audit --dheat=10:diffie-hellman-group-exchange-sha256 targetserver
Um den DHEat-Angriff mit dem diffie-hellman-group-exchange-sha256-Schlüsselaustauschalgorithmus sowie sehr kleinen, aber nicht standardkonformen Paketlängen auszuführen (dies kann zur gleichen CPU-Erschöpfung führen, jedoch mit viel weniger gesendeten Bytes pro Sekunde):```
ssh-audit --dheat=10:diffie-hellman-group-exchange-sha256:4 targetserver
## Screenshots
### Beispiel: Standard-Server-Audit
Nachfolgend ist ein Screenshot der Standard-Server-Audit-Ausgabe bei der Verbindung zu einem nicht gehärteten OpenSSH-v5.3-Dienst zu sehen:

### Beispiel: Server-Richtlinien-Audit
Nachfolgend ist ein Screenshot der Richtlinien-Audit-Ausgabe bei der Verbindung zu einem nicht gehärteten Ubuntu-Server-20.04-Rechner zu sehen (Hinweis: Verwenden Sie `-L`/`--list-policies`, um die Namen der integrierten Richtlinien zu sehen, die Sie mit `-P`/`--policy` verwenden können):

Nachdem die Schritte im Härtungsleitfaden (siehe unten) angewendet wurden, ändert sich die Ausgabe wie folgt:

### Beispiel: Standard-Client-Audit
Nachfolgend ist ein Screenshot der Client-Audit-Ausgabe zu sehen, wenn ein nicht gehärteter OpenSSH-v7.2-Client eine Verbindung herstellt:

## Härtungsleitfäden
Leitfäden zum Härten der Server- und Client-Konfiguration sind in das Tool integriert (siehe Optionen `--list-hardening-guides` und `--get-hardening-guide`). Darüber hinaus sind sie auch online verfügbar unter: [https://www.ssh-audit.com/hardening_guides.html](https://www.ssh-audit.com/hardening_guides.html)
## Vorgefertigte Pakete
Vorgefertigte Pakete sind für Windows (siehe die Seite [Releases](https://github.com/jtesta/ssh-audit/releases)), PyPI, Snap und Docker verfügbar:
So installieren Sie von PyPI:```
$ pip3 install ssh-audit
Um das Snap-Paket zu installieren:``` $ snap install ssh-audit
So installieren Sie von Dockerhub aus:```
$ docker pull docker.io/positronsecurity/ssh-audit
(Führen Sie dann aus: docker run -it --rm -p 2222:2222 docker.io/positronsecurity/ssh-audit 10.1.1.1)
Der Status verschiedener anderer Plattformpakete ist unten zu finden (über Repology):
Der Einfachheit halber ist ein Web-Frontend für das Kommandozeilenwerkzeug unter https://www.ssh-audit.com/ verfügbar.
--list-hardening-guides und --get-hardening-guide). Bisher waren sie nur unter https://ssh-audit.com/hardening_guides.html verfügbar, jetzt sind sie jedoch aus Bequemlichkeit integriert; teilweise Anerkennung an oam7575.allow_hostkey_subset_and_reordering-Richtlinienoption hinzugefügt, um Zielen eine strengere Liste von Host-Schlüsseln und/oder eine andere Reihenfolge derselben zu ermöglichen.getopt-Modul zu argparse migriert; teilweise Anerkennung an oam7575.-b) aktiviert nicht länger automatisch den ausführlichen Modus, da die Ergebnisse manchmal verwirrend waren; Benutzer können den ausführlichen Modus weiterhin explizit mit dem Flag aktivieren.-P und -T auftrat.--conn-rate-test unter Windows behoben.-T/--targets) wird die Option -p/ nun als Standardport verwendet (auf 22 gesetzt, wenn / nicht angegeben ist). Hosts, die in der Datei angegeben sind, können diesen Standardwert mit einer expliziten Portnummer überschreiben (z. B.: "host1:1234"). Wenn beispielsweise verwendet wird, verwenden alle Hosts in , die keine explizite Portnummer enthalten, standardmäßig 222; bei Verwendung von (ohne ) verwenden alle Hosts standardmäßig 22.--dheat; CVE-2002-20001).ecdsa-sha2-nistp*-CA-Signaturen auf Host-Schlüsseln behoben. Zusätzlich werden sie nun als potenziell mit Hintertüren versehen markiert, genau wie Standard-Host-Schlüssel.-m, --manual) ist jetzt neben dem Windows-Build auch in Docker-, PyPI- und Snap-Builds verfügbar.python:3-slim auf python:3-alpine geändert, was zu einer Reduzierung der Imagegröße um 59 % führte; Dank an Daniel Thamdrup.-L -v, um es anzuzeigen).allow_algorithm_subset_and_reordering, um Zielen das Bestehen mit einer Teilmenge und/oder einer neu geordneten Liste von Host-Schlüsseln, Key Exchanges, Chiffren und MACs zu ermöglichen. Dies erlaubt die Erstellung einer Basisrichtlinie, bei der Ziele optional strengere Kontrollen implementieren können; teilweise Anerkennung an .[email protected] und ssh-ed25519 an das Ende aller Zertifikatstypen verschoben.additional_notes zur JSON-Ausgabe hinzugefügt.ecdsa-sha2-curve25519, ecdsa-sha2-nistb233, ecdsa-sha2-nistb409, ecdsa-sha2-nistk163, ecdsa-sha2-nistk233, ecdsa-sha2-nistk283, , , , , , .[email protected] entfernt.-g und --gex-test für granulare GEX-Modulgrößentests hinzugefügt; Dank an Adam Russell.[email protected], [email protected], [email protected], , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .-jj JSON mit Einrückungen aus (nützlich zum Debuggen).-d/--debug zum Erhalten von Debug-Ausgaben hinzugefügt; Dank an Adam Russell.rsa-sha2-512 und rsa-sha2-256 einzuschließen.gss-gex-sha1-eipGX3TCiQSrx573bT1o1Q==, gss-group1-sha1-eipGX3TCiQSrx573bT1o1Q== und gss-group14-sha1-eipGX3TCiQSrx573bT1o1Q==.hmac-ripemd160-96, AEAD_AES_128_GCM und .-m/--manual); Dank an Adam Russell.[email protected].[email protected] und [email protected].[email protected] wird aufgrund des SHA-1-Hashs als Fehler markiert.--lookup) führt jetzt groß-/kleinschreibungsunabhängige Lookups ähnlicher Algorithmen durch; Dank an Adam Russell.[email protected].-L/--list-policies, -M/--make-policy und -P/--policy). Ein ausführliches Tutorial finden Sie unter https://www.positronsecurity.com/blog/2020-09-27-ssh-policy-configuration-checks-with-ssh-audit/.ssh-audit.1).--lookup); Dank an Adam Russell.ssh-rsa1, [email protected], , , , , , , , , .[email protected], [email protected].des, 3des.-c / --client-audit).-j / --json; Dank an 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, , , , , , , .none-vunix:///path/to/socket angeben).--socks5 host:port angeben); teilweise Anerkennung an 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.--port-p--port-T targets.txt -p 222targets.txt-T targets.txt-pgrasshopper-ctr128.mlkem768x25519-sha256, sntrup761x25519-sha512.allow_larger_keys, um Zielen das Bestehen mit größeren Host-Schlüsseln, CA-Schlüsseln und Diffie-Hellman-Schlüsseln zu ermöglichen. Dies erlaubt die Erstellung einer Basisrichtlinie, bei der Ziele optional strengere Kontrollen implementieren können; teilweise Anerkennung an Damian Szuberski.NO_COLOR gesetzt ist (siehe https://no-color.org/).gss-nistp384-sha384-*.[email protected].ecdsa-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 als schwach aufgrund praktischer SHA-1-Kollisionen.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] und [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- und gss-group1-sha1-.camellia128-cbc, camellia128-ctr, camellia192-cbc, camellia192-ctr, camellia256-cbc, camellia256-ctr, aes128-gcm, aes256-gcm und chacha20-poly1305.aes128-gcm und 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) für Verbindungs- und Lese-Timeouts hinzugefügt.