18 KiB
Falsificando Dispositivos SSDP e UPnP com o EvilSSDP
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.
Este post foi copiado de https://www.hackingarticles.in/evil-ssdp-spoofing-the-ssdp-and-upnp-devices/
Introdução
O que é SSDP?
SSDP ou Simple Service Discovery Protocol é um protocolo de rede projetado para anúncio e descoberta de serviços de rede. Ele pode funcionar sem qualquer configuração DHCP ou DNS. Foi projetado para ser usado em ambientes residenciais ou pequenos escritórios. Ele usa UDP como protocolo de transporte subjacente na porta 1900. Ele usa o método HTTP NOTIFY para anunciar o estabelecimento ou retirada de serviços para um grupo multicast. É a base do protocolo de descoberta UPnP.
O que são dispositivos UPnP?
UPnP ou Universal Plug and Play é um conjunto de protocolos de rede que permite que dispositivos em rede, como computadores pessoais, impressoras, gateways de Internet, pontos de acesso Wi-Fi e dispositivos móveis, descubram a disponibilidade uns dos outros na rede e estabeleçam serviços de rede para comunicações, compartilhamento de dados e entretenimento. A arquitetura UPnP suporta a rede de configuração zero. Um dispositivo compatível com UPnP de qualquer fornecedor pode se juntar dinamicamente a uma rede, obter um endereço IP, anunciar seu nome, anunciar ou transmitir suas capacidades mediante solicitação e aprender sobre a presença e capacidades de outros dispositivos.
Fluxo
A pilha UPnP consiste em seis camadas: endereçamento, descoberta, descrição, controle, eventos e apresentação.
Na camada de endereçamento, os sistemas habilitados para UPnP tentam obter um endereço IP através do DHCP. Se isso não for possível, eles autoatribuem um endereço da faixa 169.254.0.0/16 (RFC 3927), um processo conhecido como AutoIP.
Em seguida, vem a camada de descoberta, na qual o sistema procura outros dispositivos na rede usando o Simple Service Discovery Protocol (SSDP). As duas maneiras de descobrir dispositivos são ativamente e passivamente. Ao usar o método ativo, dispositivos compatíveis com UPnP enviam uma mensagem de descoberta (chamada de solicitação M-SEARCH) para o endereço multicast 239.255.255.250 na porta UDP 1900. Chamamos essa solicitação de HTTPU (HTTP sobre UDP) porque ela contém um cabeçalho semelhante ao cabeçalho HTTP. A solicitação M-SEARCH se parece com isso:
M-SEARCH * HTTP/1.1
ST: ssdp:all
MX: 5
MAN: ssdp:discover
HOST: 239.255.255.250:1900
Sistemas UPnP que ouvem essa solicitação devem responder com uma mensagem unicast UDP que anuncia a localização HTTP do arquivo XML de descrição, que lista os serviços suportados pelo dispositivo.
Ao usar o método passivo para descobrir dispositivos, dispositivos compatíveis com UPnP anunciam periodicamente seus serviços na rede enviando uma mensagem NOTIFY para o endereço multicast 239.255.255.250 na porta UDP 1900. Essa mensagem, que segue abaixo, parece com a enviada em resposta à descoberta ativa:
NOTIFY * HTTP/1.1\r\n
HOST: 239.255.255.250:1900\r\n
CACHE-CONTROL: max-age=60\r\n
LOCATION: http://192.168.10.254:5000/rootDesc.xml\r\n
SERVER: OpenWRT/18.06-SNAPSHOT UPnP/1.1 MiniUPnPd/2.1\r\n
NT: urn:schemas-upnp-org:service:WANIPConnection:2
A descrição de cada perfil UPnP é referenciada no valor do campo LOCATION da mensagem de resposta recebida durante a descoberta ativa ou na mensagem NOTIFY recebida durante a descoberta passiva.
A camada de controle é provavelmente a mais importante; ela permite que os clientes enviem comandos para o dispositivo UPnP usando as URLs do arquivo de descrição. Eles podem fazer isso usando o Protocolo de Acesso a Objetos Simples (SOAP), um protocolo de mensagens que usa XML sobre HTTP. Os dispositivos enviam solicitações SOAP para o endpoint controlURL, descrito na tag <service> dentro do arquivo de descrição. Uma tag <service> se parece com isso:
<service>
<serviceType>urn:schemas-upnp-org:service:WANIPConnection:2</serviceType>
<serviceId>urn:upnp-org:serviceId:WANIPConn1</serviceId>
<SCPDURL>/WANIPCn.xml</SCPDURL>
<controlURL>/ctl/IPConn</controlURL>
<eventSubURL>/evt/IPConn</eventSubURL>
</service>
IGD - Dispositivo de Gateway de Internet
IGD mapeia portas em configurações de tradução de endereço de rede (NAT). O IGD permite que um aplicativo adicione dinamicamente um mapeamento de porta temporário no roteador por um determinado período de tempo (sem precisar que o usuário execute nenhuma etapa manual).
A maioria dos dispositivos normalmente não aceita pacotes SSDP através da interface WAN, mas alguns deles ainda podem aceitar comandos IGD através de pontos de controle SOAP abertos.
Na seção de ferramentas Umap, você pode encontrar uma maneira de explorar esse vetor.
Ferramentas
Miranda
Miranda é um cliente UPnP em python2 que pode ser útil para descobrir serviços UPnP, obter detalhes e enviar comandos para eles:
upnp> msearch
Entering discovery mode for 'upnp:rootdevice', Ctl+C to stop...
SSDP reply message from 192.168.1.254:49152
XML file is located at http://192.168.1.254:49152/wps_device.xml
Device is running Unspecified, UPnP/1.0, Unspecified
SSDP reply message from 192.168.1.254:53350
XML file is located at http://192.168.1.254:53350/37699b14/rootDesc.xml
Device is running Linux/3.4.11 UPnP/1.0 MiniUPnPd/1.9
upnp> host list
[0] 192.168.1.254:49152
[1] 192.168.1.254:53350
upnp> host get 0
upnp> host details 0
Host name: 192.168.1.254:49152
UPNP XML File: http://192.168.1.254:49152/wps_device.xml
Device information:
Device Name: WFADevice
Service Name: WFAWLANConfig
controlURL: wps_control
eventSubURL: wps_event
serviceId: urn:wifialliance-org:serviceId:WFAWLANConfig1
SCPDURL: wps_scpd.xml
fullName: urn:schemas-wifialliance-org:service:WFAWLANConfig:1
ServiceActions:
PutMessage
NewInMessage
InMessage:
dataType: bin.base64
[...]
upnp> host send 0 WFADevice WFAWLANConfig PutMessage
Umap
A ferramenta umap pode ajudar a descobrir comandos upnp que estão disponíveis nas interfaces WAN mesmo que não sejam anunciados nessas interfaces (isso ocorre devido a implementações com falhas). Note que se, por exemplo, você estiver testando um roteador e tiver acesso a ele tanto pela rede interna quanto pela interface WAN, você deve tentar enumerar todos os serviços da rede interna (usando miranda, por exemplo) e depois tentar chamar esses serviços da rede externa.
Outras ferramentas UPnP
Encontre em https://github.com/0x90/upnp-arsenal mais ferramentas upnp.
Evil SSDP
A ferramenta Evil SSDP foi desenvolvida por initstring. Esta ferramenta está hospedada no GitHub. Usaremos o comando git clone para clonar todo o conteúdo do git em nossa máquina de ataque. O comando git clone criará um diretório com o mesmo nome do GitHub. Como a ferramenta é desenvolvida na versão 3 do Python, teremos que usar o python3 seguido pelo nome do arquivo .py para executar o programa. Aqui podemos ver uma tela de ajuda básica da ferramenta.
git clone https://github.com/initstring/evil-ssdp.git
cd evil-ssdp/ls
python3 evil-ssdp.py --help
No diretório clonado, encontraremos um diretório chamado templates. Ele contém todos os modelos pré-compilados que podem ser usados para phishing do usuário alvo.
Spoofing Scanner SSDP
Agora que executamos a ferramenta sem problemas, vamos usá-la para obter algumas credenciais. Nesta primeira prática, estaremos falsificando um Scanner como um dispositivo UPnP confiável. Para começar, teremos que configurar o modelo.
Configuração do Modelo
Para usar a ferramenta, teremos que fornecer a interface de rede. Aqui, em nossa máquina atacante, temos o "eth0" como nossa interface, você pode encontrar sua interface usando o comando "ifconfig".
Depois de fornecer a interface, usaremos o parâmetro "--template" para passar um modelo que encontramos anteriormente no diretório de modelos. Para falsificar um scanner, executaremos o seguinte comando. Como podemos ver, a ferramenta fez seu trabalho e hospedou vários arquivos de modelo em nossa máquina atacante na porta 8888. Também temos o ponteiro SMB hospedado.
ls temlates/
python3 evil-ssdp.py eth0 --template scanner
Manipulação do Usuário
O próximo passo lógico é manipular o usuário para clicar no aplicativo. Estar na mesma rede que o alvo mostrará nosso scanner falso em seu explorador. É aqui que o UPnP entra em ação. A ferramenta Evil SSDP cria esse scanner com aparência genuína no sistema do alvo sem nenhum tipo de interação forçada com o alvo.
Ao clicar no ícone dentro do Explorer, seremos redirecionados para o navegador da Web padrão, abrindo nosso link hospedado. Os modelos que usamos estão em jogo aqui. O usuário agora está ciente de que está conectado a um scanner genuíno ou a um dispositivo UPnP falso que geramos. O alvo inconsciente, sem ter ideia, insere as credenciais válidas neste modelo, conforme mostrado na imagem abaixo.
Obtendo as Credenciais
Assim que o usuário-alvo insere as credenciais, verificamos nosso terminal na máquina do atacante para descobrir que temos as credenciais inseridas pelo usuário. Como não há conversa necessária para cada dispositivo de destino, nosso scanner falso é visível para todos os usuários na rede. Isso significa que o escopo desse tipo de ataque é ilimitado.
Falsificando o SSDP do Office365
Na prática anterior, falsificamos o scanner para o usuário-alvo. Agora, ao percorrer o diretório de modelos, encontramos o modelo do Office365. Vamos usá-lo.
Configuração do Modelo
Como fizemos anteriormente, vamos começar com a configuração do modelo, bem como da ferramenta. Vamos usar o python3 para executar a ferramenta, seguido pelo nome do arquivo python. Em seguida, fornecendo a interface de rede que será seguida pelo parâmetro do modelo com o office365.
python3 evil-ssdp.py eth0 --template office365
Como podemos ver, a ferramenta fez o seu trabalho e hospedou vários arquivos de modelo em nossa máquina atacante na porta 8888.
Manipulando o Usuário
Assim que executamos a ferramenta, temos um dispositivo UPnP chamado Office365 Backups. Isso foi feito pela ferramenta sem precisar enviar nenhum arquivo, payload ou qualquer outro tipo de interação para o usuário-alvo. Tudo o que resta é o usuário clicar no ícone.
Ao ser clicado pelo usuário, o usuário-alvo é redirecionado para nossa página de modelo falsa por meio de seu navegador padrão. Esta é uma página da Microsoft com aparência muito genuína. O usuário desavisado insere suas credenciais válidas nesta página.
Obtendo as Credenciais
Assim que o usuário insere as credenciais e elas são passadas como a solicitação de postagem para o servidor, que é nossa máquina-alvo, vemos que em nosso terminal, temos as credenciais.
Desviando o Usuário para um SSDP de Armazenamento de Senhas
Até agora, falsificamos com sucesso o usuário-alvo para obter algumas credenciais de scanner e algumas credenciais de backup do Office365. Mas agora vamos para a coisa mais importante que é usada como um UPnP, o Armazenamento de Senhas.
Configuração do Modelo
Como fizemos em nossas práticas anteriores, teremos que configurar o modelo para o armazenamento de senhas. Em pouco tempo, a ferramenta hospeda o modelo de armazenamento de senhas na porta 8888.
python3 evil-ssdp.py eth0 --template password-vault
Manipulação do Usuário
Ao acessar a máquina alvo, vemos que o Password Vault UPnP é visível no Explorer. Agora, o usuário clica no dispositivo e fica preso em nosso ataque. Vendo algo como Password Vault, o usuário será tentado a clicar no ícone.
Como o usuário não sabe o que está acontecendo, ele/ela pensa que conseguiu as chaves e senhas falsas mais importantes. Isso funciona como uma distração para o usuário, pois isso levará o usuário a tentar essa lista exaustiva de credenciais sem sucesso.
Falsificando o SSDP da Microsoft Azure
Ao trabalhar com falsificação, uma das tarefas mais importantes é não deixar que o usuário alvo saiba que ele/ela foi vítima de falsificação. Isso pode ser alcançado redirecionando o usuário depois de obtermos as credenciais ou cookies ou qualquer coisa que o atacante queira adquirir. A ferramenta evil_ssdp tem um parâmetro (-u) que redireciona o usuário alvo para qualquer URL escolhida pelo atacante. Vamos dar uma olhada no funcionamento desse parâmetro em ação.
Para começar, usaremos o python3 para carregar a ferramenta. Em seguida, mencionamos a Interface de Rede que deve ser usada. Agora, para este prático, usaremos o Modelo de Armazenamento do Microsoft Azure. Depois de selecionar o modelo, colocamos o parâmetro (-u) e mencionamos qualquer URL para onde queremos redirecionar o usuário. Aqui estamos usando o link oficial da Microsoft. Mas isso pode ser qualquer site malicioso.
python3 evil-ssdp.py eth0 --template microsoft-azure -u https://malicous-site.com
Manipulação do Usuário
Agora que iniciamos a ferramenta, ela criará um dispositivo UPnP na Máquina Alvo, como mostrado na imagem abaixo. Para que o ataque seja bem-sucedido, o alvo precisa clicar no dispositivo.
Após clicar no ícone, vemos que o usuário é redirecionado para a página oficial da Microsoft. Isso pode ser o que o atacante quiser.
Isso conclui nossa prática com essa incrível ferramenta de spoofing.
Mitigação
- Desative dispositivos UPnP.
- Eduque os usuários para evitar ataques de phishing.
- Monitore a rede para o tráfego de senhas em texto claro.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Quer ver sua empresa anunciada no HackTricks? ou quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.