
Escáner automatizado de configuración de servidor y cliente TLS para pentesters e investigadores. Evalúa conjuntos de cifrado, versiones de protocolo y guías de seguridad con profundidad de escaneo personalizable y salida legible por máquina.
TLS-Scanner es una herramienta para ayudar a pentesters e investigadores de seguridad en la evaluación de configuraciones de servidores y clientes TLS.
Tenga en cuenta: TLS-Scanner es una herramienta de investigación destinada a desarrolladores de TLS, pentesters, administradores e investigadores. No tiene interfaz gráfica. Está en su primera versión y puede contener algunos errores.
Para compilar y usar TLS-Scanner, debe ejecutar:
$ cd TLS-Scanner
$ git submodule update --init --recursive
$ mvn clean package
Alternativamente, si tiene prisa, puede omitir las pruebas usando:
$ mvn clean package -DskipTests=true
Si desea usar TLS-Scanner como biblioteca, debe instalarlo con el siguiente comando:
$ mvn clean install
Para ejecutar TLS-Scanner debe ejecutar uno de los archivos jar en la carpeta apps/. Estos se pueden obtener compilando la aplicación usted mismo o descargando los archivos jar publicados desde GitHub.
$ java -jar apps/TLS-Server-Scanner.jar -connect localhost:4433
TLS-Scanner evaluará el servidor especificado (aquí localhost en el puerto 4433) y, al final, imprimirá un informe.
El informe utiliza colores para transmitir la gravedad de los hallazgos:
Debe especificar un host que desee escanear con el parámetro -connect.
Si desea mejorar el rendimiento del escaneo, puede usar el parámetro -threads para aumentar el número de hilos utilizados.
Otro parámetro importante por razones de rendimiento es el parámetro -scanDetail, que se puede usar para configurar el nivel de detalle con el que desea escanear. Los valores posibles, de rápido a muy detallado, son: QUICK, NORMAL, DETAILED, ALL.
El detalle de la salida se puede configurar con el parámetro -reportDetail. Para ver más detalles sobre las Guidelines, use -reportDetail ALL.
De forma predeterminada, los resultados se escriben solo en la consola. Si desea una salida legible por máquina, puede usar -outputFile output.json para escribir automáticamente los resultados en un archivo JSON.
Los parámetros más importantes que se pueden cambiar son -scanDetail y -reportDetail. A continuación, explicamos algunos casos de uso para estos parámetros.
En la mayoría de los casos, nuestra configuración de parámetros predeterminada es suficiente. Esto realiza un escaneo con ambos niveles de detalle establecidos en NORMAL.
Si desea realizar un escaneo rápido y obtener una visión general rápida de su sistema, recomendamos usar ambos niveles de detalle establecidos en QUICK. Esto limita la extensión de algunas sondas ejecutadas para reducir el tiempo de ejecución y limita el detalle del informe para no incluir información muy detallada y técnica.
Si desea evaluar completamente su sistema y ejecutar todo lo que tenemos, recomendamos usar ambos niveles de detalle establecidos en ALL. Esto ejecuta todas las sondas existentes por completo e imprime información muy detallada para su posterior análisis y evaluación.
En lugar de (o además de) establecer parámetros como -scanDetail individualmente, puede agrupar
qué sondas ejecutar y cuáles de estos parámetros usar en un perfil de escaneo JSON reutilizable con
el parámetro -profile <path/to/profile.json>. Está disponible tanto en TlsServerScanner como en
TlsClientScanner.
Un perfil es un archivo JSON con:
inheritedFromProfiles: rutas a otros perfiles desde los que combinar sondas, resueltas en relación con
el directorio del archivo de perfil que las declara (una ruta absoluta se usa tal cual).probes: las sondas a ejecutar, como un mapa desde el nombre completo de una clase enum ProbeType
a la lista de los nombres de sus constantes a ejecutar. Esto agrupa las sondas por tipo en lugar de repetir
el tipo para cada sonda individual, mientras que un único perfil aún puede combinar libremente sondas de
diferentes implementaciones de ProbeType, p. ej. TlsProbeType y QuicProbeType. Cada lista por tipo
también acepta "*" (todas las constantes de ese tipo) y "!CONSTANT_NAME" (eliminar una constante
previamente añadida por nombre o por "*"), procesadas en orden — consulte Everything.json y
demo.json en scan-profiles/ para ver ejemplos.settings (opcional): anulaciones para parámetros como -scanDetail, -reportDetail,
-postAnalysisDetail, -noColor, -outputFile, -probeTimeout, -parallelProbes y
-threads. Cualquier campo omitido conserva su valor predeterminado normal (o el que se haya pasado en la línea
de comandos). A diferencia de probes, los settings no se heredan — solo se aplican los settings declarados directamente en
el perfil al que apunta -profile, incluso si hereda sondas de otros perfiles.Solo se ejecutan las sondas resueltas desde el perfil activo (y todo lo que hereda); todo lo demás se omite.
Ejemplo, combinando las sondas de un perfil base con las suyas y ajustando el detalle del escaneo:
base.json:
{
"probes": {
"de.rub.nds.tlsscanner.core.constants.TlsProbeType": ["PROTOCOL_VERSION", "CIPHER_SUITE"]
}
}
quic.json (en el mismo directorio que 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
Esto ejecuta PROTOCOL_VERSION, CIPHER_SUITE y SUPPORTED_VERSIONS con -scanDetail QUICK.
Para ver todas las sondas disponibles para un escáner (sin conectarse a un objetivo), use -listProbes.
Las imprime agrupadas por clase ProbeType en la sintaxis JSON exacta que espera el campo probes de un perfil,
para que pueda copiarla y pegarla directamente en un perfil:
$ 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", ... ]
}
Para obtener información detallada sobre todos los parámetros posibles, use el parámetro -help o ejecute el jar sin ningún parámetro establecido.
Proporcionamos imágenes Docker precompiladas para un uso sencillo de TLS-Server-Scanner.
$ docker run -it --network host ghcr.io/tls-attacker/tlsscanner -connect localhost:4433