
Scanner automatizado de configuração de servidor e cliente TLS para pentesters e pesquisadores. Avalia suites de cifras, versões de protocolo e diretrizes de segurança com profundidade de varredura personalizável e saída legível por máquina.
O TLS-Scanner é uma ferramenta para auxiliar pentesters e pesquisadores de segurança na avaliação de configurações de servidores e clientes TLS.
Atenção: O TLS-Scanner é uma ferramenta de pesquisa destinada a desenvolvedores de TLS, pentesters, administradores e pesquisadores. Não há interface gráfica. Está na primeira versão e pode conter alguns bugs.
Para compilar e usar o TLS-Scanner, você precisa executar:
$ cd TLS-Scanner
$ git submodule update --init --recursive
$ mvn clean package
Alternativamente, se você estiver com pressa, pode pular os testes usando:
$ mvn clean package -DskipTests=true
Se você quiser usar o TLS-Scanner como uma biblioteca, precisa instalá-lo com o seguinte comando:
$ mvn clean install
Para executar o TLS-Scanner, você precisa executar um dos arquivos jar na pasta apps/. Eles podem ser obtidos compilando o aplicativo você mesmo ou baixando os arquivos jar lançados no GitHub.
$ java -jar apps/TLS-Server-Scanner.jar -connect localhost:4433
O TLS-Scanner avaliará o servidor especificado (aqui localhost na porta 4433) e, no final, imprimirá um relatório.
O relatório usa cores para transmitir a gravidade dos achados:
Você deve especificar um host que deseja escanear com o parâmetro -connect.
Se você quiser melhorar o desempenho do scan, pode usar o parâmetro -threads para aumentar o número de threads utilizadas.
Outro parâmetro importante por razões de desempenho é o parâmetro -scanDetail, que pode ser usado para configurar quão detalhado você deseja escanear. Os valores possíveis, variando de rápido a muito detalhado, são: QUICK, NORMAL, DETAILED, ALL.
O detalhe da saída pode ser configurado com o parâmetro -reportDetail. Para ver mais detalhes sobre as Diretrizes, use -reportDetail ALL.
Por padrão, os resultados são escritos apenas no console. Se você quiser ter uma saída legível por máquina, pode usar -outputFile output.json para gravar automaticamente os resultados em um arquivo JSON.
Os parâmetros mais importantes a alterar são -scanDetail e -reportDetail. A seguir, explicamos alguns casos de uso para esses parâmetros.
Na maioria dos casos, nossas configurações padrão de parâmetros são suficientes. Isso realiza um scan com ambos os níveis de detalhe definidos como NORMAL.
Se você quiser realizar um scan rápido e obter uma visão geral rápida do seu sistema, recomendamos usar ambos os níveis de detalhe definidos como QUICK. Isso limita a extensão de algumas sondagens executadas para reduzir o tempo de execução e limita o detalhe do relatório para não incluir informações muito detalhadas e técnicas.
Se você quiser avaliar totalmente seu sistema e executar tudo o que temos, recomendamos usar ambos os níveis de detalhe definidos como ALL. Isso executa todas as sondagens existentes completamente e imprime informações muito detalhadas para análise e avaliação adicionais.
Em vez de (ou além de) definir parâmetros como -scanDetail individualmente, você pode agrupar
quais sondagens executar e quais desses parâmetros usar em um perfil de scan JSON reutilizável com
o parâmetro -profile <path/to/profile.json>. Ele está disponível tanto em TlsServerScanner quanto em
TlsClientScanner.
Um perfil é um arquivo JSON com:
inheritedFromProfiles: caminhos para outros perfis dos quais combinar sondagens, resolvidos relativamente ao
diretório do arquivo de perfil que os declara (um caminho absoluto é usado como está).probes: as sondagens a executar, como um mapa do nome totalmente qualificado de uma classe enum ProbeType
para a lista de seus nomes de constantes a executar. Isso agrupa sondagens por tipo em vez de repetir o
tipo para cada sondagem individual, enquanto um único perfil ainda pode combinar livremente sondagens de
diferentes implementações de ProbeType, por exemplo TlsProbeType e QuicProbeType. Cada lista por tipo
também aceita "*" (todas as constantes desse tipo) e "!CONSTANT_NAME" (remover uma constante
previamente adicionada por nome ou por "*"), processados em ordem — veja Everything.json e
demo.json em scan-profiles/ para exemplos.settings (opcional): substituições para parâmetros como -scanDetail, -reportDetail,
-postAnalysisDetail, -noColor, -outputFile, -probeTimeout, -parallelProbes e
-threads. Qualquer campo omitido mantém seu padrão normal (ou o que foi passado na linha de comando).
Diferentemente de probes, settings não são herdados — apenas as configurações declaradas diretamente no
perfil para o qual você aponta -profile se aplicam, mesmo que ele herde sondagens de outros perfis.Apenas as sondagens resolvidas a partir do perfil ativo (e tudo o que ele herda) são executadas; todo o resto é ignorado.
Exemplo, combinando as sondagens de um perfil base com as suas próprias e ajustando o detalhe do scan:
base.json:
{
"probes": {
"de.rub.nds.tlsscanner.core.constants.TlsProbeType": ["PROTOCOL_VERSION", "CIPHER_SUITE"]
}
}
quic.json (no mesmo diretório 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
Isso executa PROTOCOL_VERSION, CIPHER_SUITE e SUPPORTED_VERSIONS com -scanDetail QUICK.
Para ver todas as sondagens disponíveis para um scanner (sem se conectar a um alvo), use -listProbes.
Ele as imprime agrupadas por classe ProbeType na sintaxe JSON exata que o campo probes de um perfil
espera, para que você possa copiar e colar diretamente em um 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 obter informações detalhadas sobre todos os parâmetros possíveis, use o parâmetro -help ou execute o jar sem nenhum parâmetro definido.
Fornecemos imagens docker pré-construídas para facilitar o uso do TLS-Server-Scanner.
$ docker run -it --network host ghcr.io/tls-attacker/tlsscanner -connect localhost:4433
A imagem foi feita para ser usada para escaneamento de servidores, mas também contém os outros arquivos jar. Eles podem ser acessados alterando o entrypoint.