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