¿Hay alguna diferencia de seguridad entre el firewall basado en root (AFWall +) y los no basados ​​en root (NetGuard)?

18

¿Cuáles son las diferencias técnicas entre los firewalls basados ​​en root (como AFWall +) y los firewalls no basados ​​en root (como NetGuard)?

¿Hay algún impacto en la seguridad efectivamente proporcionada por dicho software?

Ya he revisado un poco el código fuente de NetGuard para hacerme una idea, pero creo que esta puede ser una buena pregunta y estoy interesado en obtener el análisis de otras personas sobre el tema.

Me gustaría restringir esa pregunta a la característica técnica central proporcionada por dicho software (como el tipo de firewall: sin estado o con estado, ¿hay alguna excepción codificada, la solidez del código que maneja los paquetes no confiables, etc.) y no las características secundarias? o anti-características que puedan tener (anuncios, seguimiento, cosméticos, ...) a menos que afecten concretamente el objetivo central del software.

En otras palabras: no despotricas por favor;)!

En caso de que haya limitaciones, vale la pena mencionar si son específicas de la implementación (la consecuencia de alguna elección realizada por el equipo de desarrollo) o una consecuencia de la tecnología utilizada (confiando en sistemas muy diferentes, es posible que uno tenga que hacer frente con limitaciones que el otro no tiene).

WhiteWinterWolf
fuente

Respuestas:

14

Como autor de NetGuard, tengo experiencia de primera mano en este campo.

Una desventaja de un firewall basado en una VPN local es que no se pueden manejar todos los tipos de tráfico, porque el kernel de Linux (Android) no permite reenviar todos los tipos de tráfico a través de una conexión basada en socket. Un ejemplo es IPsec, que algunos fabricantes utilizan para llamadas IP. Una solución parcial (no para IPsec) para esto sería usar un servidor VPN remoto para reenviar el tráfico, pero esto no es aceptable en términos de privacidad para muchas personas y vendría con una complejidad adicional y probablemente también con un uso adicional de la batería. En la práctica, el manejo del tráfico TCP y UDP parece ser suficiente para el 99,9% de los usuarios de NetGuard. Dado que Android 5 es posible excluir las aplicaciones de ser enrutadas a la VPN (la aplicación de implementación de VPN decide si esto es obligatorio u opcional), que se puede utilizar para abordar los problemas derivados de no poder reenviar todo el tráfico. Otra opción es excluir direcciones (rangos), que NetGuard utiliza para "arreglar" las llamadas IP para algunos fabricantes.

Otra desventaja es que el tráfico de reenvío aumentará el uso de la batería en los dispositivos móviles, ya que implica cierto procesamiento, ya que los paquetes deben ser inspeccionados y reenviados. Usar iptables, que está integrado en el kernel de Linux, es más eficiente y, por lo tanto, más amigable con la batería.

En general, parece que Android enruta todo el tráfico a la VPN, incluso el tráfico de las aplicaciones y componentes del sistema, pero un fabricante podría decidir excluir ciertos tipos de tráfico, reduciendo la seguridad que puede lograr un firewall basado en VPN.

NetGuard no analiza los datos en sí, a excepción de las solicitudes de DNS para proporcionar el bloqueo de anuncios, pero si lo hiciera, podría plantear un problema de privacidad. Sin embargo, desde el punto de vista técnico, esta es una ventaja de un firewall basado en VPN (si todavía quiere llamarlo así), ya que permitiría una inspección completa del estado de los flujos de datos más allá de lo que es posible con iptables. Esto probablemente sería a costa del uso de la batería, debido al procesamiento involucrado. Tenga en cuenta que requeriría un ataque MiT local para inspeccionar las transmisiones SSL.

Otra desventaja es que Android no permite el encadenamiento de VPN, por lo que el uso de una VPN local para implementar un firewall evitará el uso de un servicio VPN real, a menos que el firewall brinde dicho servicio en sí mismo o, alternativamente, un mecanismo de reenvío o proxy a otra VPN solicitud.

Por último, un firewall basado en VPN depende de la aplicación que proporciona el servicio VPN de firewall que se está ejecutando. Esto parece ser trivial, pero no lo es, porque algunas versiones / variantes de Android del fabricante están eliminando demasiado agresivamente los procesos en condiciones de poca memoria (en mi humilde opinión, es un error si Android mata las aplicaciones que proporcionan un servicio VPN).

Finalmente, el rooteo de dispositivos Android se está volviendo cada vez más difícil, dejando un firewall basado en VPN como la única opción para muchas personas. No espero que Google agregue un firewall basado en el sistema en el corto plazo, ya que podría afectar significativamente sus ingresos por publicidad. iOS tiene un firewall basado en el sistema.

Avíseme si hay alguna pregunta e intentaré responderla.

M66B
fuente
1
Gracias por tu respuesta. "permitiría una inspección completa del estado de los flujos de datos más allá de lo que es posible con iptables" , iptables es modular y AFAIK nada le impide proporcionar tales técnicas de inspección profunda de paquetes (DPI). Incluso hay varios proyectos que implementan esto ( ndpi-netfilter , https://github.com/thomasbhatia/OpenDPI , l7-filter ), pero supongo que la demanda real de tal cosa es demasiado baja en comparación con el trabajo requerido, por lo que todos parecen abandonado ahora.
WhiteWinterWolf
Sí, también se puede hacer usando un módulo de kernel de Linux, pero es mucho más simple de hacer a nivel de aplicación. Los módulos de kernel de Linux deben ser compatibles con una versión de kernel, lo que no sería una opción viable en Android con tantas versiones de kernel en estado salvaje. También requeriría permisos de root y conocimiento sobre cómo insertar un módulo de kernel, lo que no puede esperar del usuario promedio, aunque esto puede ser automatizado de alguna manera.
M66B
10

Que yo sepa, es el enfoque:

Los firewalls basados ​​en raíz usan IPFilter / iptables para controlar el flujo. Esto se aplica automáticamente a todas las aplicaciones, ya sea que haya una conexión de red disponible o no, si el enrutamiento funciona completamente o no, o si se encuentra en un "entorno cerrado" (Intranet) sin acceso al "mundo exterior". "(Internet). Las aplicaciones que tienes bloqueadas están bloqueadas. En un nivel bastante bajo.

Los firewalls no root no tienen acceso a ese nivel bajo, por lo que deben usar soluciones alternativas. En la mayoría de los casos, esto se hace utilizando las instalaciones de VPN de Android . Dependiendo de la implementación, esto funciona completamente en el dispositivo (es decir, independientemente de la conexión de red que esté disponible), o mediante "servicios externos" (que lo conectan a la VPN del proveedor de la aplicación). En el último caso, las cosas se rompen tan pronto como ese servicio deja de estar disponible, un hecho que puede notar o no. En cualquier caso, no estoy seguro de si realmente todas las aplicaciones cumplen con la VPN o si hay formas de evitarlo. 1 Otro hecho desagradable con las VPN sobre las que he leído es la molesta notificación permanente que aparece, diciendo "Su red podría ser monitoreada"- pero AFAIK que solo debería aparecer si la aplicación en cuestión necesita su propio certificado instalado. 2

Veredicto: personalmente confiaría más en una solución basada en raíz. Pero donde el no es una opción, las soluciones no root deberían ser casi tan buenas. En ese caso, mi recomendación iría hacia soluciones de código abierto como NetGuard (su desarrollador también hizo Xprivacy y es de confianza). Hablando de eso: para más detalles, eche un vistazo a la introducción de XDA de NetGuard , que explica los antecedentes con más detalles.


1 No estoy familiarizado con los detalles técnicos detrás de la implementación de VPN de Android, pero citando a WhiteWinterWolf (vea el comentario a continuación), depende del sistema base de Android hacer cumplir esto, no hay razón para pensar que esto no se hace correctamente.

2 Nuevamente citando a WhiteWinterWolf: la API VPN utilizada por NetGuard permite que todos los datos sean interceptados por una aplicación no privilegiada, esto es lo que Android considera efectivamente como "monitoreo", no tiene relación con ningún certificado y esta advertencia es una consecuencia inevitable y esperada de usando esta API.

Izzy
fuente
2
Gracias por tu respuesta. "No estoy seguro de si realmente todas las aplicaciones cumplen con la VPN" : depende del sistema base de Android hacer cumplir esto, no hay razón para pensar que esto no se hace correctamente. "la molesta notificación permanente" : la API VPN utilizada por NetGuard permite que todos los datos sean interceptados por una aplicación no privilegiada, esto es lo que Android considera efectivamente como "monitoreo", no tiene relación con ningún certificado y esta advertencia es inevitable y esperada consecuencia del uso de esta API.
WhiteWinterWolf
Gracias por los detalles! Los he integrado con mi respuesta (créditos otorgados) para que sean más fáciles de detectar. En cuanto a la "notificación de monitoreo": donde encontré eso mencionado, fue en el contexto de la instalación de un certificado de usuario. Pero gracias por la aclaración!
Izzy
1
Sí, es bastante triste que Android reutilice la misma notificación para varios fines no relacionados. En el contexto actual, esta notificación se debe vincular a la siguiente declaración de la documentación de la API VPN vinculada anteriormente : "Se muestra una notificación administrada por el sistema durante la vida útil de una conexión VPN". .
WhiteWinterWolf
1
Algo a tener en cuenta con respecto a si hay formas de evitar las VPN, mientras buscaba algo más, encontré esta nota con respecto a las mejoras en Android 4.4 : " VPN por usuario . En dispositivos multiusuario, las VPN ahora se aplican por usuario. Esto puede permitir a un usuario para enrutar todo el tráfico de red a través de una VPN sin afectar a otros usuarios en el dispositivo ".
WhiteWinterWolf
2
  1. Además del consenso general de que la seguridad real está fuera de la ventana para los dispositivos rooteados y, por supuesto, depende del usuario, AFWall + ofrece un enfoque a nivel de kernel para filtrar el tráfico, mientras que NetGuard usa cifrado. Creo que la capacidad de ejecutar como administrador de Android sin la necesidad de permanecer en primer plano es importante ...
  2. AFWall + opcionalmente usa un script de inicio a nivel del sistema que evita la fuga de datos durante el tiempo de arranque (y el apagado también, creo)
  3. Si se usa, también tiene un complemento Tasker incorporado que ofrece la capacidad de cambiar automáticamente los perfiles cuando se detecta un cambio de conectividad (realmente me gusta este)
  4. Iptables basados ​​en Linux en lugar del método VPN utilizado por Netguard
  5. No veo ninguna opción para proteger con contraseña la configuración de la aplicación en Netguard, pero tampoco he usado esta función en AFWall +, así que ...

Creo que una característica importante a tener en cuenta sobre Netguard sería la capacidad de filtrar direcciones específicas por aplicación. Esta es una opción paga.

No puedo decir VPN basada en certificados vs iptables. Eso probablemente dependerá de su versión de kernel y Android para iptables y para NetGuard, los algoritmos utilizados para cifrar los datos, si se están registrando y dónde se almacenan. Mi respuesta puede no ser tan técnica como la que estaba buscando y, como usuario de AFWall + (versión de donación) desde hace mucho tiempo, definitivamente soy parcial. Sin embargo, sé que el desarrollador de NetGuard también mantiene activamente XPrivacy, un administrador de privacidad de Android muy conocido / confiable y robusto. AFWall + no se ha abandonado en absoluto, pero definitivamente no ha recibido una actualización tan recientemente como NetGuard. Ambos emplean diferentes métodos para mantener el control del tráfico, pero en última instancia, creo que depende en gran medida del usuario qué tan segura es cualquier parte de su dispositivo.

cbar.tx
fuente
Gracias por su respuesta, la viñeta en particular fue muy informativa. Hasta donde sabemos, NetGuard no aplica ningún cifrado, solo aprovecha la API VPN de Android porque esta API permite redirigir toda la comunicación de la red de datos a un proceso de usuario sin privilegios. La intención inicial de esta API es permitir que dicho proceso maneje una conexión VPN (de hecho, cifrado, etc.) a un host remoto, pero NetGuard usa esta posición solo localmente para poder analizar y filtrar el tráfico. Hasta donde sé, no hay una opción VPN real en NetGuard (a diferencia de AFWall +).
WhiteWinterWolf
Una cosa que mi curiosidad no me ha obligado a rastrear una respuesta definitiva es si es común que las aplicaciones tunelen sus travesuras de carga y cuán efectivo sería analizar y filtrar datos que se canalizan a través de este mecanismo VPN.
cbar.tx
El túnel VPN es transparente para las otras aplicaciones, creen que tienen acceso directo a Internet, mientras que Android oculta la comunicación a la interfaz VPN. Hasta donde sé, NetGuard no analiza los datos en sí, solo la información del protocolo de capa 3 (direcciones IP y marcas) y un truco indocumentado de Android para vincular el paquete a la aplicación de origen, esto es suficiente para decidir si un paquete debe ser permitido o no.
WhiteWinterWolf
No se utiliza ningún truco indocumentado de Android para vincular paquetes a aplicaciones, sino una característica documentada del kernel de Linux.
M66B
@ M66B: Gracias por la precisión, para esto me basé en el artículo de XDA vinculado en la respuesta de Izzy: "descubrimos que para diferenciar entre el tráfico de diferentes aplicaciones, era necesario utilizar el acceso no documentado a los archivos del núcleo Sistema de archivos "proc", para traducir procesos en UID de aplicaciones. Este acceso podría ser bloqueado fácilmente en futuras versiones de Android por SELinux, e incluso podría bloquearse en algunos dispositivos más orientados a la seguridad " .
WhiteWinterWolf