
Honeypot para IoT e Tecnologia Operacional
| 📢 ATENÇÃO!!! |
|---|
| Este repositório foi movido para o Projeto Honeynet :) |
RIoTPot é um honeypot de interação híbrida, focado principalmente na emulação de protocolos IoT e OT, embora também seja capaz de emular outros serviços. Em essência, o RIoTPot atua como um serviço de proxy para outros honeypots incluídos no sistema. Portanto, você pode executar qualquer honeypot e outros serviços juntamente com o RIoTPot. Além disso, existe uma aplicação web UI que você pode usar para gerenciar seu roteamento.
O honeypot vem com múltiplos serviços de baixa interação prontos para uso. Como esses serviços são escritos como plugins, eles são suportados apenas no Linux; no entanto, você pode iniciar o RIoTPot sem eles. A tabela a seguir contém a lista de serviços incluídos no RIoTPot por padrão, sua porta interna e porta de proxy.
| Serviço | Porta Interna | Porta de Proxy |
|---|---|---|
| Echo | 20007 | 7 |
| SSH | 20022 | 22 |
| Telnet | 20023 | 23 |
| HTTP | 28080 | 80 |
| Modbus | 20502 | 502 |
| MQTT | 21883 | 1883 |
| CoAP | 25683 | 5683 |
Índice
A arquitetura do RIoTPot é baseada em conexões de proxy para serviços internos e circundantes (ou externos) (ex.: honeypots, serviços completos, contêineres, hosts remotos, etc.).
Para isso, o honeypot gerencia vários proxies definidos pelo usuário que retransmitem conexões entre os serviços e o RIoTPot 1.
Dessa forma, o RIoTPot pode decidir como e para onde rotear ataques recebidos.
A lógica usada para determinar como lidar com o ataque recebido é implementada na forma de middlewares 2.
Para gerenciar serviços, middlewares e proxies, o RIoTPot traz embutidos uma API REST 3 e uma interface web UI 4 prontos para uso.
A UI pode ser acessada pelo seu navegador em localhost:2022 e você pode manipular os endpoints da API em localhost:2022/api/swagger, exibindo uma interface Swagger.
Figura 1 mostra a arquitetura do RIoTPot, incluindo os dois aplicativos principais que constituem o RIoTPot (o próprio RIoTPot e o RIoTPot UI) e seus componentes, e uma seção para envolver serviços externos (ou adjacentes).
O RIoTPot é escrito em Golang5. Cada instância do RIoTPot expõe proxies registrados (com base em sua porta) sob demanda. Para servir um proxy, ele deve ter um serviço vinculado e a porta do proxy deve estar disponível (atualmente, o RIoTPot não aceita múltiplos serviços executando na mesma porta). Quando um proxy é vinculado e servido, os atacantes poderão enviar mensagens ao RIoTPot nessa porta, retransmitindo as mensagens para o serviço vinculado e de volta para o atacante6.
Para facilitar o acesso, múltiplas instâncias do RIoTPot podem ser gerenciadas a partir da webapp UI do RIoTPot.
Além de gerenciar os proxies registrados em cada instância, a UI permite criar, usar e editar perfis.
Cada perfil contém um número de proxies nomeados após protocolos ou outros serviços, fazendo com que uma instância do RIoTPot se assemelhe a um dispositivo real (por exemplo, um assistente residencial).
Em poucas palavras, os perfis aceleram o processo de configuração e provisionamento de uma instância do RIoTPot com configurações específicas.
A UI é escrita usando a biblioteca JavaScript de front-end React (usamos TypeScript neste projeto) e a biblioteca de gerenciamento de estado Recoil.
Como o RIoTPot é relativamente pequeno, por enquanto, ele não utiliza um banco de dados.
Executar o RIoTPot é relativamente simples. No geral, você tem três opções. A primeira é baixar uma versão do RIoTPot; você pode escolher baixar a versão mais recente ou uma anterior. A segunda opção é construir o projeto você mesmo. A última opção é usar o código-fonte para criar um contêiner Docker com o RIoTPot e alguns aplicativos adicionais para aprimorar o honeypot.
Info: Este guia é destinado a usuários sem necessidades especiais, que desejam uma experiência simples pronta para uso.
Cada versão vem em uma pasta chamada riotpot com um binário executável (também) chamado riotpot e uma pasta plugins preenchida com vários serviços (ou honeypots de baixa interação).
É importante manter a estrutura interna de pastas para que o RIoTPot funcione como esperado.
📁 riotpot
┕ riotpot
┕ 📁 plugins
Serviços internos e circundantes não são acessíveis pela Internet. Os serviços internos são integrados e acessíveis apenas ao RIoTPot. Esses serviços são carregados na inicialização e não podem ser excluídos, mas podem ser parados. Os serviços circundantes devem estar na mesma rede que o RIoTPot. Os serviços externos devem incluir apenas o RIoTPot na lista de permissões. ↩
Os middlewares estão atualmente em desenvolvimento. ↩
A API do RIoTPot não deve ser exposta à Internet. Independentemente disso, a API atualmente só aceita conexões do localhost. Isso pode ser alterado no futuro, fornecendo uma lista de permissões de hosts e autenticação padrão. ↩
Embora a interface web possa ser usada como um componente separado, ela está incorporada ao binário do RIoTPot. ↩
Embora o aplicativo base seja interoperável, os serviços internos (plugins) só podem ser usados em ambientes Linux, FreeBSD e macOS. Planejamos superar essa limitação substituindo plugins por microsserviços que se comunicam através de gRPC. ↩
Por razões éticas e de segurança, o RIoTPot não permite solicitações não solicitadas para o exterior, ou seja, shells reversos e similares não são permitidos. ↩