基于根的防火墙(AFWall +)和基于非根的防火墙(NetGuard)之间有安全性区别吗?


18

基于根的防火墙(如AFWall +)和基于非根的防火墙(如NetGuard)之间的技术区别是什么?

对此类软件有效提供的安全性有影响吗?

我已经在NetGuard的源代码中进行了一些检查,以使自己成为一个主意,但是我认为这可能仍然是一个好问题,并且我希望获得其他人对此主题的分析。

我想将此类问题仅限于此类软件提供的核心技术功能(例如防火墙类型:无状态或有状态,是否存在任何硬编码异常,处理不受信任数据包的代码的健壮性等),而不是次要功能或它们可能具有的反功能(广告,跟踪,修饰等),除非它们具体影响软件的核心目标。

换句话说:请不要大叫;)!

如果存在限制,则值得一提的是它们是特定于实现的(开发团队做出选择的结果)还是所用技术的结果(依赖于非常不同的系统,有可能必须应对)有其他人没有的限制)。

Answers:


14

作为NetGuard的作者,我在这一领域具有第一手经验。

基于本地VPN的防火墙的缺点是不能处理所有流量类型,因为(Android)Linux内核不允许通过基于套接字的连接转发所有流量类型。一个示例是IPsec,某些制造商正在将其用于IP呼叫。解决此问题的部分解决方案(非IPsec解决方案)是使用远程VPN服务器转发流量,但这是很多人无法接受的隐私保护方式,并且会带来额外的复杂性,并且可能还会增加电池使用量。在实践中,对于99.9%的NetGuard用户来说,处理TCP和UDP流量似乎足够了。由于Android 5可以排除将应用程序路由到VPN中(由VPN实施应用程序确定这是强制性还是可选),可以用来解决由于无法转发所有流量而引起的问题。另一种选择是排除地址(范围),NetGuard用来“修复”某些制造商的IP呼叫。

另一个缺点是转发流量将增加移动设备上的电池使用量,因为它涉及一些处理,因为需要检查和转发数据包。使用集成在Linux内核中的iptables更加有效,因此对电池更友好。

通常,Android似乎会将所有流量都路由到VPN中,甚至将系统应用程序和组件的流量都路由到VPN中,但是制造商可以决定排除某些流量类型,从而降低了基于VPN的防火墙可以实现的安全性。

除了提供广告拦截的DNS请求外,NetGuard不会分析数据本身,但如果这样做会引起隐私问题。但是,从技术上看,这是基于VPN的防火墙的优势(如果您仍想以这种方式调用它的话),因为它可以对iptables无法进行的数据流进行全状态检查。由于涉及处理,这可能会以电池使用为代价。请注意,这将需要本地MiT攻击来检查SSL流。

另一个缺点是Android不允许链接VPN,因此使用本地VPN来实现防火墙将阻止使用真正的VPN服务,除非防火墙本身提供了这样的服务或向另一个VPN提供转发或代理机制应用。

最后,基于VPN的防火墙取决于要运行的提供防火墙VPN服务的应用程序。这似乎是微不足道的,但事实并非如此,因为某些制造商的Android版本/变体在内存不足的情况下过于激进地杀死进程(恕我直言,如果Android杀死提供VPN服务的应用程序,则是一个错误)。

最后,Android设备的生根变得越来越困难,基于VPN的防火墙成为许多人的唯一选择。我不希望Google很快添加基于系统的防火墙,因为这可能会严重影响其广告收入。iOS确实具有基于系统的防火墙。

让我知道是否有任何问题,我会尽力回答。


1
感谢您的回答。“它将允许对数据流进行全状态检查,而不是使用iptables可以进行的检查”,iptables是模块化的,并且AFAIK没有阻止它提供这种深度数据包检查(DPI)技术的功能。甚至有多种实现这一点(几个项目NDPI,网络过滤https://github.com/thomasbhatia/OpenDPIL7过滤器),但我想这样的事情的实际需求太低相比,所需的工作,使他们看起来现在被遗弃了。
WhiteWinterWolf '16

是的,它也可以使用Linux内核模块来完成,但是在应用程序级别上要简单得多。Linux内核模块需要与内核版本兼容,这在拥有如此多内核版本的Android上不是一个可行的选择。它还可能需要root权限以及有关如何插入内核模块的知识,这是普通用户无法期望的,尽管这可以通过某种方式实现自动化。
M66B

10

据我所知,这是方法:

基于根的防火墙使用IPFilter / iptables来控制流量。这自动适用于所有应用程序,无论是否有可用的网络连接,路由是否完全正常工作,或者您是否处于无法访问“外部环境”的“封闭环境”(内联网)中“ (互联网)。您被阻止的应用程序被阻止。在相当低的水平上。

非根防火墙无法访问该低级别的防火墙,因此它们必须使用变通办法。在大多数情况下,这是使用Android的VPN设施完成的。根据实现的不同,这可以完全在设备上运行(即无论是否可用什么网络连接,都可以),或者通过“外部服务”(将您连接到应用程序提供商的VPN)。在后一种情况下,一旦该服务停止可用,一切就会中断–您可能会注意到或没有注意到这一事实。无论哪种情况,我都不确定是否真的所有应用程序都支持VPN或是否有解决方法。1我读过的关于VPN的另一个令人讨厌的事实是,出现了令人讨厌的永久通知,说“您的网络可能受到监视”–但只有在相关应用需要安装自己的证书的情况下才应打开AFAIK。2

结论:我个人更信任基于根的解决方案。但是在没有情况下,非生根解决方案应该几乎一样好。在这种情况下,我的建议将转向NetGuard之类的开源解决方案(它的开发人员也开发了Xprivacy并且受到了人们的信赖)。谈到以下内容:有关更多详细信息,请参阅NetGuardXDA简介其中详细介绍了背景。


1 我不熟悉Android VPN实施背后的技术细节,但是引用WhiteWinterWolf(请参阅下面的评论),这取决于Android基本系统来实施,没有理由认为这样做不正确。

2 再次引用WhiteWinterWolf:NetGuard使用VPN API允许非特权应用程序拦截所有数据,这是Android有效地视为“监视”的东西,它与任何证书都没有关系,并且该警告是不可避免的和预期的后果使用此API。


2
感谢您的回答。“我不确定是否真的所有应用程序都支持VPN”:实施此操作取决于Android基本系统,没有理由认为操作不正确。“烦人的永久性通知”:NetGuard使用的VPN API允许非特权应用程序截获所有数据,这是Android有效地视为“监视”的东西,它与任何证书都没有关系,并且此警告是不可避免的并且是可预期的使用此API的后果。
WhiteWinterWolf '16

谢谢你的细节!我已将它们与答案(已给予的积分)集成在一起,以使它们更容易发现。至于“监视通知”:在我提到的任何地方,都是在安装用户证书的情况下进行的。但是感谢您的澄清!
伊齐

1
是的,对于Android出于几个不相关的目的重用相同的通知,这是非常可悲的。在当前上下文中,此通知将链接到先前链接的VPN API文档中的以下语句:“在VPN连接的生存期内显示系统管理的通知。”
WhiteWinterWolf

1
关于VPN是否存在方法,请记住一些事情,而在搜索其他内容时,我发现了有关Android 4.4增强功能的注释每用户VPN。在多用户设备上,现在按用户应用VPN。这可以允许用户通过VPN路由所有网络流量,而不会影响设备上的其他用户。”
WhiteWinterWolf'7

2
  1. 除了普遍的共识,即实际的安全性对于root用户的设备而言是不可能的,并且当然取决于用户,AFWall +提供了一种内核级别的方法来过滤流量,而NetGuard使用加密。我认为能够以Android管理员身份运行而无需停留在前台的能力非常重要...
  2. AFWall +可以选择使用系统级别的启动脚本,以防止在启动时泄漏数据(我相信也可以关闭)
  3. 如果使用的话,它还具有一个内置的tasker插件,该插件可以在检测到连接性更改时自动切换配置文件(我真的很喜欢这个)
  4. 基于Linux的iptables,与Netguard使用的VPN方法相反
  5. 我在Netguard中看不到任何密码保护应用程序设置的选项,但我也从未在AFWall +中使用此功能,所以...

我确实认为要注意有关Netguard的一个重要功能是能够基于每个应用程序过滤特定地址的功能。这是一个付费选项。

我不能说基于证书的VPN与iptables。这可能取决于您的iptables和NetGuard的内核和android版本,以及用于加密数据的算法,是否记录日志以及将其存储在哪里。我的答案可能不如您想要的技术,并且作为AFWall +(捐赠版)的长期用户,我肯定对此持偏见。但是,我确实知道NetGuard的开发人员还积极维护XPrivacy,这是一个非常著名/受信任且功能强大的Android隐私管理器。AFWall +并没有被完全放弃,但是肯定没有像NetGuard一样收到更新。他们都采用不同的方法来维持流量控制,但最终,我认为这主要取决于用户设备中任何部分的安全性。


感谢您的回答,尤其是项目符号非常有用。到目前为止,NetGuard并未应用任何加密,它只是利用了Android的VPN API,因为该API允许将整个数据网络通信重定向到非特权用户进程。该API的最初目的是允许该过程处理与远程主机的VPN连接(实际上是加密等),但是NetGuard只能在本地使用此位置,以便能够分析和过滤流量。据我所知,NetGuard中没有实际的VPN选项(与AFWall +相对)。
WhiteWinterWolf,2016年

我的好奇心并没有迫使我找到一个明确的答案,那就是应用程序通过隧道传输其上载的恶作剧是否很普遍,以及通过这种VPN机制分析和过滤通过隧道传输的数据的有效性如何。
cbar.tx

VPN通道对其他应用程序是透明的,他们认为它们可以直接访问Internet,而Android实际上将通信重定向到VPN接口。据我所知,NetGuard不会分析数据本身,仅分析第3层协议信息(IP地址和标志)以及将数据包链接到原始应用程序的Android未记录的技巧,这足以决定是否应将数据包允许与否。
WhiteWinterWolf '16

没有用于将数据包链接到应用程序的未记录的Android技巧,而是已记录的Linux内核功能。
M66B

@ M66B:感谢您的精确性,为此我依靠 Izzy的答案中链接的XDA文章“我们发现,为了区分来自不同应用程序的流量,必须利用对内核文件的无证访问“ proc”文件系统,将进程转换为应用程序UID。SELinux在将来的Android版本中很容易阻止这种访问,甚至在某些面向安全性更高的设备中也可能阻止这种访问
WhiteWinterWolf '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.