Sobre o Desenvolvedor

Porque criei uma app que protege automaticamente o perímetro de rede do seu Mac

O relato de como o programador independente Tetsuharu Fujiki (Lafine Systems Design) investigou pessoalmente os riscos de exposição do Wi-Fi público e dos servidores de desenvolvimento.

Tudo começou com uma pergunta casual sobre o Wi-Fi de um restaurante de fast-food

Tudo começou com uma pergunta casual sobre o Wi-Fi de um restaurante de fast-food

Um dia, a trabalhar numa Wi-Fi pública, perguntei-me de repente: «Como é que o meu Mac aparece, nesta Wi-Fi, para a pessoa na mesa ao lado?» — e comecei a investigar.

“Mesmo numa rede Wi-Fi pública, se o isolamento de clientes (isolamento AP) estiver ativo, não é possível comunicar com os outros dispositivos, por isso é seguro.” Acreditei nisso durante muito tempo, mas, ao investigar, essa premissa revelou-se mais frágil do que pensava. O isolamento de clientes não está ativo em todas as redes Wi-Fi. Mesmo onde está, pode ser contornado por uma técnica chamada “AirSnitch”, relatada pelo SANS Institute. Também só percebi quanta informação o meu Mac anuncia em texto simples através do Bonjour (mDNS) depois de executar eu próprio o dns-sd e o lsof.

A conclusão foi simples. As contramedidas são duas: reduzir a superfície exposta e partir do princípio de que ninguém muda as definições à mão sempre que a rede muda. Quase ninguém revê as definições sempre que chega a um café (eu também não). Por isso criei uma aplicação para macOS que distingue automaticamente as redes de confiança das restantes e reduz automaticamente a superfície exposta nas redes desconhecidas. Foi assim que o RoamSwitch começou.

Os servidores de desenvolvimento, percebi, tinham o mesmo problema

Os servidores de desenvolvimento, percebi, tinham o mesmo problema

Ao investigar as redes Wi-Fi públicas, fiquei também curioso quanto aos servidores de desenvolvimento e aprofundei o assunto. Assumia vagamente que “um servidor de desenvolvimento só escuta em localhost, por isso é seguro vindo de fora”, mas na prática varia consoante a framework e alguns valores predefinidos são contraintuitivos.

O next dev liga-se a 0.0.0.0 se não se indicar hostname. O python -m http.server também escuta por predefinição em todas as interfaces. O Vite usa localhost por predefinição, mas toda a gente já acrescentou --host para testar num telemóvel real. Existe ainda o CVE-2023-34092 (path traversal, CVSS 7.5), que visa precisamente isso. Com o -p do Docker, uma porta pode até ser publicada em 0.0.0.0 contornando as definições da firewall do anfitrião.

Isto levou à mesma conclusão. Em vez de contar que cada pessoa se lembre de fechar as portas de cada vez, é mais realista bloquear automaticamente o acesso vindo do exterior no momento em que se liga a uma rede não fiável. Na verdade, é uma das utilizações do RoamSwitch mais frequentemente relatadas. Audita passivamente as portas abertas e comunica o risco e, nas redes não registadas, bloqueia o acesso vindo da LAN externa com o filtro de pacotes do kernel.

Perfil

Lafine Systems Design / Programador independente

Lafine Systems Design / Programador independente

O controlo da firewall (pf/socketfilterfw), a deteção de ARP spoofing e o auxiliar privilegiado (XPC) do RoamSwitch baseiam-se em experiência prática. Trabalhei como SE numa empresa de TI estrangeira e num grande grupo fabricante de eletrónica e, depois de me tornar independente, prestei serviços ASP a organismos públicos, universidades e instituições de investigação. Hoje desenvolvo o “RoamSwitch” a título individual e escrevo no Zenn sobre o que descubro.

Publicado de forma verificável

📝 Ler artigos técnicos no Zenn Suporte e Contactos

Para as divulgações legalmente exigidas, como o nome do operador, morada e métodos de pagamento, consulte a divulgação nos termos da Lei das Transações Comerciais Específicas.