作者:南拳Daddy

版权所有,转载请注明作者以及来源FreebuF.COM,违者必究。 

本人关注移动网络安全将近3年了,写这篇文章主要是想科普下手机木马查杀相关的一些技术,最近在网上看了腾讯移动安全实验室安全快讯360手机卫士安全播报,感觉移动终端的安全性一年比一年严峻。本人这些年主要是做网络攻防,近几年由原来的PC端转向移动互联终端。在APT攻击方面研究的同时也研究防御方面的技术。

下面就分享下最近的一些研究成果。

这篇文章主要是浅谈,所以会从简单方面开始讲起。

关于手机木马查杀,有些人会说安装手机杀毒软件不就解决了吗? 其实不然。因为手机和PC不一样,手机反木马技术没有PC端那么强。

就算你把目前市面上的所有手机杀毒软件都安装到手机里,也不一定查杀出来。

下面就开始正式讲解手工查杀的方法。

第一种方法:用Android Debug Bridge(简称adb)调试工具补助查杀,

首先打开android手机的调试模式,然后到网上下载adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll这三个文件,放在电脑磁盘任意目录下,用数据线把手机连上电脑。然后通过命令提示符用pushd或者cd命令跳转到刚才那三个文件所在目录。执行adb

shell命令连入手机shell终端。之后相当于在linux下的shell一样操作了。如果你是搞android开发的,安装eclipse和android SDK后就不用去下载刚才那三个文件了,在sdk\platform-tools这个目录下就有。重点是后面,通过执行netstat命令查看当前网络连接(不需要root权限)。如下图:

shell命令连入手机shell终端

能看到网络连接信息,但是却不能看到进程pid以及进程对应的包名。这样想要找到恶意程序或木马程序是很困难的。

下面介绍两个很有用的命令:

cat /proc/net/tcp  (不需要root权限)
cat /proc/net/tcp6  (不需要root权限)

/proc/net/tcp文件,这里记录的是ipv4下所有tcp连接的情况

/proc/net/tcp6文件,这里记录的是ipv6下所有tcp连接的情况

执行cat

/proc/net/tcp6命令后返回的记录格式如下:

local_address                         remote_address                        st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
 
0000000000000000FFFF00006801A8C0:8018 0000000000000000FFFF00007095FB3A:0050 08 00000000:00000001 00:00000000 00000000 10136        0 15335 1 d50216a0 37 4 6 5 -1

最主要的,就是local_address本地地址:端口、remote_address远程地址:端口、st连接状态,这里重点看下uid信息,下面会用到。截图如下:

IP地址端口和状态码

注1:返回的IP地址端口和状态码都是用的16进制,比如HTTP的80端口记录为0050。

注2:状态码对应如下

00  "ERROR_STATUS",
01  "TCP_ESTABLISHED",
02  "TCP_SYN_SENT",
03  "TCP_SYN_RECV",
04  "TCP_FIN_WAIT1",
05  "TCP_FIN_WAIT2",
06  "TCP_TIME_WAIT",
07  "TCP_CLOSE",
08  "TCP_CLOSE_WAIT",
09  "TCP_LAST_ACK",
0A  "TCP_LISTEN",
0B  "TCP_CLOSING",

下面以腾讯手机管家为例,通过执行dumpsys activity|grep “10136″命令来查找uid

10136对应的Pid和应用程序包名,如下图:(注:10136是打开腾讯手机管家后重新执行cat /proc/net/tcp6命令获得的。)

adb shell

看下包名com.tencent.qqpimsecure是不是腾讯手机管家,在手机的设置->应用程序->正在运行的服务中查找(这里以android 2.3.7为例),如下图:

腾讯手机管家

由上面的执行结果找到腾讯手机管家访问的IP地址和端口是:

7095FB3A:0050  (原格式是:

0000000000000000FFFF00007095FB3A:0050把前面的0000000000000000FFFF0000这段删掉.)

转换成十进制就是: 58.251.149.112:80

和执行netstat命令获取的IP地址是一样的,如下图:

netstat 网络连接状态

这里整理下思路:通过执行cat

/proc/net/tcp6或cat /proc/net/tcp找到联网程序的uid

,然后

通过uid找到对应的应用程序pid和包名,最后判断应用是不是可疑,如果可疑就卸载掉。

如上面的腾讯手机管理是不可疑的,所以接着查找下一个,依次类推,直到找到恶意程序或木马程序为止。在查找过程中不要人为打开联网应用程序(如UC浏览器,QQ浏览器等等。),这样会增加手工查杀的难度。而且恶意程序或病毒程序是开机自动打开的,当然也有少部分是随着其他应用启动之后才触发的。

如果想获取应用对应的安装路径等详细信息,可以执行下面的命令获得。

adb shell dumpsys meminfo $package_name or $pid    //使用程序的包名或者进程id

当然在这里还得详细说明下,刚才通过可疑网络联接找到对应的应用程序包名,然后怎么判断程序是否可疑呢?因为很多程序都要联网的,大家可以这样做,找到包名后,可以到设置->应用程序->管理应用程序,在列表里找到对应的应用,然后点击进去查看应用的权限列表。

通过权限就能判断应用的可疑性了。下面截一张图,大家可以参考下。

通过权限判断应用是否可疑

第二种方法:通过耗电统计,找到耗电比较高的应用,然后查看应用的权限列表,进而判断程序是否可疑,这种方法比较简单,我就不详细介绍了。

第三种方法:通过查看logcat日志找到可疑应用程序。我不推荐用adb shell logcat来查看,因为里面的信息太多,而且查到可疑日志不方面。这里推荐大家安装一款第三方应用,叫做系统信息。打开系统信息这款应用,在基本信息下面点击查看日志,这时弹出选择对话框,选择logcat选项点击进去就可以查看logcat日志了。如下面:

系统信息这款应用 logcat日志

里面可以找到应用的服务名,以及对应的进程ID。这里特别是注意红色部分的警告信息。

大多数手机木马都会请求网络连接,在请求的同时会抛出异常,因为木马客户端并不是实时处于监听状态,这时服务端反弹连接会抛出异常。通过异常信息就能找到木马程序的进程ID

,进而找到程序的安装路径,并卸载掉。

如果想获取应用对应的安装路径等详细信息,可以执行下面的命令获得。

adb shell dumpsys meminfo $package_name or $pid    //使用程序的包名或者进程id

第四种方法:通过抓取网络通讯数据包分析手机应用到底做了什么。前面的三种方法并不能100%的判断某个应用是否是恶意程序或者木马。

所以第四种方法来了。第四种方法是最复杂的,并不适合所有人,只适合手机安全发骚友。

抓取手机网络通讯数据包分三步走:

第一步:在PC上运行ADVsock2pipe,输入如下命令

ADVsock2pipe.exe -pipe=wireshark -port 9000

第二步:在PC上运行wireshark,设置caption-Options

Capture | Options, Interface: Local, \\.\pipe\wireshark

第三步:adb shell

# tcpdump -nn -w - -U -s 0 "not port 9000" | nc 192.168.1.101 9000
 
-w:指定将监听到的数据包写入文件中保存
-nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-s:指定要监听数据包的长度

192.168.1.101 这个IP地址是你本机的IP。

至于这个9000端口可以随便改,只要不被系统占用就可以。

还有一个重要前提条件是手机需要root权限。

之后在wireshark上面就可以看到通讯数据在不停的增加了。

通过上面的第一种手工查杀方法,大家应该知道怎么找到可疑连接的IP地址和端口了。

然后就是过滤可疑连接的IP地址和端口。

过滤语法是:

ip.dst ==可疑IP

and tcp.dstport ==端口

这里跟大家介绍一种和第三种方法达到异曲同工之妙的语法。

tcp.flags.syn == 0×02    显示包含TCP

SYN标志的封包。

TCP网络连接要完成三次握手,这个地球人都知道的,是吧。

过滤出TCP SYN标志的封包后,在wireshark上面就能找到可疑连接的IP地址了。

结合第一种方法就能找到可疑IP地址对应的应用程序ID和包名。然后就是查看权限列表进一步判断,之后就是选择是否卸载应用了。

最后再来回答上面提到的抓包分析手机应用到底做了什么的问题。   

方法很简单,刚才用

ip.dst==可疑IP and tcp.dstport ==端口

这个语法过滤出可疑信息,在上面鼠标右键,选择follow TCP stream就可以跟踪指定TCP流的包。如下图:

follow TCP stream 跟踪指定TCP流的包

数据包是加密的。怎么去解密就留给大家做课后练习了。

最后再来补充说明下手机安全软件为什么查杀不了,非得要手工查杀不可呢?

看下下面的分析就知道原因了。

假设你的手机不小心被植入了一款手机木马程序。这个时候你安装了一款手机安全软件,比如腾讯手机管家,360手机卫士,LBE安全大师,金山手机卫士等等等。

然后你每天更新手机杀软病毒库并扫描。可是呢?每次的结果都是您的手机很安全,可以放心使用。如下图:

腾讯手机管家

上面是腾讯手机管家截图

LBE安全大师

上面是LBE安全大师截图

金山手机卫士

上面是金山手机卫士截图

金山手机卫士

上面是金山手机卫士截图

所以杀软都是最新版本最新病毒库。

通过几款安全软件的扫描查杀并没有找到真正的木马程序。而通过刚才的四种手工查杀,真正的手机木马其实已经不难找到了。

最后的最后让大家欣赏下这款手机远控的庐山真面目:

幻影安卓远控客户端 手机远控

我在这里不是黄婆卖瓜自卖自夸。只是想让所有人提高安全意识,现在的安全形势有多严峻,不言而喻。

我们通过上面的分析还可以得出一个结论:

就是市面上的主流手机安全软件并不靠谱,全中国还有多少手机木马,什么杜蕾斯手机远控,爵士帮手机远控,都还没有浮出水面,是吧?元芳,你怎么看?

写于2013年7月14日

[原文地址]

无节操讨论:

bounty (1级) 2013-07-16 1楼

看起来很酷的样子

superhacker 2013-07-16 2楼

没明白你是根据什么判断的?

wolfkingzyb (1级) 2013-07-16 3楼

南拳分析的挺不错的,现在的android杀软基本都很扯淡,就是那个开源的webkey远控都查不出来,哎。。。。。安全混乱的android世界。(QQ:495482191 深交流)

7asswd 2013-07-16 4楼

如果把远控放出来就更好了。

菜鸟 2013-07-16

多的跟屎一样

菜鸟 2013-07-16

我觉得不错的方法 就是把所有安装的程序都拉下来 逐个检查 分析源码 那才叫赞

softbug (2级) MYIIS-VIF网络安全专家 | www.iisu... 2013-07-16 5楼

这是一篇好文章!楼主功力深厚

lock 2013-07-16 6楼

能放个安卓远控就好了

freebuf 2013-07-16 7楼

貌似很乱!

南拳daddy (1级) 2013-07-16 8楼

其实 整理下, 可以归纳为 : 1:可疑网络连接查杀法,2:耗电统计查杀法,3:logcat 日志查杀法,4:抓包查杀法。

当然,还可以通过网络流量统计,查看开机自启动,分析正在运行的服务 等等,进行手工查杀。

Sh@doM (1级) 2013-07-16 9楼

这个不是不好判断,其实也没办法作出正确的判断,现在随便下载个软件,哪怕是个电子书都要获取位置,获取联系人列表,获取短信息,肿么破?随便一款APP都具备木马的特征,不过楼主提供的思路可供参考,随便吐槽下,撸主勿多想

亮点 2013-07-16 10楼

亮点是这款远控软件。求暴出

wolfkingzyb (1级) 2013-07-16 11楼

南拳请放一下你的那个“幻影安卓远控客户端”吧,大家都很期待呢。。。。。。

南拳daddy (1级) 2013-07-16 12楼

不好意思,让大家失望了, 本人已经签了《防手机远控木马扩散条约》。

还有就是本文只是浅谈,就是考虑到可操作性, 如果都是拿 .apk 来

反编译,分析源代码的话,可操作性就会降低,因为不是所有人都懂JAVA 源码。

sniperhk 2013-07-18

@南拳daddy 说的和核武一样

cnbug 2013-07-16 13楼

对这个控软只能笑而不语

Tim 2013-07-18 14楼

弱爆了

Rootkit 你去卸载给我看看…

对于打包进去的恶意软件还能killed

还有

现在地下市场里面卖得好的Android 手机远控

是C/C++ 开发的

并不是楼主所说的java 开发的

懂的自然懂,不多解释了….

南拳daddy (1级) 2013-07-18

@Tim 本文只是讨论地上的东西,地下的东西 ,就让它在 地下埋着吧 ,

你也可以 写一篇 查杀 Rootkit 的文章分享出来嘛 ,是吧。

c/c++ 这个东西 ,在android 系统里 ,也只能写个 .so 库文件什么的,

最后 还得用 java 通过 JNI 来调用 。又不是 塞班 系统,是吧,直接用C++ 来开发应用。

Tim 2013-07-18

@南拳daddy

你Root的机器, 你看我需要JNI 调用不. 先了解清楚Android底层吧…

在JAVA 虚拟机里面跑着的程序还好意思叫RootKit ???

南拳daddy (1级) 2013-07-18

@Tim 我写这篇文章的主要目的是怎么去发现可疑的木马,不管是应用级的还是内核级,关键是怎么去发现,是吧

。至于卸载嘛?那太容易了,实在不行就重装系统呗!也就10来分钟的事情。刷安卓系统很easy.

iamcai 2013-07-18 15楼

安卓远控免杀超级容易

比pc木马容易多了

hackbs 2013-07-18 16楼

哇手机远控好酷的样子耶.比ghost还帅那.

留言评论(旧系统):

佚名 @ 2013-07-22 08:24:49

能不能提供下幻影的下载地址

本站回复:

这东西貌似不公开。

sky听风 @ 2013-07-22 08:34:09

感谢分享,安全意识是要融入生活才可以

本站回复:

Soga.