张楠 滕英岩
摘 要:研究基于Android平台的安全防护软件,使用Android SDK和Java Web技术实现了Android平台安全防护系统的各项功能。系统支持手机防盗找回、骚扰拦截、缓存清理、病毒扫描等功能,实现了对恶意程序和骚扰程序有效地拦截,后台服务器使用Servlet编写部署在百度云平台,拥有快速的响应和稳定等特点,给后期的维护工作带来的极大的便捷。
关键词:Android平台安全防护系统;恶意程序;百度云平台
中图分类号:TP391 文献标识码:A
1 引言(Introduction)
近年来,Android平台安全防护系统是目前市面上安卓平台广泛应用的软件系统,然而信息安全领域在移动与嵌入式安全研究开发上的行动在过去几年里过于缓慢),以至于移动安全在某种程度上仍然被认为是前沿研究,因为移动设备的消费者与用户最近才开始察觉并理解日常使用移动设备所面临的安全威胁。这些威胁也随之为移动安全研究与安全产品创造了市场前景[1]。本文研究的安全防护系统采用最新的Android SDK开发,本着精简高效的原则,对市面上流行的安全软件的功能进行包含和实现,由于占用内存资源少,本系统兼容安装Android 2.3.3到目前最新Android 4.2.2的所有智能手机。
2 关键技术介绍(The introduction of key
technology)
2.1 Android系统平台简介
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台[2]。
2.2 手机恶意软件
手机恶意软件,一般是指在用户不完全知情和认可(它包括未经用户许可、强迫引导用户许可或隐瞒关键信息等)的情况下强行安装到用户手机中,或者一旦安装就无法正常卸载和删除,但又具备一定正常功能的软件程序。
恶意软件是介于病毒和正常软件之间的软件,它与病毒的区别是:通常还具备一定的正常功能。
相比于正常软件,判定是否是恶意软件的两个标准:
(1)是否被安装到了用户手机中。
(2)对于用户而言,是否具有不可控制性:即用户不完全知情和认可,或者是安装后无法让用户用正常的手段卸载和删除。
符合以下任意即可定义为恶意软件:
(1)没有任何提示,暗地里发短信、联网、扣费,轻微的发一次,严重的重复发。
(2)虽然有提示,但提示很不显眼,很容易让新手用户摁错,误导新手,导致发送短信、联网、扣费。
(3)虽然有提示,但提示是虚假的,比如明明是CMNET,却提示是CMWAP。
(4)没有提示或者误导用户,暗地里收集用户个人资料的。
(5)不经用户同意,捆绑了快捷键、书签等可恢复性内容。
(6)安装很容易,删除不简单。
2.3 MD5算法简介
MD5算法为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的MD5“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。加密流程如图1所示[3]。
图1 MD5加密算法流程图
Fig.1 Process of MD5 encryption algorithm
2.4 Android安全权限机制
Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部分也分别使用各自独立的识别方式。Linux就是这样将应用与应用,应用与系统隔离开。
系统更多的安全功能通过权限机制提供。权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。
Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。从用户角度看,一款Android应用通常会要求如下的权限:拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。
一款应用应该根据自身提供的功能,要求合理的权限。用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑。
3 系统设计(System design)
3.1 系统结构
Android平台安全防护系统采用Android原生SDK进行开发,客户端主要由手机防盗、通讯卫士、软件管理、进程管理、流量统计、病毒扫描、缓存清理、高级工具、设置中心这几大模块构成,系统结构如图2所示。
图2 系统结构图
Fig.2 System architecture diagram
程序中各个模块都有自己独立的服务和广播接收器为之提供支持,客户端利用JSON数据格式和后台服务器之间做数据交换,每个功能模块之间相互独立,但是由主页面切换进入。以手机防盗功能模块为例,一共有四个页面对数据进行记录,分别是设置密码,绑定SIM卡,绑定安全号码,启动管理员模式,当数据记录完毕后,后台会有相应的服务和广播接收器启动,来记录安全号码发入目标手机的指令,从而可以启动相关功能对目标手机执行一系列的操作。
3.2 数据库设计
数据库密码列采用MD5加密算法存储密码,这样可以避免明文密码的泄露。数据库设计表如表1所示。
表1 数据库表设计
Tab.1 Design of database table
表名 类型 约束 备注
UserID Verchar(30) 唯一 用户唯一的ID号
UserPass Varchar(30) 非空 用户密码
4 系统实现(System implementation)
本文着重对Android平台安全防护系统子系统进行剖析,阐释系统的运行原理。安全防护子系统主要包括手机防盗和病毒扫描模块两部分。
4.1 手机防盗模块
手机防盗功能中包含手机定位、手机报警、手机锁屏和手机数据清理功能。本模块利用手机长驻后台服务监听短信内容,根据短信执行相关操作[4]。定位功能是程在序中加入了百度地图定位功能,当用户绑定了SIM卡和安全号码后,如果手机丢失,用安全号码手机直接编辑短信指令+密码发送到丢失手机上,可以让手机执行定位操作并回复短信当前手机所在坐标位置。以下是部分定位功能的实现代码段。
public void initOption() {
LocationClientOption option=new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式
option.setCoorType("bd09ll");//返回的定位结果叠加地图使用bd09ll模式
option.setScanSpan(2000);//设置发起定位请求的间隔时间为5000ms
option.setIsNeedAddress(true);//返回的定位结果包含地址信息
option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向
option.setOpenGps(true);
locClient.setLocOption(option);
}
public void TraceStart() {
locClient.start();
}
public void TraceStop() {
locClient.stop();
}
锁屏功能是使用安全手机发送锁屏指令,然后目标手机会自动执行锁屏指令。
手机报警功能是收到安全号码发来的指令后以最大声音播放报警音乐。
手机数据清理功能是接收到数据清理指令后在后台执行数据清理功能。触发这些功能都是在后台让偷盗者无法察觉的情况下完成的。
4.2 病毒扫描模块
病毒扫描模块主要利用MD5特征匹配筛选安全程序和病毒程序,进入扫描进程后程序会在后台将计算出每个程序的MD5值,然后利用云端同步的病毒特征库进行比对,利用折半查找法加速了程序扫描大样本数据库的对比算法。当病毒程序被扫描出,程序会提示用户是否清理,如果用户点击清理按钮程序会强制卸载目标程序,扫描过程结束。
病毒扫描过程部分核心代码段如下:
private void scanVirus() {
pm=getPackageManager();
tv_scan_status.setText("正在初始杀毒引擎......");
new Thread(){
@Override
public void run() {
Listinfos= pm.getInstalledPackages(0);
pb.setMax(infos.size());
int progress=0;
for(PackageInfo info:infos) {
//info.applicationInfo.dataDir; //数据文件保存地址
String apkPath=info.applicationInfo.sourceDir; //APK安装包路径
String md5=FileToMD5.GetFileMd5(apkPath);
//准备保存数据传出让UI线程更新
ScanInfo scanInfo=new ScanInfo();
scanInfo.Name=info.applicationInfo.loadLabel(pm).toString();
scanInfo.packName=info.packageName;
if(AntivirusTools.isVirus(md5)) {
//发现病毒
scanInfo.isVirus=true;
}else{
//扫描安全
scanInfo.isVirus=false;
}
//定义消息,把消息发到UI线程更新界面
Message msg=Message.obtain();
msg.obj=scanInfo;
msg.what=520;
handler.sendMessage(msg);
progress++;
pb.setProgress(progress);
}
Message msg=Message.obtain();
msg.what=0;
handler.sendMessage(msg);
}
}.start();
}
5 关键问题(Core question)
5.1 实现了病毒库自动更新
程序在运行过程中,固定的时间会向服务器拉取一个XML配置文件,里面是用JSON格式记录的病毒库版本和病毒库下载地址。当程序发现新版本病毒库发布后,会自动去更新病毒库,由于病毒库只是一个txt格式的文档,所有占用流量不会太多。当程序下载下新版本病毒库后会自动将数据插入已有的病毒库。从而完成了病毒库的更新操作。
5.2 手机防盗模块实现了手机自动定位回传功能
当手机收到安全号码发来的指令的时候,手机会自动启动定位功能,程序会自动启动GPS,利用网络辅助定位确定手机当前坐标,并将坐标点和手机所处位置名称以短信的形式回传至安全手机,当用户收到定位点后利用百度坐标拾取就可以轻松找到手机位置。这一定位和回传过程都是在后台完成的,前台无任何痕迹,这也是为了保证用户手机落入小偷手中定位过程不被小偷发现。
5.3 手机防盗模块实现了手机数据清理功能
当手机收到安全号码发来的指令的时候,手机会开始抹
去手机当前的数据,这一功能的开发主要是当用户手机无法定位的时候最后可以操作的,这也可以最大限度的保护用户的隐私不被盗窃。但是由于这一功能需要开启管理员权限,同时也让第三方软件无法卸载本程序。如果用户需要卸载只需要关闭管理员权限然后就可以正常卸载了。
5.4 安全防护系统自身安全性
系统自身安全性又是项目的另一个重点。安全性问题主要来自于以下两方面:
(1)用户密码的安全性。如果用户密码被泄露,安全手机用密码+指令就可以任意操作目标手机,所以在密码的保存上面,程序使用MD5加密算法加密存储至数据库,用户可以自己更改程序密码。这样安全手机只有在密码正确的时候指令才有效。
(2)服务器端的安全性。为保证服务器安全稳定运行,我们将编写好的Servlet部署在百度云平台上,在百度提供的高性能的服务器上避免了服务器的故障和恶意入侵的问题,百度云平台之间的项目独立运行又不会相互影响。云平台的智能性也大大减少了服务器端的维护成本和难度。
6 结论(Conclusion)
本Android平台安全防护系统的开发解决了目前安全软件体积庞大弊端,目前360和金山手机助手安装完毕就已经达到20MB左右,小内存的手机安装后会导致手机假死或者死机的症状。而Android平台安全防护系统安装包只有3.9MB,开启后运行服务也只有4MB左右,基本对手机的运行不会产生太大的影响。同样的功能我们的可以占用更少的内存解决,这就是我们精简系统的优势。
然而系统还是有一些善待解决的问题,比如病毒特征库的更新,比如程序执行效率的优化。因为安全类软件最看重的就是病毒特征库的数量,个人没有办法去获取大量病毒特征库特征值,所以本系统还是借鉴了最新版的金山毒霸的特征病毒库才可以进行扫描。
参考文献(References)
[1] Joshua J.Drake.Android安全攻防权威指南[M].北京:人民邮电 出版社,2013.
[2] 百度百科.android(Google公司开发的操作系统)[EB/OL]. http://dwz.cn/test_android.
[3] 百度百科.MD5加密[EB/OL].http://baike.baidu.com/view/ 1039631.htm.
[4] 李兴华.Android开发实战经典[M].北京:清华大学出版社, 2012:562-583.
作者简介:
张 楠(1992-),男,本科生.研究领域:软件开发及数据库.滕英岩(1972-),女,硕士,教授.研究领域:嵌入式软件及
应用.