
rdpscan para a vulnerabilidade BlueKeep CVE-2019-0708
Este é um scanner rápido e sujo para a vulnerabilidade CVE-2019-0708 no Remote Desktop da Microsoft.
Neste momento, existem cerca de 900.000 máquinas na Internet pública vulneráveis a esta vulnerabilidade,
portanto, é de se esperar que em breve surja um worm como WannaCry e notPetya. Portanto, escaneie suas redes e
aplique patches (ou pelo menos, ative a NLA) nos sistemas vulneráveis.
Esta é uma ferramenta de linha de comando. Você pode baixar o código-fonte e compilá-lo
você mesmo, ou pode baixar um dos binários pré-compilados para
Windows ou macOS a partir do link acima.
Esta ferramenta é totalmente baseada no patch rdesktop de https://github.com/zerosum0x0/CVE-2019-0708.
Eu simplesmente reduzi o código para poder compilar facilmente no macOS e no Windows,
além de adicionar a capacidade de escanear vários alvos.
Status
Isso tem apenas alguns dias e é experimental. No entanto, estou testando-o escaneando
toda a Internet (com a ajuda do masscan, então estou resolvendo muitos problemas
rapidamente. Você pode entrar em contato comigo no Twitter (@erratarob) para ajuda/comentários.
- 2019-05-38 - Melhores descrições de resultados, bem como documentação sobre o que significam (veja abaixo).
- 2019-05-27 - Binários para Windows e macOS lançados (clique nos badges acima).
- 2019-05-26 - Corrigindo problemas de rede no Windows
- 2019-05-25 - Linux e macOS funcionando bem, Windows tem alguns erros de rede
- 2019-05-24 - Funciona no Linux e macOS, Windows tem alguns bugs de compilação
- 2019-05-23 - Atualmente trabalhando no macOS dentro do XCode
Uso principal
Para escanear uma rede, execute-o da seguinte forma:
rdpscan 192.168.1.1-192.168.1.255
Isso produz um dos 3 resultados para cada endereço:
- SEGURO (SAFE) - se o alvo foi determinado como corrigido (patched) ou pelo menos requer CredSSP/NLA
- VULNERÁVEL (VULNERABLE) - se o alvo foi confirmado como vulnerável
- DESCONHECIDO (UNKNOWN) - se o alvo não responde ou tem alguma falha de protocolo
Quando não existe nada em um endereço IP de destino, as versões antigas exibiam a
mensagem "DESCONHECIDO - conexão expirou". Ao escanear redes grandes,
isso produz uma sobrecarga de informações demais sobre sistemas pelos quais você não
se importa. Portanto, a nova versão, por padrão, não produz essa
informação a menos que você adicione -v (para verbose) na linha de comando.
Você pode aumentar a velocidade com que escaneia redes grandes aumentando
o número de workers:
rdpscan --workers 10000 10.0.0.0/8
No entanto, no meu computador, ele só produz cerca de 1500 workers, devido
a limitações do sistema, independentemente de quão alto eu configure este parâmetro.
Você pode aumentar ainda mais a velocidade usando isso em conjunto
com o masscan, conforme descrito na seção abaixo.
Interpretando os resultados
Existem três respostas gerais:
- SEGURO (SAFE) - significa que o alvo provavelmente está corrigido ou de outra forma
não vulnerável ao bug.
- VULNERÁVEL (VULNERABLE): significa que confirmamos que o alvo está vulnerável
a este bug, e que quando o worm chegar, provavelmente será
infectado.
- DESCONHECIDO (UNKNOWN): significa que não podemos confirmar de nenhuma forma, geralmente porque
o alvo não responde ou não está executando RDP, que é
a grande maioria das respostas. Além disso, quando os alvos estão sem
recursos ou com problemas de rede, obteremos
muitas dessas. Finalmente, erros de protocolo são responsáveis
por muitas.
Embora as três respostas principais sejam SEGURO, VULNERÁVEL e DESCONHECIDO,
elas contêm texto adicional explicando o diagnóstico. Esta seção
descreve as várias strings que você verá.
SEGURO (SAFE)
Existem três principais razões pelas quais acreditamos que um alvo é seguro:
- SEGURO - Alvo parece corrigido
Isso acontece quando o alvo não responde à solicitação
de gatilho. Isso significa que é um sistema Windows que foi corrigido,
ou um sistema que não era vulnerável desde o início, como Windows 10
ou Unix.
- SEGURO - CredSSP/NLA exigido
Isso significa que o alvo primeiro requer Autenticação de Nível de Rede (Network Level Authentication) antes
que a conexão RDP possa ser estabelecida. A ferramenta não pode passar deste ponto, sem
credenciais legítimas, portanto não pode determinar se o alvo foi corrigido.
No entanto, os hackers também não podem continuar além deste ponto para explorar sistemas vulneráveis,
então você provavelmente está "seguro". Contudo, quando exploits surgirem, insiders com nomes de usuário/senhas válidos
poderão explorar o sistema se ele não estiver corrigido.
- SEGURO - não é RDP
Isso significa que o sistema não é RDP, mas tem algum outro serviço que por acaso usa
esta mesma porta e produz uma resposta que claramente não é RDP. Exemplos comuns são
HTTP e SSH. Observe que, em vez de um protocolo identificável, um servidor
pode responder com um pacote RST ou FIN. Estes são identificados como DESCONHECIDO em vez
de SEGURO/
VULNERÁVEL (VULNERABLE)
Isso significa que confirmamos que o sistema está vulnerável ao bug.
- VULNERÁVEL - obteve appid
Há apenas uma resposta quando o sistema está vulnerável, esta.
DESCONHECIDO (UNKNOWN)
Há uma infinidade de variações para desconhecido
- DESCONHECIDO - sem conexão - tempo esgotado
Esta é de longe a resposta mais comum e acontece quando o endereço IP
alvo não faz nenhuma resposta. Na verdade, é tão comum que
ao escanear grandes faixas de endereços, geralmente é omitida. Você
precisa adicionar a flag -v (verbose) para habilitá-la.
- DESCONHECIDO - sem conexão - recusada (RST)
Esta é de longe a segunda resposta mais comum e acontece quando
o alvo existe e responde ao tráfego de rede, mas não está executando
RDP, então recusa a conexão com um pacote TCP RST.
- DESCONHECIDO - erro de protocolo RDP - tempo de recebimento esgotado
Esta é a terceira resposta mais comum e acontece quando estabelecemos com sucesso
uma conexão RDP, mas então o servidor para de responder
a nós. Isso se deve a erros de rede e quando o sistema alvo está
sobrecarregado por algum motivo. Também pode ser erro de rede nesta
extremidade, como quando você está atrás de um NAT e o sobrecarrega com muitas
conexões.
- DESCONHECIDO - sem conexão - conexão fechada
Isso significa que estabelecemos uma conexão (TCP SYN-ACK), mas então
a conexão é imediatamente fechada (com um RST ou FIN). Existem
muitas razões para isso acontecer, que não podemos distinguir:
- Está executando RDP, mas por algum motivo fecha a conexão,
possivelmente por estar sem recursos.
- Não é RDP e não gosta da solicitação RDP que enviamos,
então, em vez de nos enviar uma mensagem de erro adequada (o que