“顽固木马”对抗技术剖析

近期,猎豹移动安全实验室(CMSL)监控显示,在韩国和哥伦比亚分别爆发了针对当地手机银行和Google钱包的支付病毒。这两个病毒都采用技术手段对抗卸载,一旦安装,将很难卸载,我们称之为“顽固木马”。

非Root情况下,如何阻止用户卸载应用?

根据Android特性,要阻止用户卸载应用,不要让用户看到卸载应用的界面或没有机会去点确认卸载的按钮就行。为了达到上述目的,韩国手机银行病毒采用了注册设备管理器并阻止取消激活设备管理器的手段;而哥伦比亚病毒则弹出自定义界面,屏蔽按键消息,让用户无法操作。

2015032011021357620150320110239146

“顽固木马”的前世今生

除了近期发现的韩国银行和哥伦比亚病毒,此前两年也陆续出现了几款知名度较大的“顽固木马”,我们先回顾下这几款“顽固木马”。

20150320110339479

2012年出现的“银行悍匪”是猎豹移动安全实验室监控到的国内第一款对抗卸载的病毒。但此后国内就没有出现过知名度较大的“顽固木马”,反倒是在国外此类木马频繁出现,比如敲诈者(Cryptolocker)病毒。从地域上划分,“顽固木马”主要出现在俄语地区和韩国,美国偶尔会出现一些。

20150320110425742

“顽固木马”对抗技术详解

一、通过Logcat监听系统日志

木马会启动一个监听系统日志的服务,使用Logcat命令读取日志信息

20150320110454190

当用户打开特定界面(如卸载应用界面)时,木马会强制返回桌面,导致无法卸载应用

20150320110514681

火眼动态跑出木马会监听的界面如下:

20150320110545644

二、抢占屏幕焦点

通过抢占屏幕焦点,既可以使用户无法正常使用手机,强制显示木马要展示的内容,同时也可覆盖系统的卸载界面,达到对抗卸载的目的。抢占屏幕焦点的方法有如下几个:

1、频繁调用Activity

Cryptolocker采用了每隔1s启动一次Activity的策略,让用户在这1s时间内无法进行其他操作。

20150320110725901

2、重写onPause等回调函数

木马会启动一个Activity到前台,并重写onPause等函数,当该Activity切换到后台时,木马会立刻响应,再次调用启动一个Activity,这会让用户没有时间去做其他事情。

20150320110750765

3、Activity劫持

上述两种方法会频繁弹出一个界面,过于残暴,通常适用于敲诈者这一类病毒,强迫用户看到自己的界面去完成指定的事情(如填账户密码等),并且还可以让用户没有机会去卸载该木马。

对于需要偷偷在后台干活并能防止被卸载的木马,上面两种方法很容易暴露自己。这里有一种Activity劫持的方法。木马会在后台轮询Activity栈,如果栈顶是指定的组件(系统的卸载界面),则弹出自定义界面进行覆盖或返回桌面阻止用户进一步的操作。

20150320110811616

4、神奇的悬浮窗

除了在界面上覆盖一个Activity,大部分木马会选择直接覆盖一个悬浮窗

20150320110900851

type = 2002 = TYPE_PHONE,表示该悬浮窗置于所有应用程序之上,状态栏之下

flags = 32 = FLAG_NOT_TOUCH_MODAL,悬浮窗将独占所有的设备点击事件,而不管它们是不是发生在窗口范围内。

上述设置可以保证悬浮窗置于顶层,并且可以接收到点击消息。

但是窗口接收到点击消息后不做任何响应,也就是屏蔽了用户的按键消息。

20150320110939755

同时,木马还可以发送“android.intent.action.CLOSE_SYSTEM_DIALOGS”广播,关闭系统对话框(包括通知栏、长按开机键后的重启对话框)

20150320111005961

三、注册设备管理器

注册为设备管理器的应用,只有在取消激活之后才能被卸载。“顽固木马”会想尽办法让用户把木马注册为设备管理器,并防止用户取消激活。

1、诱骗激活注册设备管理器

木马会弹出激活设备管理器的界面,但是有些人不会轻易点击激活按钮,这导致激活设备管理器的概率降低,有些木马会利用穿透点击的技术达到目的。

木马会在激活设备管理器界面上覆盖一层view,并设置android:focusable=”false”,这样用户在点击确定后,会穿透到下层view,实际上点击的是激活按钮。

20150320111121842 20150320111140569

使用hierarchyviewer查看的布局结构如下:

20150320111201788

2、利用设备管理器漏洞

2012年爆出设备管理器漏洞,木马可以利用漏洞在设备管理器列表中“隐身”,无法手动取消激活设备管理器。

20150320111225143

具体做法是,在AndroidManifest文件中不注册android.app.action.DEVICE_ADMIN_ENABLED广播

3、阻止取消激活设备管理器

“顽固木马”会重写onDisableRequested方法,当用户点击取消激活设备管理器按钮时,该回调函数会被调用。如果在函数添加调用其他界面、返回桌面、锁屏等操作,确认取消激活设备管理器的界面将被覆盖,用户将无法取消激活设备管理器。

20150320111242931

同样也可以重写onDisabled方法,取消激活设备管理器成功后会调用该函数,有些木马会不断弹出激活设备管理器的界面,重新让用户再次激活设备管理器。

20150320111306600

小结

“顽固木马”通常会将上述几个对抗技术结合起来使用,用最小的代价就可以让用户手足无措,但是“顽固木马”的对抗技术远不止这些,此文仅是抛砖引玉,希望大牛们不吝赐教,也期盼猎豹移动安全实验室挖掘出更深层次的东西。

文章来源:FreeBuf黑客与极客(FreeBuf.COM)

发表评论

邮箱地址不会被公开。 必填项已用*标注