针对之前Malwarebenchmark前天文章中提到的Android “switcher”流量劫持软件,小编第一时间拿到了样本,并进行了分析,下面将本样本和读者分享一下。
其实前一篇文章已经把主要的恶意行为写清楚了,这里小编再把这个样本的一些有趣之处以及分析方法写出来分享。
基本信息:
样本名称: | 万能钥匙(WiFiwnys.apk) |
包名: | com.snda.wifi |
大小: | 985KB |
入口: | com.e4a.runtime.android.StartActivity |
版本号: | 2.0 |
权限列表:
android.permission.GET_TASKS
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_WIFI_STATE
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.READ_PHONE_STATE
android.permission.SYSTEM_ALERT_WINDOW
android.permission.MODIFY_PHONE_STATE
android.permission.INTERNET
android.permission.CHANGE_WIFI_STATE
com.android.launcher.permission.READ_SETTINGS
android.permission.CHANGE_NETWORK_STATE
android.permission.ACCESS_NETWORK_STATE
android.permission.WAKE_LOCK
android.permission.CHANGE_CONFIGURATION
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_NETWORK_STATE
android.permission.READ_PHONE_STATE
android.permission.READ_SETTINGS
android.permission.WRITE_SETTINGS
android.permission.INTERNET
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.READ_EXTERNAL_STORAGE
android.permission.GET_TASKS
通常,我们先从权限列表开始分析恶意样本,但是此样本中并没有太危险的权限,在分析勒索软件时曾提到的SYSTEM_ALERT_WINDOW可能恶意占用屏幕,本软件并没有做这个行为。
还有一些读取系统设置和更改系统设置的权限,但考虑到本软件是个“WIFI万能钥匙”,“需要”修改系统的一些设置,因此还是很合理的。所以权限并没有太不寻常的地方。
下面看一下文件结构:
如果下载一个正版的WIFI万能钥匙,是可以看到文件结构完全不同的,这里就不贴图了。
可以看到这里有个名为e4a.runtime的文件夹,而上面从AndroidManifest.xml中获取过入口函数正是在这个包内,点开之后如下所示:
小编之所以要保留这么长的一张图,就是想说让大家看到在这个包含入口类的包内有多少没必要的类,且都是中文的类名。(可能有的读者不知道,JAVA是支持中文的类名和方法名的)
这一度让小编十分困惑,以为这么多中文的类名都是软件作者定义的,他为什么要写这么多看起来毫不相关的类?甚至包括大数运算、位运算、图片压缩之类?并误以为这里面藏了什么机密,后来偶然查了一下包名才发现,原来所谓e4a是一个安卓快速开发教学网站,想必这个恶意软件的作者是用了这个网站上的什么模板吧。
由此我们可以对作者做一些推算——应该不是什么学院派出身的Android开发者吧,不过这也说明现在做开发的门槛很低,从网上找些开发模板都可以改成自己的恶意软件。(这里并没有贬低这个开发教学网站的意思,小编也通过这个例子长了些见识,并且因为自己的无知耗在这个包上走了许多弯路)。
当然,这将成为可以对该样本作者溯源的重要线索。如果你有“闲心”就追踪下去吧。
至于这个软件的行为,从代码来看,除了理应是e4a网站提供的模板意外,所有的代码都在一个叫“主页面”的类下,代码量并不大,而且大部分还是比较正常的。
该样本管理者在服务器端维护一个密码本,通过比对wifi的ssid找到对应的密码进行尝试,就可以用来连接wifi了,这都是作为一个wifi万能钥匙的正常功能。
异常行为基本在上一篇中描述了,包括进入wifi管理网页,通过一个密码集多次尝试登入,具体代码如下:
样本调用了多线程的操作,经过一定的时钟周期就会尝试登陆路由器的管理界面。
可以看到第五行子文本替换进行了多次用户名和密码的组合尝试,包括admin/admin,admin/123456等二十多种。
可以看到,如果路由器登陆网页启用了验证码,就能够防止这种简单的弱口令攻击。对于用户来说,修改一个具有一定强度和复杂性的登陆口令就可以防止被弱口令攻击了。当然,如果想要彻底的防止、检测这种行为,需要路由器的登陆界面具备检测弱口令攻击的功能,对于在一定时间内反复尝试登陆错误的行为标记为攻击行为。
而登陆了路由器管理界面之后,就进行修改DNS的工作,通过检测网页上的文件修改其中的内容,对DNS地址和备用DNS地址进行了修改,具体代码如下:
与上篇文章中不同的是,篡改的DNS地址分别为101.200.147.153/8.8.8.8,之所以进行这么多行尝试应该是为了适配不同版本的路由器登陆界面在javascript中的Name不同。
通过DNS篡改,黑客可以很容易将用户引导到仿冒的欺诈网页,骗取用户的各种账号密码,进一步造成用户的财产安全问题和隐私安全问题。
以上就是小编对这个样本的分析,最后附上点击这个软件的“分享”功能时显示的界面截屏: