宋玉言
(北方工业大学 信息学院,北京 100144)
搭载Android操作系统的智能手机发展迅速,对于人们的日常生活的帮助和影响越来越大。根据中国信通院发布的权威数据显示,2020年,中国国内手机总出货量累计达到3.08亿部,其中智能手机出货量达到2.96亿部,占比达到96%[1]。
全球智能手机市场经过10余年激烈的竞争与发展,到2020年底,谷歌公司的Android系统和苹果公司的IOS系统占据了智能手机市场的绝大部分份额[2]。Android操作系统的市场份额迅速增长的原因之一是由于Android系统基于Linux系统打造,具有良好的开源性。但正是由于其开源性等特点,Android系统本身存在许多的安全漏洞,容易成为黑客等不法分子攻击的目标[3]。
图1 Android平台组件Fig.1 Android platform components
要想及时地防范不法黑客针对Android系统的恶意攻击,就需要安全研究人员尽可能早地了解整个Android系统并发现其存在的系统安全漏洞,及时作出改进与防范。要达到以上目的,渗透测试技术是个非常好的方式之一[4]。渗透测试技术是一种安全的测试性技术,在实际使用的网络条件下,通过编写各种脚本程序或使用专业软件,站在黑客的视角下对Android手机进行模拟攻击,查看Android手机被攻击后的结果,通过研究分析实验结果,验证评估Android手机存在的各种安全漏洞和可能造成的影响[5]。
现有的传统渗透测试技术,主要针对基于传统网络下的系统和设备,缺少以针对现代移动网络下的设备进行的测试技术,特别是搭载Android系统的智能手机。所以通过研究移动互联网和Android操作系统的安全机制,并通过设计研究相应的渗透测试技术发现其系统漏洞,对于防范不法分子的恶意攻击和维护Android操作系统的安全有着十分重要的意义[6]。
Android是一种基于Linux的开放源代码软件栈,为各类设备和机型而创建。
Android平台主要组件如图1所示。
图2 实验流程Fig.2 Experimental flow
图3 实验环境搭建Fig.3 Construction of experimental environment
渗透测试是一种基于攻击目标的测试方法,通过模拟主动攻击目标系统,查看其存在的问题。其目的在于通过主动的模拟攻击,站在黑客的角度,在攻击过程中找到目标系统的弱点、漏洞和缺陷等[7]。
根据上述对Android系统和渗透测试的流程研究与分析,本研究将针对Android移动设备的渗透测试实验流程设计为制定测试方案、被测目标信息收集、实施渗透测试、完成实验结果分析4个阶段[8]。实验流程如图2所示。
在渗透测试实验实施之前,需要制定完善的测试方案。包括确定测试目标、范围、计划、测试工具、环境搭建等。
首先,建立无线网络环境,测试平台为两台PC主机,分别搭载win10系统和kali linux系统。
搭建无线网络环境,本研究选用Tenda AC6 1200M 11AC无线路由器建立实验无线网络。渗透测试实验环境搭建如图3所示。
将两台测试PC主机和两台被测目标Android智能手机连接在同一wifi网络下,并测试其连接性,为接下来实验做好准备。
图4 Ping扫射代码实现Fig.4 Implementation of Ping sweeping code
图7 端口扫描代码实现Fig.7 Port scan code implementation
1)Ping扫射
Ping扫射程序原理基于ICMP协议。Ping扫射规定在一定的时间内,探测主机向目标主机发送一个包含当前时间值的ICMP数据包后,收到了来自目标主机的ICMP回送数据包,则表示Ping成功。
Ping扫射程序校验方法代码实现如图4所示。
程序流程图如图5所示。
如果在实验中不明确被测目标的IP地址,此程序就无法实现Ping出目标。为解决此问题,可将上述程序中的对单一IP地址进行Ping扫射修改为对一段范围内的IP地址进行Ping扫射,程序流程图如图6所示。
2)端口扫描
根据TCP连接和端口扫描相关技术原理,本研究通过python编写了TCP端口扫描程序。具体内容为对目标系统的某个端口建立完整的TCP连接,通过连接的建立情况判断一个目标地址的端口开放情况。
端口扫描代码实现如图7所示。
程序流程图如图8所示。
3)Syn flood攻击
通过python中的scapy模块,构建Syn Flood攻击。
图5 Ping扫射程序流程图Fig.5 Flow chart of Ping scanning program
图6 范围Ping扫射流程图Fig.6 Flow chart of range Ping sweeping
图8 端口扫描程序流程图Fig.8 Flow chart of port scanning program
Syn Flood攻击代码实现如图9所示。
程序流程图如图10所示。
1)Ping扫射
当已知被测目标设备的IP地址时,选用Ping扫射(单一)程序进行实验,可快速Ping到目标设备。
首先,运行单一IP地址Ping扫射python程序,对两个目标Android设备进行探测。
然后,对IP地址为172.20.10.5的搭载Android8.0的三星s8进行Ping扫射。结果如图11所示。
这里显示此程序成功Ping到IP地址为172.20.10.5的三星s8测试设备。
图9 Syn Flood攻击代码实现Fig.9 Implementation of Syn Flood attack code
图10 Syn flood攻击程序流程图Fig.10 Flow chart of Syn Flood attack program
图11 s8 Ping扫射结果Fig.11 Result of s8 Ping
图12 范围Ping扫射结果Fig.12 Range Ping results
图13 s8端口扫描结果Fig.13 Scan result of s8 port
图14 Syn Flood程序运行结果Fig.14 Running result of Syn Flood program
小米4手机实验结果与s8类似。若被测目标设备的具体IP未知,处于某IP段内,选 用范围IP地址Ping扫射程序进行实验。可发现一定IP范围内的目标设备,但当较与单一IP地址Ping扫射程序用时较长。
运行Ping扫射(范围)程序,对给定IP范围内的目标设备进行Ping扫射。结果如图12所示。
实验结果表明,此程序能够发现IP地址为172.20.10.2和172.20.10.3的两台Android智能手机。
此实验结果表明:Ping扫射可以发现局域网内存在的两台Android手机。
将实验重复20次,20次实验中成功20次,失败0次,成功率100%。20次实验程序执行所需时间平均为10.92s,比扫描单一IP地址的Ping程序所需时间较长。
2)端口扫描
首先,对搭载Android8.0的三星s8进行实验。
打开被测手机的14806端口,随后运行python程序“端口扫描”,对已开放14806端口的三星s8手机进行端口扫描,结果如图13所示。
此实验结果表明,当Android8.0设备的某端口打开时,端口扫描程序能够检测到Android设备的此端口处于打开状态。
小米4手机实验结果与s8类似。
1)拒绝服务渗透
首先,对搭载Android8.0的三星s8进行实验。
运行python程序“Syn flood”,输入目标Android设备的IP地址并指定端口号,可进行源地址为随机生成、自由输入,使用本机的多线程Syn flood攻击。如图14所示。
根据20次实验结果平均值,被测目标读取网页时间实验结果如图15所示。
此实验结果表明,拒绝服务攻击对Android8.0手机读取网页的影响较大。
小米4手机实验结果与s8类似。
被测目标实时网速如图16所示。
图15 读取网页时间Fig.15 Time of reading web page
图16 实时网速变化Fig.16 Real time network speed change
图17 设备能耗变化Fig.17 Energy consumption change of equipment
此实验结果表明,拒绝服务攻击对Android8.0手机的网络连接影响较大。
小米4手机实验结果与s8类似。
被测目标实时能耗如图17所示。
实验数据表明,拒绝服务攻击对Android8.0手机的设备能耗的影响非常大。
小米4手机实验结果与s8类似。
被测目标CPU使用率如图18所示。
由此看出,在遭受20次Syn Flood拒绝服务攻击过程中,CPU平均使用率平均增加14.51%,受到较大影响。
小米4手机实验结果与s8类似。
2)ARP欺骗
在进行ARP攻击之前,查看被攻击主机的ARP缓存表,打开cmd,输入arp -a,如图19所示。
图19中显示,攻击主机中的ARP缓存表记录了网关、被攻击目标手机和攻击主机的MAC地址,可发现被攻击目标手机的MAC地址和攻击主机不同。
图18 CPU使用率变化Fig.18 CPU Utilization change
图19 被攻击主机ARP缓存表Fig.19 ARP Cache table of attacked host
在kali linux中利用arpspoof工具,对被测目标手机发起ARP欺骗攻击,如图20所示。
图20 发起ARP攻击Fig.20 Launching ARP attack
图21 被攻击后ARP缓存表Fig.21 ARP Cache table after being attacked
图22 运行driftnetFig.22 Running drivetnet
从图20中可以看出,此时攻击主机不断地向被测目标手机发送ARP应答包,这个应答包将网关的IP地址192.168.1.1和虚拟机的MAC地址50:2B:73:D5:71:08绑定在一起,从而将被测目标手机的ARP缓存表中的网关的MAC地址修改为攻击主机的MAC地址。
检查物理机的ARP缓存表,检查其是否遭遇了ARP欺骗。结果如图21所示。
从图21中可以看出,此时被攻击目标手机的ARP缓存表中的MAC地址和攻击主机的MAC地址是一样的。可以认定,物理机遭遇了ARP欺骗。
此时,被攻击目标手机和网关通信的数据包都会流经攻击主机,那么可以在攻击主机的虚拟机中利用driftnet工具,捕获被攻击手机正在浏览的图片。
在虚拟机中的kali linux系统中,打开driftnet。如图22所示。
从图22中可以看出,攻击主机正在不断地捕获被测目标手机和网卡之间的数据包。在被测目标手机中,打开一个应用,浏览图片。如图23所示。
图23 手机端浏览图片Fig.23 Browsing pictures on mobile terminal
图24 driftnet窗口显示图片Fig.24 Image displayed in the driftnet window
在攻击主机中的driftnet窗口中监看。如图24所示。
实验结果表明,被测目标手机可被ARP欺骗攻击,导致信息泄露。
本章依次对Android8.0手机和Android10.0手机进行了Ping扫射实验、端口扫描实验、拒绝服务攻击实验和ARP欺骗实验,并进行了实验数据分析。根据各实验结果表明,两台搭载Android8.0和Android10.0系统的智能手机不存在过滤Ping扫射和端口扫描的防火墙,普通的Ping扫射和端口扫描都能成功实施在目标手机上;两台搭载Android8.0和Android10.0系统的智能手机也不存在抵御Syn Flood拒绝服务攻击的防火墙,在受到此类攻击时,两台Android智能手机在实时网速、读取网页时间、CPU使用率以及实时能耗上的数据都产生了十分大的波动,对于日常使用有着较大影响;两台搭载Android8.0和Android10.0系统的智能手机也无法抵御ARP欺骗,实验结果表明,ARP欺骗可成功获取目标手机的信息,造成严重的信息泄露。
本文首先介绍了Android系统的基本架构和市场占有情况,分析了Android系统各组件的基本情况。随后介绍了渗透测试的基本内容,通过研究国内外现有的渗透测试技术,并结合Android系统的特点,选择适当的渗透测试技术,设计并通过python和kali linux系统实现对Android移动设备的渗透测试实验。通过分析实验数据,发现Android系统在能耗管理和信息安全等方面存在的漏洞。
此次渗透测试实验的结果表明,无论是最新的Android10.0系统还是目前市场占有率最高的Android8.0系统,都在抵御拒绝服务攻击方面的漏洞;参与实验的两台Android手机在受到Syn Flood这一泛洪类拒绝服务攻击时,皆受到网络限制、能耗上升等影响。另外,通过arpspoof软件伪造MAC地址,从而进行的ARP欺骗攻击也对两台Android手机造成了影响,使得两台手机的信息遭到泄露。
通过此实验,实现了渗透测试对移动目标设备的渗透实例。通过分析实验数据,可为之后的研究打下基础。