
Scanner automatizzato della configurazione TLS di server e client per penetration tester e ricercatori. Valuta suite di cifratura, versioni di protocollo e linee guida di sicurezza con profondità di scansione personalizzabile e output leggibile dalla macchina.
TLS-Scanner è uno strumento per assistere i pentester e i ricercatori di sicurezza nella valutazione delle configurazioni di server e client TLS.
Nota bene: TLS-Scanner è uno strumento di ricerca destinato a sviluppatori TLS, pentester, amministratori e ricercatori. Non è presente alcuna GUI. È alla prima versione e potrebbe contenere alcuni bug.
Per compilare e utilizzare TLS-Scanner, è necessario eseguire:
$ cd TLS-Scanner
$ git submodule update --init --recursive
$ mvn clean package
In alternativa, se si ha fretta, è possibile saltare i test utilizzando:
$ mvn clean package -DskipTests=true
Se si desidera utilizzare TLS-Scanner come libreria, è necessario installarlo con il seguente comando:
$ mvn clean install
Per eseguire TLS-Scanner è necessario avviare uno dei file jar nella cartella apps/. Questi possono essere ottenuti compilando l'applicazione autonomamente oppure scaricando i file jar rilasciati da GitHub.
$ java -jar apps/TLS-Server-Scanner.jar -connect localhost:4433
TLS-Scanner valuterà il server specificato (qui localhost sulla porta 4433) e, al termine, stamperà un report.
Il report utilizza i colori per comunicare la gravità dei risultati:
È necessario specificare un host che si desidera scansionare con il parametro -connect.
Se si desidera migliorare le prestazioni della scansione, è possibile utilizzare il parametro -threads per aumentare il numero di thread utilizzati.
Un altro parametro importante per motivi di prestazioni è il parametro -scanDetail, che può essere utilizzato per configurare quanto dettagliata si desidera che sia la scansione. I valori possibili, dal più veloce al più dettagliato, sono: QUICK, NORMAL, DETAILED, ALL.
Il dettaglio dell'output può essere configurato con il parametro -reportDetail. Per visualizzare maggiori dettagli sulle Linee Guida, utilizzare -reportDetail ALL.
Per impostazione predefinita, i risultati vengono scritti solo sulla console. Se si desidera un output leggibile dalla macchina, è possibile utilizzare -outputFile output.json per scrivere automaticamente i risultati in un file JSON.
I parametri più importanti da modificare sono -scanDetail e -reportDetail. Di seguito spieghiamo alcuni casi d'uso per questi parametri.
Nella maggior parte dei casi, le nostre impostazioni predefinite dei parametri sono sufficienti. Questa esegue una scansione con entrambi i livelli di dettaglio impostati su NORMAL.
Se si desidera eseguire una scansione veloce e ottenere una rapida panoramica del proprio sistema, si consiglia di impostare entrambi i livelli di dettaglio su QUICK. Questo limita l'estensione di alcune sonde eseguite per ridurre il tempo di esecuzione e limita il dettaglio del report per non includere informazioni molto dettagliate e tecniche.
Se si desidera valutare completamente il proprio sistema ed eseguire tutto ciò che abbiamo, si consiglia di impostare entrambi i livelli di dettaglio su ALL. Questo esegue completamente tutte le sonde esistenti e stampa informazioni molto dettagliate per ulteriori analisi e valutazioni.
Invece di (o in aggiunta a) impostare parametri come -scanDetail individualmente, è possibile raggruppare
quali sonde eseguire e quali di questi parametri utilizzare in un profilo di scansione JSON riutilizzabile con
il parametro -profile <path/to/profile.json>. È disponibile sia su TlsServerScanner che su
TlsClientScanner.
Un profilo è un file JSON con:
inheritedFromProfiles: percorsi ad altri profili da cui combinare le sonde, risolti relativamente alla
directory del file di profilo che li dichiara (un percorso assoluto viene utilizzato così com'è).probes: le sonde da eseguire, come mappa dal nome completo di una classe enum ProbeType
alla lista dei nomi delle sue costanti da eseguire. Questo raggruppa le sonde per tipo invece di ripetere il
tipo per ogni singola sonda, mentre un singolo profilo può comunque combinare liberamente sonde da
diverse implementazioni di ProbeType, ad esempio TlsProbeType e QuicProbeType. Ogni lista per tipo
accetta anche "*" (tutte le costanti di quel tipo) e "!CONSTANT_NAME" (rimuove una costante
precedentemente aggiunta per nome o tramite "*"), elaborati in ordine — vedere Everything.json e
demo.json in scan-profiles/ per esempi.settings (opzionale): override per parametri come -scanDetail, -reportDetail,
-postAnalysisDetail, -noColor, -outputFile, -probeTimeout, -parallelProbes e
-threads. Qualsiasi campo omesso mantiene il suo valore predefinito normale (o qualunque valore sia stato passato sulla riga
di comando). A differenza di probes, i settings non vengono ereditati — si applicano solo le impostazioni dichiarate direttamente sul
profilo a cui si punta -profile, anche se questo eredita sonde da altri profili.Vengono eseguite solo le sonde risolte dal profilo attivo (e da tutto ciò da cui eredita); tutto il resto viene saltato.
Esempio, che combina le sonde di un profilo base con le proprie e regola il dettaglio della scansione:
base.json:
{
"probes": {
"de.rub.nds.tlsscanner.core.constants.TlsProbeType": ["PROTOCOL_VERSION", "CIPHER_SUITE"]
}
}
quic.json (nella stessa directory di base.json):
{
"inheritedFromProfiles": ["base.json"],
"settings": {
"scanDetail": "QUICK"
},
"probes": {
"de.rub.nds.tlsscanner.core.constants.QuicProbeType": ["SUPPORTED_VERSIONS"]
}
}
$ java -jar apps/TLS-Server-Scanner.jar -connect localhost:4433 -profile quic.json
Questo esegue PROTOCOL_VERSION, CIPHER_SUITE e SUPPORTED_VERSIONS con -scanDetail QUICK.
Per vedere tutte le sonde disponibili per uno scanner (senza connettersi a un target), utilizzare -listProbes.
Le stampa raggruppate per classe ProbeType nella sintassi JSON esatta che il campo probes di un profilo
si aspetta, così è possibile copiarle e incollarle direttamente in un profilo:
$ java -jar apps/TLS-Server-Scanner.jar -listProbes
{
"de.rub.nds.tlsscanner.core.constants.TlsProbeType" : [ "ALPN", "ESNI", "CERTIFICATE", ... ],
"de.rub.nds.tlsscanner.core.constants.QuicProbeType" : [ "SUPPORTED_VERSIONS", ... ]
}
Per ottenere informazioni dettagliate su tutti i parametri possibili, utilizzare il parametro -help o eseguire il jar senza alcun parametro impostato.