淺談Android手機(jī)木馬手工查殺
本人關(guān)注移動(dòng)網(wǎng)絡(luò)安全將近3年了,寫(xiě)這篇文章主要是想科普下手機(jī)木馬查殺相關(guān)的一些技術(shù),最近在網(wǎng)上看了騰訊移動(dòng)安全實(shí)驗(yàn)室安全快訊和360手機(jī)衛(wèi)士安全播報(bào),感覺(jué)移動(dòng)終端的安全性一年比一年嚴(yán)峻。本人這些年主要是做網(wǎng)絡(luò)攻防,近幾年由原來(lái)的PC端轉(zhuǎn)向移動(dòng)互聯(lián)終端。在APT攻擊方面研究的同時(shí)也研究防御方面的技術(shù)。
下面就分享下最近的一些研究成果。
這篇文章主要是淺談,所以會(huì)從簡(jiǎn)單方面開(kāi)始講起。
關(guān)于手機(jī)木馬查殺,有些人會(huì)說(shuō)安裝手機(jī)殺毒軟件不就解決了嗎? 其實(shí)不然。因?yàn)槭謾C(jī)和PC不一樣,手機(jī)反木馬技術(shù)沒(méi)有PC端那么強(qiáng)。
就算你把目前市面上的所有手機(jī)殺毒軟件都安裝到手機(jī)里,也不一定查殺出來(lái)。
下面就開(kāi)始正式講解手工查殺的方法。
第一種方法:用Android Debug Bridge(簡(jiǎn)稱(chēng)adb)調(diào)試工具補(bǔ)助查殺,
首先打開(kāi)android手機(jī)的調(diào)試模式,然后到網(wǎng)上下載adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll這三個(gè)文件,放在電腦磁盤(pán)任意目錄下,用數(shù)據(jù)線(xiàn)把手機(jī)連上電腦。然后通過(guò)命令提示符用pushd或者cd命令跳轉(zhuǎn)到剛才那三個(gè)文件所在目錄。執(zhí)行adb
shell命令連入手機(jī)shell終端。之后相當(dāng)于在linux下的shell一樣操作了。如果你是搞android開(kāi)發(fā)的,安裝eclipse和android SDK后就不用去下載剛才那三個(gè)文件了,在sdk\platform-tools這個(gè)目錄下就有。重點(diǎn)是后面,通過(guò)執(zhí)行netstat命令查看當(dāng)前網(wǎng)絡(luò)連接(不需要root權(quán)限)。如下圖:
能看到網(wǎng)絡(luò)連接信息,但是卻不能看到進(jìn)程pid以及進(jìn)程對(duì)應(yīng)的包名。這樣想要找到惡意程序或木馬程序是很困難的。
下面介紹兩個(gè)很有用的命令:
cat /proc/net/tcp (不需要root權(quán)限)
cat /proc/net/tcp6 (不需要root權(quán)限)
/proc/net/tcp文件,這里記錄的是ipv4下所有tcp連接的情況
/proc/net/tcp6文件,這里記錄的是ipv6下所有tcp連接的情況
執(zhí)行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遠(yuǎn)程地址:端口、st連接狀態(tài),這里重點(diǎn)看下uid信息,下面會(huì)用到。截圖如下:
注1:返回的IP地址端口和狀態(tài)碼都是用的16進(jìn)制,比如HTTP的80端口記錄為0050。
注2:狀態(tài)碼對(duì)應(yīng)如下
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",
下面以騰訊手機(jī)管家為例,通過(guò)執(zhí)行dumpsys
activity|grep “10136″命令來(lái)查找uid
10136對(duì)應(yīng)的Pid和應(yīng)用程序包名,如下圖:(注:10136是打開(kāi)騰訊手機(jī)管家后重新執(zhí)行cat/proc/net/tcp6命令獲得的。)
看下包名com.tencent.qqpimsecure是不是騰訊手機(jī)管家,在手機(jī)的設(shè)置->應(yīng)用程序->正在運(yùn)行的服務(wù)中查找(這里以android
2.3.7為例),如下圖:
由上面的執(zhí)行結(jié)果找到騰訊手機(jī)管家訪(fǎng)問(wèn)的IP地址和端口是:
7095FB3A:0050 (原格式是:
0000000000000000FFFF00007095FB3A:0050把前面的0000000000000000FFFF0000這段刪掉.)
轉(zhuǎn)換成十進(jìn)制就是: 58.251.149.112:80
和執(zhí)行netstat命令獲取的IP地址是一樣的,如下圖:
這里整理下思路:通過(guò)執(zhí)行cat/proc/net/tcp6或cat /proc/net/tcp找到聯(lián)網(wǎng)程序的uid,然后通過(guò)uid找到對(duì)應(yīng)的應(yīng)用程序pid和包名,最后判斷應(yīng)用是不是可疑,如果可疑就卸載掉。
如上面的騰訊手機(jī)管理是不可疑的,所以接著查找下一個(gè),依次類(lèi)推,直到找到惡意程序或木馬程序?yàn)橹埂T诓檎疫^(guò)程中不要人為打開(kāi)聯(lián)網(wǎng)應(yīng)用程序(如UC瀏覽器,QQ瀏覽器等等。),這樣會(huì)增加手工查殺的難度。而且惡意程序或病毒程序是開(kāi)機(jī)自動(dòng)打開(kāi)的,當(dāng)然也有少部分是隨著其他應(yīng)用啟動(dòng)之后才觸發(fā)的。
如果想獲取應(yīng)用對(duì)應(yīng)的安裝路徑等詳細(xì)信息,可以執(zhí)行下面的命令獲得。
adb shell dumpsys meminfo $package_name or $pid //使用程序的包名或者進(jìn)程id
當(dāng)然在這里還得詳細(xì)說(shuō)明下,剛才通過(guò)可疑網(wǎng)絡(luò)聯(lián)接找到對(duì)應(yīng)的應(yīng)用程序包名,然后怎么判斷程序是否可疑呢?因?yàn)楹芏喑绦蚨家?lián)網(wǎng)的,大家可以這樣做,找到包名后,可以到設(shè)置->應(yīng)用程序->管理應(yīng)用程序,在列表里找到對(duì)應(yīng)的應(yīng)用,然后點(diǎn)擊進(jìn)去查看應(yīng)用的權(quán)限列表。
通過(guò)權(quán)限就能判斷應(yīng)用的可疑性了。下面截一張圖,大家可以參考下。
第二種方法:通過(guò)耗電統(tǒng)計(jì),找到耗電比較高的應(yīng)用,然后查看應(yīng)用的權(quán)限列表,進(jìn)而判斷程序是否可疑,這種方法比較簡(jiǎn)單,我就不詳細(xì)介紹了。
第三種方法:通過(guò)查看logcat日志找到可疑應(yīng)用程序。我不推薦用adb shell logcat來(lái)查看,因?yàn)槔锩娴男畔⑻?而且查到可疑日志不方面。這里推薦大家安裝一款第三方應(yīng)用,叫做系統(tǒng)系統(tǒng)。打開(kāi)系統(tǒng)信息這款應(yīng)用,在基本信息下面點(diǎn)擊查看日志,這時(shí)彈出選擇對(duì)話(huà)框,選擇logcat選項(xiàng)點(diǎn)擊進(jìn)去就可以查看logcat日志了。如下面:
里面可以找到應(yīng)用的服務(wù)名,以及對(duì)應(yīng)的進(jìn)程ID。這里特別是注意紅色部分的警告信息。
大多數(shù)手機(jī)木馬都會(huì)請(qǐng)求網(wǎng)絡(luò)連接,在請(qǐng)求的同時(shí)會(huì)拋出異常,因?yàn)槟抉R客戶(hù)端并不是實(shí)時(shí)處于監(jiān)聽(tīng)狀態(tài),這時(shí)服務(wù)端反彈連接會(huì)拋出異常。通過(guò)異常信息就能找到木馬程序的進(jìn)程ID,進(jìn)而找到程序的安裝路徑,并卸載掉。
如果想獲取應(yīng)用對(duì)應(yīng)的安裝路徑等詳細(xì)信息,可以執(zhí)行下面的命令獲得。
adb shell dumpsys meminfo $package_name or $pid //使用程序的包名或者進(jìn)程id
第四種方法:通過(guò)抓取網(wǎng)絡(luò)通訊數(shù)據(jù)包分析手機(jī)應(yīng)用到底做了什么。前面的三種方法并不能100%的判斷某個(gè)應(yīng)用是否是惡意程序或者木馬。
所以第四種方法來(lái)了。第四種方法是最復(fù)雜的,并不適合所有人,只適合手機(jī)安全發(fā)騷友。
抓取手機(jī)網(wǎng)絡(luò)通訊數(shù)據(jù)包分三步走:
第一步:在PC上運(yùn)行ADVsock2pipe,輸入如下命令
ADVsock2pipe.exe -pipe=wireshark -port 9000
第二步:在PC上運(yùn)行wireshark,設(shè)置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:指定將監(jiān)聽(tīng)到的數(shù)據(jù)包寫(xiě)入文件中保存-nn:指定將每個(gè)監(jiān)聽(tīng)到的數(shù)據(jù)包中的域名轉(zhuǎn)換成IP、端口從應(yīng)用名稱(chēng)轉(zhuǎn)換成端口號(hào)后顯示-s:指定要監(jiān)聽(tīng)數(shù)據(jù)包的長(zhǎng)度
192.168.1.101 這個(gè)IP地址是你本機(jī)的IP。
至于這個(gè)9000端口可以隨便改,只要不被系統(tǒng)占用就可以。
還有一個(gè)重要前提條件是手機(jī)需要root權(quán)限。
之后在wireshark上面就可以看到通訊數(shù)據(jù)在不停的增加了。
通過(guò)上面的第一種手工查殺方法,大家應(yīng)該知道怎么找到可疑連接的IP地址和端口了。
然后就是過(guò)濾可疑連接的IP地址和端口。
過(guò)濾語(yǔ)法是:ip.dst ==可疑IP
and tcp.dstport ==端口
這里跟大家介紹一種和第三種方法達(dá)到異曲同工之妙的語(yǔ)法。
tcp.flags.syn == 0×02 顯示包含TCP
SYN標(biāo)志的封包。
TCP網(wǎng)絡(luò)連接要完成三次握手,這個(gè)地球人都知道的,是吧。
過(guò)濾出TCP SYN標(biāo)志的封包后,在wireshark上面就能找到可疑連接的IP地址了。
結(jié)合第一種方法就能找到可疑IP地址對(duì)應(yīng)的應(yīng)用程序ID和包名。然后就是查看權(quán)限列表進(jìn)一步判斷,之后就是選擇是否卸載應(yīng)用了。
最后再來(lái)回答上面提到的抓包分析手機(jī)應(yīng)用到底做了什么的問(wèn)題。
方法很簡(jiǎn)單,剛才用ip.dst
==可疑IP and tcp.dstport ==端口
這個(gè)語(yǔ)法過(guò)濾出可疑信息,在上面鼠標(biāo)右鍵,選擇follow
TCP stream
就可以跟蹤指定TCP流的包。如下圖:
數(shù)據(jù)包是加密的。怎么去解密就留給大家做課后練習(xí)了。
最后再來(lái)補(bǔ)充說(shuō)明下手機(jī)安全軟件為什么查殺不了,非得要手工查殺不可呢?
看下下面的分析就知道原因了。
假設(shè)你的手機(jī)不小心被植入了一款手機(jī)木馬程序。這個(gè)時(shí)候你安裝了一款手機(jī)安全軟件,比如騰訊手機(jī)管家,360手機(jī)衛(wèi)士,LBE安全大師,金山手機(jī)衛(wèi)士等等等。
然后你每天更新手機(jī)殺軟病毒庫(kù)并掃描。可是呢?每次的結(jié)果都是您的手機(jī)很安全,可以放心使用。如下圖:
所以殺軟都是最新版本最新病毒庫(kù)。
通過(guò)幾款安全軟件的掃描查殺并沒(méi)有找到真正的木馬程序。而通過(guò)剛才的四種手工查殺,真正的手機(jī)木馬其實(shí)已經(jīng)不難找到了。
最后的最后讓大家欣賞下這款手機(jī)遠(yuǎn)控的廬山真面目:
我在這里不是黃婆賣(mài)瓜自賣(mài)自夸。只是想讓所有人提高安全意識(shí),現(xiàn)在的安全形勢(shì)有多嚴(yán)峻,不言而喻。
我們通過(guò)上面的分析還可以得出一個(gè)結(jié)論:
就是市面上的主流手機(jī)安全軟件并不靠譜,全中國(guó)還有多少手機(jī)木馬,什么杜蕾斯手機(jī)遠(yuǎn)控,爵士幫手機(jī)遠(yuǎn)控,都還沒(méi)有浮出水面,是吧?元芳,你怎么看?