在2016年发生了许多与勒索软件有关的安全事件,而现在越来越多的网络犯罪分子会通过勒索软件来获取大量的非法收益。除此之外,“勒索软件即服务”在暗网市场中似乎也成了一种新的潮流。更加恐怖的是,2017年将会成为勒索软件爆发的一年。因此,我们如何才能更好地保护自己的安全呢?
既然我们已经知道了攻击者可以做什么,那么我们将在这篇文章中讨论移动端勒索软件的检测和缓解思路。我们希望能够将这些技术方面的内容与安全研究人员共同分享,并且提升安全行业对移动端勒索软件的理解。
为了设计和实现更加高效的移动端勒索软件检测/缓解技术,我们必须从移动端勒索软件的技术细节入手。毫无疑问的是,勒索软件的恶意功能肯定会在其实现代码中有所体现。因此,我们准备利用静态分析技术以及一些其他的小技巧来对移动端勒索软件进行分析和探究。
典型的“威胁信息”(Threatening text)会写得非常明确,用户一看就会知道自己正在面对的是什么,而且这些信息往往都会告诉目标用户如何去支付赎金。因此,我们可以通过机器学习算法来对“正常信息”和“威胁信息”进行自动化分类,并以此来检测移动设备是否感染了勒索软件。我们需要对分类器进行一些简单的训练,首先要移除掉勒索信息样本中的一些类似“the”、“at”和“an”这样的介词,然后将类似“locked”这样的动词过去式/完成时转换为其动词原形“lock”。我们用一些典型的威胁信息样本和普通的文本信息来训练分类器,这样就可以让分类器学会区分出哪些是不安全的消息了。
勒索软件目前所使用的信息锁定技术都是已知的,所以我们可以通过轻量级的符号执行技术来检测勒索软件的恶意活动。首先,我们可以搜索App中android.app.Activity的所有子类,并且找出所有重写了onKeyUp和onkeyDown方法的字节码。接下来,我们可以模拟执行这些方法中的代码来查看其代码路径是否锁定了手机的home键或返回键(下图中的蓝色箭头所示),如果方法的返回值为“true”(如红色箭头所示),则表明点击事件不会得到进一步的处理。这也就意味着,被感染手机中的其他应用将不会被推送至手机前台,包括手机原本的主屏launcher在内。
为了利用设备的管理员API,应用程序需要在其manifest文件中声明相应的权限。但是攻击者可以单独定一个“策略”文件,恶意App可以直接引用这个文件来获取到管理员权限(root)。因此,我们可以通过检测设备中的一些危险行为(例如重置密码、强制锁定、擦除数据和存储加密等),来识别出一些不需要用户交互的恶意方法。
在这里,我们使用了一款自定义版的FlowDroid来对勒索软件的字节码进行静态分析。首先我们要了解勒索软件App中所有方法的控制流程,我们打算先寻找调用lockNow()的方法以及一些其他的恶意方法。我们找出了所有调用了Java反射API的方法,但是相应的方法代码都是经过混淆处理的。当我们识别出了这些方法名之后,我们就可以将这些方法添加进控制流程图中的节点了。如果方法名称经过了混淆处理,那么我们要先找到保存有这个方法名(已混淆)的String对象,然后利用反射机制来重新执行方法中的所有声明语句,直到我们运行到invoke()方法为止。这样一来,我们便能够画出勒索软件大致的控制流程图了。
我们还尝试利用同样的方法来对其他的一些感染实例进行了检测。更加确切地说,我们想测试一下这项技术能否适用于各种场景。
同样的,我们还是使用FlowDroid来进行流程分析,比如说,我们现在准备分析listFiles()方法到CipheroutputStream()方法之间的代码处理流程。我们需要找出那些并非由主屏launcher所启动的代码路径,因为这些代码路径所指向的功能是不需要任何的用户交互就可以直接激活的。
不幸的是,整个检测过程需要消耗大量的时间。如果使用机器学习方法,我们就可以对App进行预过滤处理,这样就可以提升我们的检测精度,而且也非常的安全。更加重要的是,基于机器学习的检测方法可以大大减少我们的检测时间。
趋势科技(TrendMicro)一直都在致力于研发这种先进的研究技术,这些技术可以帮助研究人员快速检测到新型的勒索软件变种,并且为终端用户提供可靠的安全保护。对于客户来说,可以使用趋势科技的移动端安全解决方案【 传送门 】,它可以帮助用户更好地抵御恶意软件所带来的威胁。