耿浩天
(四川大学网络空间安全学院,成都 610065)
随着各种移动设备技术的发展,智能手机已经越来越成为人们生活不可或缺的一部分。其中,Android 平台由于其开放性和生态圈的多样性,占据了智能手机市场上的最大份额。然而,开放性在吸引用户和开发者的同时也吸引着恶意攻击者。根据奇安信平台的一份报告,仅2020年奇安信威胁情报中心就累计截获Android 平台新增恶意程序样本230 万个,平均每天截获新增恶意程序样本6301个。
为了减轻Android 恶意软件的威胁,基于动静态分析结合的自动化检测技术成为了主要解决方案。传统的静态分析技术应对复杂的代码逻辑时效率有限,同时也易受到混淆加壳等技术的影响。而动态分析则可以跳过代码逻辑,捕捉代码运行时的恶意行为。动静态结合的自动化检测平台极大提高了恶意软件检测的效率和准确性。
然而,攻击者也采用了许多手段试图规避自动化检测平台的动态分析。在早期,由于自动化分析平台大多部署在原生Android 模拟器上,攻击者可以利用大量的模拟器检测技术来规避动态分析。这些技术通常包括运行时对环境进行指纹识别,以及寻找可区分物理设备与模拟器的某些特征。对此,安全分析人员提出了相应对策来破坏模拟器检测的依据,包括在模拟器上做更真实的仿真,以及直接使用物理设备。这些对策可以有效地限制反模拟器类型的动态分析规避技术。当然,动态分析和规避之间的对抗仍在继续进行。Diao等提出了一种抗交互的规避技术,成功规避了多个分析平台的动态分析;Costamagna 等提出了一种基于沙箱特有指纹的规避方案,对特定分析平台有很好的规避效果;梁光辉等提出了一种基于代码进化的沙箱规避检测技术,可以有效地检测出恶意软件是否有动态分析规避行为。
在本文中,我们提出了一种基于操作时设备状态的变化信息来规避动态分析的方法。该方法通过记录Android 软件在操作(如点击、滑动等)时加速度传感器数据变化情况,使用时间序列分析中的平稳性检验来处理传感器数据,判断当前软件操作行为是否来自真实用户,进而实现动态分析的规避。与已有的规避方案相比,该方法不依赖运行的设备,可以对抗非常精细的仿真方案,对基于模拟器或物理设备组成的分析平台均有良好的效果。我们使用该方案编写了测试样本,对多个自动化分析平台进行了测试,初步结果可以证明:几乎所有测试的平台都不能抵御我们的规避方案。
本文的主要贡献概括如下:
(1)提出了一种规避Android 自动化分析平台的动态分析新方法:基于操作时设备状态的变化。该方法从新的角度出发,简单易实现且效果较好。
(2)设计了测试样本,并在常用的一些Android 自动化分析平台上进行了测试。实验结果证明该方法非常有效。
静态分析工具往往通过检查程序的源代码或二进制代码以识别恶意负载,具有分析成本较低、分析速度较快等优势,但是当恶意软件使用混淆或打包技术时,往往会使静态分析的准确度大大降低。如许博文的工作所示,常见的Android 混淆技术就可以使恶意软件以高成功率逃脱静态分析工具。而动态分析框架通过执行程序来捕获运行时的恶意行为,这使得动态分析对代码级规避技术有较强的抵抗性,面对程序逻辑复杂的恶意软件也有很好的效果。
Android 动态分析框架通常搭建在模拟器或真机上,以便运行软件对恶意行为进行捕获。由于Android 应用程序的行为通常由用户或系统的输入来启动,因此动态分析框架的有效性高度依赖于输入生成的策略。早期一些动态分析框架使用谷歌公司提供的fuzzrer Monkey工具,它可以生成伪随机的用户事件流(如点击触摸等)及系统级事件(如短信)。但是此种方式的事件输入对程序行为的触发效果一般。因此其他一些分析平台采用谷歌公司开发的MonkeyRunner 探索工具,使得测试平台能以预定义的事件序列与应用程序交互,提升了代码覆盖率。另外,在自动化UI 交互过程中,如果完全不考虑正在分析的软件UI 的独特性,可能会触发大量无效操作。为了解决这个问题,Smart-Droid、AppsPlayground、CuriousDroid分别提出了不同的方法来提高UI 交互的自动能力。
1.2.1 模拟器检测技术及其防御措施
大多数早期Android 自动化分析平台是基于模拟器搭建的,如cuckoodroid 等。这样做的好处是沙箱部署起来简单经济,且在模拟器上恶意软件的行为更容易控制。然而,简单地使用模拟器会使攻击者利用模拟器检测技术很容易就可以绕过沙箱的动态分析。Vidas 等总结了一些常见的通过模拟器检测的手段绕过Android沙箱的技术,如传感器、蓝牙等硬件信息,以及对较复杂指令的处理速度等。Gajrani 等对部分模拟器检测的技术进行了进一步整理和细化,总结了多处安卓模拟器与真机可能存在的区别,并对多个分析平台进行了测试。此外,由于Android 模拟器检测的需求不仅在于恶意软件对动态分析的规避,在诸如手机游戏多开、外设检测部分也有着相当程度的需要,因此对模拟器检测的研究也一直在持续中。有研究者对模拟器检测的方案做了集成样本app,可以直接用来检测各个模拟器的反检测能力,且仍在不断更新。
当然,对于模拟器检测的种种方案,研究者也找到了许多对策来抵消或减轻这些方案的效果。Gajrani 等对模拟器检测常用的检测特征进行了修改,或使用hook 技术返回给软件虚拟的更贴近真实情况的值。Leguesse 等提出了一种沙箱强化的方案,实现了名为Androneo的系统,可以识别Android 恶意软件中的沙箱检测功能,并更改和禁用其功能,以便沙箱可顺利检测恶意行为。市面上,夜神、逍遥等模拟器也已经对绝大多数检测特征进行了仿真,并随着检测技术的发展而不断补充。Kumar 等部署了一系列基于传感器、设备状态及系统信息的Android 模拟环境,尤其在传感器数据方面,收集了真实用户使用手机时传感器的数据变化情况,整合为模拟数据注入模拟环境中。该文章的工作可以解决绝大部分模拟器检测技术的防御问题。
另一方面,使用物理设备搭建分析框架可以从根本上解决模拟器检测问题。例如,Vidas等部署了名为A5 的混合检测系统,其中结合了Android设备的虚拟和物理环境。Mutti等建立了名为BareDroid 的分析系统,该系统完全建立在真实的Android 设备上,并使用了快速恢复等技术来降低性能成本。
由于以上反检测技术的存在,基于模拟器检测的动态分析规避方案已经很难再取得稳定的效果。因此,恶意软件作者也将目光转移到了其他层面的技术上。
1.2.2 其他规避技术
针对自动化分析框架对软件行为触发的特点,Diao等提出了一种通过交互检测的方式来规避分析的方案。简单地说,他们通过检测注入事件的主体是否为人类用户来决定是否触发恶意行为。其研究显示,通过检测某些用户事件带来的附加数据的值,或通过设置UI陷阱(例如,一个透明的按钮)来检验事件输入的来源,均可以达到判断软件当下运行环境的目的。文中对多个检测平台进行了测试,在所有的平台中都可以成功规避分析。
Costamagna 等则提出了新的规避分析方式,他们通过沙箱指纹进行分析。这里的沙箱指纹指的是某分析平台所特有的信息。例如,某沙箱搭载在真实设备上,同时设置了如通讯录、短信、常见应用安装等信息来模拟真实环境,但只要该沙箱搭载过程中这些信息中存在明显非真实用户产生的信息(如联系人名称为张三、李四)或为固定值或非完全随机,攻击者即可发送大量探测应用程序来提取该沙箱指纹并为该沙箱构建通用规避方案。文章对多个沙箱进行了实验,结果证实大多数沙箱都存在被此种方案攻击的缺陷。
大部分当下使用的Android 分析平台已经可以避免被模拟器检测的方式规避动态分析。基于交互的检测效果虽然较好,但实现方案较为复杂,且有一定的失败率。而基于沙箱指纹的规避技术可以被完全随机生成信息的方式有效防御。
本文提出的动态分析规避方案主要基于操作时设备状态的变化。首先通过收集操作设备时线性加速度传感器数据,重点关注在操作动作较大(如点击一个按钮)时的一个较短时间段内传感器数据变化情况,通过对该时间段内传感器数据做平稳性检验来判断操作是否来自于真实用户,再决定恶意行为的触发与否。与上述方法相比,本文提出的方案不依赖运行设备,容易实现且成功率较高。
为了可以准确地通过传感器数据判断设备状态,本文引入了应用统计学中的时间序列分析的部分内容。时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。生活中时间序列的例子很多,如一个公司几年中每月的缴税额,一个地区每日的平均气温等。常用时间序列模型有自回归(AR)模型、滑动平均(MA)模型、自回归滑动平均(ARMA)模型等。
为了使用时间序列来有效预测未来一段时间数据变化的趋势,首先要对时间序列进行平稳性检验。所谓时间序列平稳,是指该序列基本不存在某种变化趋势,序列中的观察值基本在某个固定的水平上波动,在不同时间波动程度可能不同,但并不存在某种规律,其波动可以看作是随机的。图1展示了某平稳时间序列和某不平稳时间序列的数据图形。容易看出,图中下方曲线在后半段有明显的递增趋势,故可简单判断其时间序列不平稳。
图1 不同时间序列对比
平稳性检验的一个直观方法是观察法。然而,并非所有时间序列的图像都如上图一般容易区分。严格的统计学检验方法是单位根检验法。单位根检验方式有ADF 检验、PP 检验、NP检验等。最常用的是ADF 检验。在ADF 检验中,如果存在单位根,则序列不平稳。因此,ADF 检验的H0 假设即为存在单位根。使用ADF检验可以计算出时间序列的显著性检验统计量(通常称为p-value),如果得到p-value值小于三个置信度(10%,5%,1%),则对应有(90%,95%,99%)的把握来拒绝原假设。
Android 系统提供了多种传感器供应用层调用。其中,加速度传感器(G-sensor)、重力传感器(GV-sensor)和线性加速度传感器(LA-sensor)共用一套坐标系统,如图2所示(三维坐标图)。
图2 传感器坐标系
当设备处于图示屏幕方向时,轴为水平坐标轴,轴为竖直坐标轴,轴为垂直于屏幕方向的坐标轴。加速度传感器返回,,三轴加速度值,包含重力影响;重力传感器输出重力数据;线性加速度传感器反映加速度传感器减去重力影响获取的数据。因此,当设备静止时,线性加速度传感器的返回值近似为0。为获得直观准确的数据,本文采取线性加速度传感器进行采样。
在Android 系统中调用传感器十分方便,只需先给Activity实现SensorEventListener 接口,以便于后续持续监听数据,然后创建SensorManager对象并为它注册传感器监听器即可使用。同时,Android 系统规定了四种采样频率,由慢至快依 次 为SENSOR_DELAY_NOMAL、 SENSOR_DELAY_UI、SENSOR_DELAY_GAME、SENSOR_DELAY_FASTEST。为保证采集数据的数量能够满足后文统计算法的要求,本文采用采样速度适中的SENSOR_DELAY_UI 级别,约每秒采样20次。
我们注意到,无论是基于真实设备还是基于模拟器的自动化分析框架,其对软件的输入方式都与真实用户与软件的交互方式有一处不同:真实用户在执行点击或滑动等操作时往往会使设备产生一段较大程度的晃动,而自动化分析框架的传感器或物理设备均是处于静态,且在执行操作时也不会带来设备的物理状态变化。以点击一枚位置靠上的按钮为例(如图3)。
图3 点击示例
图4显示了在用户持握手机2 秒左右时间内共40个轴线性加速度传感器数据的变化情况,从图4可以看出,仅持握状态下由于人手轻微抖动等原因,加速度值一直在变化,但总体表现较为稳定,ADF检验结果也为平稳。
图4 X轴线性加速度传感器数据变化
图5显示了持握一段时间后点击该按钮,以点击时刻为截至时刻,向前共计40 个X 轴线性加速度传感器数据的变化情况。由图5 可以看出,用户在点击该按钮前的一小段时间,传感器数据产生了较大波动, ADF 检验结果也为不平稳。这是由于手机的形状和按钮的位置影响,为了点击按钮必然使手机向一侧倾斜,导致了上述现象。而分析平台的设备,往往只进行了简单的传感器数据模拟,即使如较高级的仿真技术,将模拟真实的可变传感器数值注入分析平台的设备中,传感器数值也只能模拟常规的设备使用状态,不能做到在点击按钮的时刻产生相应的波动,其传感器数据变化情况应与真实用户在仅手持状态类似。
图5 存在点击操作的X轴线性加速度传感器数据变化
因此,本文针对这点来实现对自动化动态分析的规避。以点击界面按钮为例,首先通过监听线性加速度传感器采集手机加速度数据,在点击按钮的时刻停止记录,由于点击按钮带来的设备抖动,手机加速度数据必然会有一段较大波动,而自动化测试工具则不会导致这种变化;取最后40 个加速度数据值,使用ADF 算法计算采集的传感器数据,如果数据平稳则判断为自动化测试平台,反之则判断为真实用户;最后通过判断结果来决定要继续表现的行为。
为了检验本文的动态分析规避方案是否有效,本文设计了一款名为Devil 的恶意样本。该样本会读取手机通讯录及短信,并上传至指定服务器,该行为模拟恶意软件窃取用户信息。同时,我们在复制的Devil 样本上搭载了本文的动态分析规避方案,命名为HideDevil。HideDevil 加入了一个初始页面,如图3 所示,在该页面设有一个位置靠上的按钮,通过对按钮的点击确定当前是否为真实用户在使用。若是,则继续表现恶意行为;若不是,则隐藏恶意行为。
本文共设计两个实验。第一个实验用来验证该方案能否准确地判断真实用户。我们使用测试样本,针对现实生活中常见的四种使用手机的方式(置于桌面使用、坐姿手持使用、站姿手持使用和行走手持使用)进行了多次实验。该实验使用华为荣耀v9手机作为实验设备。第二个实验用来检验该方案能否有效规避常见分析平台的动态分析,即将Devil样本和HideDevil样本分别投入分析框架进行检测。我们对常用的几个线上分析平台和线下分析框架进行了测试。
表1和表2 分别为实验一和实验二的结果展示。
表1 实验一的结果
表2 实验二的结果
由实验一的结果可以看出,本文方案在坐姿手持使用、站姿手持使用和行走手持使用时均可准确检测出真实用户;在放置桌面使用时则有多次认为运行环境是分析框架。这个现象的原因在于,放置桌面使用时,若用户的点击动作不是很重,手机不会有太大的晃动,此时ADF 算法计算传感器数据可能为平稳,因此样本会判定运行环境为分析框架。然而,我们认为这种错误判断几乎不会造成影响,因为一个软件几乎不可能只使用一次,也几乎不可能每次使用时用户都恰好将其置于桌面使用。因此对于大多数恶意行为而言,仍可以在其他使用方式时达成其目的。换言之,恶意软件的作者使用这种方式来规避动态分析仍然是可行的,不会影响其恶意行为的最终实现。
由实验二的结果可以看出,所有测试平台均可检测出Devil 样本的恶意行为,同时均不能检测出HideDevil 样本的恶意行为。即对本文采用的测试平台,本文的规避方案均可成功规避它们的动态分析。
本文提出了一种新的规避Android 自动化分析平台动态分析的方法,这种方法基于使用设备时设备状态的变化,初步的实验证明,相比于已有的多种规避方案,该方案在规避效果和使用难易程度上均有一定优势。我们认为Android 自动化分析平台在方便、高效率分析的同时,仍可进一步研究缩小自动化操作与用户操作的微小区别,以提高检测的准确性。
另外,本文规避方案的局限性如下:由于本文规避方案是基于设备状态的变化,因此使用本文规避方案的恶意软件只能是针对日常手机用户的恶意软件,而目标设备本就为固定设备(如服务器木马)等类型的恶意软件无法使用本文规避方案。