Detectar Certificados SSL no Nmap

NmapBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como detectar certificados SSL usando o script ssl-cert do Nmap. O laboratório guia você através da varredura de endereços IP e nomes de domínio para recuperar e exibir informações de certificados SSL/TLS, incluindo o assunto (subject), o emissor (issuer) e o período de validade.

Você executará comandos como nmap --script ssl-cert 192.168.1.1 e nmap --script ssl-cert scanme.nmap.org no terminal Xfce, explorando opções para especificar portas, aumentar a verbosidade e salvar os resultados em um arquivo. Finalmente, você revisará os detalhes do certificado e os comparará com os resultados da detecção de serviço.

Executar varredura de certificado SSL com nmap --script ssl-cert 192.168.1.1

Nesta etapa, usaremos o Nmap para realizar uma varredura de certificado SSL em um endereço IP especificado. O Nmap é uma ferramenta poderosa de varredura de rede, e seu mecanismo de scripting nos permite estender sua funcionalidade. O script ssl-cert foi projetado para recuperar e exibir informações sobre certificados SSL/TLS de um servidor de destino.

Primeiro, vamos entender a estrutura básica do comando:

nmap --script ssl-cert <target_ip>

Aqui, <target_ip> é o endereço IP do servidor que você deseja varrer. Neste caso, estaremos varrendo o endereço IP 192.168.1.1.

Agora, abra seu terminal Xfce. Certifique-se de estar no diretório ~/project. Caso contrário, navegue até ele usando o comando cd:

cd ~/project

Em seguida, execute o seguinte comando para executar a varredura do certificado SSL:

sudo nmap --script ssl-cert 192.168.1.1

Você pode ser solicitado a inserir sua senha. Como o usuário labex tem privilégios sudo sem senha, basta pressionar Enter.

Observação: 192.168.1.1 é um endereço IP privado e pode não ser acessível a partir da sua configuração de rede atual. Se você não tiver um servidor nesse endereço, a varredura pode não retornar nenhum resultado ou pode expirar. Para fins de teste, você pode usar um endereço IP público que você sabe que possui um certificado SSL, como scanme.nmap.org ou 8.8.8.8.

Vamos tentar varrer scanme.nmap.org em vez disso:

sudo nmap --script ssl-cert scanme.nmap.org

Este comando tentará se conectar a scanme.nmap.org e recuperar suas informações de certificado SSL. A saída exibirá detalhes como o assunto (subject) do certificado, o emissor (issuer), o período de validade e quaisquer Nomes Alternativos de Assunto (SANs).

Exemplo de saída (a saída real variará):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds

Esta saída mostra os detalhes do certificado SSL para scanme.nmap.org, incluindo o assunto (subject), o emissor (issuer) e as datas de validade.

Escanear a porta 443 com nmap --script ssl-cert -p 443 127.0.0.1

Nesta etapa, nos concentraremos na varredura de uma porta específica, a 443, usando o Nmap e o script ssl-cert. A porta 443 é a porta padrão para tráfego HTTPS (Hypertext Transfer Protocol Secure), que é usado para comunicação segura pela internet. Ao especificar a porta, podemos restringir a varredura e recuperar informações do certificado SSL especificamente para serviços em execução nessa porta.

O comando que usaremos é:

nmap --script ssl-cert -p 443 127.0.0.1

Vamos detalhar este comando:

  • nmap: O scanner de linha de comando Nmap.
  • --script ssl-cert: Especifica que queremos usar o script ssl-cert para recuperar informações do certificado SSL.
  • -p 443: Esta opção informa ao Nmap para varrer apenas a porta 443.
  • 127.0.0.1: Este é o endereço de loopback, também conhecido como localhost. Ele se refere à sua própria máquina.

Agora, abra seu terminal Xfce e certifique-se de estar no diretório ~/project:

cd ~/project

Execute o seguinte comando para varrer a porta 443 no localhost:

sudo nmap --script ssl-cert -p 443 127.0.0.1

Como 127.0.0.1 se refere à sua própria máquina, este comando tentará recuperar o certificado SSL de qualquer serviço em execução na porta 443 em sua VM LabEx. Se não houver nenhum serviço escutando na porta 443, o Nmap relatará que a porta está fechada.

Se você tiver um servidor web ou outro serviço configurado para usar HTTPS em sua VM LabEx, você deverá ver uma saída semelhante à seguinte (a saída real variará dependendo do certificado e da configuração do servidor):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).

PORT    STATE SERVICE
443/tcp closed https

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

Neste exemplo, a saída mostra que a porta 443 está fechada. Isso significa que não há nenhum serviço escutando nessa porta no localhost. Se um serviço estivesse em execução, a saída incluiria os detalhes do certificado SSL, semelhantes à etapa anterior.

Se você deseja testar este comando em um servidor que você sabe que tem HTTPS habilitado na porta 443, você pode substituir 127.0.0.1 pelo endereço IP ou nome de domínio desse servidor. Por exemplo:

sudo nmap --script ssl-cert -p 443 scanme.nmap.org

Isso varrerá a porta 443 em scanme.nmap.org e recuperará suas informações de certificado SSL.

Adicionar verbosidade com nmap -v --script ssl-cert 192.168.1.1

Nesta etapa, adicionaremos verbosidade ao nosso comando Nmap. Verbosidade no Nmap significa aumentar a quantidade de informações exibidas durante a varredura. Isso pode ser útil para entender o que o Nmap está fazendo e para solucionar quaisquer problemas. A opção -v aumenta o nível de verbosidade. Usar -v várias vezes (por exemplo, -vv ou -vvv) aumenta a verbosidade ainda mais.

O comando que usaremos é:

nmap -v --script ssl-cert 192.168.1.1

Vamos detalhar este comando:

  • nmap: O scanner de linha de comando Nmap.
  • -v: Esta opção aumenta o nível de verbosidade, fornecendo uma saída mais detalhada.
  • --script ssl-cert: Especifica que queremos usar o script ssl-cert para recuperar informações do certificado SSL.
  • 192.168.1.1: Este é o endereço IP de destino.

Agora, abra seu terminal Xfce e certifique-se de estar no diretório ~/project:

cd ~/project

Execute o seguinte comando para executar a varredura do certificado SSL com verbosidade:

sudo nmap -v --script ssl-cert 192.168.1.1

Como mencionado antes, 192.168.1.1 é um endereço IP privado e pode não ser acessível. Se você não tiver um servidor nesse endereço, a varredura pode não retornar nenhum resultado ou pode expirar. Para fins de teste, você pode usar um endereço IP público que você sabe que possui um certificado SSL, como scanme.nmap.org.

Vamos tentar varrer scanme.nmap.org com verbosidade:

sudo nmap -v --script ssl-cert scanme.nmap.org

A saída agora incluirá mais informações sobre o processo de varredura, como as diferentes fases pelas quais o Nmap passa, as portas que ele está sondando e quaisquer erros ou avisos que ocorrem.

Exemplo de saída (a saída real variará):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
NSE: Loaded 1 script for scanning.
Initiating Ping Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 10:00, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:00
Completed Parallel DNS resolution of 1 host. at 10:00, 0.01s elapsed
Initiating Connect Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 22/tcp on 45.33.32.156
Completed Connect Scan at 10:00, 2.15s elapsed (1000 total ports)
NSE: Script scanning scanme.nmap.org (45.33.32.156)
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.02s elapsed
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

NSE: Script Post-scanning.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.34 seconds

Observe as informações adicionais sobre o processo de varredura, como "Initiating Ping Scan", "Completed Connect Scan" e "NSE: Script scanning". Esse detalhe extra pode ser útil para entender como o Nmap funciona e para diagnosticar quaisquer problemas.

Salvar resultados SSL com nmap --script ssl-cert -oN ssl.txt 127.0.0.1

Nesta etapa, aprenderemos como salvar os resultados de nossa varredura Nmap em um arquivo. Isso é útil para análise posterior ou para compartilhar os resultados com outras pessoas. O Nmap oferece várias opções para salvar a saída em diferentes formatos. A opção -oN salva a saída em um formato "normal" legível por humanos.

O comando que usaremos é:

nmap --script ssl-cert -oN ssl.txt 127.0.0.1

Vamos detalhar este comando:

  • nmap: O scanner de linha de comando Nmap.
  • --script ssl-cert: Especifica que queremos usar o script ssl-cert para recuperar informações do certificado SSL.
  • -oN ssl.txt: Esta opção informa ao Nmap para salvar a saída em formato normal em um arquivo chamado ssl.txt.
  • 127.0.0.1: Este é o endereço IP de destino (localhost).

Agora, abra seu terminal Xfce e certifique-se de estar no diretório ~/project:

cd ~/project

Execute o seguinte comando para executar a varredura do certificado SSL e salvar os resultados em ssl.txt:

sudo nmap --script ssl-cert -oN ssl.txt 127.0.0.1

Após a conclusão da varredura, você encontrará um arquivo chamado ssl.txt em seu diretório ~/project. Este arquivo contém a saída da varredura Nmap, incluindo as informações do certificado SSL (se houver) para o destino.

Para verificar se o arquivo foi criado e contém os resultados da varredura, você pode usar o comando cat para exibir o conteúdo do arquivo:

cat ssl.txt

Se um serviço com um certificado SSL estiver em execução em 127.0.0.1, você verá os detalhes do certificado na saída. Se nenhum serviço estiver em execução, o arquivo conterá informações sobre a varredura, mas nenhum detalhe do certificado.

Por exemplo, se a porta 443 estiver fechada, o arquivo ssl.txt poderá conter:

## Nmap 7.80 scan initiated Tue Oct 27 10:00:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
PORT    STATE SERVICE
443/tcp closed https
## Nmap done at Tue Oct 27 10:00:00 2023 -- 1 IP address (1 host up) scanned in 0.07 seconds

Se você deseja varrer um destino diferente e salvar os resultados, basta substituir 127.0.0.1 pelo endereço IP ou nome de domínio desejado. Por exemplo:

sudo nmap --script ssl-cert -oN ssl.txt scanme.nmap.org

Isso varrerá scanme.nmap.org e salvará os resultados em ssl.txt. Lembre-se de verificar o conteúdo de ssl.txt usando cat ssl.txt para confirmar os resultados da varredura.

Revisar detalhes do certificado no terminal Xfce

Nesta etapa, revisaremos os detalhes do certificado SSL que salvamos no arquivo ssl.txt na etapa anterior. Usaremos o comando cat para exibir o conteúdo do arquivo no terminal Xfce e, em seguida, examinaremos as informações do certificado.

Primeiro, certifique-se de estar no diretório ~/project:

cd ~/project

Agora, use o comando cat para exibir o conteúdo do arquivo ssl.txt:

cat ssl.txt

A saída mostrará os resultados da varredura Nmap, incluindo os detalhes do certificado SSL se um serviço com um certificado SSL foi encontrado no destino.

Vamos analisar a saída. As partes importantes das informações do certificado SSL normalmente incluem:

  • Subject (Assunto): Este campo contém o nome de domínio ou entidade para a qual o certificado foi emitido. Procure o atributo commonName (CN) dentro do campo Subject.
  • Issuer (Emissor): Este campo identifica a Autoridade de Certificação (CA) que emitiu o certificado. Novamente, procure o atributo commonName (CN).
  • Public Key type (Tipo de Chave Pública): Indica o tipo de algoritmo de chave pública usado (por exemplo, RSA, DSA, ECDSA).
  • Public Key bits (Bits da Chave Pública): Especifica o tamanho da chave em bits (por exemplo, 2048, 4096). Tamanhos de chave maiores geralmente fornecem segurança mais forte.
  • Signature Algorithm (Algoritmo de Assinatura): Indica o algoritmo usado para assinar o certificado (por exemplo, sha256WithRSAEncryption).
  • Not valid before (Não válido antes): A data e hora em que o certificado se torna válido.
  • Not valid after (Não válido após): A data e hora em que o certificado expira. É crucial garantir que os certificados não estejam expirados.
  • MD5/SHA1: Estes são valores de hash do certificado. Embora o MD5 seja considerado fraco, o SHA1 também está sendo descontinuado. SHA256 ou superior é preferível.
  • -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----: Estes são os dados reais do certificado codificados em formato PEM.

Por exemplo, se você varreu scanme.nmap.org e salvou a saída em ssl.txt, a parte relevante da saída pode ser semelhante a esta:

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

Neste exemplo, você pode ver que o certificado é para scanme.nmap.org, emitido por Let's Encrypt Authority X3, usa uma chave RSA com 2048 bits e é assinado com SHA256.

Ao revisar esses detalhes, você pode obter informações sobre a segurança e validade do certificado SSL usado pelo serviço de destino.

Se você varreu 127.0.0.1 e nenhum serviço SSL estava em execução, o arquivo ssl.txt não conterá as informações detalhadas do certificado. Nesse caso, você pode querer instalar um servidor web simples com SSL habilitado (fora do escopo deste laboratório) para gerar um certificado para teste.

Comparar com a detecção de serviço no terminal Xfce

Nesta etapa, compararemos as informações do certificado SSL que obtivemos com os recursos de detecção de serviço do Nmap. Isso nos permite verificar se o serviço detectado corresponde aos detalhes do certificado e identificar quaisquer discrepâncias potenciais.

Primeiro, vamos executar uma varredura padrão de detecção de serviço Nmap no destino. Usaremos 127.0.0.1 como o destino para este exemplo. Certifique-se de estar no diretório ~/project:

cd ~/project

Execute o seguinte comando:

sudo nmap -sV 127.0.0.1

A opção -sV habilita a detecção da versão do serviço. O Nmap tentará determinar o serviço em execução em cada porta aberta.

A saída mostrará as portas abertas e o serviço detectado. Por exemplo:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000058s latency).
Not shown: 999 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
443/tcp open  ssl/http  ## Example: If a web server with SSL is running

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds

Agora, compare os resultados da detecção de serviço com os detalhes do certificado SSL que você revisou na etapa anterior (do arquivo ssl.txt).

Por exemplo, se a detecção de serviço do Nmap identificar a porta 443 como executando ssl/http e o commonName do Subject do certificado SSL corresponder ao nome de domínio associado ao servidor web, então a detecção de serviço e os detalhes do certificado se alinham.

No entanto, se houver uma incompatibilidade, isso pode indicar um problema potencial:

  • Identificação incorreta do serviço: O Nmap pode identificar incorretamente o serviço em execução em uma porta.
  • Certificado mal configurado: O certificado pode ser emitido para um nome de domínio diferente daquele que está sendo servido.
  • Ataque Man-in-the-Middle (Homem no Meio): Um invasor pode estar interceptando a conexão e apresentando um certificado diferente.

Para investigar mais a fundo as discrepâncias, você pode usar scripts Nmap mais específicos ou ferramentas como openssl para examinar o certificado diretamente.

Por exemplo, se a detecção de serviço mostrar http na porta 443, mas o certificado SSL for para um domínio diferente, isso é um sinal de alerta. Isso pode indicar uma configuração incorreta ou um ataque potencial.

Em resumo, comparar a detecção de serviço do Nmap com os detalhes do certificado SSL ajuda a verificar a integridade e a segurança dos serviços em execução em um destino.

Resumo

Neste laboratório, usamos o Nmap com o script ssl-cert para escanear e recuperar informações de certificado SSL/TLS de servidores de destino. Aprendemos como executar o comando básico nmap --script ssl-cert <target_ip> para escanear um endereço IP específico e abordamos possíveis problemas com endereços IP privados usando um endereço público como scanme.nmap.org para testes.

Também praticamos a execução da varredura usando sudo e observamos a saída, que inclui detalhes como o assunto (subject), o emissor (issuer) e o período de validade do certificado. Isso fornece uma base para uma exploração mais aprofundada das capacidades do Nmap na análise de certificados SSL.