APP下载

基于可信计算的移动应用静态度量方法

2023-01-16于炳虎蹇诗婕樊子民

网络安全与数据管理 2022年12期
关键词:基准值样机度量

于炳虎,蹇诗婕,樊子民

(公安部第一研究所,北京 100048)

0 引言

近年来,移动应用安全事件频发,据相关机构统计,2021年全球近四分之一的企业组织均发生过移动或物联网数据泄露事件。据国际安全机构Check Point Research(CPR)在2021年4月发布的《全球威胁指数》报告显示,十三款Android应用暴露了包括社交信息、电子邮件、账户密码和图片照片在内的多项个人隐私数据,受影响用户数量多达1亿。海量移动应用在为用户提供便利的同时,极大地加剧了数据安全风险。如何有效防范移动互联网存在的安全威胁,已经成为当前应用厂商、研究机构和政府相关部门关注的重点内容。我国网络安全等级保护制度2.0系列标准已发布并实施,针对移动应用存在的被篡改、被假冒的问题,标准要求采用校验技术保证代码的完整性,并提出了采用可信计算技术构建主动免疫安全体系的具体要求[1]。相关组织机构应根据国家政策、标准规范完善移动应用安全体系,贯彻落实安全措施,保障移动应用市场安全。

为提高移动应用的安全防护能力,本文提出了一种基于可信计算的移动应用静态度量方法。该方法以可信计算主动免疫体系为基础,从应用度量角度出发,通过对移动应用组成结构、加载运行机制等方面进行研究分析,利用可信度量机制、判定机制和可信基准库,联合完成对宿主基础软件系统应用的安全防护,保证应用运行时的代码完整性。

1 可信与移动安全

目前,针对移动应用的安全防护措施主要以应用加固技术手段为主,通过对程序文件加壳加密,防范应用被破解、反编译、调试、篡改、冒充、二次打包等。除此之外,还有应用安全检测、漏洞扫描、分发渠道监测,以及一些专业场景下的安全解决方案,如安全SDK、应用签名认证等。但是,以上方式仅在一定程度上满足了应用启动运行前的安全要求,无法保证应用在长期使用过程中的安全性。可信计算中的度量机制是解决上述问题的一个主要方法,能够实现对应用程序进行静态完整性度量,保证应用程序的可信启动。国内外基于可信度量机制实现的相关解决方案,大多应用在网络系统和服务端应用,缺少针对移动应用的度量方案。针对上述问题,本文提出了一种可落地实现的基于移动应用的静态度量方法。

近年来,可信安全防护技术不断迭代升级,从早期的可信计算1.0时代发展到现在的可信计算3.0时代。防御方式由被动防御转变为主动免疫,防护对象由主机、个人计算机,延伸至整个网络环境,应用场景扩大至云计算、物联网、区块链,可信计算已覆盖信息技术领域的多个方面,并且在跨行业领域也具有广阔的应用前景。可信计算技术支撑了计算机网络安全防护能力的提升,并且逐步发展成为网络安全领域的主流防护技术之一[2]。

与此同时,随着互联网技术的不断发展,移动安全已成为网络安全领域关注的重点问题。后疫情时代,智能手机和互联网已成为人们工作生活中不可缺少的一部分,远程办公的普及使得人们更习惯使用手机中的各种移动应用处理工作,导致敏感信息更容易被不法分子获取,存在较大安全隐患,安全防护能力亟待加强。可信计算作为信息安全领域研究的热点之一,在移动安全领域中应用广泛、场景丰富,例如移动票据、移动支付、可信终端等[3]。

2 关键技术

移动应用的静态度量,关键技术是静态度量方法以及针对特定移动操作系统的设计实现。本文讨论的移动应用专指以移动终端为载体、运行在移动操作系统之上的应用程序。移动操作系统目前主要分为Android系统和iOS系统两大阵营。近两年,国产华为鸿蒙系统发展迅猛,国产操作系统市场占有率逐渐扩大。iOS系统是一个封闭的移动操作系统,无法在系统层面进行定制与集成,相比之下,Android与Open Harmony均为开源系统,在系统层面可灵活设计与定制[4]。

本文研究设计的基于可信计算的移动应用静态度量方法适用于各类型移动操作系统。考虑到方法的通用性、广泛性和验证的可行性,本文以Android系统为基础,进行方法设计与后续验证。基于Android系统的移动应用是以Android应用程序包(Android Application Package,APK)为文件格式的应用程序,其本质是压缩包文件,文件中包含开发者签名信息,用于在安装过程中对开发主体进行认证,应用签名验签机制可作为应用合法性认证的原理基础。应用程序的两项关键流程是安装与启动,由操作系统的包管理服务(Package Manager Service,PMS)和活动管理服务(Activity Manager Service,AMS)来处理,同时安装与启动也属于可信计算应用度量的两个重要的计算节点[5]。应用安装流程中系统调用PMS,应用启动流程中系统调用AMS。其中,PMS服务是Android系统的核心服务之一,主要负责各种APK的安装、卸载、优化和查询。AMS服务主要负责系统中组件的启动、切换、调度及应用进程的管理和调度等工作。

可信计算包括可信根、信任链、可信度量和可信报告四部分,要求系统严格按照设计和策略运行。可信度量分为静态度量和动态度量,静态度量是可信度量的一种重要度量手段。对于移动操作系统,静态度量包括系统侧静态度量和应用侧静态度量[6]。其中,系统侧静态度量是指针对系统镜像、内核驱动、系统关键服务进行的完整性检查和非法性判断。移动终端处于出厂状态第一次引导时或系统镜像更新后第一次引导时,自动采集生成静态可信度量基准值。应用侧静态度量是在可信白名单的基础上对应用可执行文件进行度量检查,可执行程序在可信白名单检查通过的情况下方可运行,否则运行失败[7]。度量方法为通过使用可信计算密码平台提供的哈希函数接口,计算度量对象的完整性校验值,并与基准值进行比较。

3 设计架构

可信计算静态度量的主要思路:首先确定度量对象,通过合法性校验后,使用度量算法生成度量对象的基准值,维护可信基准库。在度量对象启动运行前,获取所述度量对象的度量值,对比所述度量对象的度量值和基准值。最后根据判断机制,判定所述度量对象的可信性,决定是否启用度量对象。以上思路是本文所述方法的主要依据。

移动应用静态度量的总体架构包括两条业务主线和两个组件服务,所有处理逻辑都在系统的框架层运行。两条主线即应用的安装与启动,贯穿系统的PMS服务和AMS服务。两个组件服务即应用认证服务和静态度量服务,其中认证服务主要用于验证应用的合法性,此服务可参考应用签名验签机制来设计实现,可定制化较高,通过认证服务后可根据应用信息计算生成基准值。静态度量服务主要用于计算应用度量值,根据判定机制,结合可信基准库,决定应用是否能够启动运行。

总体架构流程如图1所示,本文将从应用的安装、启动、更新和卸载四个使用场景详细介绍处理流程。

图1 总体架构流程图

3.1 应用安装

应用APK程序包下载至移动终端后,系统加载应用文件,执行PMS服务安装程序。首先PMS调用应用认证服务对APK文件进行合法性认证,认证通过后在可信基准库中创建应用初始化信息,然后继续执行系统的安装流程。安装完成后,立即使用可信度量算法模块生成应用程序可执行文件的基准值,覆盖存储上步生成的应用初始化信息。

3.2 启动运行

应用启动运行时,系统执行AMS服务流程,首先使用可信度量算法模块计算应用可执行文件的度量值,在可信基准库中查找此应用的基准值,并根据判定机制,将度量值与基准值进行对比校验。通过校验后即可启动应用,如果判定失败,则禁止启动应用,并给出相应安全风险提示。最后将度量计算结果等信息保存至可信记录文件,供后续审计使用。

3.3 应用更新

更新应用程序包,步骤与应用安装流程相同。系统加载文件,执行PMS服务安装程序,对APK文件进行合法性认证,通过认证后进行覆盖安装,并重新生成基准值,覆盖可信基准库中此应用的初始基准值。

3.4 应用卸载

卸载应用程序,系统调用PMS服务,执行卸载流程,并删除可信基准库中此应用的基准值,同时删除可信记录列表中此应用的数据。

4 度量范围分析

4.1 参与度量的应用范围

根据安装使用分类,移动应用一般分为内置应用、预装应用和三方应用。其中,内置应用是终端系统自带的应用,以手机移动操作系统为例,内置应用包括电话、短信、联系人、蓝牙等系统基础功能应用;预装应用是第三方软件商通过刷机渠道强制装入的软件,或者是一些定制需求中预装的应用;三方应用是用户通过应用市场安装或其他途径安装至终端的应用。参与度量的应用范围如图2所示[8]。

图2 参与度量的应用范围

内置应用是用户使用频率较高的一类应用,提供了系统的基础性功能。启动速度和使用体验是用户优先考虑的两大因素。在可信度量过程中,文件加载、度量值计算和校验占用了一定时间,因此会影响应用的启动速度。并且内置应用要求权限高,需要系统签名才能安装更新,程序中不包含三方组件和逻辑,风险较低,因此内置应用不在度量的应用范围内。预装应用和三方应用涉及第三方软件厂商的干预,因此必须参与度量校验,属于需参与度量的应用。

4.2 应用中参与度量的文件范围

经对Android系统分析验证,三方应用安装完成后可在系统/data/app/[package]目录下找到相关安装文件,通常包括三类文件,如图3所示,包括base.apk文件、lib目录文件和oat目录文件。其中base.apk文件是安装程序包的镜像文件;lib目录下是应用的动态库文件;oat目录下是应用的可执行字节码文件,在混合编译模式下会生成dex、odex、vdex等文件[9]。

图3 应用中参与度量的文件范围

oat目录下主要存放经过优化的可执行字节码文件,Android 7.0版本后采用混合编译的模式,应用程序直接安装,不再预先编译,但系统会在空置或充电等状态下对部分热点代码进行编译,编译后的热点代码不再进行重复编译。应用再次运行时,如本地有相关机器码,将直接运行。热点代码信息维护在应用所属的一个属性文件中,随着应用使用情况的变化而变化,因此oat下的可执行文件会随着热点代码信息而改变。静态度量的原理是对不发生改变的静态文件进行度量与计算,因此oat目录下的文件不参与度量[9]。

base.apk文件可理解为应用程序在系统中的镜像文件,如果应用未在后台运行,每次启动应用时系统会加载此文件,解析出相关资源文件,若此时可执行字节码文件不存在,将根据系统编译机制生成相关文件,base.apk文件在系统中的状态和属性会保持不变,并提供了应用程序运行所需的完整资源,因此base.apk文件需要参与度量[10]。

lib目录下包含了应用所需的动态库文件,此类文件通常包含应用的主要功能逻辑,动态库文件的状态和属性都是静态不变的,一旦发生变化即表明应用程序被恶意篡改,因此lib目录下的所有动态库文件都需要参与度量[11]。

5 实验与验证

可信静态度量的机制是度量值与基准值进行对比校验。应用安装完成后生成基准值,每次启动应用时计算其度量值,通过对二者进行对比校验,判断应用是否合法。基准值通过合法性认证后生成,其中,合法性认证可根据行业需求定制不同的方案,例如可利用签名验签机制保证应用的完整性和来源的合法性。

本节将通过程序实例验证上述方法的可行性。在实验环境的准备上,以通用主流、具有代表性为主要依据。实验样机采用手机型智能终端,规格参数属行业中上水平,样机系统应获得超级管理员权限,实验中选用了2款Android系统测试样机,样机的基本设备信息如表1和表2所示,后续测试数据截图以样机1为代表进行展示,样机2的测试数据做补充描述。

表1 样机1基本信息表

表2 样机2基本信息表

实验应用样例选用百度地图开发者平台提供的Android版本样例应用,此应用为提供给广大开发者参考使用的样例,具有广泛使用性,应用基本信息如表3所示。

表3 应用基本信息表

首先将应用安装至实验样机,安装过程调用应用认证服务,通过合法性验证,生成应用的基准值。在实验环境下查看可信基准库文件,此处为方便查看结果,基准库以加密文件的方式进行演示,如图4所示。对数据进行加密处理,以“KEY=VALUE”格式存储每条应用的数据,其中,“=”为分割标识,“KEY”为应用标识(可使用包名等信息作为唯一标识),“VALUE”为应用的基准值。

图4 可信基准库文件

5.1 正常启动

在未对应用进行任何篡改处理的情况下正常启动应用,查看可信记录文件,日志数据如图5所示,若应用度量结果返回值为true,则允许应用启动运行,符合预期。

图5 日志数据

由表3可见,此样例程序的安装文件总计7个,按照度量文件范围分析的结论,排除oat目录下的2个可执行文件,此应用参与度量的文件包含以下5项,如表4所示。

表4 度量文件列表

5.2 篡改应用

样例应用共包含5个参与静态度量的文件,可对任意文件进行篡改,方式包括修改文件、删除文件和增加文件等,均可达到篡改应用的目的。篡改方法中使用了Android调试桥工具(Android Debug Bridge,adb),此工具和命令可对Android系统下的文件进行操作。

(1)修改文件:首先使用adb pull命令将base.apk文件拉出,使用编辑工具打开文件,在文件任意位置插入非法字符,使用adb push命令将修改后的base.apk文件推入至原目录下,覆盖原始文件,完成上述操作后启动应用查看结果。

(2)删除文件:以超级管理员权限进入lib目录,执行删除命令,将动态库liblocSDK8b.so删除,完成上述操作后启动应用查看结果。

(3)增加文件:准备一个非法动态库文件libtesterror.so,使用命令adb push,将此非法文件推入至lib目录下,完成上述操作后启动应用查看结果[12]。

以上三种篡改方式执行后,样机1的度量结果如图6所示。三种篡改方式的度量结果返回值均为false,表示禁止应用启动,样机1的实验结果符合预期。

图6 篡改应用后度量结果

经验证,样机2在相同的实验步骤下,实验结果同样符合预期,仅在度量处理耗时上略有差异。综上结果证明,所提方法能够有效阻止攻击者对移动应用进行篡改,保证了应用在使用过程中的合法性和完整性。

6 度量算法优化

基于可信计算的移动应用静态度量方法的性能瓶颈是度量算法。在上节实验中,样例应用大小为93.4 MB,样机处理器参数属主流水平。由测试结果数据可见,度量计算时间在3 s以上,在后续的测试中发现,随着应用文件大小的增加,度量时间也会等比例增长。对于使用者而言,在应用高频的使用和切换过程中,启动一个应用的等待时间需要3 s,非常影响用户体验。同时,近年来,随着终端存储配置的大幅提升,各类应用文件大小也成指数级增长,尤其游戏类应用,通常大小都在500 MB以上,参照上述结论推算,度量时间可能需要15 s以上,这将极大地影响用户体验,通常用户难以接受。除此之外,Android系统中单个虚拟机内存大小默认为256 MB[13],受此限制,度量计算过程中,如果应用程序文件过大,超过虚拟机内存上限,就会造成系统服务异常崩溃。针对以上两个问题,优化度量算法是解决问题的关键,本文提出了一种较为独特的文件度量算法。

下面对未经优化的原始度量算法和优化后的度量算法进行对比说明。未经优化的原始度量算法如图7所示,一次性将应用文件全部读取至虚拟机中处理,虚拟机中启用一个线程执行计算操作,输出结果。在此处理过程中,如果应用文件大小超过虚拟机内存上限,势必会导致内存溢出,并且由于是单线程执行,效率低,计算耗时[14]。

图7 原始度量算法

优化后的度量算法如图8所示,借鉴分治算法思想,将文件分块分组处理。虚拟机中每次读入1个分组,利用线程池,在计算单元并发计算多个分块,并按照后续顺序执行其他分组,合入最终结果。

图8 优化后的度量算法

优化后的度量算法能够有效解决内存溢出和计算耗时的问题,合理设置计算资源,合理划分文件分块分组大小[15],进一步提升了计算效率。

采用上述优化算法后的度量结果,样机1的数据如图9所示,对于相同的样例应用,优化后的度量算法所需度量计算时间为0.107 s,相较于未经优化的原始度量算法所需的3 s度量计算时间,性能提升了96.433%,相同实验步骤下,样机2性能提升了95.965%,综上分析可见,优化后的度量算法效果显著。

图9 优化后算法度量时间

7 结论

本文基于可信计算静态度量实现思路,研究设计了一种针对移动应用的静态度量方法,通过设计应用度量流程与架构,分析应用和文件的度量范围,优化度量算法,结合实验测试,验证所提方法的可行性与正确性。所提方法流程清晰,实现简单,理论基础同样适用于其他类型的移动操作系统,应用范围较广,可落地性极强,从一定意义上来看,填补了当前移动安全领域应用静态度量实现方案的空白,解决了移动应用在长期使用过程中存在的安全机制缺失的问题。

随着国内移动终端定制化安全需求的激增,以及等保、可信计算相关行业标准的落地与实施,尤其是对政企等一些重要行业和领域,本文所提方法具有一定的指导意义,能够为移动应用安全领域的相关工作提供建设性参考。

猜你喜欢

基准值样机度量
基于ADAMS虚拟样机的门座起重机动力学仿真研究
鲍文慧《度量空间之一》
地表水环境质量标准综述(三)
——标准衔接中常见问题及分析
基于三维数字样机的运载器装配工艺规划技术
基于5G用户体验的业务质量优化模型研究及其应用
精心准备,蓄势待发——广日电梯地铁项目样机验收顺利通过!
代数群上由模糊(拟)伪度量诱导的拓扑
突出知识本质 关注知识结构提升思维能力
基于加权模糊C-均值聚类的锅炉运行参数基准值建模
度 量