APP下载

基于Android的流量监控白名单策略

2013-08-13马建华刘剑飞

电视技术 2013年5期
关键词:网络接口端口号白名单

马建华,刘剑飞,程 涛

(1.河北工业大学信息工程学院,天津 300401;2.北京联想软件有限公司,北京 100102)

Android是Google开发的基于Linux的开源操作系统平台,近年来得到了迅猛的发展。Android操作系统也由手机移植到平板PC和智能电视中。而随着Android的不断发展,针对Android平台的恶意软件层出不穷,除智能手机外,搭载Android系统的平板PC、智能电视、机顶盒等设备,也面临着严重的安全隐患。根据杀毒厂商McAfee发布的2011第三季度安全威胁报告[1],Android系统已成为恶意软件作者最关注的操作系统。目前恶意软件的行为包括恶意扣费、系统破坏、隐私窃取等,最主要的行为还是恶意吸费、偷跑流量。怎样做好流量监控,拒绝吸费,成为当前亟待解决的问题。而目前流量监控软件大多是基于应用层的研究[2],对于遏制流量损失效果并不明显。文献[3]提出了应用软件安装前漏洞检测与运行时IPC监测两种方法,但只是针对应用层和中间层的修改,不能屏蔽恶意软件的间接访问。文献[4]提出了一种加权行为特征的安全监控策略,能够有效拦截病毒,遏制吸费现象,但对一些应用可能产生误判,拦截正常应用的行为。

本文针对Android流量监控系统的安全缺陷,在协议层提出了一种基于白名单的流量监控改进策略,该策略能够有效遏制应用偷跑流量、恶意吸费的现象。

1 Android系统流量监控系统

1.1 Android流量监控系统原理

Android平台下要获取应用程序流量信息,主要通过读取Linux内核的/proc/self/net/dev文件,该文件保存了从开机到现在的所有网络流量信息。Android2.3开始把数据流量监控封装到TrafficStats类中,可以直接调用该类中的方法来获取流量统计。

Android4.0完善了流量监控系统的设计,流量监控系统捆绑在Android操作系统中,这样就比以前三方的流量监控软件有着先天的优势,它能获取更多的系统信息,制定更完善的安全策略。并且3G/WiFi流量分别监控,每个应用的前台数据和后台数据单独对待,还设计了流量警报线[5]。

图1是Android4.0的流量监控框图,其中DataUsage-Summary是对人机接口的封装,它需要解决的问题是用户需要监控哪些内容,用户需要统计哪些数据。图中虚线部分是Android framework网络管理的核心,它主要封装的是Android网络管理的策略,本文只讨论流量监控这一部分。Trafficstats类是一个工具类,在Android中要获得流量相关的数据,需要调用这个类来获取,而android_net_Traffic-Stats.cpp则是Trafficstats的JNI实现,在这个文件中,利用Linux的/sys接口和/proc接口来获取网络的流量信息。Android的核心是Linux,Android进行层层封装,层层包裹,最后提供监控手段的还是Linux kernel。

图1 Android4.0流量监控框图

1.2 Android流量监控系统的安全缺陷

Google为Android平台配备了多个安全机制,不仅有Linux机制,还有Android特有的安全机制:应用程序权限,组件包装和数字签名[6-7]。Android系统通过android_net_TrafficStats.cpp这个类来判断系统访问网络是通过WiFi还是3G。它定义了一系列的网络接口,认为通过这些网络接口传上来的数据都是2G/3G的数据,而这之外的网络接口都是WiFi接口。代码如下:

在目前的Android系统中,默认情况下所有的应用都可以自己申请访问网络的权限,用户没有太多的方法去侦测哪些应用在联网。另外,在实测中发现,Android4.0在网络接口这一层实施监控,一些恶意软件可以很简单地绕开这种监控。恶意软件通常通过下面的手段来攻击Android的流量监控系统:

1)建立网络接口别名。Android系统中的文件(包括应用程序和系统文件)访问控制主要基于Linux权限机制。通常Android中的系统文件的所有者为system root用户,应用程序文件的所有者为该应用程序专属的用户。由于所属用户不同,普通应用程序无法访问其他应用程序拥有的文件。但Android的权限系统并不可靠,攻击者可以通过root工具在Android平台获得Linux的控制权。

前面分析过android_net_TrafficStats.cpp文件是Android流量监控的核心,恶意软件作者获得root权限后用ifconfig工具给ppp建立别名,如果这时再用ppp0来进行网络通信,那么看起来用的是WiFi流量,事实上损耗的却是3G流量。

2)重新编译ppp驱动。ppp是一个与硬件无关的协议,而且ppp的实现是开源的,攻击者完全可以重新编译一个ppp.ko的驱动来代替原始Android系统中那个驱动,从而达到改写ppp驱动的目的[8]。3G的数据业务全部要通过这个ppp协议层来传到上层供TCP/IP协议栈来使用,如果恶意软件做到这一步,那么系统的3G数据的操控权就全部交给了恶意软件,即使android_net_TrafficStats.cpp设计得再严密,也无法监控到恶意ppp驱动层的恶意行为。

2 流量监控的白名单策略

针对以上安全缺陷,本文接下来在Android4.0系统的基础上提出了一种在协议层实施流量监控的策略,使得所有应用的联网访问都是在用户授权的情况下,有效拦截了恶意软件后台偷跑流量的行为。

在TCP和UDP的报文结构中,源端口号和目的端口号是最重要的标识字段,任何一个应用收到和发出的网络数据都包含这两个字段,以此为突破点来设计流量监控策略,使系统在TCP/IP协议层就能对所有数据进行甄别,这种方式无疑是最直接和有效的方式。

Android系统中网络状态的每条逻辑通路都是由一对IP地址和一对端口号组成。在TCP/IP协议中,IP地址被绑定到网络接口,端口号则被绑定到进程,因此要解决以下问题:1)建立一个白名单数据库,存放允许联网的应用和进程,利用端口号来索引进程号和应用;2)找到一种能通过白名单控制网络连接的方法。

终端和服务器利用socket API连接的标准流程如图2所示。在整个联网建立逻辑链路的过程中,有一个节点就是connect/accept API,把白名单策略放在connect这个环节来实现,让它能根据给出的端口号来进行联网,从而控制整个系统中所有的应用的联网行为。

图2 服务器/客户机联接流程图

Connect是一个内核API,但并不表示它不能与用户层通信。改变的是AF_INET(IPv4)和AF_INET6(IPv6)这两个域的connect API的形为,而Unix域(AF_LOCAL)则还是保留原流程,这样在实现白名单策略的时候就不会影响进程间的通信。由于在逻辑链路建立的过程中,connect的时间复杂度是O(1),所以本算法的时间复杂度也是O(1),而且这种O(1)的影响只有建立链路阶段起作用,不会数据传输阶段的吞吐量。

根据Android移动终端对流量监控的要求,当为终端处于WiFi网络时,所有的connect请求会按标准流程来完成;当为3G网络时,使终端有选择性的联网(应用白名单策略)。

添加白名单策略后的联网流程如图3所示。修改的是AF_INET(IPv4),AF_INET6(IPv6)这两个域的connect API的行为,当上层有connect请求时,内核会用AF_LOCKAL域的UNIX进程间通信来向用户态发出消息,查询端口号数据库,询问这个端口号是否是用户充许联网的端口号,如果是,则connect操作成功;如果不是,则弹出UI询问用户是否允许这个端口号(应用)联网,用户确认后conncet操作才能继续完成,否则禁止connect操作,使用这个端口号的进程也就无法联网了。系统可以提供多种多样的工具来供用户定制白名单数据库,为各种用户群制定不同的策略,比如微博迷、游戏迷等。

图3 白名单流程图

此白名单策略的优点在于系统任何一个应用的联网操作都必须在用户知情并授权的情况下完成,也就是用户会给内核一份可以联网的白名单,这份名单之外的进程都无法联网,这样就能避免一些吸费软件在后台联网偷偷吸走流量。并且改进是在内核中加入控制操作,破解更困难,控制更为有效。

3 实验结果与分析

在实验中,以高通msm8660芯片为平台,将改进后的系统分别和 Android2.3,Android3.0 和 Android4.0 系统作对比。用户将各系统的流量监控功能设置为最优,在用户不主动上网的情况下,来验证实施白名单后的改进流量监控系统对恶意软件吸流量的遏制效果。

通过互联网采集100个APK样本。图4所示是安装了不同数目的相同APK样本后,各个Android系统的3G流量损耗图,时间均为24 h。可以看到改进后的系统比安装相同数目APK样本的其他系统对遏制流量损耗有更明显的效果。

图4 不同数目测试样本的流量损耗图

图5所示为不同测试时长内,各Android系统的3G流量损耗图,均安装100个相同APK样本。在相同的时间内改进后的系统具有更明显的遏制流量损耗的效果。

图5 不同测试时长的流量损耗图

从图4和图5可以看出,Android2.3和Android3.0的防御能力很低,流量损失严重,Android4.0集成了流量监控,在短时间内与APK安装数目较少时流量控制效果明显,但一旦测试时长增长,APK样本数量增加时流量监控的功能明显降低,这主要是因为Android4.0的流量监控在此时管理成本迅续上升,无法管理所有的恶意APK,少数APK甚至攻破了原生的流量监控系统。而相比之下,加入白名单策略后的Android流量监控系统遏制流量损耗效果明显。

4 小结

随着Android系统的迅猛发展,恶意吸费软件偷跑流量问题日益严重。本文提出了一种在协议层实施流量监控的白名单策略,使得任何一个应用的联网必须在用户授权的情况下完成。实验结果表明实施该策略后的改进流量监控系统有效地增强了Android系统的安全性,有明显的遏制流量损耗的效果,目前已在平板PC产品中有良好的应用。

[1]McAfee Labs.McAfee Q32011 Threats Report Shows 2011 on Target to Be the Busiest in Mobile Malware History[EB/OL].[2012-06-20].http://cn.reuters.com/article/pressRelease/idUS117347+21-Nov-2011+BW20111121?symbol=INTC.O.

[2]黄婧,张林,季刊,等.基于Android平台的GPRS流量统计系统[J].计算机系统应用,2011,20(12):141-143.

[3]沈才樑,唐科萍,俞立峰,等.Android权限提升漏洞攻击的检测[J].电信科学,2012(5):115-119.

[4]张毅,何远,唐红,等.加权行为特征的智能手机安全监控研究[J].电视技术,2011,35(1):122-124.

[5]金泰延,宋亨周,朴知勋,等.Android框架揭秘[M].北京:人民邮电出版社,2012.

[6]ENCK W,ONGTANG M,MCDANIEL P.Understanding Android security[J].IEEE Security & Privacy,2009,7(1):53-54.

[7]SHABTAI A,FLEDEK Y,KANONOV U,et al.Google Android:a comprehensive security assessment[J].IEEE Security & Privacy,2010:35-38.

[8]NEMETH E,SNYDER G.UNIX and Linux system administration handbook[M].[S.l.]:Prentice Hall,2010.

猜你喜欢

网络接口端口号白名单
基于白名单的车道工控系统信息安全解决方案
核电厂仪控系统安全防护策略研究及应用
UAC提示太烦 教你做个白名单
在Docker容器中安装应用程序
双冗余网络接口自动切换测试模块的设计与实现
浅谈以java为基础的Socket通信简介及实现
浅析CTC与GSM-R系统网络接口及路由配置改进措施
网络设置管理
Winsock编程在《计算机网络基础》教学中的应用
基于Android系统的互动展示APP的研究与设计