谢毅
(国网福建省电力有限公司宁德供电公司,福建宁德 352100)
安卓移动终端的智能性体现在可以在各自的平台上自由地安装和卸载应用软件,应用系统中不可避免地会出现恶意程序,这类恶意软件对智能手机用户的安全构成严重威胁[1]。因此,需要研究相应的防护技术对其进行保护。
传统修补安卓漏洞防护技术对安卓漏洞预先打补丁,增强系统的安全性,从根本上防止恶意程序的攻击[2]。然而,一旦安卓系统内核发生变化,独立于安卓平台的强制访问过程将大大增加,强制访问的安全性将无法控制。代码分离技术建立了远程安全服务器,实现软件私有数据与核心代码的分离与开放[3]。然而,一旦黑客通过软件操作获取了程序的核心代码和隐私数据,服务器和客户机之间的安全通信就得不到保障[4]。针对上述问题,提出了移动终端操作系统安卓防护技术。对安卓系统安全机制和现有安全漏洞的研究,有助于对安卓终端进行安全保障。通过在安卓终端上采取各种措施防止和消除这些安全威胁,使终端处于相对安全的应用环境,从而增强安卓系统的安全性。
安卓手机终端操作系统是目前应用最为广泛的手机终端系统,该操作系统以Linux 为核心,由操作系统、中间件、应用程序操作环境和核心应用程序组成[5]。图1 中显示了具体的结构。
图1 安卓移动终端操作系统
由图1 可知,每一个安卓软件包(.apk)都会分配一个唯一的用户ID,安卓为每个程序创建了一个沙盒,使得每个程序都只在同一个进程中运行,并且只有固定的权限[6]。
因为系统的开放性给攻击者提供了多方面的攻击机会,所以在安全保障方面也存在许多风险。以下是安卓移动终端面临的一些主要安全威胁:
1)安卓移动终端在开发应用程序时以开放源码为基础,其是安卓移动终端安全性问题的主要根源。应用开发和发布方面缺乏监管,使得用户下载和安装恶意软件,使用户个人信息遭到泄露,资料出现严重丢失情况[7]。
2)由于安卓移动终端应用程序采用最简洁的Java 编程,所以开发人员更容易编写攻击系统的恶意程序。由于安卓移动终端面向大量用户,因此伪装病毒程序容易得到用户授权,并被广泛传播[8]。
可信性计算的目的是通过对移动终端体系结构的深入分析,在相应层次上采取安全增强措施,使每个移动终端上的用户统一起来,构建一个能够保证整个移动互联网安全的完整系统[9]。建立移动网络安全体系,必须从防范终端攻击入手。进入网络后,每个终端都拥有合法的网络身份,并且不受恶意程序的影响。其核心思想是在终端硬件平台上引入软硬件安全模块,充分利用密码技术,构建可信根、终端操作系统和应用软件[10-11]。在可信链的每一个环节上,采用一种完整性度量机制,即一级信任、一级认证,将这种信任传递到整个移动终端操作系统。
可信基础是计算平台中一个可信的第三方,通常在平台启动时以一种受保护的方式存在[12]。所有执行程序和系统配置信息在系统启动时都需要进行完整性度量,在第一级度量的传输期间建立信任链[13]。重要数据存储意味着某些敏感数据(如安全模块可信检查值操作系统)需要在建立信任根和可信链之前进行保存,必须由安全加密模块进行保护,且应配置符合要求的平台。
可靠导引技术的实现主要包括两个方面:
1)数据读取
了解了Flash中操作系统和文件系统的具体存储位置和文件大小之后,需要从终端的Flash 中读取操作系统和文件系统,并将其压缩到终端的内存中[14]。
2)OTCC 算法
为实现动态、安全的控制指令,采用一次性指令生成方法,即OTCC 算法,引入一种随机数生成指令集,利用随机数发生器生成随机序列,提取随机数[15]。数值作为参数,对原始控制命令进行加密。根据设计的控制指令生成机制,OTCC 算法的输入为初始指令集的控制命令序列{1,2,3,…,n},通过算法加密后生成密文序列{E1,E2,E3,…,En} 。OTCC 算法的实现过程是使用所设计的随机数生成器产生随机数序列,并由此产生一组加密密钥,所选加密函数将密钥和明文输入加密函数计算密文[16]。该算法由密钥生成过程和明文加密过程两部分组成:
①密钥生成
在加密后的密文集合中,为避免出现相同值,采用了串行加密方法,即加密密钥的比特数与明文的比特数相同。根据控制命令对应表中命令数量x,将每次加密时所产生的随机数列{ε0,ε1,ε2,…,εx} 作为密钥序列。
②加密过程
加密过程需要选择单调非周期函数,使用复合方式展开加密计算,并定义一个非周期函数集
结合上述步骤,可知该算法的具体实现步骤为:step1:读取控制指令,获取控制指令序号集
step2:从控制指令序号集中生成随机数组[ε0,ε1,ε2,εi] ;
step3:设定随机种子x0,利用安卓的移动终端操作系统随机函数产生一个数据j,0 ≤j≤i;
解释器通过重新打包代码,对程序执行过程进行修改和中断,从而向程序签名和类.dex 文件完整性添加验证,以确保软件认证的安全性和代码完整性。因为安卓的移动终端采用Java 代码编写,安全性不高,所以该系统提出创新两层代码自修改技术,以保证软件签名验证和代码完整性验证两个核心模块的安全。把代码放到so 文件中,避免两个关键模块都被忽略。
针对先前实现的基于安卓的移动终端的可靠导引技术,在程序有效地抵抗静态分析的基础上,实现了代码自修改保护两个关键模块:签名验证和完整性验证。
用于加密的密钥存储在so 文件中,以确保程序安全性。根据这一保护思想,利用安卓的移动终端实现代码自修改技术,提出了代码自修改两层保护流程,如图2 所示。
图2 双层代码自修改保护的实现过程
具体实现方案如下:
1)如果需要执行代码自修改(SMC)保护代码,则从so 文件中获取密钥,解密存储在so 库中的机器码;
2)为了进行代码自修改,首先保存目标函数原始操作代码,解密后的机器码被写到目标函数体中;
3)呼叫解密目标码,目标函数体中的机器码已被保存关键函数所取代;
4)该方法执行后,目标函数原始操作代码被写到目标函数中,以确保解密关键函数代码执行后不会被破解程序看到。
任何电子系统都会遭到黑客攻击,因此,从操作指令方面对研究的面向安卓的移动终端操作系统防护技术进行实验验证分析具有一定的必要性。
安卓移动终端操作系统版本型号部署测试环境如图3 所示。
图3 测试环境部署
由图3 可知,使用一台普通主机和部分安卓手机,在Windows 主流PC 操作系统下检测防护系统。
安卓移动终端操作系统连续运行6 次生成6 组加密后的操作指令集,如表1 所示。
表1 安卓移动终端操作系统操作指令集合
分别使用修补安卓漏洞防护技术、代码分离技术和面向安卓防护技术,从表1 中随机选取两个指令作为一组指令集,选取每组第一个指令集各个元素值作为横坐标,第二个指令集各个元素值作为纵坐标,在二维坐标系中绘制出6 个动态操作指令集所对应的像素点,如图4 所示。
图4 不同方法二维坐标系图
由图4 分析对比可知:
1)使用修补安卓漏洞防护技术有2 组横坐标一致、4 组纵坐标一致的数据,这说明数据集内有重复数据;
2)使用代码分离技术有2 组横坐标一致、3 组纵坐标一致的数据,这说明数据集内有重复数据;
3)使用面向安卓防护技术每组数据坐标点都不 同,即x1≠x2≠x3≠x4≠x5≠x6,y1≠y2≠y3≠y4≠y5≠y6,这说明数据集内没有重复数据,能够满足安卓移动终端动态操作的加密需求。
针对安卓手机终端操作系统的安全现状,以安卓手机终端下的软件安全保护为研究方向,对安卓手机终端及其运行机制进行了深入研究,并分析安卓移动终端的安全威胁。在此基础上,对当前流行密码保护技术进行了研究和改进,提出了一种可靠密码自修改技术。
通过对安卓移动终端保护技术的研究,分析总结了实验过程中遇到的问题,提出了需要改进的地方:在关键代码保护模块、关键代码运行之前,需要写入已解密的指令集,并在关键代码执行之后,需要恢复指令集的目标函数,但这样做可以确保cookie得到正确的程序指令,然而,因为它们都属于内存上的操作,所以关键代码的执行时间会延长。如何既保证关键代码的保密性,又减少关键代码的执行时间,是下一步工作研究的重点。