AntMonitor: A System for On-Device Mobile Network Monitoring and its Applications

本文是来自sigcomm workshop的一篇文章,也是MobiCom的最佳demo奖,作者是加州大学欧文分校的研究人员,这篇文章主要介绍了一个移动端的网络监控系统,工程性比较强的一篇介绍

一、简介摘要:

AntMonitor-一种用于被动监视,收集和分析来自Android设备的细粒度,大规模数据包测量的类似VPN的系统。

有以下几个特点:

1、它为参与的用户提供了对需要贡献的应用流量的细粒度控制;

2、它不需要root设备

3、支持客户端侧的流量分析

4、支持收集大规模,细粒度且语义丰富的流量

二、背景介绍:

由于智能手机和平板电脑等移动设备已经无处不在,并且全天都具有持久的Internet连接,由移动设备产生的流量增长迅速,因此,收集和研究移动网络流量已成为网络基础架构规划和Internet度量研究中的关键任务。

以往的存在研究和系统的存在一些缺点,网络流量的跟踪比较粗粒度或者小规模,所以作者设计这个系统的目的是:

设计目的:

  • 可以进行大规模的测量
  1. 兼容性和性能:以较低的开销实现了较高的网络性能。
  2. 隐私控制:为了促进广泛的用户采用,AntClient旨在为用户提供对要贡献的数据的细粒度控制。特别是,他们可以选择特定的应用程序,也可以选择完整的数据包,也可以仅选择数据包头。据我们所知,AntMonitor是第一个能够提供这种级别的隐私控制的系统。
  3. 参与激励:为了吸引大量用户,AntMonitor设计为能够为用户提供各种服务,包括性能(例如,广告屏蔽)以及安全性和隐私增强(例如,防止私人信息泄漏)。
  • 细粒度的信息:
  1. 全包捕获:AntMonitor支持在Android设备上收集所有IP数据包,包括传入和传出流量。但是,用户可以根据其隐私首选项决定将所有或部分这些数据包贡献给日志服务器
  2. 灵活的辅助注释:AntMonitor以PCAP下一代格式[10]收集数据包跟踪。通过支持这种格式,系统能够与原始数据包一起收集任意信息。这非常重要,因为在许多情况下,辅助信息只能在客户端准确地收集,并且可能在后续分析中起关键作用。例如,AntMonitor当前收集与数据包关联的应用程序名称,这些名称为应用程序分类提供了基础
  • 对用户具有吸引力:
    AntMonitor通过提供多种激励措施(例如,收集到的数据可以检测到隐私泄露和其他恶意行为),细粒度的隐私控制(例如,用户可以选择要监视的应用程序以及是否进行记录)的组合,将其应用于众包完整的数据包,仅标头甚至元数据),易用性(例如,应用程序不需要生根电话,具有最少配置的简单界面,服务在后台无缝运行)和高性能(即,适度的CPU和电池不影响用户体验的处罚)

相关工作:

在收集和分析移动网络流量方面有大量工作,我们仅讨论基于VPN的方法,VPN方法有几个缺点:它们会更改通过VPN服务器的数据包的路径,并对数据包进行其他处理。但是,它们确实允许被动地捕获设备上的实际网络流量。最重要的是,它们可以在当今大多数移动设备上运行,而不会显着影响用户体验。考虑到所有因素,我们发现此方法最适合支持我们确定的目标。

基于服务端的vpn:

数据包是在VPN服务器上收集和处理的。这种方法的缺点包括缺乏客户端注释信息(即,从数据包映射到服务器上的应用程序时没有事实依据),有限的隐私保护(即,数据在同一服务器上路由和记录)以及复杂的控制机制(即客户端必须将功能选择(例如广告拦截)传达给服务器)。作为这种方法的代表,在第4节中,典型应用是Meddle [7]。

基于客户端的vpn:

客户端在电话上建立VPN服务以拦截所有IP数据包。对于捕获的传出数据包,它提取内容并将其通过新创建的受保护的UDP / TCP套接字[8]发送以到达Internet主机。本质上,客户端对每个数据包执行第3层到第4层转换,以处理传出流量,反之亦然。这种基于客户端的方法不需要VPN服务器,但是由于需要维护每个连接的状态和每个数据包的额外处理,因此它可能具有较高的开销。典型应用是tPacketCapture [11]

混合服务和客户端模式的VPN:

在客户端上进行的分析可以

(i)实时保护用户

(ii)提供良好的隐私控制,因为用户可以选择要贡献的数据

(iii)提供数据包到应用程序的基础事实映射,可以根据应用程序的UID进行流量过滤。

服务器上的分析可以应用于大量各种应用的数据,因此与每个单独的设备相比,它具有更完整的全局视图,并且也可以更复杂,不受CPU或电池的限制。

三、系统架构

Android 监测网络状态 手机网络监测系统_客户端

整体流程:

Traffic Interception(流量拦截)

AntClient在设备上建立VPN服务。此VPN服务创建在虚拟(第3层)TUN接口,并更新路由表,以便将设备上任何应用程序生成的所有传出流量发送到TUN接口。然后,AntClient将数据包路由到其目标主机。主机响应时,其数据包将被路由回AntClient,如下所述。然后,AntClient通过将响应数据包写入TUN接口将其发送到应用程序。

ps:

1、什么是TUN设备?

TUN和TAP设备是Linux内核虚拟网络设备,纯软件实现。 OS允许向连接到TUN/TAP设备的用户空间程序发送报文;用户空间程序可像物理口发送报文那像向TUN/TAP口发送报文,在这种情况下,TUN/TAP设备发送(或注入)报文到OS协议栈,就像报文从物理端口收到一样。

TUN/TAP 为简单的点对点或以太网设备,不是从物理介质接收数据包,而是从用户空间程序接收;不是通过物理介质发送数据包,而是将它们发送到用户空间程序。

主要用于加密、VPN、隧道、虚拟机等等(encryption, VPN, tunneling,virtual machines)。

2、TUN的工作模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRTsl4Tw-1615380628498)(F:\md\pic\20170905183049106)]

3、tun和tap的区别

tun 是点对点的设备 , 而 tap 是一个普通的以太网卡设备 。 也就是说 ,tun 设备其实完全不需要有物理地址的 。 它收到和发出的包不需要 arp, 也不需要有数据链路层的头 。 而 tap 设备则是有完整的物理地址和完整的以太网帧 。

Android 监测网络状态 手机网络监测系统_客户端_02

TrafficRouting(流量路由)

AntClients通过UDP套接字将到达TUN接口的数据包发送到AntServer,AntServer将进一步路由这些数据包。为了避免使该套接字的传出数据包循环回到TUN接口,AntClient使用受保护的UDP套接字。 AntMonitor使用UDP数据包进行隧道传输,因为它最接近IP数据包(无状态),从而减少了开销。

AntServer被配置为还具有TUN接口并启用了IP Masquerade(NAT)的功能

当AntServer收到隧道传输的数据包时,它将解包该数据包并将其写入TUN接口。然后将数据包转发到数据包的目标Internet主机。使用IP Masquerade,此数据包的源IP(即分配给AntClient的TUN接口的自定义IP)将转换为AntServer的IP,其源端口也将转换为自定义AntServer的端口。这种转换是为了确保将来自Internet主机的所有响应都发送到AntServer。

当目标主机发送了响应数据包时,它到达AntServer,然后执行反向转换:将数据包的目标IP和端口(AntServer的IP和自定义端口)转换回原始的AntClient的TUN接口的IP和端口。然后可以从TUN接口读取该数据包。然后,AntServer根据AntClient的TUN接口IP,通过适当的UDP隧道发送此响应数据包。

Traffic Logging(流量日志)

AntClient以PCAPNG格式记录的传入和传出的数据包。这些日志文件将被上载到LogServer,以便在以后的时间进行后续分析:当设备正在充电且具有Wi-Fi时,或者在用户明确请求时进行上传。

三个组件:

1、Android Application: AntClient

AntClient设计为一个不需要root权限的Android应用程序,AntClient的主要功能是记录,分析和路由网络流量。

AntClient包含4个主要组件:图形用户界面(GUI),VPN管理器,日志模块和分析模块。

  • Graphical User Interface:允许用户打开和关闭VPN服务,还允许用户选择允许哪些应用程序参与数据收集,用户还可以选择仅贡献数据包头或完整数据包。
  • VPN Manager:控制TUN接口和UDP隧道,路由数据包。同时保持VPN服务不间断运行,处理各种网络事件,包括网络错误和切换。
  • Log Module:将数据包(或数据包标头)写入日志文件,然后将文件上传到LogServer。当数据包被截获时,日志模块首先将它们映射到其相应的应用程序。通过查找设备的/ proc / net中可用的活动网络连接的UID(代表应用程序本身)来完成映射。
  • Analysis Module:可以对截获的数据包进行离线和在线分析,例如检测私人信息(例如IMEI,设备模型等)的泄漏。在线功能允许其对实时流量采取措施。由于分析是在客户端进行的,因此私人信息永远不会泄漏出设备。

ps:如何提取某个应用的纯净流量?

/proc/net/tcp文件提供了tcp的连接信息,如下图所示

可以看到网络字节序的ip和端口,每个应用在安卓上安装后都会有一个UID,根据UID提取对应的TCP连接,然后进行过滤。

Android 监测网络状态 手机网络监测系统_应用程序_03

2、Routing Server: AntServer

AntServer管理客户端并路由其流量。它侦听单个UDP端口上的传入流量。

  • Client Manager:接受新的客户端连接并跟踪连接的客户端。要在设备上初始化VPN服务,AntClient将握手消息发送到AntServer。收到此消息后,AntServer使用TUN配置参数响应AntClient,并开始跟踪此客户端的状态。配置参数包括一个私有的,唯一的IP地址,以分配给客户端的TUN接口。为了防止资源泄漏,AntServer使用心跳消息来跟踪活动的客户端并删除不活动的客户端。
  • Traffic Manager:Traffic Manager路由由客户端发送的内容消息。为了支持多个客户端,TrafficManager会跟踪客户端TUN接口的IP地址以及客户端本身的IP地址。
3、Data Collection Server: LogServer

LogServer用作存储和分析所有网络流量数据的中央存储库。

  • Log Manager:对于每个上载的文件,它将检查文件是否为正确的PCAPNG格式。如果正确,则对于每个客户端,管理器将其所有文件存储在单独的文件夹中。
  • Analysis Module:从日志文件中提取功能部件并将其插入数据库以支持各种类型的分析。适合于全局大规模分析。例如,它可以检测全局威胁和恶意流量的爆发。作者已经进行了,移动应用程序分类和检测个人信息的泄露。

四、性能评估

AntMonitor与三个基准进行比较:

NoVpn不使用VPN服务

tPacketCapture VPN v2.0.1基于客户端的VPN方法

strongSwan VPN客户端v1.4.5,服务器v5.2.1 基于服务器的VPN方法

第一个实验:

实验设置:使用AntEvaluator的自定义应用程序,该应用程序通过HTTP执行大文件的下载和上传,收集各种性能统计信息,例如网络速度,CPU使用率,电池电量等。

实验环境:WIFI-1G文件、蜂窝-100MB文件

实验结果:

1、在Wi-Fi和蜂窝网络上,AntMonitor的吞吐量都可与StrongSwan媲美,并且明显优于tPacketCapture。

2、在高速Wi-Fi网络上,AntClient所消耗的CPU和电池少于StrongSwan,strongSwan的CPU使用率较高可能是因为它必须对每个数据包执行加密或解密

3、AntMonitor还实现了与StrongSwan相似的网络延迟,例如在Wi-Fi上,AntMonitor和StrongSwan均具有12 ms的平均延迟,其中NoVpn的平均延迟为8 ms。

Android 监测网络状态 手机网络监测系统_应用程序_04

第二个实验:

典型的应用测试,最流行的5种移动应用类别:搜索社交、娱乐、通信、生产力、新闻消息,使用Finger Replayer应用程序记录并重播应用的点击流程。

实验设置:

总共模拟了58分钟的应用程序使用情况:

11分钟的Facebook(社交:个人资料浏览),

11分钟的Chrome(搜索:网页浏览),

21分钟的YouTube(娱乐:视频流),

7分钟的Gmail(通讯:电子邮件查看,撰写和发送),

5分钟的Google Keep(生产力:笔记阅读和写作),

3分钟的Reddit新闻(News:新闻阅读)。

实验环境:

NoVpn和AntMonitor

实验结果:

1、使用Wi-Fi时,使用NoVpn时,模拟平均使用电池的13%,使用AntMonitor时平均使用16%的电池。

2、AntClient还成功将99%的网络流映射到应用程序。

3、在蜂窝移动网时,使用NoVpn时,模拟平均平均使用14%的电池;使用AntMonitor时,模拟时平均使用17%的电池。

五、真实用户的研究

作者招募了9名志愿者,进行真实环境的测试。

以下是真实收集的流量的分类,与之前的测量结果一致智能手机中的大多数网络流量都由HTTP和HTTPS数据组成

Android 监测网络状态 手机网络监测系统_网络_05

AntMonitor还用应用程序的名称注释每个数据包,我们观察到来自151个应用程序的网络流量,显示了排名前10位的应用程序的流量以及每个类别的相对流量。

Android 监测网络状态 手机网络监测系统_Android 监测网络状态_06

用户隐私的研究:

个人身份信息(PII)是可用于在特定情况下唯一标识一个人或个人的信息。这样的信息是敏感的,理想情况下不应由应用程序以纯文本的形式收集和/或传输这些信息。 AntClient为用户提供检查是否有已安装的应用程序正在将其PII发送到Internet的功能。使用AntMonitor,检查PII是否泄漏可以完全在客户端发生,而无需将PII发送到任何远程服务器[7]或具有自定义的OS或root设备[20]。

(i)IMEI(用于唯一标识移动网络中的设备)和Android Device ID(用于与设备关联的标识代码);

(ii)与用户唯一关联的电话号码,电子邮件地址和位置。

Android 监测网络状态 手机网络监测系统_VPN_07

有一些APP确实泄露了相关的信息。

检查的方式:

如果的http的连接,通过DPI深入匹配字符串

如果是加密的流量,通过SandroProxy库部署TLS代理,拦截安全连接,解密数据包,DPI字符串匹配过滤,然后在将它们发送到预期的Internet主机之前,请对其进行重新加密。

流量分类的研究:

作者使用监督学习方法来构建一个多分类模型,该模型将网络流分类到特定的应用程序。

实验设置:

84个网络级特征,包括:分组长度统计,有效载荷长度统计,到达时间间隔统计,突发性,总体流统计和TCP标志

70个应用程序进行了分类

实验结果:

使用线性SVM可以达到F1-score of 70.1% ,这要归功于训练中提供的细粒度信息:我们可以将数据包与生成数据包的应用程序相关联。