Android恶意软件模拟器检测技术
Android恶意软件模拟器检测技术
前言
本报告由SophosLabs实验室的Android安全专家陈宇撰写,同时得到了Android团队中的William Lee、Jagadeesh Chandraiah以及Ferenc László Nagy等成员的协助。
Android恶意软件的数量不断攀升,紧随其后的是它们在Windows平台上应用的技术,这些技术旨在规避模拟器检测。本文将介绍几种模拟器检测的方法。
模拟器是一种工具,它能让一台电脑(即主机)模仿另一台电脑(即客户机)的硬件或软件功能。通常情况下,主机系统可以通过模拟器来运行软件或借助外部设备来模拟客户机系统的操作。在安全保障方面,模拟器便于检测恶意软件的行为,这也是为什么恶意软件的开发者往往不愿意在模拟器上运行其软件。
模拟器检测技术已在众多Android恶意软件系列中得到应用,其中最新的一款是在Google Play平台被发现的专门加载广告的Android恶意软件。
因此,SophosLabs实验室揭示的包括以下六种常见模拟器检测方法:
1. 检测手机服务信息
确保模拟器检测的有效性,核心在于识别模拟器与实际手机在运行环境上的不同。首先,模拟器所显示的设备标识符、手机号码、国际移动设备身份码以及国际移动用户识别码,均与实际手机设备存在差异。
Android系统的TelephonyManager类提供了获取设备信息的相关功能。开发者可以利用该类中的方法来检测手机服务及状态,查询运营商信息,并注册监听器以接收手机状态变化的提醒。比如,通过getLine1Number方法,可以获取到卡1上的手机号码信息。在模拟器界面中,该数字序列将呈现为“1555521”,紧随其后的是模拟器的端口号。比如,若模拟器的端口号为5554,那么显示的结果将是1555521,后面紧接着5554。
Andr/RuSms-AT使用下面这种代码用于检测模拟器:
2. 检测制造商信息
我们注意到众多恶意软件家族会依据制造商信息来判定其是否在模拟器内运行。以一款银行类恶意软件为例恶意软件检测,其采用了以下检测模拟器的代码:
其中的字符串被加密了,解密后的内容如下:
该程序方法由广播接收器触发执行。在应用程序的manifest文件中,该接收器被设定为响应android.intent.action.BOOT_COMPLETED以及android.intent.action.SCREEN_ON两种事件。因此,它会在设备开机或从休眠状态唤醒后自动启动。恶意软件通常在此处触发其恶意活动。然而,当检测函数在模拟器中返回true值时Android恶意软件模拟器检测技术,该恶意软件却选择不采取任何行动恶意软件检测,具体表现如下:
3. 检测系统属性
此外,还有一种途径是检查系统特性。在模拟器中,部分系统特性与实际设备存在差异,比如设备制造商、硬件配置以及型号。以下表格详细列出了模拟器中若干系统特性的具体数值:
4. 检测模拟器相关文件
这是一种不同于以往的技术,常被应用于恶意软件样本之中。它能够识别QEMU(快速模拟器)或其他模拟器相关文件的存续状态。例如,在Andr/Pornclk变种中,我们便发现了这样的代码片段。
5. 检测调试器和安装器
此方法并非专为检测模拟器而设计,但其核心目标同样在于防范动态分析。例如,某款欺诈性质的广告软件便利用了Debug.isDebuggerConnected()和Debug.waitingForDebugger()函数来探测调试器的存在与否。更有趣的是,它还通过获取安装器的包名来确认是否是通过Google Play进行安装的(即com.android.vending)。因此,正如大多数逆向分析者所知,如果你使用adb将应用程序安装到设备上,那么该应用程序将无法运行。
6. 时间炸弹
以下是一种不同的手段,众多恶意软件或广告软件便通过这一手段在遭受动态分析时将自己隐藏起来。一旦安装完成Android恶意软件模拟器检测技术,它们会延迟至设定的时间点再启动相应的Activities。以一款恶意广告软件为例,其中便存在如下的配置文件:
"settings"字段中包含了以下参数:广告延迟时间为180000毫秒,首次广告延迟为86400000毫秒,解锁延迟为2秒,横幅广告延迟时间为180000毫秒,横幅广告预延迟时间为10000毫秒,每天展示的横幅广告数量为25条。
第一条广告送达至用户终端的延迟时间为firstAdDelay,该值表示毫秒,以本例中的24小时为例,这样的设置能有效避免用户产生质疑。
我们坚信,那些制作Android恶意软件和恶意广告软件的人会持续编写用于检测模拟器的代码,并且他们在这方面已经取得了一定的成效。为了应对这一挑战恶意软件检测,安全企业必须采取更有效的检测手段来应对它们。