宋士明
(南京证券股份有限公司 南京 210019)
(smsong1120@126.com)
随着《中华人民共和国个人信息保护法》的颁布实施,个人信息及隐私保护已成为国家监管的重中之重.随着智能移动终端的发展普及,其已成为储存和产生大量个人信息的载体,移动APP在智能移动终端上的个人信息收集使用,已成为个人信息保护专项整治的主要战场.国家监管4部委已联合开展“APP违法违规收集使用个人信息专项治理”行动,针对移动APP违法违规收集使用个人信息和侵犯个人隐私的行为开展了持续性的监测、通报、整改和处罚[1].对券商而言,确保所运营的移动APP中个人隐私信息的安全与合规,是亟需解决的问题.
券商APP集成一定数量第三方SDK已成普遍现象,一旦所集成的第三方SDK发生用户隐私侵犯行为,券商同样需要承担个人信息保护不合规的责任.券商需要对APP及其所集成的第三方SDK进行统筹考虑,不仅应根据业务开展的最小需要,在移动APP上合法合规地收集和使用个人信息还应做好用户隐私保护,因此研究APP用户隐私威胁行为管控的安全技术势在必行[2].当前,券商在APP个人信息保护实践中,普遍采用静态或受限动态分析的隐私合规检测方案[3],此类方案通常是在APP版本开发或发布前,或在APP运营阶段中定期进行,以此判断APP是否符合国家和行业的个人信息保护的监管要求,并根据检测发现的违规问题进行整改[4].然而,传统基于静态或受限动态分析的APP隐私合规检测技术存在明显的局限性[3],并不能完全保证券商APP满足个人隐私信息保护的合规要求,其中很大一部分原因是由APP所集成的第三方SDK存在不受控的隐私威胁行为所导致的[5-6].本文旨在研究Android安全沙箱技术,针对券商APP所集成的第三方SDK在APP运行态下可能发生的、违反业务必需原则的用户隐私威胁行为,实现对其持续全面地监测与管控.
本文在Android移动终端为券商APP设计并构造一种轻量、稳定的安全沙箱,形成安全容器,并针对在其内部运行的券商APP提供全面的API拦截能力,实现对APP中所集成的第三方SDK隐私威胁行为进行持续监测和管控.使用安全沙箱技术实现隐私威胁行为管控的移动端组件,简称为PTC(privacy threat control).为实现PTC沙箱的预期能力,需要设计并构造出能够在APP与Android系统之间实现稳定、全面API拦截能力的沙箱技术.当前移动终端上所有沙箱技术方案都建立在API拦截技术基础上,API拦截的稳定性和覆盖面会直接影响在沙箱中运行APP的稳定性.当前,基于系统分层框架,Android原生的API拦截技术主要有2类,分别是基于Java层API拦截的宿主沙箱技术和基于C层API拦截的底层沙箱技术,其技术架构如图1所示:
图1 宿主沙箱和底层沙箱的技术架构
宿主沙箱在应用层构建一个沙箱宿主应用,然后将其他受控APP应用运行在宿主沙箱中,与宿主沙箱使用相同UID并具有相同权限,宿主沙箱作为应用与Android系统之间的中间代理层,需要构建全部的系统服务,然后在应用与Android系统的交互过程中实现API拦截和对应的策略管控.该宿主沙箱存在安全性低、稳定性和使用体验差、不具备持续可扩展性等特点.底层沙箱工作在Android原生的应用隔离机制基础上,针对每个受控APP应用构建沙箱虚拟环境,在Framework框架层构建API拦截能力,并向上层进行扩展,以实现针对应用行为的全面监测和管控.底层沙箱技术在与Android系统保持一致的安全性,API拦截体系的轻量性、稳定性和持续有效性,以及对APP应用的兼容适配性等方面,相比宿主沙箱技术都具有较为明显的优势.综上,本文提出的PTC沙箱是基于底层沙箱技术.
PTC沙箱采用容器化的方式实现与所保护APP集成,在APP运行态下,实现对APP中第三方SDK可能发生的、违反业务必需原则的用户隐私威胁行为的持续监测与管控.
PTC沙箱使用的API拦截技术在Framework层构建,主要在Binder通信[7]的最底层,即Binder与内核通信的接口处实施API拦截,该接口具备唯一性,应用对Android系统所有服务的访问都会经由此处,在底层API拦截技术基础上,PTC沙箱还基于对Android Linker、ELF以及底层库内部结构实现自动寻址技术,用于准确定位底层库内部隐藏API实现的函数,提升和优化实施拦截的效果,从而保证完整的API拦截不遗漏[8-9].PTC沙箱具备API拦截能力之后,用于特定APP隐私威胁的监测和管控时,需先将APP进行容器化处理,可通过自动容器化或SDK集成方式完成.容器化过程为原始APP应用增加Loader引导器,该过程不改动应用原包,从而完成APP应用静态虚拟化.容器化APP应用的运行流程如图2所示:
图2 PTC容器化APP应用运行流程
容器化APP在安装启动后,首先进入Loader,开始初始化PTC沙箱虚拟环境,然后根据启用的功能加载对应的配置策略.环境准备完成后将原始APP应用引导进入PTC沙箱中运行,完全将运行空间交给APP应用.PTC沙箱只是在APP应用与系统交互时,依据功能对API访问行为进行监测和拦截,整个API流程与系统调用API流程保持一致,达到透明监测的效果.
2.2.1 Android应用权限类型
目前,有学者开始对Android应用的隐私权限进行了专门的安全研究[10].Android从6.0版本以后,为保护APP用户隐私,针对应用访问受限数据和执行受限操作定义了越来越严格的权限控制.Android将所有定义的应用权限划分为以下3类[11]:
1) 安装时权限.通常指普通权限,涵盖应用访问其沙盒外部数据或资源所需权限,对用户隐私或其他应用风险很小.这些权限在应用安装时被授予,运行时不再询问用户.例如:网络访问、WiFi状态、音量设置等.
2) 运行时权限.也称危险权限,涵盖应用需要访问涉及用户隐私的数据或资源,或可能对用户存储的数据或其他应用的操作产生影响所需权限.例如:读取通信录、读写存储器数据、获取位置信息等.如果应用声明需要这些危险权限,则必须在运行时明确告知用户,让用户手动确认授予.
3) 特殊权限.该权限与特定的应用操作相对应.只有平台和原始设备制造商(OEM)可以定义使用特殊权限.
2.2.2 隐私威胁行为类型
在券商APP的使用场景中,第三方SDK可能发生的隐私威胁行为主要包括以下3类,如表1所示:
表1 隐私威胁行为类型
以上3类隐私威胁行为对券商APP用户隐私具有很大的威胁.对非法的移动终端个人信息收集者而言,只有将个人信息外发才能产生价值,而热更新行为能够实现更加隐蔽的个人信息违规收集.另外超出券商APP隐私政策声明范围的个人信息违规采集行为也应当被监测和管控.
2.2.3 隐私威胁行为拦截
针对上述个人信息的违规采集和外发,以及热更新等隐私威胁行为,PTC沙箱通过构建对应的API拦截能力实现威胁行为的监测和管控,以下举例简述PTC沙箱对3类隐私威胁行为的拦截原理.
1) 读取通信录.
在访问通信录之前需要先检查是否存在此权限,而无论采用哪种形式来查询权限,其最终都会调用PermissionManager.checkPermission(),通过代理sPermissionCache即可截获所有的查询动作.若想拦截获取通信录的动作,则直接让checkPermission返回PERMISSION_DENIED即可.通过记录调用checkPermission的堆栈,可知哪个SDK想使用读取通信录权限.对于大多数SDK,采用上述拦截方式即可.可能存在少数SDK,不查询权限直接使用,即便可能导致APP应用崩溃,针对这类SDK,需要通过binder hook直接拦截通信录的query操作.
2) 通信外发.
网络通信接口的上层封装很多,但其根源主要包括以下3类:①H5应用会调用WebView的loadUrl方法;②Java层网络通信最终会调用Socket类的方法;③C/C++层会调用connect,read,write等.H5应用直接在Java层钩住(hook)WebView的方法,Java层网络通信在Java层hook Socket类即可.这2类拦截可根据堆栈中的Java包名,溯源第三方SDK来源.由于所有的网络通信(包括Java层)最终会调到C/C++层,且C/C++层通常会丢失Java堆栈信息,为避免无法区分触发网络通信的SDK的来源,还需要钩住connect.
3) 组件热更新[12].
当前Android广泛使用的组件热更新方法是动态加载so动态库,其原理为so库的shared object.可用于在已运行的APP程序中,动态加载一段代码.恶意SDK会在运行之后,去下载一段代码(其外在表现通常为so库)来执行.因此拦截恶意SDK的热更新必须要阻止其load so库的能力.具体而言,对Java层通过System.load或loadLibrary来加载so库,可钩住Runtime.nativeLoad(),并根据堆栈中的Java包名来溯源第三方SDK.对C/C++层通过dlopen来加载so库,直接钩住dlopen即可.由于所有load so都会调到C/C++层dlopen,但与网络通信类似,C/C++层通常会丢失Java堆栈信息,为避免无法区分触发热更新的SDK的来源,还需要钩住dlopen.
PTC沙箱基于沙箱本地策略对隐私威胁行为进行监测和管控.券商PTC策略可根据自身的APP隐私政策确定通过服务端策略管控平台向PTC沙箱下发.PTC策略包括检测策略和响应策略2类.检测策略主要包括个人信息违规采集、异常通信外发以及组件热更新3类,券商APP根据隐私政策定义隐私采集行为和通信外发行为2类白名单规则,基于白名单构建检测策略,具体而言,隐私采集行为白名单形式是业务必需的权限声明列表,通信外发行为白名单形式为业务必需的对外通信对端URL列表.PTC沙箱通过API拦截技术识别出券商APP应用发起的隐私采集行为和通信外发行为,并与PTC策略进行比对,符合PTC策略则透传API调用至Android系统,超出PTC策略白名单的行为则被认定为隐私威胁行为.此外,所有的组件热更新行为都被PTC沙箱认定为隐私威胁行为.响应策略是指控制PTC沙箱监测到隐私威胁行为之后作出何种响应处理动作的策略,具体包括2类:1)审计记录,即PTC沙箱不主动阻断APP隐私威胁行为,而只是对监测到的行为进行审计记录,并发送到策略管控平台,让券商清晰了解APP用户隐私威胁行为的发生态势;2)拦截阻断,即PTC沙箱主动对监测到的APP隐私威胁行为进行拦截阻断,可对用户隐私起到实质性保护作用,但也可能触发行为中断后的异常,进而影响用户体验.
为验证PTC沙箱的核心能力,本文设计开发了DemoAPP原型,并在可能的隐私威胁行为类型中选择5项典型的隐私威胁行为对PTC沙箱能力进行验证,这5项能力对应5种风险较高的隐私威胁行为,分别是:1)读取应用安装列表;2)读取通信录;3)读取短信内容;4)通信外发;5)组件热更新.
为简化实现过程,本文针对Android设计实现了2个DemoAPP:一个是策略管控APP,用于模拟策略管控平台向PTC沙箱下发指定的PTC策略;另一个是模拟业务APP,是一个以安全容器化方式集成了PTC沙箱的模拟券商业务的APP,用于呈现PTC沙箱的隐私威胁行为监测和管控能力.DemoAPP设计如图3所示:
图3 DemoAPP设计
策略管控APP实现以下PTC策略设置:1)可勾选定义PTC沙箱管控的隐私威胁行为类型;2)可配置白名单外联地址和非白名单外联地址;3)可配置PTC沙箱是否监测对应隐私威胁行为和监测后的响应策略.模拟业务APP通过手动触发隐私威胁行为,可呈现PTC沙箱对隐私威胁行为的监测和阻断效果.
将控制策略APP和模拟业务APP安装运行在同一个移动终端上,本文测试终端为小米9手机,运行Android 10系统.当策略管控APP将上述5种隐私威胁行为都界定为违规行为(即假设此5种行为都是隐私政策范围之外的行为,同时配置外联通信地址白名单和非白名单),并分别开启监控和阻断的响应策略时,其策略配置分别如图4所示.
图4 策略管控APP的策略配置
通过手动在模拟业务APP界面上触发隐私威胁行为,由于模拟业务APP已PTC容器化,且PTC沙箱接收了策略管控APP下发的PTC策略,上述5种隐私威胁行为均会被PTC沙箱监测到或强制阻断.为便于展示,以模拟业务APP上获取通信录为例,PTC沙箱的监控与阻断效果如图5所示:
图5 PTC沙箱的监控与阻断效果
DemoAPP的验证结果表明,PTC沙箱能够接收并执行针对典型的APP隐私威胁行为的监控和阻断策略,其关键能力得到了有效验证.
本文通过自动容器化方式将PTC沙箱与南京证券的金罗盘APP(如图6所示)进行集成,验证券商APP使用场景下PTC沙箱技术的兼容性和稳定性,以及对第三方SDK潜在隐私威胁行为进行监测和管控的有效性.
图6 金罗盘APP
为方便测试,将安全容器化后的某版本金罗盘APP安装运行在测试终端设备上,并且将PTC沙箱策略固化.根据金罗盘APP的隐私政策,梳理出所集成的第三方SDK功能与用途清单,并基于隐私合规要求,确定外联通信白名单和监测审计策略,重点监测第三方SDK的非白名单外联通信和组件热更新这2类高风险隐私威胁行为.实验测试表明,安全容器化后的某版本金罗盘APP在运行态下,仅检测到存在超出隐私政策范围的权限违规使用情况,违规使用的权限及其来源第三方SDK如表2所示:
表2 违规权限使用
本文通过技术研究和测试证实了Android平台PTC沙箱技术的可行性,能够实现针对券商APP运行态下可能发生的第三方SDK侵犯用户隐私的威胁行为的全面监测和管控能力,主要包括个人信息违规采集、违规外联通信以及组件热更新3类威胁行为,达到预期目标.基于APP隐私威胁行为的全面监测和管控能力可有效增强券商的个人信息保护能力,有效降低由第三方SDK隐私威胁行为导致的软件供应链风险,同时也对券商APP隐私合规检测能力进行了有效的扩展和增强.在技术实践上,PTC沙箱能切实提高证券经营机构的个人信息保护水平和隐私合规能力.