一、基本情况
论文题目 基于信息流的移动智能终端隐私保护关键技术研究
研究方向 移动智能终端隐私保护
题目来源
课题名称 国家重点研发计划-面向智能移动终端的用户个人隐私保护技术的研究
题目来源
课题层次 国家级 军队
(省部)级 市级 自选
(横向、校级) 有无合同 经费数
(万元)
√ 有 273
题目来源
课题性质 理论研究 应用基础
研究 应用与理论结合研究 开发性
研究 综合性工程项目 其它
√
课题进展情况
本课题按开题报告所预定的内容及进度顺利进行,课题进展情况正常。目前已经在开题文献阅读的基础上,对Android隐私保护与信息流分析技术进行了深入研究,挖掘出了信息流分析技术应用于隐私保护领域时存在的问题,并初步提出解决方案。
以保护用户隐私的现有相关技术作为切入点,经过分析得出基于信息流分析的隐私保护技术是目前最理想的解决方案。为了解决信息流分析面临的性能开销过大,跟踪逻辑部分与程序运行分离不彻底等问题,对信息流跟踪分析技术进行了深入研究,提出了基于有限自动机的轻量级信息流路径跟踪优化技术。以此为基础,已经具备了在路径的释放点处的实现初步信息流控制的条件。接下来,为了将用户的隐私保护落到实处,对信息流控制进行了深入研究,提出了一种基于细粒度跟踪优化的不可信组件分布式信息流控制技术,借助细粒度的静态信息流分析和插桩技术,在动态运行时实时调整安全标记,实现了对Android应用程序敏感信息流的实时控制。
解决问题的方法和已解决的主要问题 实现智能移动终端的隐私泄露检测与防护对于网络空间安全意义重大,前景可观。一方面,成型的隐私泄露检测与保护系统可广泛应用于政府机关、军队、企业等高安全需求人员相关的智能设备,为杜绝由使用终端的录音、摄像功能,使用移动应用软件及相关服务引起的各类信息泄露提供技术支持,满足相关领域对敏感数据保护的需求,保障信息安全,社会效益显著。另一方面,以部署到智能移动终端为目标,保护普通用户的安全隐私需求,研究成果具有良好的实用价值和推广意义,可有效弥补现有移动操作系统的不足,降低由于个人信息泄露和滥用带来的经济损失和潜在风险,引领移动应用市场与行业的健康发展,市场潜力巨大。
本课题以保护用户隐私的现有相关技术作为切入点,分析得出基于信息流分析的隐私保护技术是目前最理想的解决方案。针对Android应用程序的信息流分析技术对信息流的跟踪分析往往开销较大,对第三方组件的跟踪往往无法完成或粒度较粗,对复杂信息流难以分析。为了使信息流分析技术能够真正实际应用到用户的隐私信息保护中,针对现有相关研究中存在的亟待解决的问题,本课题进行了以下研究:
1.基于有限自动机的轻量级信息流路径跟踪优化技术
尽管在各种安全应用中动态污点分析(DTA)已被证明是有效的,但可用的DTA原型所实现的低性能影响了它们被生产系统广泛采用,尤其是计算和存储资源有限的Android系统。同时,由于DTA的低代码覆盖率,其误阴率也很高。
为了克服DTA性能开销的瓶颈,目前的研究工作旨在将污染跟踪逻辑与程序执行解耦。基于这一研究方向,这项工作提出了一种新型的混合污染跟踪和控制系统FSAFlow,以显著减少DTA开销,同时确保Android隐私保护的良好效果。在FSAFlow中,将路径跟踪逻辑与相应的污染跟踪逻辑进一步分离,并优化了信息流路径的控制。具体地说,首先实现了潜在敏感信息流路径的全程序静态搜索,并用关键节点序列对搜索到的路径进行抽象,从而在程序控制流图中高效、唯一地识别目标路径。然后,选择违反用户预定义隐私保护策略的潜在路径,并使用有限状态自动机(FSA)对这些路径的状态进行编码。在FSA的基础上,路径监控和控制的嵌入使用了轻量级的检测工具,将不受信任的程序转换为策略执行程序。最后,程序在FSAFlow的监控下运行,动态防止不符合策略的数据泄漏,并且可以输出完整路径进行取证,无需日志分析。
1.1 问题提出
本节通过提供InsecureBankv2的一段具体示例来说明一种典型的数据泄漏行为。以得出本项研究的出发点。InsecureBankv2由Paladion Inc.开发。此应用程序中故意保留一些安全漏洞,使其容易受到攻击,专门用于评估信息流分析工具的效率。并且,该程序设计的一些数据泄漏行为与实际应用中的基本相同。
图1.1显示了InsecureBankv2的代码片段。首先,在onCreate方法中,可以将data隐私数据的初始位置(第3行)视为敏感信息源。隐私信息最终流向log方法(第25行),该方法可视为敏感信息释放点。此代码在日志中打印,很容易发生泄漏,这显然是一个严重的隐私泄露问题。
图1.1 InsecureBankv2代码片段
众所周知,安卓系统目前无法防止此类信息泄露。Android的权限控制机制只决定应用程序可以根据用户的选择访问哪些源(如位置、麦克风、IMEI等)或释放点(如写入文件、发送到网络、发送消息等)。Android系统通常会给出“是否允许程序读取位置信息”等提示,但无法提供控制数据从源到释放点传播的机制,也无法提供“是否允许程序将位置信息写入文件”等信息流控制策略。信息流策略对于隐私保护非常重要。
由于商业利益或不受信任的第三方组件,一些热门的应用程序,如即时通讯、照相机和导航软件等,不仅使用隐私数据来完成正常功能,而且在不通知用户的情况下传播隐私数据。在这种情况下,需要对信息流进行跟踪和控制,以防止超出正常功能的泄漏路径。然而,目前的信息流分析和控制方法存在以下问题:
1)这种泄漏路径可以通过传统的静态地层流动跟踪和控制方法找到,但在log.d上采取何种控制措施尚不清楚。在图1中,有两条路径汇聚到该释放点。一条路径包含代码信息(从第19-20行开始的if-then路径),另一条路径不包含代码信息(从第21-22行开始的if-else路径)。log.d中没有运行时上下文信息。实际上,释放点通常包含来自源的多条路径。简单的禁止或许可将造成可用性或安全问题。
2)如果采用动态信息流跟踪和控制,可以提供动态上下文信息进行正确的控制。然而,主要问题是单步指令跟踪的运行开销过大。同时,尽管 DTA可以很容易地报告释放点泄漏了哪些敏感信息,但是一旦它不能保存所有信息流事件的日志,则很难输出完整路径作为证据。
为了解决这些问题,本研究提出了一种新的混合分析方法FSAFlow。核心是在运行时采用全局路径跟踪而不是微污染跟踪。同时,通过基于有限状态自动机的最优状态管理实现路径监控,保证了运行时信息流跟踪的效率。路径的状态为控制提供上下文信息,并确保控制的准确性。静态分析阶段实现了对高覆盖路径的全面搜索。此外,FSAFlow不需要审核泄漏分析的所有执行。相反,由于它根据路径跟踪流量,可以直接输出完整的泄漏路径作为证据。
1.2 系统整体架构
FSAFlow由云服务器和移动客户端组成,FSAFlow的工作流程如图2所示。首先,用户可以使用客户端为手机上的任何应用程序自定义信息流策略。通过管理从源到释放点的信息流路径,用户可以获得定制的隐私策略,例如位置信息是否可以通过网络发送或写入本地文件。然后,将个人信息流策略文件与要处理的相应APK文件一起上传到云服务器。
在服务器端,FSAFlow根据上传的信息流策略执行静态分析和检测处理。在静态分析阶段,将考虑所有潜在路径,并控制违反策略的路径。同时,在该阶段记录这些路径的关键节点信息。在静态检测阶段,对受监控路径的重要节点进行检测,以实现有效的路径状态管理。然后,重新打包插入指令的代码以生成新的APK文件并发送回客户端。基于此,安全增强的应用程序将在用户的手机上高效运行和监控。
图1.2 FSAFlow工作流程
1.3 静态分析
静态分析阶段旨在有效地搜索整个程序,并标记潜在的敏感信息泄漏路径。由于分支跳转是区分不同路径的关键节点,因此将记录路径上分支节点的上下文。监测点主要安装在分支机构上。此外,函数调用和返回的上下文将被记录为辅助信息,用于在检测阶段定位分支的函数体。
FSAFlow的静态分析部分是通过修改经典的IFDS框架和FlowDroid工具实现的。许多静态分析问题,包括污点分析、指针分析、活动变量和常量传播,都可以通过IFDS使用特殊的图可达性算法来解决。
IFDS问题由一个元组(G#, D, F, M, )表示, 其中G#= (N#, E#)称为过程间控制流图(ICFG),提供了程序的有向超图表示。每个n N# 对应于程序的一个语句,每个语句(n1,n2) E#表示语句n2是语句n1的直接后继语句。D是一组有限的信息流事实集,表示被污染的变量。F ⊆ 2D→2D是信息流函数集。流函数定义语句对一组流事实的影响。例如,语句s: x = y与将一个事实集{y}(即,y被污染)映射到一个事实集{x,y}(x和y都被污染)的流函数相关,可以表示为{x,y}=fs({y})。M: E#→F是从G#的边到流函数的映射,以及满足污染分析并运算。
G#由一些流图{G1,G2,…}的集合组成(每个函数一个)。函数p的流图Gp由唯一的开始节点sp、唯一的结束节点ep和表示p中语句和谓词的剩余节点组成。在G#中,调用函数q的语句m由两个节点表示,一个call节点cm和一个return-site节点rm。三条边用于连接m和q:从cm到rm的call-to-return边,从cm到sq的call-to-start边,从eq到rm 的exit-to-return边。
为了将静态分析问题转化为图的可达性问题,将G#扩展为超图G*=(N*,E*),其中N* = N#× (D∪∅) 和E*={<u, dx> →<v, dy> | (u, v)∈E#, dy∈fu(dx) }。例如,如果y在n1之前被污染,则(n1: x=y → n2: z=x) ∈E#可以扩展到{(<n1,y>→ <n2, y>, <n1,x>→ <n2, y>)} ∈ E*。注意∅表示一组事实的空集。
基于流函数的定义,IFDS算法从源语句执行ICFG的宽度优先遍历,并在E中搜索以释放点语句结尾的所有路径。因此,如果G 中存在从节点<n0: y=source(), ∅>到节点<nfinal: sink(x),z>的路径,则路径上节点对应的语句序列构成了从源到释放点的信息流路径。
FSAFlow继续将G扩展到G=(N,E),其中N= N×string和E^={<u, dx, PFSA >→<v, dy, P’FSA> | (u, v)∈E*, dy∈fu(dx)}。PFSA记录目前为止用于识别路径的关键信息,包括分支语句和调用/返回语句的上下文等。同时执行搜索和记录。具体的静态分析如算法1-1所示。
算法1-1 静态分析
1: Input: G#=(N#, E#) //the interprocedural CFG of the program
2: Input: Sourcelist, Sinklist //the lists of Sources and Sinks
3: Output: PFSA //a path identified by key node sequence
4: Set SourceStatements= G#.searchStatement(Sourcelist)
5: for each sourcestmtSourceStatements do
6: PFSA=SourceTag+[sourcestmt, di] // di=sourcestmt();
7: Worklist.enQueue ([<-, ∅>→<source, di>, PFSA])
8: PathEdge.clearQueue( )
9: sn=0
10: while worklist≠null do
11: e:(<sp,d1>→ <n,d2>, PFSA)= Worklist.deQueue();
12: if e PathEdge
13: continue;
14: PathEdge.enQueue(e);
15: Switch(n)
16: case G#.isSinkstatement (n):
17: PFSA+= SinkTag+[ sn++;n; d2]
18: output PFSA
19: case G#.isCallstatement (n):
20: endSums=Summaryhash.get([G#.getCalleeMethod(n), d2])
21: If endSums≠null
22: for each ( <n,d2>→<returnsite(n), d3>,PartFSA) endSums do
23: Worklist.enQueue([<n,d2>→<returnsite(n), d3>,PFSA+PartFSA])
24: Else
25: for each ( <n,d2>→<scallee(n), d3>,PFSA)E^ do
26: PFSA += CallTag+[n; scallee(n)]
27: Worklist.enQueue([ <n,d2>→<scallee(n), d3>,PFSA])
28: case G#.isExitstatement(n):
29: PFSA += CallreturnTag+[n; returnsite(n)]
30: PartFSA = PFSA.Substring(PFSA.lastIndexof(G#.getMethodOf(n));
31: Summaryhash.put(G#.getMethodOf(n),[<sp,d1>→<n,d2>, PartFSA])
32: for each (<n,d2>→<returnsite(n), d3>,PFSA) E^do
33: Worklist.enQueue ([<n,d2>→<ret