Um nó sensor dedicado para a sua LAN: «RoamSwitch Sensor»
O RoamSwitch Sensor é um nó dedicado à LAN que audita, a partir do exterior, os endpoints RoamSwitch da mesma LAN (Mac / Linux Client / Server Edition). Verifica como um anfitrião é visto por outro dispositivo da LAN (portas abertas, serviços expostos sem autenticação, pontos de apoio para movimento lateral), algo que o anfitrião, por princípio, não consegue ver na sua própria autodiagnose. Também oferece um inventário de dispositivos da LAN e deteção de falsificação ARP.
🛡️ Auditoria de vulnerabilidades ativa (apenas endpoints emparelhados)
Varrimento completo de portas → verificações de assinaturas conhecidas (exposição não autenticada de Redis/dockerd/Memcached/MongoDB/Elasticsearch/CouchDB/Jenkins/VNC, SMBv1 e falta de assinatura SMB, RDP sem NLA, relay SMTP aberto, etc.) → recolha genérica de banners → varrimento complementar com nmap NSE — quatro fases, totalmente não destrutivas.
📋 Composição da rede (varredura ARP ativa)
Encontra os dispositivos da LAN com uma varredura ARP. Cria um inventário com IP, MAC, nome de host, fabricante, estado online, primeira/última deteção e histórico de IP, e permite registar livremente um nome ou uso por dispositivo. Os dispositivos sem nota ficam destacados como a verificar, servindo para cruzar com o seu inventário. Sem o nmap, o Sensor volta a um modo passivo que só mostra os dispositivos com que ele próprio comunicou.
👁️ Eventos ARP com «O que fazer a seguir»
O aparecimento de novos dispositivos e as mudanças de MAC num IP conhecido (indício de falsificação ARP) são apresentados com data/hora, gravidade (crítica a informativa), motivos, dispositivos envolvidos e passos concretos de verificação. Uma mudança de MAC no IP do gateway é considerada crítica. Com a captura passiva opcional, deteta também um dispositivo que envia pedidos ARP para muitos IP (reconhecimento interno).
🔎 Visão geral de outros dispositivos da LAN e comportamento suspeito (apenas deteção)
Apresenta, como informação de referência: fabricante do MAC e categoria do dispositivo, identificação do modelo pelos autoanúncios mDNS/SSDP/DHCP, ligações a IP maliciosos conhecidos ou portas de administração, indícios de participação em botnets/DDoS (ligação a muitos destinos) e de túneis DNS/C2. Quase tudo exige a captura passiva opcional (p. ex., uma porta espelho) e o Sensor nunca bloqueia tráfego.
🔑 Emparelhamento por código (Ed25519, IP fixo)
Não confia em nada por predefinição. Introduzir o código de emparelhamento de uso único, válido durante 10 minutos, emitido pelo operador do Sensor, juntamente com o endereço IP fixo do Sensor, estabelece confiança mútua em ambas as direções num único passo. As chaves públicas são trocadas automaticamente, pelo que não é necessário conhecê-las antecipadamente. Não é necessária conta nem registo na cloud.
📅 Auditorias agendadas e deteção de alterações (opcional)
Audita automaticamente, segundo um calendário, todos os endpoints emparelhados e mostra o que mudou desde a auditoria anterior: novas deteções, resolvidas e portas recém-abertas. Se todas as portas que estavam abertas deixarem de ser visíveis, isso é comunicado como possivelmente inacessível, e não como resolvido. Mesmo sem supervisão, o Sensor confirma antes e depois de cada auditoria que o endereço MAC do endpoint continua a ser aquele com que se autenticou e ignora a auditoria se o IP passou para outro dispositivo. Desativado por predefinição; define o intervalo e a janela horária.
📣 Notificações e evidências de auditoria (opcional)
As regressões, os novos dispositivos, o ARP spoofing e mais podem ser enviados para webhooks (Slack, Discord, Teams e outros) e para syslog (RFC 5424). O emparelhamento, a sua remoção, as auditorias e as alterações de configuração ficam registados, com quem os realizou, num registo de operações à prova de adulteração (cadeia de hashes), e os resultados das auditorias, o inventário e o registo podem ser exportados em CSV, JSON ou relatório HTML (guarde-o como PDF a partir de um navegador). Cada destino é escolhido por si; por predefinição não é enviado nada.
🗂️ Agregar vários Sensors (coletor central, opcional)
Para organizações com Sensors em vários locais, inclui-se um coletor central que reúne resumos assinados (desativado por predefinição). Oferece um painel por local e exportação CSV, e deteta quando o registo de auditoria de um Sensor foi truncado ou recuado. Só aceita pedidos assinados de Sensors registados e recusa ser exposto fora da LAN sem TLS.
Se o próprio Sensor precisar de proteção contra ataques, recomendamos instalar separadamente o RoamSwitch for Linux Server Edition na mesma máquina — ambos funcionam como processos totalmente independentes.
Exemplo de relatório de auditoria
Exemplo do relatório gerado por roamswitch-sensor export all --format html (a tecla e na TUI). É um único ficheiro HTML: abra-o num navegador e escolha «Guardar como PDF» para obter um PDF a entregar aos auditores.
Relatório de auditoria do RoamSwitch Sensor
| Criado em (UTC) | 2026-09-20T02:30:12.508136294+00:00 |
|---|---|
| Local | Sala de servidores do 3º andar da matriz |
| Chave pública do Sensor | +kbYCoN5jJSykTAr8zDv/VCs2SdBcrwYbkCrzCRgsLM= |
| Log de auditoria | Verificação de integridade: OK (sem adulteração), 18 entradas, head #18 771a265c58fa2f0a8990bc6be79ff5259d96a76a0a3fea472f308df02eaa087f |
Último resultado de auditoria por dispositivo
| Dispositivo | Endereço | Data de execução | Achados | Portas abertas |
|---|---|---|---|---|
| web-prod-01 | 192.168.20.21 | 2026-09-20T02:00:43.318204577+00:00 | 1 item | 2 |
| db-prod-01 | 192.168.20.22 | 2026-09-20T02:01:14.774390215+00:00 | 2 itens | 3 |
| dev-laptop-07 | 192.168.20.35 | 2026-09-20T02:02:07.120765432+00:00 | Sem problemas | 1 |
Achados
| Data e hora | Dispositivo | Porta | Descrição | Ação recomendada |
|---|---|---|---|---|
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 22 | Banner de versão SSH exposto Este servidor SSH expõe o banner de versão na conexão. O banner em si é um comportamento normal, mas dá a um atacante pistas para restringir vulnerabilidades conhecidas. | Atualize o SSH para a versão mais recente e, se necessário, minimize o conteúdo do banner. |
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 6379 | Vulnerabilidade conhecida: CVE-2021-32626 (Redis) Descrição da NVD (texto original em inglês): Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. | Atualize o Redis com urgência para uma versão não afetada pela CVE-2021-32626 e, até lá, restrinja o acesso de rede sem autenticação. |
| 2026-09-20T02:00:43.318204577+00:00 | web-prod-01 | 22 | Banner de versão SSH exposto Este servidor SSH expõe o banner de versão na conexão. O banner em si é um comportamento normal, mas dá a um atacante pistas para restringir vulnerabilidades conhecidas. | Atualize o SSH para a versão mais recente e, se necessário, minimize o conteúdo do banner. |
| 2026-09-19T08:33:18.402118906+00:00 | db-prod-01 | 22 | Banner de versão SSH exposto Este servidor SSH expõe o banner de versão na conexão. O banner em si é um comportamento normal, mas dá a um atacante pistas para restringir vulnerabilidades conhecidas. | Atualize o SSH para a versão mais recente e, se necessário, minimize o conteúdo do banner. |
Inventário de equipamentos (todos os dispositivos observados na LAN)
| MAC | IP | Nome do host | Fabricante | Gerenciado pelo RoamSwitch | Observação |
|---|---|---|---|---|---|
| 00:1b:8b:3c:9a:07 | 192.168.20.1 | _gateway | NEC Platforms | Não gerenciado | Roteador gateway da matriz |
| 7c:8b:ca:61:d2:4e | 192.168.20.2 | TP-Link Technologies | Não gerenciado | Ponto de acesso Wi-Fi do 3º andar | |
| e4:e7:49:2b:70:c1 | 192.168.20.3 | Hewlett Packard | Não gerenciado | Multifuncional do 2º andar | |
| 90:61:ae:17:4d:e2 | 192.168.20.21 | Intel Corporate | Gerenciado | Servidor web de produção | |
| 90:61:ae:17:4d:f9 | 192.168.20.22 | Intel Corporate | Gerenciado | Servidor de banco de dados de produção | |
| 04:20:9a:cc:31:8f | 192.168.20.31 | sensor-hq-01 | Panasonic AVC Networks Company | Não gerenciado | RoamSwitch-Sensor |
| a0:c9:a0:5e:83:2b | 192.168.20.35 | Murata Manufacturing | Gerenciado | Notebook de desenvolvimento | |
| 8e:0f:95:a2:64:5d | 192.168.20.44 | Não gerenciado | |||
| 5e:e2:59:1d:c8:03 | 192.168.20.45 | Não gerenciado | |||
| a8:3b:76:9c:20:e4 | 192.168.20.52 | Cloud Network Technology Singapore PTE. | Não gerenciado |
Log de operações e aprovações
| # | Data e hora | Executor | Operação | Escopo | Detalhes |
|---|---|---|---|---|---|
| 18 | 2026-09-20T02:02:07.120765432+00:00 | scheduler | audit_completed | dev-laptop-07 (Q9mW3sLp0xVc) | trigger=scheduled host=192.168.20.35 findings=0 open_ports=1 new_findings=0 resolved_findings=0 |
| 17 | 2026-09-20T02:02:05.402816653+00:00 | scheduler | audit_started | dev-laptop-07 (Q9mW3sLp0xVc) | host=192.168.20.35 |
| 16 | 2026-09-20T02:01:14.774390215+00:00 | scheduler | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=scheduled host=192.168.20.22 findings=2 open_ports=3 new_findings=1 resolved_findings=0 |
| 15 | 2026-09-20T02:01:12.117409552+00:00 | scheduler | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | host=192.168.20.22 |
| 14 | 2026-09-20T02:00:43.318204577+00:00 | scheduler | audit_completed | web-prod-01 (Xk3F9aLm2QzB) | trigger=scheduled host=192.168.20.21 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 13 | 2026-09-20T02:00:41.029385714+00:00 | scheduler | audit_started | web-prod-01 (Xk3F9aLm2QzB) | host=192.168.20.21 |
| 12 | 2026-09-19T09:11:40.318842077+00:00 | cli:uid=1000 | config_changed | schedule.window_end_hour | value=5 |
| 11 | 2026-09-19T09:11:32.640571920+00:00 | cli:uid=1000 | config_changed | schedule.window_start_hour | value=1 |
| 10 | 2026-09-19T09:10:02.205197346+00:00 | cli:uid=1000 | config_changed | schedule.enabled | value=true |
| 9 | 2026-09-19T08:47:19.771263084+00:00 | control_api: | pair | dev-laptop-07 (Q9mW3sLp0xVc) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 8 | 2026-09-19T08:46:52.093718455+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 7 | 2026-09-19T08:33:18.402118906+00:00 | cli:uid=1000 | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=manual host=192.168.20.22 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 6 | 2026-09-19T08:33:15.588240391+00:00 | cli:uid=1000 | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | manual audit; host=192.168.20.22 |
| 5 | 2026-09-19T08:31:07.336914608+00:00 | control_api: | pair | db-prod-01 (Zt4Kb8NwY1eR) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 4 | 2026-09-19T08:30:41.874526103+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 3 | 2026-09-19T08:12:26.152083967+00:00 | control_api: | pair | web-prod-01 (Xk3F9aLm2QzB) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 2 | 2026-09-19T08:11:58.960417225+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 1 | 2026-09-19T08:00:03.415602838+00:00 | daemon | daemon_started | version 0.3.4 |
RoamSwitch Sensor Audit Report
| Generated (UTC) | 2026-09-20T02:30:12.508136294+00:00 |
|---|---|
| Site | HQ – 3F server room |
| Sensor public key | +kbYCoN5jJSykTAr8zDv/VCs2SdBcrwYbkCrzCRgsLM= |
| Audit log | Integrity check: OK (no tampering detected) — 18 entries, head #18 771a265c58fa2f0a8990bc6be79ff5259d96a76a0a3fea472f308df02eaa087f |
Latest audit per endpoint
| Endpoint | Address | Timestamp | Findings | Open ports |
|---|---|---|---|---|
| web-prod-01 | 192.168.20.21 | 2026-09-20T02:00:43.318204577+00:00 | 1 finding(s) | 2 |
| db-prod-01 | 192.168.20.22 | 2026-09-20T02:01:14.774390215+00:00 | 2 finding(s) | 3 |
| dev-laptop-07 | 192.168.20.35 | 2026-09-20T02:02:07.120765432+00:00 | clean | 1 |
Findings
| When | Endpoint | Port | Finding | Recommendation |
|---|---|---|---|---|
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
| 2026-09-20T02:01:14.774390215+00:00 | db-prod-01 | 6379 | Known Vulnerability: CVE-2021-32626 (Redis) Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. | Upgrade Redis to a version not affected by CVE-2021-32626 as soon as possible, and restrict unauthenticated network access to it in the meantime. |
| 2026-09-20T02:00:43.318204577+00:00 | web-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
| 2026-09-19T08:33:18.402118906+00:00 | db-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
Device inventory (every device observed on the LAN)
| MAC | IP | Hostname | Vendor | Managed | Note |
|---|---|---|---|---|---|
| 00:1b:8b:3c:9a:07 | 192.168.20.1 | _gateway | NEC Platforms | no | HQ gateway router |
| 7c:8b:ca:61:d2:4e | 192.168.20.2 | TP-Link Technologies | no | 3F Wi-Fi access point | |
| e4:e7:49:2b:70:c1 | 192.168.20.3 | Hewlett Packard | no | 2F multifunction printer | |
| 90:61:ae:17:4d:e2 | 192.168.20.21 | Intel Corporate | yes | Production web server | |
| 90:61:ae:17:4d:f9 | 192.168.20.22 | Intel Corporate | yes | Production database server | |
| 04:20:9a:cc:31:8f | 192.168.20.31 | sensor-hq-01 | Panasonic AVC Networks Company | no | RoamSwitch-Sensor |
| a0:c9:a0:5e:83:2b | 192.168.20.35 | Murata Manufacturing | yes | Development laptop | |
| 8e:0f:95:a2:64:5d | 192.168.20.44 | no | |||
| 5e:e2:59:1d:c8:03 | 192.168.20.45 | no | |||
| a8:3b:76:9c:20:e4 | 192.168.20.52 | Cloud Network Technology Singapore PTE. | no |
Operation & approval log
| # | When | Actor | Action | Target | Detail |
|---|---|---|---|---|---|
| 18 | 2026-09-20T02:02:07.120765432+00:00 | scheduler | audit_completed | dev-laptop-07 (Q9mW3sLp0xVc) | trigger=scheduled host=192.168.20.35 findings=0 open_ports=1 new_findings=0 resolved_findings=0 |
| 17 | 2026-09-20T02:02:05.402816653+00:00 | scheduler | audit_started | dev-laptop-07 (Q9mW3sLp0xVc) | host=192.168.20.35 |
| 16 | 2026-09-20T02:01:14.774390215+00:00 | scheduler | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=scheduled host=192.168.20.22 findings=2 open_ports=3 new_findings=1 resolved_findings=0 |
| 15 | 2026-09-20T02:01:12.117409552+00:00 | scheduler | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | host=192.168.20.22 |
| 14 | 2026-09-20T02:00:43.318204577+00:00 | scheduler | audit_completed | web-prod-01 (Xk3F9aLm2QzB) | trigger=scheduled host=192.168.20.21 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 13 | 2026-09-20T02:00:41.029385714+00:00 | scheduler | audit_started | web-prod-01 (Xk3F9aLm2QzB) | host=192.168.20.21 |
| 12 | 2026-09-19T09:11:40.318842077+00:00 | cli:uid=1000 | config_changed | schedule.window_end_hour | value=5 |
| 11 | 2026-09-19T09:11:32.640571920+00:00 | cli:uid=1000 | config_changed | schedule.window_start_hour | value=1 |
| 10 | 2026-09-19T09:10:02.205197346+00:00 | cli:uid=1000 | config_changed | schedule.enabled | value=true |
| 9 | 2026-09-19T08:47:19.771263084+00:00 | control_api: | pair | dev-laptop-07 (Q9mW3sLp0xVc) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 8 | 2026-09-19T08:46:52.093718455+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 7 | 2026-09-19T08:33:18.402118906+00:00 | cli:uid=1000 | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=manual host=192.168.20.22 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 6 | 2026-09-19T08:33:15.588240391+00:00 | cli:uid=1000 | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | manual audit; host=192.168.20.22 |
| 5 | 2026-09-19T08:31:07.336914608+00:00 | control_api: | pair | db-prod-01 (Zt4Kb8NwY1eR) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 4 | 2026-09-19T08:30:41.874526103+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 3 | 2026-09-19T08:12:26.152083967+00:00 | control_api: | pair | web-prod-01 (Xk3F9aLm2QzB) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 2 | 2026-09-19T08:11:58.960417225+00:00 | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 1 | 2026-09-19T08:00:03.415602838+00:00 | daemon | daemon_started | version 0.3.4 |
Todos os nomes de máquinas, endereços MAC, endereços IP e chaves apresentados são fictícios. O corpo do relatório é produzido em japonês ou inglês (fora da vista em japonês, apresenta-se a versão em inglês).