# 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**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
**Este post foi copiado de** [**https://www.hackingarticles.in/evil-ssdp-spoofing-the-ssdp-and-upnp-devices/**](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 \ dentro do arquivo de descrição. Uma tag \ se parece com isso: ```xml urn:schemas-upnp-org:service:WANIPConnection:2 urn:upnp-org:serviceId:WANIPConn1 /WANIPCn.xml /ctl/IPConn /evt/IPConn ``` ### **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**](https://raw.githubusercontent.com/0x90/miranda-upnp/master/src/miranda.py) é 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**](https://github.com/0x90/upnp-arsenal/blob/master/umap-bypass.py) 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**](https://github.com/0x90/upnp-arsenal) mais ferramentas upnp. ### **Evil SSDP** A ferramenta Evil SSDP foi desenvolvida por [initstring](https://twitter.com/init\_string). 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. ```bash git clone https://github.com/initstring/evil-ssdp.git cd evil-ssdp/ls python3 evil-ssdp.py --help ``` ![](https://i0.wp.com/1.bp.blogspot.com/-O6lddDvxqts/Xkq5PHqeE\_I/AAAAAAAAisQ/FKOCxVwT9cMy54lLy0SsYcKoM5Q95K5mQCLcBGAsYHQ/s1600/1.png?w=687\&ssl=1) 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. ```bash 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. ```bash python3 evil-ssdp.py eth0 --template office365 ``` ![](https://i1.wp.com/1.bp.blogspot.com/-8GWxmKPDkIo/Xkq5RmgF8\_I/AAAAAAAAis0/bxVTcd4aBCUZBEDuUIg3-G39aMu7l5YCgCLcBGAsYHQ/s1600/6.png?w=687\&ssl=1) 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. ![](https://i0.wp.com/1.bp.blogspot.com/-txqBOw02D6w/Xkq5RgolUcI/AAAAAAAAis4/wkQTzYBmtdU\_Nbq9X1qI47FlJtdqHvIjQCLcBGAsYHQ/s1600/7.png?w=687\&ssl=1) 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. ![](https://i1.wp.com/1.bp.blogspot.com/-69Tf3PRpvhM/Xkq5RziDXzI/AAAAAAAAis8/vjejKgh0XigRHFC2Ib8QCpPlzx\_RAu4eACLcBGAsYHQ/s1600/8.png?w=687\&ssl=1) ### **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. ![](https://i0.wp.com/1.bp.blogspot.com/-3KXN6DKT\_E0/Xkq5SEwhKHI/AAAAAAAAitA/a2gTi5UwNE0JsMH-XQEW33MchkxgjPGSwCLcBGAsYHQ/s1600/9.png?w=687\&ssl=1) ## **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. ```bash 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. ```bash 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. ![](https://i1.wp.com/1.bp.blogspot.com/-rROTfEGP3z8/Xkq5QBn46dI/AAAAAAAAisc/7RDv7fI3BPYt1XmrKVRKOEHurkGY1xeogCLcBGAsYHQ/s1600/14.png?w=687\&ssl=1) 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. ![](https://i2.wp.com/1.bp.blogspot.com/-gU36s2kyIbg/Xkq5QVRh61I/AAAAAAAAisg/hN3uVMTPh-suDiH5ID3-mWcQiNvDVYeJACLcBGAsYHQ/s1600/15.png?w=687\&ssl=1) 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**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.