一、概 述
近期,启明星辰ADLab监测到一款集窃密、监控、欺诈、勒索为一体的复杂Android恶意软件。该恶意软件通过将代码植入合法APP中进行传播,其还通过一种基于类反射机制的远程回调技术来实现对目标的监控,这是一种非常罕见的恶意代码控制机制,这种远程控制方式的控制粒度更精细且更灵活。该恶意软件还采用双通道模式来实现C2复活,即黑客可以在C2服务器被封堵后通过短信来重置服务器,因此黑客可以用任意一部手机来复活其C2,实现对目标的长期控制。
黑客一旦成功地将该恶意软件植入到目标设备,其可以任意窃取设备中的通讯录、短信记录、剪贴板信息、文件数据、键盘记录、位置信息、照片、视频、音频等等个人隐私数据;同时可对受害者进行实时的位置追踪、电话录音、上网行为监控、社交媒体VOIP监听、环境声音监听及隐秘拍照等等,还可以通过伪造通话记录、联系人以及远程访问钓鱼网站来对目标实施欺诈;此外,一旦该设备失去情报监听的价值后,黑客还会加密锁定设备中的文档、图片、音频、视频文件并且强制篡改设备密码或PIN码,对目标实施勒索。
通过对该恶意软件进行研判后确认,这是一款名为Daam移动端恶意代码,曾经反复活跃于伊朗等国家或地区。该恶意代码最早可以追溯到2020年,经过不断的演变目前已经发展成为了一款功能丰富且强大的移动端攻击武器。本文将以我们发现的新Daam程序为线索,从多方面对该恶意软件进行分析和溯源,并对关联到的Daam历史活动迹象、背后黑客的行为模式以及黑客基础设施使用情况等进行分析,最后我们将对本次发现的Daam进行详细技术分析。
二、溯源分析
2.1 事件分析
2023年5月初,我们注意到一款高危APK文件出现在我们的威胁识别平台上,该文件将自身伪装成Chrome浏览器通过一些软件下载平台和论坛传播。我们取得样本后立即对其进行了分析和确认,发现这是一款功能强大且复杂的恶意软件。
该恶意软件安装后,会弹出一个Chrome提示框,但是背景APP UI却和Chrome毫无关联。如下图所示:
APP启动界面信息
反编译后我们确认该UI实际上是一款名为Currency Converter Pro的APP,并在其AndroidManifest.xml文件中发现一个名为com.applisto.appcloner的包,这个包一般在APP通过AppCloner(一款克隆APP的软件)处理后会出现。通过AppCloner软件还可直接识别出该恶意软件,并且显示该APP为Currency Converter Pro。如下图所示:
AppCloner识别出克隆的应用
可以看出,黑客首先将恶意代码植入Currency Converter Pro,然后通过AppCloner来修改图标以及其他属性。通过关联分析我们还发现更多被植入该恶意代码的APP,如下:
名称 |
功能 |
Chrome |
Chrome是Google开发的免费网页浏览器。 |
Psiphon |
一款开源的VPN软件。 |
CPU-Z |
一款检测手机硬件信息的应用。 |
Interest Calculator |
一款计算利息和投资收益的应用程序。 |
Boulders |
一款手机游戏。 |
Fake Call |
一款生成虚假电话或短信的恶作剧应用程序。 |
Currency Converter Pro |
一款软件名称为波斯语的货币转换器。 |
通过搜索引擎和威胁情报平台,我们找到一些传播站点,如下:
-
333download.com
-
Androidfreeware.mobi
-
Androidtop.net
-
Andyroid.net
-
Apkod.com
-
Downloadpark.mobi
-
apk-new.com
-
apktoy.com
-
Napkforpc.com
2.2 攻击目标确认
在我们所收集到的感染体中有一个APK的应用名为波斯语(MD5:1200927713f38e6cd18e71da96749db3)。因此这款植入体的目标较大可能为波斯语国家(伊朗、阿富汗或塔吉克斯坦等)。
软件名称是波斯语的样本
通过对植入的恶意代码进行分析,我们发现恶意软件在上传通讯录和短信时会对手机号码为“+98”的区号进行替换处理。这样做的目的可能是为了使后台收到的数据格式统一,方便后期进行自动化处理,还能避免同一个号码重复存储。值得注意的是,“+98”正是伊朗的国际电话区号。由于所有样本中的恶意代码都存在这个处理细节,因此可以将黑客的攻击目标群体缩小到伊朗这个国家。格式化手机号码的代码如下图所示:
对手机号码进行格式化
2.3 黑客活动痕迹分析
当我们对这些被感染的APK文件进行分析时,发现一些有趣的现象,虽然我们获得样本渠道不同,但是这些APK内部文件的原始时间却出奇的一致。因此,我们将这些APK的内部文件时间和证书时间提取出来,如下图:
结合恶意代码及C2的习惯来看,我们判定这批样本背后的黑客组织是同一伙人,他们通过某种方式在APK植入恶意代码时,修改了文件时间。我们知道APK编译打包和签名文件的时间应该是有个先后顺序的(先编译打包,然后对APK内的文件进行签名并向其中写入证书文件),而一旦文件打包以后,时间正常来说是不会改变的,除非黑客在虚拟机快照中设定了固定时间或者通过某种工具更新更改。如果黑客事先在虚拟机中设定了固定时间,那么每次黑客进行编译打包和签名时,操作时间应该不会每次都精确到秒,所以黑客应该采用了某种工具直接对APK内的原始时间进行修改。可见黑客为了隐藏恶意软件的真实来源和活动时间也是煞费苦心。除了伪装文件时间,其证书的时间信息也做了同步伪造如下图所示:
证书信息
不过,这里黑客有个失误,那就是在处理最后这个样本(伪造的Chrome 样本)时,仍然暴露了其样本在编译时的时间。因此可以看出我们最近识别到的这个样本是黑客在4月9日制作的。
伪装成Chrome样本时间戳
从APK样本的AndroidManifest.xml文件中,我们发现其中有一个字段标识了该 APK 文件的克隆时间,该字段是com.applisto.appcloner.cloneTimestamp。这个时间戳转换成北京时间为2023年4月9日17点39分。
appcloner的配置信息
因此,我们可以推断黑客制作该恶意软件两个关键时间点,首先黑客在2023年4月9日的14:09分编译打包了该恶意软件,然后在17点39分采用appcloner对恶意软件的图片以及其他信息进行更改。
2.4 基础设置分析与溯源
我们将收集到的Daam恶意软件包名称、C2服务器的IP地址和国家以及运营商、首次发现时间等信息提取出来,如下图:
威胁情报汇总数据
从表中我们可以看出,该恶意软件的包名在不断地发生改变,控制端服务器也都主要属于加拿大的互联网服务提供商OVH。并且自2020年2月该恶意软件首次被发现后,使用了6个C2服务器,其中192.99.251.51这个C2地址竟然存活近两年。此外,Daam恶意软件早期以独立APP的形式出现,直到2021年8月开始采用植入到第三方APP中的方式传播,同时,更新频率也有所下降,一年大约更新2-3个版本。
对于C2地址192.99.251.51,我们关联发现了该C2的一个登录地址如下图:
IP归属家族信息
打开该登录地址显示如下:
C2控制面板
通过溯源关联,我们发现该服务器曾经被Lookout公司攻破并拿走了一些数据。这些数据显示目前受攻击的目标主要位于伊朗。
受害者被窃取的文件—引自Lookout
受感染设备首次上报位置——引自Lookout
Lookout公司认为伊朗执法司令部(FARAJA)是这个黑客组织的幕后主使,并且专门针对特定人士进行攻击,不过给出的证据并不充分。
我们认为FARAJA作为政府机构,如果对特定人员实施攻击,不会将制作的恶意软件通过第三方不知名的网站和论坛传播,并且这种传播不具备定向性,更像是黑产中的黑客所为。此外,从被窃取的文件来看,该文件更可能为FARAJA的官员拍摄,并存于其手机中被恶意软件上传,而不是被针对的某些特殊人群(这些人群不允许对文件进行拍照)。
Lookout公司认为黑客攻击时间与2022 年9月中旬发生的 Mahsa Amini 抗议活动高度重合。而我们收集的情报显示,这个恶意软件家族自2020年以来一直都在进行攻击活动,并一直延续至2023年5月份。因此,我们认为该黑客组织应该另有其人,只是目前没有证据可以确认黑客组织的归属。
三
技术分析
本节将以伪装成Chrome的样本(MD5:614cd844e484aadf53c4cff16a3611c1)为例对Daam恶意软件的技术细节进行分析,包括代码结构、功能模块、加密方法和通信协议。该应用程序的基本信息如下图所示:
伪装成Chrome样本基本信息
从上图可以看出,该恶意软件的包名称为“com.devnied.currency.prp”,而Chrome浏览器的包名称为“com.android.chrome”。黑客还将恶意软件的图标换成了Chrome浏览器的图标,以迷惑受害者。我们大致梳理出Daam恶意软件的攻击流程:黑客首先针对目标群体制作一些恶意APK,并将它们上传到第三方下载站点,诱导用户下载安装。这些恶意APK伪装成正常应用,一旦被安装,就会窃取手机中的敏感数据,并发送到内置的C2服务器。同时,恶意APK还会接收并执行C2服务器下达的控制命令,此外恶意APK还会通过手机短信接收控制指令,并根据指令执行相应的操作。攻击流程如下图所示:
攻击流程图
3.1 代码植入
为了在正常代码中植入恶意功能,黑客会通过反编译技术对正常应用程序进行反编译,然后在清单(AndroidManifest.xml)文件中声明恶意功能所需的权限、服务器,监听以满足恶意代码运行所需的条件。通过与原始文件对比,我们发现黑客在伪装成Chrome的恶意程序的清单中新增了31个敏感权限,包括访问和改变WiFi状态、获取用户、读写通话记录、收发短信、获取位置信息、录音、读取通话状态、读写设置等敏感权限。除了上述新增数据外,黑客还在伪装成Chrome的恶意程序中新增了3个Service和4个Receiver,新增的信息如下图所示:
清单中新增的service、receiver
从清单中可以看出,伪装成Chrome的恶意程序新增的代码位于“com.android.callservice”包中,恶意代码目录结构如下图所示:
dex文件中的callservice包
为了弄清Daam恶意软件家族不同版本之间的变化,我们将该恶意软件与2020年的早期版本进行对比,发现该恶意软件经过多年沉淀,功能日趋丰富。与较早期版本相比,新增了6项恶意功能,如通话录音、修改密码、插件化扩展、打开网址、屏幕截图和勒索功能等。新增功能代码对比图如下所示:
新增功能代码对比图
在对伪装成Chrome的恶意程序深入分析后,我们总结了新增的Service和Receiver功能如下表所示:
名称 |
功能 |
com.android.callservice.core.MainService |
作为应用的入口,负责启动其他Service和Receiver,以及与服务器建立连接并接收短信控制命令。 |
com.android.callservice.manager.Keylogger |
利用辅助服务功能,捕获并保存用户的按键记录。 |
com.android.callservice.core.SendData |
在安卓5.0及以上的设备上,解析并执行黑客通过网络发送的Json格式控制命令。 |
com.android.callservice.core.Alarm |
在安卓5.0以下的设备上,解析并执行黑客通过网络发送的Json格式控制命令 |
com.android.callservice.core.NetworkChangeReceiver |
将受感染用户的GPS坐标和缓存的数据发送给C2服务器。 |
com.android.callservice.core.Receiver |
在设备开机时,自动启动并将缓存的数据发送给C2服务器。 |
com.android.callservice.core.MessageReceiver |
通过读取短信内容,识别并执行其中的控制指令。 |
伪装成Chrome的恶意程序使用MainService作为恶意功能的入口,通过它与C2服务器建立连接,并解析短信控制指令。为了保证MainService的持续运行,该恶意程序采用了多种技术来防止它被意外终止或被安全软件杀死。一种技术是重写Destroy服务的方法,使其成为杀不死的服务。另一种技术是使用一个名为”YouWillNeverKillMe”的intent,当服务被杀死时,通过这个intent重新启动服务。这个intent的名字显示了黑客的傲慢和自信。重写的onDestroy服务端代码如下图所示:
重启MainService服务
除了上述技术,该恶意程序还使用了其他方式来实现代码持久化。它还注册了一个BroadcastReceiver,名为com.android.callservice.core.Receiver,用于监听开机广播事件。当设备开机时,它会收到这个广播事件,并通过它启动MainService。此外,它还包含了一个函数startPowerSaverIntent,用于引导用户手动打开一些电源管理或自启动管理的选项。这样可以避免应用程序被系统杀死或清理,从而影响恶意功能的执行。这个函数支持多种不同品牌的设备,比如小米、华为、OPPO、VIVO等,并根据POWERMANAGER_INTENTS常量中的intent信息来启动对应的界面。POWERMANAGER_INTENTS定义的代码如下图所示:
不同厂商安全软件的常量信息
我们对不同Daam家族的历史版本进行了分析,发现startPowerSaverIntent这个函数的调用情况有所变化。在2021年以前的版本中,这个函数是在应用程序入口(MainActivity文件中的onCreate)中被调用的;而在2021年以后的版本中,这个函数虽然仍然存在,但是应用程序入口改为从MainService启动,因此这个函数没有被调用。我们还发现,在2021年以前的版本中,MainActivity除了调用startPowerSaverIntent函数外,还调用了隐藏图标的功能;而在2021年以后的版本中,这个功能没有被调用。MainActivity中的onCreate函数代码如下图所示:
startPowerSaverIntent的调用位置
MainService启动后,它先绑定一个MessageReceiver广播,用于监听所有收到的短信内容,以便解析黑客发来的控制指令信息。然后再动态注册一个内容观察者实例,监控新创建联系人,最后回连C2服务器。
此外,在AndroidManifest.xml文件中,黑客除新增与Daam相关的恶意配置数据外,还加入了一些与AppCloner相关的配置信息。具体配置信息如下图所示:
AppCloner配置信息
上图中这些元数据的含义如下表所示:
字段名称 |
含义 |
com.applisto.appcloner.name |
应用程序的名称 |
com.applisto.appcloner.originalName |
应用程序的原始名称 |
com.applisto.appcloner.originalPackageName |
应用程序的原始包名 |
com.applisto.appcloner.cloneNumber |
应用程序的克隆编号 |
com.applisto.appcloner.cloneSource |
应用程序的克隆来源 |
com.applisto.appcloner.cloneTimestamp |
应用程序的克隆时间戳 |
com.applisto.appcloner.cloneBuildSerial |
应用程序的克隆构建序列号 |
com.applisto.appcloner.cloneBuildManufacturer |
应用程序的克隆构建制造商 |
com.applisto.appcloner.cloneBuildModel |
应用程序的克隆构建型号 |
com.applisto.appcloner.clonePremiumVersion |
应用程序的克隆是否为高级版 |
com.applisto.appcloner.forceDeviceLock |
应用程序的克隆是否强制设备锁定 |
com.applisto.appcloner.runtimeModdingOptions |
应用程序运行时修改选项 |
com.applisto.appcloner.bundleOriginalApp |
应用程序的原始应用程序是否已打包 |
com.applisto.appcloner.versionCode |
应用程序的版本号 |
com.applisto.appcloner.versionName |
应用程序的版本名称 |
com.applisto.appcloner.appClonerVersionCode |
应用程序的App Cloner版本号 |
com.applisto.appcloner.appClonerVersionName |
应用程序的App Cloner版本名称 |
com.applisto.appcloner.appClonerClassesVersionCode |
应用程序的App Cloner类版本号 |
com.applisto.appcloner.originalSignatures |
应用程序的原始签名信息 |
3.2 通信模块
在对Daam恶意软件深入了解后,我们发现黑客采用了两种方式实现对受感染用户的持久控制和监控,分别为短信控制和网络命令控制。这样设计的好处是可以实现多种方式对恶意软件进行控制和指令下发,在其中一种方式失效时及时用另一种方式下达控制指令,实现对目标信息的掌握。短信控制可以利用短信发送简单的控制指令,比如通过短信更新C2服务器、启动或停止某些功能。这种方式的好处是不依赖于网络连接,可以在任何时候对恶意软件进行控制;短信控制命令也可以隐藏在正常的短信内容中,难以被用户或安全软件发现。网络命令控制可以利用网络连接与恶意软件建立通信,并发送复杂的控制指令,比如JSON格式的数据;这种方式的好处是可以实现更多的功能,比如动态加载dex文件、打开网址等。下面我们先来看一下Daam的通信功能的具体实现。
我们先来看一下短信控制指令的具体实现:伪装成Chrome的恶意程序的入口为MainService类,它在后台监听新短信息广播,并通过messageReceived方法处理短信消息控制指令。MainService类继承了Service类,并实现了MessageListener接口。MessageReceiver接收短信并解析的代码如下图所示:
从广播中获取短信息,然后进行解析
在messageReceived方法中,该恶意程序首先利用正则表达式”\\\\*(.*)#”从短信消息中提取出以*和#之间的字符串作为参数,然后根据参数的不同值执行不同的操作。具体来说,它有以下几种控制指令:
控制指令 |
功能 |
140 |
该指令用于设置恶意软件的控制服务器的地址和端口,并决定是否删除本地存储的token。 |
760 |
该指令用于设置恶意软件的相机拍照功能。它会从参数中解析出拍照次数、拍照时长、拍照间隔、拍照索引(前置或后置相机)和拍照日期。 |
770 |
该指令用于设置恶意软件的麦克风录音功能。 |
780 |
该指令用于获取恶意软件的位置信息。 |
790 |
该指令用于切换恶意软件的WiFi状态。它会从参数中解析出一个数字(1或0),表示开启或关闭WiFi。 |
从短信控制指令的功能来看,黑客利用短信控制指令,实现对目标的多方面监控。他们可以通过短信指令激活目标设备的麦克风、摄像头和GPS,窃取目标的语音通话、位置信息和周围环境画面。这样,黑客就能够对目标进行全方位的监听和追踪,获取目标的隐私数据和行为特征。然而,短信控制也有一定的局限性,例如需要目标设备有信号、需要目标设备有余额、控制指令长度受限等等。网络命令控制刚好能够弥补短信控制的这些不足之处。接下来我们来看一下网络命令控制。
通过逆向分析,我们发现该恶意程序使用了websocket协议来与C2服务器进行通信。硬编码的IP、端口以及App ID如下图所示:
内置的C2服务器
该恶意程序在收集完系统信息后,将这些数据通过base64编码并填充到finger字段,然后发往C2服务器。网络通信数据如下图所示:
上线请求
finger字段解码后的内容是json格式数据,内容如下图所示:
解码后的finger字段内容
伪装成Chrome的恶意程序一旦接收到网络控制命令数据,最终会调用commandParser函数进行解析和执行。该函数采用了反射机制,即根据指令数据中的类名、方法名和参数,动态地加载并调用相应的类和方法,实现恶意功能。例如,如果指令数据中的类名为“com.android.callservice.manager.RecordManager”,方法名为“startRecord”,参数为“true”,那么该函数就会动态地加载RecordManager类,并调用其startRecord方法,开始录音。值得注意的是,指令数据中的类名必须属于com.android.callservice.manager包路径下的类,否则无法加载。commandParser关键代码如下图所示:
commandParser函数解析控制命令并执行
从上面代码中可以看出commandParser函数中传入了一个JSONObject对象,它包含了以下字段:
(1)id:一个字符串,表示任务的唯一标识符。
(2)command:一个JSONObject对象,表示要反射调用执行的命令。它包含了以下字段:
-
name:一个字符串,表示要调用的类的名称。
-
op:一个字符串,表示要调用的方法。
-
args:一个字符串,表示命令的参数。
-
datas:一个JSONArray对象,表示命令要执行的日期列表,可以实现定时执行。
(3)node:一个JSONObject对象。它包含了以下字段:
-
url:一个字符串,表示要访问的钓鱼网址。
网络命令控制支持调用com.android.callservice.manager下的类名称和功能,如下表所示:
类名称 |
功能 |
AccountsManager |
获取账户信息 |
Applications |
获取、打开或关闭应用列表 |
Browser |
获取浏览器书签和访问历史记录 |
CallRecordingService |
录制并上传通话录音 |
Calls |
获取或伪造通话记录 |
Cameras |
偷拍并上传照片到C2服务器 |
ChangePassword |
修改开机密码 |
Contacts |
获取或伪造联系人 |
Device |
获取设备指纹信息 |
DynamicCodeRunner |
从远程下载并执行dex,以实现插件化扩展。 |
FileManager |
上传、下载或列出文件 |
FunOps |
弹出窗口、开关数据、开关WiFi、获取剪切板数据。 |
Keylogger |
记录并上传键盘输入 |
LocationManager |
获取位置信息 |
Messages |
获取、发送短信 |
Microphone |
录制并上传麦克风声音 |
OpenURL |
打开指定网址 |
ScreenShot |
截取并上传屏幕截图 |
encripter |
加密文件,实现勒索功能。 |
从上述分析可以看出,网络命令控制的功能远超过短信命令控制。网络命令控制不仅可以实现短信命令控制的所有功能,还可以实现一些短信命令控制无法实现的功能,例如下载并执行dex文件、弹出窗口、开关数据等。这些功能可以让黑客更加灵活和全面地监控目标设备。
3.3 控制模块
远程控制模块是Daam恶意软件的核心,它可以让黑客全方位地监控目标设备并且可实施强大窃密以及勒索任务。它可以通过简单的指令,窃取目标设备的设备指纹、账户密码、文件列表、剪切板数据等,这些数据对黑客非常有价值;它还可以获取目标设备的应用列表、账户列表、键盘输入等,这些数据可以让黑客了解目标设备的使用情况和用户习惯;它可以通过上传和下载文件,对目标设备的文件进行管理,这样黑客可以随意地上传文件到目标设备。恶意软件让黑客拥有了强大而广泛的窃密能力,实现了对目标设备数据和资源的完全掌握。下面我们将逐步揭示Daam恶意软件的监控、窃密及勒索功能的具体实现,从而为防范和清除该恶意软件提供参考。
3.3.1 收集设备信息
为了收集目标设备的基本信息,黑客通过可以通过网络控制指令调用com.android.callservice.manager.Device类下的getDeviceInfo函数获取设备的信息,包括设备的API版本、操作系统版本、设备的IMEI号、设备的IP地址(IPV4、IPV6)、网络类型、WiFi的MAC地址和BSSID、SIM卡信息等。代码如下图所示:
获取设备信息
3.3.2 获取账户信息
为了获取目标设备的账号相关信息,黑客通过网络控制指令调用com.android.callservice.manager.AccountsManager类下的getAllAcounts方法访问安卓设备上的所有账户,并将它们的名称和类型保存在一个 JSON 数组中。这使得黑客能够获取用户的隐私信息,例如电子邮件地址、社交媒体账户或其他服务的账户,并利用这些信息发起各种恶意攻击,如身份盗用、垃圾邮件、钓鱼、欺诈等。黑客还可能根据账户类型的信息,推断用户使用的服务或应用,进行针对性的攻击或诱导。获取账户信息代码如下图所示:
获取账户信息
3.3.3 获取应用列表
为了获取目标设备的软件情况,黑客通过网络控制指令调用com.android.callservice.manager.Applications类下的getAllApps方法以实现获取目标设备上安装的所有应用的包名、名称、最后更新时间、版本号等信息。这可能会泄露用户的设备信息,例如使用的应用和服务、更新频率、软件版本等。黑客可能会利用这些信息进行针对性的攻击,例如窃取浏览器记录、利用已知的漏洞、伪造更新提示、模仿常用应用等。getAllApps代码如下图所示:
获取目标设备应用相关信息
3.3.4 偷取浏览器记录
为了收集目标的网络活动相关信息,黑客根据目标设备上的浏览器类型通过网络控制指令调用com.android.callservice.manager.Browser类下的特定功能函数以实现获取目标设备上的书签和浏览历史记录,并将它们发送到 C2 服务器。这样,黑客就可以知道目标感兴趣的网站和内容,并利用这些信息对目标进行各种恶意攻击,如钓鱼、欺诈、勒索等。黑客还可以根据浏览历史记录,推断目标的行为模式和习惯,进行针对性的攻击或诱导。Browser类中的方法如下图所示:
Browser类下的方法
3.3.5 窃取通话录音
黑客通过网络控制指令调用com.android.callservice.manager. CallRecordingService类下的功能函数实现了记录用户的电话通话和VoIP通话,并将录音文件发送到控制服务器的功能。当电话通话时,恶意程序会在应用程序的缓存目录中生成一个后缀名为3gp的录音文件,文件名的格式为:/data/user/0/com.psiphon3/cache/1621827365000-123456789-LocationManager-getLocation-123456789.3gp。其中123456789是电话号码。关键代码如下图所示:
通话录音代码
该恶意程序还会利用辅助功能(Accessibility)对43个即时通讯的Activity进行监控。受到监控的应用包含微信、Telegram、WhatsApp、KakaoTalk、Imo、Line、Skype、Viber、Vonage等。内置的Activity如下图所示:
VOIP监控目标
3.3.6 盗取通话记录
黑客通过网络控制指令调用com.android.callservice.manager.Calls类下的getCallslogs函数以便了解其联系人、通话时间、通话时长、通话内容等信息,进而对其进行欺诈、勒索、敲诈或其他非法活动。代码如下图所示:
获取通话记录
3.3.7 拍摄周围照片
黑客通过网络控制指令调用com.android.callservice.manager.Cameras类下的takePhoto函数实现了打开受害者设备的摄像头来捕获图片,然后将图片发送到C2服务器。代码如下图所示:
拍摄照片
3.3.8 修改设备密码
黑客通过网络控制指令调用com.android.callservice.manager.ChangePassword类下的set函数实现了利用设备管理器修改目标设备的锁屏密码功能。代码如下:
修改设备密码
3.3.9 通讯录操作
黑客通过网络控制指令调用com.android.callservice.manager.Contacts类下的getContacts函数实现了盗取联系人功能。在分析代码时,我们发现黑客对带有伊朗国际区号(+98)的联系人做了特殊处理。代码如下:
获取设备通讯录
该恶意程序不仅窃取已有联系人,还会把新建联系人信息发给C2服务器。代码如下图所示:
监控新建联系人并回传
3.3.10 文件管理
黑客通过网络控制指令调用com.android.callservice.manager.FileManager类下的特定函数实现了对目标设备的远程管理功能,包括上传文件、下载文件、获取文件列表等功能。部分代码如下图所示:
文件管理操作
3.3.11 窃取剪切板数据
为了获取用户的敏感信息,比如密码、账号、验证码、银行卡号等,从而进行进一步的攻击或盗窃。黑客可以通过网络控制指令调用com.android.callservice.manager.FunOps类下的getClipboard函数实现获取设备上的剪贴板内容,例如窃取用户的复制粘贴的信息。实现如下图所示:
窃取剪切板数据
3.3.12 键盘记录
该恶意程序可以通过辅助功能捕获用户输入的文本,然后将捕获的击键连同应用程序的包名称保存到数据库中,部分代码如下图所示。
键盘记录
3.3.13 上报位置信息
为了实现获取被监控目标的位置信息,黑客可以通过网络控制指令调用com.android.callservice.manager.LocationManager类下的getLocation函数实现获取用户的位置信息。获取位置信息代码如下图所示:
获取位置信息
3.3.14 窃取短信
黑客可以通过网络控制指令调用com.android.callservice.manager.Messages类下的getSMSList函数实现窃取短信列表。获取短信列表可以使用不同的条件进行筛选:根据关键字查询短信、根据短信类型查询短信、查询所有短信。这些查询短信通过getSMSList函数实现,代码如下图所示:
获取短信列表
3.3.15 录制音频
黑客可以通过网络控制指令调用com.android.callservice.manager.Microphone类实现录制音频的功能,然后将音频文件发送到C2服务器。代码如下图所示:
录制音频
3.3.16 屏幕截图
黑客可以通过网络控制指令调用com.android.callservice.manager.ScreenShot类实现屏幕截图功能。它利用Runtime.getRuntime().exec方法执行一个系统命令,即”input keyevent 120″,这个命令可以实现截取屏幕的效果。最后将存储在外部存储器的/Pictures/Screenshots路径中的图片上传到C2服务器,部分代码如下图所示:
屏幕截图
3.3.17 勒索功能
黑客可以通过网络控制指令调用com.android.callservice.manager.encripter类,实现使用AES加密算法对设备上的多种文件(txt、jpg、bmp、png、pdf、doc、docx、ppt、pptx、mp3、mp4、avi、mpeg)进行AES加密,使用户无法打开。它还在每个目录下创建一个空的readme_now.txt文件,可能用于向用户发出威胁或勒索。代码如下图所示:
勒索功能
3.4 控制模块
3.4.1 操控应用程序
黑客可以通过网络控制指令调用com.android.callservice.manager.Applications类下的closeApp和openApp,实现对目标设备上安装应用程序的关闭和打开功能。代码如下图所示:
关闭APP
打开APP
3.4.2 动态加载插件
该恶意程序可以通过插件化扩展实现任意功能执行,这个功能非常强大,可以让黑客根据自己的需求自由地扩展功能,从而实现更加个性化的攻击目的,其利用com.android.callservice.manager.DynamicCodeRunner类下载并加载一个dex文件,然后反射调用其中的指定类和方法。代码如下图所示:
动态加载dex并执行
3.4.3 打开网址
黑客可以通过网络控制指令调用com.android.callservice.manager.OpenURL类下的open函数实现打开网页的功能,黑客可能会通过这个功能在用户的设备上打开一个恶意的网站,从而进行钓鱼、欺诈、病毒传播等攻击。代码如下图所示:
打开网址
3.4.4 伪造通话记录
黑客通过网络控制指令调用com.android.callservice.manager.Calls类下的addCallLog函数,实现向目标设备写入伪造的通话记录以达到欺骗或威胁受害者的目的,如假冒受害者的亲友、上司、客户等。addContact函数代码如下图所示:
伪造通话记录
3.4.5 伪造联系人
黑客通过网络控制指令调用com.android.callservice.manager.Contacts类下的addContact函数实现向目标设备添加联系人。该功能的目的和伪造通话记录相同。
伪造联系人代码
3.4.6 发送特定短信
黑客可以通过网络控制指令调用com.android.callservice.manager.Messages类下的sendSMS函数实现向指定手机号码发送短信,支持超长短信发送,根据短信内容的长度决定是否分割成多条。该功能让黑客能够假冒他人的身份并欺骗联系人,从而进行诈骗或破坏的活动;同时,黑客还可以用短信控制指令远程操作其它被控手机,以此来隐瞒自己的真实身份和位置,防止被追踪溯源。sendSMS代码如下图所示:
发送短信
3.4.7 操纵网络通信
黑客通过网络控制指令调用com.android.callservice.manager.FunOps类下的dataSwitch函数实现开启或关闭设备的移动数据连接,例如切断用户的网络访问。
开关移动网络
还可以调用该类下的wifiSwitch函数开启或关闭设备的Wi-Fi连接,例如切断用户的网络访问。上述功能的代码实现如下图所示:
开关WiFi网络
3.4.8 弹窗提示窗
黑客通过网络控制指令调用com.android.callservice.manager.FunOps类下的ShowToast方法可以实现在设备上显示一个短暂的提示信息,例如“你的手机已被黑客控制”。ShowToast代码实现如下图所示:
ShowToast函数实现
四、总结及建议
通过以上分析可以看出,Daam恶意软件是一种高度危险且功能复杂的移动端病毒。其具有相当丰富的恶意功能,其设计的目标是要对受控设备进行全方位的监控控制,并且做到实时窃密、实时监控和实时追踪。其控制通道设计成双通道模式,并且实现了C2守护,同时利用反射机制和插件化机制,动态扩展和更新自身的功能,提升自身的隐蔽性和持久性。可见,该黑客组织具备高超的恶意代码研发能力,可设计出新颖的控制手法和复杂的恶意功能。他们也熟知反取证反追踪技术,注重抹去恶意代码制作的时间痕迹。黑客也擅长逆向工程,通过逆向工程获取各类即时通讯工具的VOIP关键Activity,并利用它们进行远程监听和监控。
黑客的手法是针对特定的目标人群,制作伪装成正常的APK文件进行传播。一旦手机设备感染了Daam恶意软件,那么该手机设备数据、手机持有者个人隐私、活动轨迹以及其所处的环境都将完全暴露给黑客。黑客甚至还可将该设备作为其犯罪工具对其他人实施欺诈,危险性非常高,需引起我们的高度警惕。为了防止感染Daam恶意软件,我们建议用户:
(1)只在可信的平台下载和安装软件,例如华为、小米、腾讯等官方应用商店或应用开发者的官方网站。
(2)不要随意点击短信或邮件中的链接,这可能会导致您的手机被感染或者您的个人信息被泄露。
(3)不要安装来历不明的APK文件,它可能携带恶意代码。
(4)审查应用程序申请的权限,如果不是必要的,就拒绝授权,以防止隐私泄露或恶意操作。
(5)对于来自陌生来源的应用程序,不要随意开启辅助功能,因为这可能会降低您的手机性能或安全。
(6)定期更新您的手机系统和安全软件,以及时修复潜在的漏洞或风险。
注:以下为我们在研究期间收集到的Daam家族样本的域名信息。
C2:
149.56.92.127
192.99.169.195
192.99.251.49
192.99.251.50
192.99.251.51
192.99.251.54
84.234.96.117
MD5:
045b8faac529696615cdaff2cda052f1
1200927713f38e6cd18e71da96749db3
164a93b3ac1b0102344d721ff9ca3e6f
27117a73895b146d50a03bde1fc62d6f
2c7f93b74de80d9070cad380aae7e064
2dceaf3b64ffa5164f51f31c8e117a22
3c7675748bdaf188eac09d1f59718403
49cfc64d9f0355fadc93679a86e92982
555bafbb760fc01af3bf521d54c40cde
6740a18e0f144ba84df7d68b8f2a1c79
855684b60e72d4cac097b29b5ffed2de
99580a341b486a2f8b177f20dc6f782e
be3492bb2aac68b304ad9bc30875190a
d80b202ab5640cbf674857fd93e7c672
ee6aec48e19191ba6efc4c65ff45a88e
f3cbde1f1db5059337baa10024334e9d
f4c7ffdcec0d23f7bb26b18cd1e9b65e
fdf3e983bc097042d6d6cdb4fb62639e
8f1f759c67835dd1857422709cd87524
614cd844e484aadf53c4cff16a3611c1
声明:本文来自ADLab,版权归作者所有。文章内容仅代表作者独立观点,不代表士冗科技立场,转载目的在于传递更多信息。如有侵权,请联系 service@expshell.com。