Saját fejlesztésű TLS/SSH/HTTP header analizáló eszköz

Szeretném a CryptoLyzer nevű, általam fejlesztett parancssori eszközt a figyelmetekbe ajánlani és egyúttal arról visszajelzést is kérni. A tool a TLS és az SSH kriptográfia beállítások, illetve a HTTP headerek analizálására képes. Funkcióiban hasonló, mint a testssl.sh, az SSLyze, vagy az ssh-audit, viszont igyekszik ezen eszközök funkcióit egyben hozni, illetve azokon túl is menni, de ez azért még részben a jövő zenéje.

A CryptoLyzer ugyanakkor nem csak egy parancssori eszköz, de egy Python library is, bár ez utóbbi a CLI használat mellett nem feltétlenül tűnik fel. A telepítés, lévén Python projekt, legegyszerűbben pip segítségével ejthető meg, de telepíthető Docker konténerként is. Elérhetőek csomagok .deb és .rpm alapú rendszerekhez, illetve Arch Linuxra is. Az első két esethez a README fájl, az utóbbihoz az Arch Linux user repository ad leírást, röviden pedig itt olvashatóak a szükséges parancsok.

$ pip install cryptolyzer
$ docker pull coroner/cryptolyzer

A futtatás ezek után a következőképp történik.

$ cryptolyze tls all www.github.com
$ cryptolyze ssh2 ciphers www.github.com
$ cryptolyze http headers www.securityheaders.com

$ docker run --rm coroner/cryptolyzer tls all www.github.com
$ docker run --rm coroner/cryptolyzer ssh2 ciphers www.github.com
$ docker run --rm coroner/cryptolyzer http headers www.securityheaders.com

A paraméterezés részletei megtudhatóak a helpből:

$ cryptolyze --help
$ cryptolyze tls --help
$ cryptolyze tls1_2 --help
$ cryptolyze tls1_2 ciphers --help

Választható Markdown (default), vagy JSON kimenet, emberi, illetve gépi fogyasztásra, bár utóbbira Pythonból való használat kényelmesebb lehet. A jövőbeni tervek között számos dolog szerepel, amik közül több kisebb fejlesztést az összehasonlító táblázatok is tartalmaznak. A tervezett funkciók közül az SSH publikus kulcsok (nem csak host key, hanem host és X,509 cert is), illetve a DNS rekordok (SPF, DKIM, DMARC, MTA-STS, TLSRPT, ...) lekérdezését és analízisét, valamint a naplózást emelném ki. Az ezekhez kapcsoló jegyek a GitLab projekten követhetőek.

Minden (konstruktív) kérdést, javaslatot észrevételt szívesen veszek és előre köszönök! A hasonló projektekkel való összehasonlítást az alábbi táblázatok tartalmazzák. A táblázatok tartalma természetesen elég önkényes, de azért igyekeztem amennyire lehet objektívitás talaján maradni.

Összehasonlítás

CryptoLyzer “specialitások”

  CryptoLyzer Qualys

SSL Labs

ImmuniWeb Mozilla

Observatory

CryptCheck Testssl.sh SSLyze
TLS 1.3 Draft
TLS 1.3 DH Param
GOST Ciphers
DH Param Prime Check
DHE Param Reuse Check
ECDH Param Reuse Check 0.9.0
  83% 50% 0% 0% 0% 17% 0%

(Start)TLS protokoll támogatás

  CryptoLyzer Qualys

SSL Labs

ImmuniWeb Mozilla

Observatory

CryptCheck Testssl.sh SSLyze
FTP
IMAP
LDAP
LMTP
MySQL 0.9.0
NNTP
POP3
PostgreSQL
RDP
Sieve
SMTP
XMPP (Jabber)
  92% 0% 8% 0% 17% 83% 67%

Kriptográfiai protokollok

  CryptoLyzer Qualys

SSL Labs

ImmuniWeb Mozilla

Observatory

CryptCheck Testssl.sh SSLyze
TLS
SSH (2.0)
 

100%

50%

50%

100%

100%

50%

50%

HTTP Security Headerök

  CryptoLyzer Qualys

SSL Labs

ImmuniWeb Mozilla

Observatory

CryptCheck Testssl.sh SSLyze
TLS settings
Content Security Policy 0.9.0
Expect Certificate Transparency
Expect OCSP Staple
HTTP Strict

Transport Security

HTTP Public Key

Pinning

Referrer

Policy

Subresource Integrity 0.8.0
X Content Type Options
X Frame

Options

X XSS Protection
  82% 27% 18% 91% 9% 9% 9%

HTTP Általános Headerök

  CryptoLyzer Qualys

SSL Labs

ImmuniWeb Mozilla

Observatory

CryptCheck Testssl.sh SSLyze
Content-Type
Server
Age
Cache-Control
Date
ETag
Expires
Last-Modified
Pragma
  100% 0% 0% 89% 0% 0% 0%

TLS Extensionök

  CryptoLyzer Qualys

SSL Labs

ImmuniWeb Mozilla

Observatory

CryptCheck Testssl.sh SSLyze
TLS Fallback SCSV
TLS Clock Skew
TLS Compression
Client Initiated Renegotiation 0.9.0
Server Initiated Renegotiation 0.9.0
Session Caching
Session Ticketing
EC Point Format
App. Layer Proto. Negotiation
Next Protocol Negotiation
OCSP Stapling
OCSP Must Staple 0.8.0
Certificate Transparency 0.8.0
TLS Version Intolerance 0.8.0
TLS Extension Intolerance 0.8.0
Handshake Length Intolerance 0.8.0
  56% 88% 50% 6% 0% 69% 63%

Hozzászólások

Szerkesztve: 2021. 09. 21., k – 09:17

Szia!

Köszönjük. Nagyon menő! Már jön is le a Docker image.

Amikor megláttam a címet facebookon, már éreztem, hogy valami balabites arc lesz mögötte.

<3 openSUSE, Ubuntu, KDE <3

ssh2 (meg kb barmi) eseten a port megadas hogy tortenik? 

Error: nmcli terminated by signal Félbeszakítás (2)

Alapvetően URI adható meg minden esetben.

$ cryptolyze ssh2 ciphers --help

usage: cryptolyze ssh2 ciphers [-h] URI [URI ...]

positional arguments:
  URI         [{ssh}://]f.q.d.n[:port][#ip]

optional arguments:
  -h, --help  show this help message and exit

Konkrét példával élve:

$ cryptolyze ssh2 ciphers ssh.blinkenshell.org:2222
Szerkesztve: 2021. 09. 21., k – 17:29

Néhány javaslat:

1. client certet tudjon felmutatni, és írja ki az acceptable client certificate CA-as listát is (szerk:ez utóbbit tudja is).

Vannak olyan site-ok amiket csak így lehet elérni teszthez.

https://github.com/rbsec/sslscan tudja. :)

2.  jó lenne ha lehetne timeoutokat megadni, biztos van most is ,de jó lenne paraméterezhetően ha mass scan-t csinálsz akkor nem árt.

3. bind address megadási lehetőség

  1. a client certet nem kell tudnia felmutatni, mivel a szükséges információkat anélkül is be tudja szerezni (client-cert-missing.badssl.com oldallal tesztelhető), illetve a pubkeyreq opcióval lekérdezhető, hogy a szerver milyen certet szeretne
  2. cryptolyze tls1_2 pubkeyreq https://client-cert-missing.badssl.com/
    * Target:
        * Scheme: https
        * Address: client-cert-missing.badssl.com
        * IP address: 104.154.89.105
        * Port: 443
        * Protocol Version: TLS 1.2
    * Certificate Types:
        1. TlsClientCertificateType.RSA_SIGN
        2. TlsClientCertificateType.DSS_SIGN
        3. TlsClientCertificateType.ECDSA_SIGN
    * Supported Signature Algorithms:
        1. RSA_SHA512
        2. DSA_SHA512
        3. ECDSA_SHA512
        4. RSA_SHA384
        5. DSA_SHA384
        6. ECDSA_SHA384
        7. RSA_SHA256
        8. DSA_SHA256
        9. ECDSA_SHA256
        10. RSA_SHA224
        11. DSA_SHA224
        12. ECDSA_SHA224
        13. RSA_SHA1
        14. DSA_SHA1
        15. ECDSA_SHA1
    * Distinguished Names:
        1.
            * Country Name: US
            * State Or Province Name: California
            * Locality Name: San Francisco
            * Organization Name: BadSSL
            * Common Name: BadSSL Untrusted Client Root Certificate Authority
    
    $ cryptolyze tls1_2 dhparams https://client.badssl.com/
    * Target:
        * Scheme: https
        * Address: client.badssl.com
        * IP address: 104.154.89.105
        * Port: 443
        * Protocol Version: TLS 1.2
    * Diffie-Hellman Parameters:
        1.
            * Key Size: 2048
            * Reused: no
            * Well Known: n/a
            * Prime: yes
            * Safe Prime: yes
    
  3. ez teljesen jogos igény, mindenképp felveszem a todo listára
  4. ez alatt nem tudom mit kellene értenem, esetleg forrásport megadási lehetőséget?

 

1. Ezekben igazad van, viszont ha http headers -t akarok lekérdezni mégiscsak kelleni fog a kliens cert..., mert nem megy le a handshake :)

2. köszi :)

3. forrás port annyira nem érdekes, a forrás ip megadására gondolok. lásd wget --bind-address, vagy ssh -b , vagy openssl s_client -bind opciók.....

 

 

 

Részemről bookmark, max. visszalövök vele a corporate IT Sec-nek, akik még az nmap enum-ssl-ciphers kimenetét sem tudják nemhogy értelmesen, de egyáltalán értelmezni sokszor...
trey, NagyZ? - hmmm? vélemény a termékről?

A gyors gondolat többet ér, mint a gyors mozdulat.

Nekem mint egyszeri usernek aki ilyesmi eszközt nagyon ritkán használ és ha mégis, akkor se ért mindent a kimenetből, hasznos volna egy átlag user számára is könnyen emészhető rész, ami kiírja az SSL Labs tesztjéhez hasonlóan, hogy mi van jól beállítva és mi nincs, ez alapján osztályozná, esetleg még linket, segítséget is ad ahhoz, hogy min javasolt változtatni a nagyobb biztonság érdekében. Persze ha ez az eszköz főleg rendszergazdáknak készül akiknek a jelenlegi kimenet is elég és érthető, azt is megértem :-)