Alguma diferença de segurança entre o firewall baseado em raiz (AFWall +) e o não-raiz (NetGuard)?

18

Quais são as diferenças técnicas entre firewalls baseados em raiz (como AFWall +) e firewalls não baseados em raiz (como NetGuard)?

Existe algum impacto na segurança efetivamente fornecida por esse software?

Eu já verifiquei um pouco no código-fonte do NetGuard para me fazer uma idéia, mas acho que essa ainda pode ser uma boa pergunta e estou interessado em obter a análise de outras pessoas sobre o assunto.

Gostaria de restringir essa pergunta ao recurso técnico principal fornecido por esse software (como o tipo de firewall: sem estado ou sem estado, existem exceções codificadas permanentemente, a robustez do código que trata de pacotes não confiáveis ​​etc.) e não em recursos secundários ou anti-recursos que possam ter (anúncios, rastreamento, cosméticos, ...), a menos que afetem concretamente o objetivo principal do software.

Em outras palavras: sem reclamações, por favor;)!

Caso existam limitações, vale a pena mencionar se elas são específicas da implementação (a consequência de alguma escolha feita pela equipe de desenvolvimento) ou uma conseqüência da tecnologia utilizada (dependendo de sistemas muito diferentes, é possível que seja necessário lidar com isso) com limitações que o outro não possui).

WhiteWinterWolf
fonte

Respostas:

14

Como autor do NetGuard, tenho experiência em primeira mão neste campo.

Uma desvantagem de um firewall baseado em uma VPN local é que nem todos os tipos de tráfego podem ser manipulados, porque o kernel Linux (Android) não permite o encaminhamento de todos os tipos de tráfego por uma conexão baseada em soquete. Um exemplo é o IPsec, que está sendo usado para chamadas IP por alguns fabricantes. Uma solução parcial (não para IPsec) para isso seria usar um servidor VPN remoto para encaminhar tráfego, mas isso não é aceitável em termos de privacidade para muitas pessoas e viria com complexidade adicional e provavelmente também com o uso extra de bateria. Na prática, lidar com o tráfego TCP e UDP parece ser suficiente para 99,9% dos usuários do NetGuard. Desde o Android 5, é possível impedir que os aplicativos sejam roteados para a VPN (o aplicativo de implementação da VPN decide se isso é obrigatório ou opcional), que pode ser usado para solucionar problemas decorrentes da impossibilidade de encaminhar todo o tráfego. Outra opção é excluir endereços (intervalos), que o NetGuard usa para 'corrigir' a chamada IP de alguns fabricantes.

Outra desvantagem é que o tráfego de encaminhamento aumentará o uso da bateria em dispositivos móveis, pois envolve algum processamento, porque os pacotes precisam ser inspecionados e encaminhados. O uso do iptables, integrado no kernel do Linux, é mais eficiente e, portanto, mais amigável à bateria.

Em geral, parece que o Android direciona todo o tráfego para a VPN, mesmo tráfego de aplicativos e componentes do sistema, mas um fabricante pode decidir excluir determinados tipos de tráfego, reduzindo a segurança que pode ser alcançada por um firewall baseado em VPN.

O NetGuard não analisa os dados em si, exceto as solicitações de DNS para fornecer bloqueio de anúncios, mas, se isso acontecer, poderia suscitar uma preocupação com a privacidade. No entanto, tecnicamente, isso é uma vantagem de um firewall baseado em VPN (se você ainda quiser chamá-lo dessa maneira), porque permitiria a inspeção completa do estado dos fluxos de dados além do que é possível com o iptables. Provavelmente, isso custaria o uso da bateria, devido ao processamento envolvido. Observe que seria necessário um ataque MiT local para inspecionar fluxos SSL.

Outra desvantagem é que o Android não permite o encadeamento de VPNs; portanto, o uso de uma VPN local para implementar um firewall impedirá o uso de um serviço VPN real, a menos que o firewall forneça esse serviço ou alternativamente um mecanismo de encaminhamento ou proxy para outra VPN. inscrição.

Por fim, um firewall baseado em VPN depende do aplicativo que fornece o serviço VPN de firewall em execução. Isso parece trivial, mas não é, porque algumas versões / variantes de fabricantes do Android estão matando processos de forma muito agressiva em condições de pouca memória (IMHO é um bug se o Android matar aplicativos que fornecem um serviço VPN).

Finalmente, o enraizamento de dispositivos Android está se tornando cada vez mais difícil, deixando um firewall baseado em VPN como a única opção para muitas pessoas. Não espero que o Google adicione um firewall com base no sistema em breve, pois isso pode afetar significativamente a receita com anúncios. O iOS possui um firewall baseado no sistema.

Informe-me se houver alguma dúvida e tentarei respondê-las.

M66B
fonte
11
Obrigado pela resposta. "permitiria a inspeção completa do estado dos fluxos de dados além do que é possível com o iptables" , o iptables é modular e o AFAIK nada impede que ele forneça essas técnicas de Deep Packet Inspection (DPI). Existem até vários projetos implementando isso ( ndpi-netfilter , https://github.com/thomasbhatia/OpenDPI , l7-filter ), mas suponho que a demanda real por tal coisa seja muito baixa em comparação com o trabalho necessário, para que todos pareçam abandonado agora.
WhiteWinterWolf
Sim, isso também pode ser feito usando um módulo do kernel Linux, mas é muito mais simples de fazer no nível do aplicativo. Os módulos do kernel do Linux precisam ser compatíveis com uma versão do kernel, o que não seria uma opção viável no Android com tantas versões do kernel em estado selvagem. Também exigiria permissões de root e conhecimento sobre como inserir um módulo do kernel, o que você não pode esperar do usuário comum, embora isso possa ser automatizado de alguma forma.
M66B
10

Que eu saiba, é a abordagem:

Os firewalls baseados em raiz usam IPFilter / iptables para controlar o fluxo. Isso se aplica automaticamente a todos os aplicativos, independentemente de haver ou não uma conexão de rede, se o roteamento está funcionando completamente ou não, ou se você está em um "ambiente fechado" (Intranet) sem acesso ao "mundo exterior" "(Internet). Os aplicativos bloqueados estão bloqueados. Em um nível bastante baixo.

Os firewalls não raiz não têm acesso a esse nível baixo, portanto, eles devem usar soluções alternativas. Na maioria dos casos, isso é feito usando os recursos de VPN do Android . Dependendo da implementação, isso funciona completamente no dispositivo (ou seja, novamente, independentemente da conexão de rede disponível) ou por meio de "serviços externos" (conectando você à VPN do provedor de aplicativos). Neste último caso, as coisas quebram assim que esse serviço deixa de estar disponível - um fato que você pode perceber ou não. Em ambos os casos, não tenho certeza se realmente todos os aplicativos respeitam a VPN ou se existem maneiras de contornar isso. 1 Outro fato desagradável com as VPNs sobre as quais eu li é a notificação permanente e irritante que aparece, dizendo "Sua rede pode ser monitorada"- mas o AFAIK que deve aparecer apenas se o aplicativo em questão precisar de seu próprio certificado instalado. 2

Veredicto: eu pessoalmente confiaria mais em uma solução baseada em raiz. Mas onde o não é uma opção, as soluções não raiz devem ser quase tão boas. Nesse caso, minha recomendação iria para soluções de código aberto como o NetGuard (seu desenvolvedor também criou o Xprivacy e é bem confiável). Falando nisso: Para obter mais detalhes, dê uma olhada na introdução do NetGuard para XDA , que explica os antecedentes com mais alguns detalhes.


1 Não estou familiarizado com os detalhes técnicos por trás da implementação da VPN do Android, mas citando o WhiteWinterWolf (veja o comentário abaixo), cabe ao sistema básico do Android impor isso, não há razão para pensar que isso não foi feito corretamente.

2 Mais uma vez citando o WhiteWinterWolf: a API da VPN usada pelo NetGuard permite que todos os dados sejam interceptados por um aplicativo não privilegiado; é isso que o Android considera efetivamente como "monitoramento", não tem relação com nenhum certificado e esse aviso é uma consequência inevitável e esperada do usando esta API.

Izzy
fonte
2
Obrigado pela sua resposta. "Não tenho certeza se realmente todos os aplicativos respeitam a VPN" : depende do sistema básico do Android impor isso, não há razão para pensar que isso não é feito corretamente. "a irritante notificação permanente" : a API VPN usada pelo NetGuard permite que todos os dados sejam interceptados por um aplicativo sem privilégios, é isso que o Android considera efetivamente como "monitoramento", não tem relação com nenhum certificado e esse aviso é inevitável e esperado conseqüência do uso desta API.
WhiteWinterWolf
Obrigado pelos detalhes! Eu os integrei à minha resposta (créditos fornecidos) para torná-los mais fáceis de identificar. Quanto à "notificação de monitoramento": sempre que descobri isso, estava no contexto de um certificado de usuário sendo instalado. Mas obrigado pelo esclarecimento!
Izzy
11
Sim, é bastante triste o Android reutilizar a mesma notificação para vários fins não relacionados. No contexto atual, esta notificação deve ser vinculada à seguinte declaração da documentação da API da VPN vinculada anteriormente : "Uma notificação gerenciada pelo sistema é mostrada durante o tempo de vida de uma conexão VPN". .
WhiteWinterWolf
11
Algo a ter em mente sobre se existem maneiras de contornar as VPNs, enquanto pesquisava em outra coisa, encontrei esta nota sobre os aprimoramentos no Android 4.4 : " VPN por usuário . Em dispositivos multiusuário, as VPNs agora são aplicadas por usuário. Isso pode permitir ao usuário para rotear todo o tráfego de rede por meio de uma VPN sem afetar outros usuários no dispositivo ".
WhiteWinterWolf
2
  1. Além do consenso geral de que a segurança real está fora da janela para dispositivos raiz e, é claro, depende do usuário, o AFWall + oferece uma abordagem no nível do kernel para filtrar o tráfego enquanto o NetGuard usa criptografia. Eu acho que a capacidade de executar como administrador do Android sem a necessidade de permanecer em primeiro plano é importante ...
  2. O AFWall + usa opcionalmente o script de inicialização no nível do sistema, impedindo o vazamento de dados durante o tempo de inicialização (e também o desligamento, acredito)
  3. Se usado, ele também possui um plug-in tasker interno que oferece a capacidade de alternar automaticamente perfis quando uma alteração de conectividade é detectada (eu realmente gosto deste)
  4. Iptables baseados em Linux, em oposição ao método VPN usado pelo Netguard
  5. Não vejo nenhuma opção para proteger com senha as configurações do aplicativo no Netguard, mas também nunca usei esse recurso no AFWall +, então ...

Eu acho que um recurso importante a ser observado sobre o Netguard seria a capacidade de filtrar endereços específicos por aplicativo. Esta é uma opção paga.

Não posso dizer VPN baseada em certificado vs iptables. Isso provavelmente dependeria do seu kernel e da versão do Android para o iptables e para o NetGuard, os algoritmos usados ​​para criptografar os dados, se eles estão sendo registrados e onde estão armazenados. Minha resposta pode não ser tão técnica quanto a que você estava procurando e, desde que sou usuário do AFWall + (versão doada), estou definitivamente inclinado a isso. No entanto, eu sei que o desenvolvedor do NetGuard também mantém ativamente o XPrivacy, um gerenciador de privacidade Android muito conhecido / confiável e robusto. O AFWall + não foi abandonado, mas definitivamente não recebeu uma atualização tão recentemente quanto o NetGuard. Ambos empregam métodos diferentes para manter o controle do tráfego, mas, em última análise, acho que depende principalmente do usuário a segurança de qualquer parte do dispositivo.

cbar.tx
fonte
Obrigado pela sua resposta, o marcador em particular foi muito informativo. Até onde sabemos, o NetGuard não aplica nenhuma criptografia, apenas aproveita a API VPN do Android, porque essa API permite redirecionar toda a comunicação da rede de dados para um processo sem privilégios do usuário. A intenção inicial dessa API é permitir que esse processo manipule uma conexão VPN (de fato criptografia etc.) com um host remoto, mas o NetGuard, em vez disso, usa essa posição apenas localmente, apenas para poder analisar e filtrar o tráfego. Até onde eu sei, não existe uma opção VPN real no NetGuard (em oposição ao AFWall +).
WhiteWinterWolf
Uma coisa que minha curiosidade não me forçou a rastrear uma resposta definitiva é se é comum os aplicativos encapsularem suas travessuras de carregamento e quão eficaz seria na análise e filtragem de dados que estão sendo encapsulados por esse mecanismo de VPN.
C262.jpg
O encapsulamento da VPN é transparente para os outros aplicativos, eles acham que têm acesso direto à Internet enquanto, sob o capô, o Android realmente redireciona a comunicação para a interface da VPN. Até onde eu sei, o NetGuard não analisa os dados em si, apenas as informações do protocolo da camada 3 (endereços IP e sinalizadores) e um truque não documentado do Android para vincular o pacote ao aplicativo de origem, isso é suficiente para decidir se um pacote deve ser permitido ou não.
WhiteWinterWolf
Não há truque Android não documentado sendo usado para vincular pacotes a aplicativos, mas um recurso documentado do kernel do Linux.
M66B
@ M66B: Obrigado pela precisão, por este, contei com o artigo XDA vinculado na resposta de Izzy: "descobrimos que, para diferenciar o tráfego de aplicativos diferentes, era necessário fazer uso indevido de acesso a arquivos nos arquivos do kernel. Sistema de arquivos "proc", para converter processos em UIDs de aplicativos. Esse acesso pode ser facilmente bloqueado em versões futuras do Android pelo SELinux e pode até ser bloqueado em alguns dispositivos mais orientados à segurança " .
WhiteWinterWolf