少女祈祷中...

一些概念

  • 逻辑炸弹:一种在满足特定条件下才会触发的恶意行为。例:管理财务数据的员工在代码中加入如下规则:如果连续3个月没有在工资表中检测到自己的姓名,则删除数据库中的所有数据。
  • SHSO:Suspicious Hidden Sensitive Operations 可疑的隐性敏感操作,HSO:隐性敏感操作
    • 区分:HSO可以不是故意的,也可以不是恶意的,而逻辑炸弹必然如此。e.g. 导航程序检测用户位置信息是合法的敏感操作
    • SHSO: 可疑的HSO(e.g. 上例中的导航程序若换为计算器,则它是可疑的)
    • 以往研究表明,应用程序中HSO的数量可能很大,因此检测“可能成为逻辑炸弹”的SHSO才是研究的目的。
fig1

更正式的定义:

Σ\Sigma为函数的语句集, CC为一个条件语句, π\pi 为语句的谓词

  • 触发器: τ=(c,Tc,Φc)\tau = (c,T_c,\Phi_c) TcT_c 为真分支(当且仅当 π\pi 为真时执行的语句块),Φc\Phi_c 为假分支
  • 触发器入口点:上述的条件语句cc 即为入口点
  • HSO:对于一个触发器η\eta ,当TcT_c or Φc\Phi_c中含有敏感行为SΣS \in \Sigma时,视为HSO
  • SHSO:当HSO所包含的敏感行为疑似不合法时为SHSO
  • logic bomb: 若SHSO包含的敏感行为确实是恶意的,则为逻辑炸弹
逻辑炸弹示例

例:从真实程序中提取的逻辑炸弹代码,触发条件被拆分为m,m1,m2,实际触发行为第3行,并进行了模拟器规避(7-9行)

logic bomb 检测的难点?

  • 恶意软件编写者可以通过代码混淆(将代码转换成相同功能但难以阅读和理解的形式)来躲过静态分析

  • 对于动态分析,编写者可以预设一些测试过程中难以触发的条件,以躲避检测(例如触发条件为[某个环境变量满足特定值]的逻辑炸弹,由于测试环境通常返回环境变量的默认值,因此无法触发)

  • 缺乏对恶意行为的正式定义,导致检测者无法通过明确的规则/模型进行检测

Difuzer: 一种混合方法,用以揭露SHSOs,从而改善对逻辑炸弹的检测

  • 结合静态分析和异常检测技术
  • 使用一个工具引擎和程序间数据流分析来识别SHSO的触发口
  • 提取特定的触发器特征,来描述SHSO
  • 利用One-Class SVM 实现一个无监督模型,以检测异常触发器

污点分析

一种数据流分析,跟踪程序中特定值的污点。当一个变量V从被称为source 源的特定函数中获得值时,它就被污损了。如果其他变量收到V中的值的派生,则污点会传播到其它变量。如果一个有污点的变量被用作称为sink 汇 的函数的参数,表明source派生值可以用作sink的参数,source->sink过程称为flow 流.本文利用污点分析检查表达式是否涉及敏感数据。

异常检测

分析同一类的数据时,如果几个值与大多数值由显著不同,则被叫做异常值。本文利用One-Class SVM实现这种异常值检测。异常通过代表触发器的向量的距离进行计算。

Difuzer 流程

fig2
  1. 确定SHSO候选的入口点
  • Systematic Study
tab1

一般地,是否触发SHSO的决定由系统属性做出*, 故作者对Android SDK ver3-30进行了系统的映射,以得到一个全面的敏感源列表(上表为列表内容的大致分类),并从访问这些属性的不同方法中提取模式,利用这些模式自动化地发现源

  • Instumentation

污点分析包括一个数据流算法,该算法将污点从源转移到汇。由于源、汇都属于方法调用,而作为SHSO触发入口的if语句不是方法调用,所以if语句不能被视为一个汇,导致无法找到一个完整的流。故工具化(?过程会创建一些新的、静态的方法调用,并在流程结束时将这些新生成的方法作为FlowDroid的源和汇。

  • 污点分析

使用一个流行的追踪敏感信息的污点分析框架FlowDroid,它的输入为方法层面的源与汇。将条件语句和字段访问转化为方法调用的步骤已经在前两步完成,输出为触发器的入口点(条件语句)

  1. 异常检测
  • Features Extraction & Training

实现了OC-SVM算法,模型输入为先前获得的入口点对应的触发器计算得来的特征向量,输出为是否为异常触发器,训练集为10000个被标记为正常的特征向量。