hacktricks/generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md
2023-06-06 18:56:34 +00:00

18 KiB

Falsificando Dispositivos SSDP e UPnP com o EvilSSDP

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 🎥