2015-12-23 03:56:13 +01:00
# ssh-audit
2019-08-29 21:34:19 +02:00
<!--
2017-03-28 16:08:36 +02:00
[![travis build status ](https://api.travis-ci.org/arthepsy/ssh-audit.svg?branch=develop )](https://travis-ci.org/arthepsy/ssh-audit)
[![appveyor build status ](https://ci.appveyor.com/api/projects/status/4m5r73m0r023edil/branch/develop?svg=true )](https://ci.appveyor.com/project/arthepsy/ssh-audit)
2017-03-25 07:02:49 +01:00
[![codecov ](https://codecov.io/gh/arthepsy/ssh-audit/branch/develop/graph/badge.svg )](https://codecov.io/gh/arthepsy/ssh-audit)
2017-04-05 03:25:01 +02:00
[![Quality Gate ](https://sonarqube.com/api/badges/gate?key=arthepsy-github%3Assh-audit%3Adevelop&template=ROUNDED )](https://sq.evolutiongaming.com/dashboard?id=arthepsy-github%3Assh-audit%3Adevelop)
2019-08-29 21:34:19 +02:00
-->
2019-10-07 16:59:52 +02:00
**ssh-audit** is a tool for ssh server & client configuration auditing.
2015-12-23 04:52:21 +01:00
## Features
2016-09-20 11:26:14 +02:00
- SSH1 and SSH2 protocol server support;
2019-10-07 16:59:52 +02:00
- analyze SSH client configuration;
2016-09-20 11:26:14 +02:00
- grab banner, recognize device or software and operating system, detect compression;
2015-12-23 04:52:21 +01:00
- gather key-exchange, host-key, encryption and message authentication code algorithms;
- output algorithm information (available since, removed/disabled, unsafe/weak/legacy, etc);
2016-10-10 13:08:01 +02:00
- output algorithm recommendations (append or remove based on recognized software version);
2016-09-20 11:26:14 +02:00
- output security information (related issues, assigned CVE list, etc);
2016-08-12 15:33:34 +02:00
- analyze SSH version compatibility based on algorithm information;
2016-10-10 13:08:01 +02:00
- historical information from OpenSSH, Dropbear SSH and libssh;
2019-11-30 23:15:54 +01:00
- runs on Linux and Windows;
2019-09-28 00:19:49 +02:00
- no dependencies
2015-12-23 04:52:21 +01:00
## Usage
```
2020-07-16 18:07:02 +02:00
usage: ssh-audit.py [options] < host >
2015-12-23 04:52:21 +01:00
2020-07-16 18:07:02 +02:00
-h, --help print this help
2016-09-20 11:26:14 +02:00
-1, --ssh1 force ssh version 1 only
2016-09-24 22:02:39 +02:00
-2, --ssh2 force ssh version 2 only
2016-10-26 17:56:38 +02:00
-4, --ipv4 enable IPv4 (order of precedence)
-6, --ipv6 enable IPv6 (order of precedence)
2016-09-02 17:08:15 +02:00
-b, --batch batch output
2019-09-28 00:16:50 +02:00
-c, --client-audit starts a server on port 2222 to audit client
2019-11-07 02:40:25 +01:00
software config (use -p to change port;
use -t to change timeout)
2019-11-07 22:08:09 +01:00
-j, --json JSON output
2016-09-02 17:08:15 +02:00
-l, --level=< level > minimum output level (info|warn|fail)
2020-07-16 18:07:02 +02:00
-L, --list-policies list all the official, built-in policies
-M, --make-policy=< 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)
-n, --no-colors disable colors
-p, --port=< port > port to connect
-P, --policy=< policy.txt > run a policy test using the specified policy
2019-08-18 16:03:03 +02:00
-t, --timeout=< secs > timeout (in seconds) for connection and reading
2019-09-28 00:16:50 +02:00
(default: 5)
2020-07-16 18:07:02 +02:00
-T, --targets=< hosts.txt > a file containing a list of target hosts (one
per line, format HOST[:PORT])
-v, --verbose verbose output
2015-12-23 04:52:21 +01:00
```
2016-10-26 17:56:38 +02:00
* if both IPv4 and IPv6 are used, order of precedence can be set by using either `-46` or `-64` .
2016-09-02 17:08:15 +02:00
* batch flag `-b` will output sections without header and without empty lines (implies verbose flag).
* verbose flag `-v` will prefix each line with section type and algorithm name.
2015-12-23 04:52:21 +01:00
2019-10-07 16:59:52 +02:00
### Server Audit Example
2019-11-14 14:56:14 +01:00
Below is a screen shot of the server-auditing output when connecting to an unhardened OpenSSH v5.3 service:
2019-09-06 00:52:32 +02:00
![screenshot ](https://user-images.githubusercontent.com/2982011/64388792-317e6f80-d00e-11e9-826e-a4934769bb07.png )
2015-12-23 04:52:21 +01:00
2019-10-07 16:59:52 +02:00
### Client Audit Example
2019-11-14 14:56:14 +01:00
Below is a screen shot of the client-auditing output when an unhardened OpenSSH v7.2 client connects:
2019-11-14 16:15:30 +01:00
![client_screenshot ](https://user-images.githubusercontent.com/2982011/68867998-b946c100-06c4-11ea-975f-1f47e4178a74.png )
2019-10-07 16:59:52 +02:00
2019-11-26 17:47:35 +01:00
### Hardening Guides
Guides to harden server & client configuration can be found here: [https://www.ssh-audit.com/hardening_guides.html ](https://www.ssh-audit.com/hardening_guides.html )
2020-03-13 04:20:31 +01:00
### Pre-Built Packages ###
2020-06-17 05:10:08 +02:00
Pre-built packages are available for Windows (see the releases page), on PyPI, Snap, and Homebrew.
2020-03-13 04:20:31 +01:00
To install from PyPI:
```
$ pip3 install ssh-audit
```
2020-06-17 05:10:08 +02:00
To install the Snap package:
2020-03-13 04:20:31 +01:00
```
$ snap install ssh-audit
```
2020-05-31 17:44:00 +02:00
To install on Homebrew:
```
$ brew install ssh-audit
```
2015-12-23 04:52:21 +01:00
## ChangeLog
2020-03-18 17:19:05 +01:00
### v2.2.1-dev (???)
2020-07-16 17:48:35 +02:00
- Created new man page (see ssh-audit.1 file).
2020-07-01 04:51:13 +02:00
- 1024-bit moduli upgraded from warnings to failures.
2020-06-17 05:10:08 +02:00
- Many Python 2 code clean-ups, testing framework improvements, pylint & flake8 fixes, and mypy type comments; credit [Jürgen Gmach ](https://github.com/jugmac00 )).
2020-05-31 17:42:06 +02:00
- Suppress recommendation of token host key types.
2020-07-03 21:07:34 +02:00
- Added check for use-after-free vulnerability in PuTTY v0.73.
2020-07-14 16:43:18 +02:00
- Added 5 new host key types: `ssh-rsa1` , `ssh-dss-sha256@ssh.com` , `ssh-gost2001` , `ssh-gost2012-256` , `ssh-gost2012-512` .
2020-07-01 04:58:28 +02:00
- Added 1 new key exchange: `diffie-hellman-group1-sha256` .
2020-07-01 20:32:55 +02:00
- Added 5 new ciphers: `blowfish` , `AEAD_AES_128_GCM` , `AEAD_AES_256_GCM` , `crypticore128@ssh.com` , `seed-cbc@ssh.com` .
- Added 3 new MACs: `chacha20-poly1305@openssh.com` , `hmac-sha3-224` , `crypticore-mac@ssh.com` .
2020-03-24 19:12:15 +01:00
2020-03-11 16:55:14 +01:00
### v2.2.0 (2020-03-11)
2020-03-11 00:22:15 +01:00
- Marked host key type `ssh-rsa` as weak due to [practical SHA-1 collisions ](https://eprint.iacr.org/2020/014.pdf ).
2019-11-30 23:15:54 +01:00
- Added Windows builds.
2020-02-09 01:05:36 +01:00
- Added 10 new host key types: `ecdsa-sha2-1.3.132.0.10` , `x509v3-sign-dss` , `x509v3-sign-rsa` , `x509v3-sign-rsa-sha256@ssh.com` , `x509v3-ssh-dss` , `x509v3-ssh-rsa` , `sk-ecdsa-sha2-nistp256-cert-v01@openssh.com` , `sk-ecdsa-sha2-nistp256@openssh.com` , `sk-ssh-ed25519-cert-v01@openssh.com` , and `sk-ssh-ed25519@openssh.com` .
2020-02-09 00:44:42 +01:00
- Added 18 new key exchanges: `diffie-hellman-group14-sha256@ssh.com` , `diffie-hellman-group15-sha256@ssh.com` , `diffie-hellman-group15-sha384@ssh.com` , `diffie-hellman-group16-sha384@ssh.com` , `diffie-hellman-group16-sha512@ssh.com` , `diffie-hellman-group18-sha512@ssh.com` , `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-` , and `gss-group1-sha1-` .
2020-03-11 00:22:15 +01:00
- Added 9 new ciphers: `camellia128-cbc` , `camellia128-ctr` , `camellia192-cbc` , `camellia192-ctr` , `camellia256-cbc` , `camellia256-ctr` , `aes128-gcm` , `aes256-gcm` , and `chacha20-poly1305` .
2020-02-09 00:44:42 +01:00
- Added 2 new MACs: `aes128-gcm` and `aes256-gcm` .
2019-11-30 23:15:54 +01:00
2019-11-26 17:47:35 +01:00
### v2.1.1 (2019-11-26)
2019-11-19 02:22:12 +01:00
- Added 2 new host key types: `rsa-sha2-256-cert-v01@openssh.com` , `rsa-sha2-512-cert-v01@openssh.com` .
- Added 2 new ciphers: `des` , `3des` .
2019-11-26 17:47:35 +01:00
- Added 3 new PuTTY vulnerabilities.
- During client testing, client IP address is now listed in output.
2019-11-14 17:07:16 +01:00
2019-11-14 14:56:14 +01:00
### v2.1.0 (2019-11-14)
2019-10-07 16:59:52 +02:00
- Added client software auditing functionality (see `-c` / `--client-audit` option).
2019-11-14 14:56:14 +01:00
- Added JSON output option (see `-j` / `--json` option; credit [Andreas Jaggi ](https://github.com/x-way )).
2019-09-20 02:10:37 +02:00
- Fixed crash while scanning Solaris Sun_SSH.
Added five kex algorithms: gss-gex-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-group14-sha1-, gss-group14-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-group14-sha256-toWM5Slw5Ew8Mqkay+al2g==, gss-group15-sha512-toWM5Slw5Ew8Mqkay+al2g==; added four ciphers: idea-cbc, serpent128-cbc, serpent192-cbc, serpent256-cbc; added four MACs: hmac-ripemd, hmac-sha256-96@ssh.com, umac-32@openssh.com, umac-96@openssh.com.
2019-10-25 17:27:22 +02:00
- Added 9 new key exchanges: `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` , `curve448-sha512` .
2019-09-20 04:19:26 +02:00
- Added 1 new host key type: `ecdsa-sha2-1.3.132.0.10` .
Added five kex algorithms: gss-gex-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-group14-sha1-, gss-group14-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-group14-sha256-toWM5Slw5Ew8Mqkay+al2g==, gss-group15-sha512-toWM5Slw5Ew8Mqkay+al2g==; added four ciphers: idea-cbc, serpent128-cbc, serpent192-cbc, serpent256-cbc; added four MACs: hmac-ripemd, hmac-sha256-96@ssh.com, umac-32@openssh.com, umac-96@openssh.com.
2019-10-25 17:27:22 +02:00
- Added 4 new ciphers: `idea-cbc` , `serpent128-cbc` , `serpent192-cbc` , `serpent256-cbc` .
- Added 6 new MACs: `hmac-sha2-256-96-etm@openssh.com` , `hmac-sha2-512-96-etm@openssh.com` , `hmac-ripemd` , `hmac-sha256-96@ssh.com` , `umac-32@openssh.com` , `umac-96@openssh.com` .
2019-08-29 22:52:38 +02:00
2019-08-29 21:34:19 +02:00
### v2.0.0 (2019-08-29)
2019-08-22 21:49:10 +02:00
- Forked from https://github.com/arthepsy/ssh-audit (development was stalled, and developer went MIA).
- Added RSA host key length test.
- Added RSA certificate key length test.
- Added Diffie-Hellman modulus size test.
- Now outputs host key fingerprints for RSA and ED25519.
2019-08-26 21:28:37 +02:00
- Added 5 new key exchanges: `sntrup4591761x25519-sha512@tinyssh.org` , `diffie-hellman-group-exchange-sha256@ssh.com` , `diffie-hellman-group-exchange-sha512@ssh.com` , `diffie-hellman-group16-sha256` , `diffie-hellman-group17-sha512` .
2019-08-22 21:54:14 +02:00
- Added 3 new encryption algorithms: `des-cbc-ssh1` , `blowfish-ctr` , `twofish-ctr` .
2019-08-26 21:19:49 +02:00
- Added 10 new MACs: `hmac-sha2-56` , `hmac-sha2-224` , `hmac-sha2-384` , `hmac-sha3-256` , `hmac-sha3-384` , `hmac-sha3-512` , `hmac-sha256` , `hmac-sha256@ssh.com` , `hmac-sha512` , `hmac-512@ssh.com` .
2019-11-14 14:56:14 +01:00
- Added command line argument (`-t` / `--timeout` ) for connection & reading timeouts.
2019-08-22 21:49:10 +02:00
- Updated CVEs for libssh & Dropbear.
2016-10-26 18:02:13 +02:00
### v1.7.0 (2016-10-26)
2016-10-26 17:56:38 +02:00
- implement options to allow specify IPv4/IPv6 usage and order of precedence
- implement option to specify remote port (old behavior kept for compatibility)
- add colors support for Microsoft Windows via optional colorama dependency
- fix encoding and decoding issues, add tests, do not crash on encoding errors
- use mypy-lang for static type checking and verify all code
2016-10-14 07:55:29 +02:00
### v1.6.0 (2016-10-14)
2016-10-10 13:03:45 +02:00
- implement algorithm recommendations section (based on recognized software)
- implement full libssh support (version history, algorithms, security, etc)
- fix SSH-1.99 banner recognition and version comparison functionality
- do not output empty algorithms (happens for misconfigured servers)
- make consistent output for Python 3.x versions
- add a lot more tests (conf, banner, software, SSH1/SSH2, output, etc)
- use Travis CI to test for multiple Python versions (2.6-3.5, pypy, pypy3)
2016-09-20 11:26:14 +02:00
### v1.5.0 (2016-09-20)
- create security section for related security information
- match and output assigned CVE list and security issues for Dropbear SSH
- implement full SSH1 support with fingerprint information
- automatically fallback to SSH1 on protocol mismatch
- add new options to force SSH1 or SSH2 (both allowed by default)
2016-10-25 20:52:58 +02:00
- parse banner information and convert it to specific software and OS version
2016-09-20 11:26:14 +02:00
- do not use padding in batch mode
- several fixes (Cisco sshd, rare hangs, error handling, etc)
2016-09-02 17:10:16 +02:00
### v1.0.20160902
- implement batch output option
- implement minimum output level option
- fix compatibility with Python 2.6
2016-08-12 15:29:51 +02:00
### v1.0.20160812
2016-08-12 15:33:34 +02:00
- implement SSH version compatibility feature
2016-08-12 15:29:51 +02:00
- fix wrong mac algorithm warning
- fix Dropbear SSH version typo
- parse pre-banner header
- better errors handling
2016-08-03 16:32:46 +02:00
### v1.0.20160803
- use OpenSSH 7.3 banner
- add new key-exchange algorithms
2016-03-07 12:01:57 +01:00
### v1.0.20160207
- use OpenSSH 7.2 banner
- additional warnings for OpenSSH 7.2
- fix OpenSSH 7.0 failure messages
- add rijndael-cbc failure message from OpenSSH 6.7
2016-01-05 13:14:50 +01:00
### v1.0.20160105
2016-01-05 17:04:49 +01:00
- multiple additional warnings
- support for none algorithm
2016-01-05 13:14:50 +01:00
- better compression handling
- ensure reading enough data (fixes few Linux SSH)
2015-12-30 12:17:58 +01:00
### v1.0.20151230
- Dropbear SSH support
2015-12-23 04:52:21 +01:00
### v1.0.20151223
- initial version