移动手机病毒编年史(Cabir、Skulls、FakePlayer、HummingBad)

阅读本文大概需要 8 分钟

今年,新冠疫情成了与人类对立的最大病毒体,我们的免疫系统与无数昼夜奔波的医护人员即是与之抗衡的安全卫士

那么,计算机和我们如今最常用的智能手机如何防御病毒,我想写的这个系列就带领大家深谙这一话题。本篇文章先带大家了解一下移动手机的一段短暂的病毒编年史,写的过程中也看到了很多血淋淋的历史。

移动病毒历程

2004 年以前,电脑病毒的魔爪在 PC 端持续扩张,还并没有渗透到当时并不普及的移动设备,然而,2004 年的一个傍晚,第一个手机病毒的出现打开了这个潘多拉魔盒,从此,移动病毒与移动安全之间展开了一场血肉横飞的搏斗。

1. Cabir(2004)

2004 年 6 月算是移动计算机安全的新纪元,Cabir 的出现开创了历史上手机病毒的先例。

该病毒由当时知名的病毒开发组织 29A  成员  Vallez  开发,并在发现的几天后被卡巴斯基实验室的  Roman Kuzmenko,分析出是专门运行在  ARM  处理器上的  Symbian OS  的蠕虫病毒(病毒式传播)。“Cabir”  这个名字也是由卡巴斯基实验室的员工以同事埃琳娜・卡比罗娃(Elena Kabirova)的名字命名的。

虽然是病毒,但 Cabir 当时基本上也没有造成什么实质的危害。手机感染 Cabir 后,只是会在手机显示屏上显示 “Caribe” 字串,并扫描附近 10 米内开启蓝牙连接的智能手机,找到目标后,Cabir 会尝试向目标发送 Caribe.SIS 文件,再次感染目标。

Cabir = Caribe

Cabir 最大的危害仅仅是会一直通过蓝牙连接扫描其他智能手机,会快速耗完电池电量。Cabir 并不能像常规病毒一样使手机宕机,也不会窃取消息,或完成其他恶意功能

但 Cabir 在当时依然证明了智能手机也会受到恶意软件攻击,这就为其他变种病毒的出现奠定了基础,其中包括一款使用户无法使用蓝牙连接的变种,以及一款通过彩信传播的变种,之后的两年移动端病毒也呈现出爆发式的增长。

2004~2006 年病毒数量的增长

2. Skulls(2005)

Cabir 出现不久之后,2004 年 11 月 Skuller.a 出现了。

与 Cabir 不同,Skuller.a 算是真正意义上的的木马病毒,它利用 Symbian 系统的 bug,可以在不提示用户的情况下用自己的文件覆盖系统文件。

利用该特性,Skuller 可以将应用程序图标替换为骷髅图(Skulls),并删除可用的应用程序文件。结果,一旦手机关机并再次开机,手机就会停止工作。这种类型的 “破坏木马” 也成为了后来病毒开发者中最受欢迎的一种形式。

这种木马程序也有一个特点,就是一定需要用户手动安装,因此攻击者一般会在一些恶意网站或者社交软件中欺骗对象安装该木马。

3.FakePlayer(2010)

2010 年,卡巴斯基的员工 Denis Maslennikov 接收到用户反馈,发现了第一个针对 Android 系统的恶意样本软件,并在 8 月公开,将其命名为 Trojan-SMS.AndroidOS.FakePlayer.a,这款木马可以获取短信发送权限形成恶意扣费。

该木马病毒会伪装成一个正常的媒体播放器,通过手机短信传播,一旦点击其中的链接网站 Trojan-SMS.AndroidOS.FakePlayer.a 就会提示手机用户安装一个 13KB 的 APK 应用文件,在安装同时要求用户允许其获得短信发送权限,一旦用户的手机安装该木马之后,将会向指定号码发送付费短信,从而对用户的话费账户造成损失

与之前的木马程序类似,FakePlayer 也必须由用户手动安装,用户也会收到该应用程序会发送 SMS 消息到高级号码的权限申请,因此当卡巴斯基在还未推出 Android 平台手机安全软件之前,表示解决方法仍在用户自身,在安装不明来源的应用程序时,请务必注意其要求的权限列表,通常情况下,获取短信发送、拨打电话等付费行为的权限将存在扣费风险,而访问联系人信息、邮件信息等隐私内容的应用,将存在个人隐私泄漏的风险

对于今天来说,该应用程序开发起来非常非常简单,完全基于 Google 提供的 Hello World 示例开发,但虽然简单,与 Cabir 一样也给一些初学 Android 开发者拓展了新的视野,也为整个 Android 安全领域奠定了基础。

4.HummingBad(2016)

六年后的 2016 年,中国本土病毒程序 HummingBad 出现了,这也是近年来最具有代表性的移动端病毒之一。

HummingBad 是由微赢互动(Yingmob) 公司,可以通过自动点击侵入性广告谋取欺诈性的广告收入,当时已经感染了多达  8500  万台设备。在国内发现的五个月后,跨国安全软件与服务公司 Check Point 发布了一份报告 (https://blog.checkpoint.com/wp-content/uploads/2016/07/HummingBad-Research-report_FINAL-62916.pdf),公开了当年 HummingBad 的具体数据和部分代码。

Check Point 指出,他们留意 Yingmob 团伙已有五个月的时间,其人员组成繁杂完善,且获利惊人。其首选工具是一款叫做 HummingBad 的恶意软件,甚至与一家广告分析公司有染。

HummingBad 是 Check Point 在 2016 年 2 月份发现的一款恶意软件,它会在 Android 设备上建立一个永久性的 rootkit,借助虚假广告和安装额外的欺诈性应用来获利。

Yingmob 选择了与一家合法的国内广告分析企业合作,分享其资源和技术。该团伙具备高度组织性,拥有负责开发 HummingBad 而已组件的单独 4 组 / 25 名职员。

Yingmob 利用 HummingBad 每月获得 30 万美元的欺诈性广告收入,这一稳定现金流还包括了一个集中的组织结构,证明了网络犯罪能够轻松实现经济上的自给自足。

HummingBad 除了会自动展示广告模拟点击外,还会利用系统的多个漏洞尝试获取 Android 设备的 Root 权限,在被入侵的手机中安装各种流氓软件,在当时功能手段也极其复杂。

HummingBad 功能上本身包含了两个主要组成部分,其中一个组件负责对 Android 设备进行 Root 操作,Rootkit 会考虑利用多种不同的漏洞。Root 成功后,攻击者就能完全获取设备的访问权限。如果 Root 失败,第二套组件就会生成一个欺骗性的系统升级通知,欺骗用户让 HummingBad 获取系统级权限(Root 还是关键呀!)。无论 Root 是否成功,HummingBad 都会尽可能下载大量欺诈应用。

图源 Check Point 报告,模拟点击代码

整套 HummingBad 也包含好几个恶意组件。首要的组件名为 SSP,其作用是显示非法广告、安装欺诈应用。该组件会在系统内置注册一个广播接收器(Android 四大组件中的 BroadcastReceiver),监听以下事件:

  • USER PRESENT,解锁设备时触发

  • BOOT COMPLETED,设备启动后触发

  • SCREEN ON,设备唤起时触发

触发过后,SSP 开启名为 Se 的服务,初始化恶意逻辑,并且开启广告网络。SSP 还会开启计时器,每 10 秒钟计划一次 LockTask,如果满足相应条件(比如互联网连接、从服务器获取到设置,时间延迟等),LockTask 就会重启 Se 服务,并且启动 MainActivity 进程,激活恶意 payload。部分代码如下:

public void onReceive(Context context, Intent intent) {
        Editor editor = UtilsClass.getInstance().getSharedPreferences(context).edit();
        if (Utilstools.ACTIONIAD.equals(intent.getAction())
                || Utilstools.ACTIONZDT.equals(intent.getAction()) ||
                "android.intent.action.USER_PRESENT".equals(intent.getAction()) ||
                "android.intent.action.BOOT_COMPLETED".equals(intent.getAction()) ||
                "android.intent.action.SCREEN_ON".equals(intent.getAction())) {
            if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
                MobclickAgent.onEvent(context, "SSP_ReCreate");
            }
            if (!Utilstools.getInstance().isServiceRunning(context)) {
                context.startService(new Intent(context, Se.class));
            }
        }
  //...
}

MainActivity 进程开始之后,恶意程序会显示广告 banner,广告上面会有个关闭按钮。此时,程序再次拦截 KeyDownEvent 事件,阻止事件分发:

  • KEYCODE HOME(3)

  • 按键返回(4)

  • 键盘菜单(82)

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == 4 || keyCode == 82 || keyCode == 3) {
        return false;
    }
    return super.onKeyDown(keyCode, event);
}

此时,由于用户无法回到 Home 页,或者是进行返回操作,只能被迫处理广告。但如果试图手动关闭广告,也会拦截相应的 click 事件,将该事件分发到屏幕中间(即 ” 关闭广告 “ 按钮无效),实际上也是点击一次广告操作。在点击广告之后,SSP 组件就会向服务器发出请求,给 APK 返回一个链接,SSP 随后再从服务器下载该 APK 文件。

图源 Check Point 报告,“关闭” 按钮相关代码

APK 文件下载完成后,恶意应用会检查设备是否已经 Root。如果已经 Root,则默默地安装下载的 APK 文件;如果没有 Root 的话,SSP 会弹出用户对话框,仍旧企图进行安装操作。

下载的 APK 文件安装完成后,SSP 再启动该程序,并且广播 INSTALL_BEFERRER,通过从服务器获取到的信息来伪造 Google Play 的安装,并从广告网络中获取广告收益。

据报告,微赢互动预计每天光从广告点击,就能获取超过 3000 美元的收益,而诈骗应用的安装则能获取 7500 美元 / 天。换算下来一个月就是 30 万美元,一年则为 360 万美元。

而这种诱导、警告用户(如软件需要更新、手机中毒需要查杀、点击一键清理手机之类的等等)的手段也成了后来很多移动端流氓软件惯用套路。

虽然 Android 系统本身会提醒用户某些应用可能具备有害权限,攻击者利用一些虚假故事依然可以诱导用户上当。

因此很多人说,在开放开源的 Android 生态系统中,用户就是最大的漏洞

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值