作者:小荷才露尖尖角

原文链接:http://blog.fortinet.com/post/android-spywaller-firewall-style-antivirus-blocking

恶意软件常常使用创新的技术来逃避防病毒软件的检测,这在PC上常常见到,在手机上却不多见。然而,最近发现的一个Android恶意软件却使用了创新性的防病毒逃逸技术,通过合法的防火墙来挫败安全软件。通过iptables这个合法的Linux包过滤与NAT工具,恶意软件有效地建立起规则,阻断源于某个知名中国防病毒应用的网络流量。

该恶意软件主要在com.GoogleService.MainService中实现恶意功能逻辑,通过disable360Network()这个函数实现选择性地网络流量阻断。

0x01 disable360Network()

该函数首先读取已安装的应用列表,并与已知的中国防病毒软件包名进行比对。
match360匹配的应用UID从ApplicationInfo类中读取,随后调用Api.disableUidNetwork(.. , UID, ..)函数。

0x02 Api.disableUidNetwork()

这个函数拷贝安装包/res/raw目录中的二进制文件“iptables_armv5”和”busybox_g1”到手机安装目录下的/app_bin目录,接下来在/app_bin目录创建droidwall.sh,并以root权限运行。

该脚本建立基本的BUSYBOX、GREP、IPTABLES的环境变量,随后针对手机中的所有网络流量创建名为droidwall的iptables chain。源于“rmnet+”、”pdp+”、”ppp+”、”uwbr+””wimax+”、“vsnet+”、”ccmni+”、”usb+” 被的流量被转发到droidwall-3g,源于“tiwlan+”、”wlan+”、”eth+”和”ra+”的流量转发到droidwall-wifi,主要的UID过滤规则droidwall-reject如下

$IPTABLES -A droidwall-reject -j REJECT

droidwall-reject规则接收来自droidwall-3g和droidwall-wifi的流量

$IPTABLES -A droidwall-3g -m owner --uid-owner [UID] -j droidwall-reject || exit
$IPTABLES -A droidwall-wifi -m owner --uid-owner [UID] -j droidwall-reject || exit

 

这些规则确保源于指定UID的流量被丢弃。droidwall的过滤规则可由下图所示。

rule

我们以前尚未发现过这种防病毒逃逸技术,此外,该恶意软件还使用了多种反调试技术。

0x03 反调试技术

应用隐藏

首先,该应用将自己命名为”Google Service”,包名为com.schemedroid.apk。
hide

一旦被启动,其图标就会被隐藏,不会在应用程序菜单菜单中出现。但几秒种后,仍然会向用户请求root权限。
requestroot图标隐藏是该恶意应用唯一可见的可疑行为。

恶意安装包混淆

该恶意软件将其恶意代码隐藏在安装包asset目录中的加密文件droid.png中。由MainActivity启动的SchemeServcie,调用一个XOR解密函数解密恶意代码并加载,解密文件存储为annotation.jar。

xor

下面的python脚本可以模拟上述行为

def xor(data, key):
    l = len(key)
    return bytearray((
        (data[i] ^ key[i % l]) for i in range(0,len(data))
    ))
data = bytearray(open('7b31656b9722f288339cb2416557241cfdf69298a749e49f07f912aeb1e5931b.out/assets/droid.png','rb').read())
key = bytearray([0xff])
a = xor(data,key)
with open('7b31656b9722f288339cb2416557241cfdf69298a749e49f07f912aeb1e5931b.out/assets/annotation.jar', 'wb') as f:
        f.write(a)

其他的恶意组件也进行了类似的加密,并以误导的文件名在安装包中存在。

  • logo.png: 针对Android SDK 版本14到18的Root exploit
  • help4.png:针对其他SDK的Root exploit
  • splash: su二进制文件
  • setting.prop:恶意软件的配置文件,包含C&C服务器,以及receiver使用flag的状态
  • about.png:恶意软件的daemon

恶意类名混淆

恶意类名使用base64编码,防止针对恶意类名的字符串匹配。

$ echo "Y29tLkdvb2dsZVNlcnZpY2UuTWFpblNlcnZpY2U=" | base64 -d
com.GoogleService.MainService
$ echo "Y29tLkdvb2dsZVNlcnZpY2UuQ29tbW9uLkNvbmZpZw==" | base64 -d
com.GoogleService.Common.Config

其中com.GoogleService.Common.Config解密、读取并更新恶意软件的配置文件。而com.GoogleService.MainService注册了多个receiver,实现受害者位置监控、记录所有来电、使用摄像头拍照/摄像、甚至SIM卡更换监控、等功能。更为有趣的是,该恶意软件还窃取流行的Android 即时消息应用的历史消息记录,包括Skype、Whatsapp、Viber、Voxer和QQ,而且还可以根据指令在后台执行多种操作来耗尽手机的电量或者拖慢手机运行速度。