如何在 Linux/Unix/Windows 中發現隱藏的進程和埠
英文:Vivek Gite,翻譯:Linux中國/fan Li
linux.cn/article-9288-1.html
unhide 是一個小巧的網路取證工具,能夠發現那些藉助 rootkit、LKM 及其它技術隱藏的進程和 TCP/UDP 埠。這個工具在 Linux、UNIX 類、MS-Windows 等操作系統下都可以工作。根據其 man 頁面的說明:
Unhide 通過下述三項技術來發現隱藏的進程。
進程相關的技術,包括將 /proc 目錄與/bin/ps命令的輸出進行比較。
系統相關的技術,包括將/bin/ps命令的輸出結果同從系統調用方面得到的信息進行比較。
窮舉法相關的技術,包括對所有的進程 ID 進行暴力求解,該技術僅限於在基於 Linux2.6 內核的系統中使用。
絕大多數的 Rootkit 工具或者惡意軟體藉助內核來實現進程隱藏,這些進程只在內核內部可見。你可以使用 unhide 或者諸如rkhunter 等工具,掃描 rootkit 程序 、後門程序以及一些可能存在的本地漏洞。
這篇文章描述了如何安裝 unhide 並搜索隱藏的進程和 TCP/UDP 埠。
如何安裝 unhide
首先建議你在只讀介質上運行這個工具。如果使用的是 Ubuntu 或者 Debian 發行版,輸入下述的apt-get/apt命令以安裝 Unhide:
$sudoapt-get installunhide
一切順利的話你的命令行會輸出以下內容:
[sudo]passwordforvivek:
Readingpackagelists...Done
Building dependency tree
Reading stateinformation...Done
Suggestedpackages:
rkhunter
The followingNEWpackages will beinstalled:
unhide
upgraded,1newlyinstalled,toremoveandnotupgraded.
Needtoget46.6kB ofarchives.
Afterthisoperation,136kB of additional disk space will beused.
Get:1//in.archive.ubuntu.com/ubuntu artful/universe amd64 unhide amd64 20130526-1 [46.6 kB]
Fetched46.6kBin0s(49.0kB/s)
Selecting previously unselectedpackageunhide.
(Readingdatabase...205367filesanddirectories currentlyinstalled.)
Preparingtounpack.../unhide_20130526-1_amd64.deb...
Unpacking unhide(20130526-1)...
Setting up unhide(20130526-1)...
Processing triggersforman-db(2.7.6.1-2)...
如何在 RHEL/CentOS/Oracle/Scientific/Fedora 上安裝 unhide
輸入下列 yum Type the following yum command (first turn on EPLE repo on a CentOS/RHEL version 6.x or version 7.x):
輸入以下的 yum 命令(CentOS/RHEL 6.x 或 7.x 上首先打開 EPEL 倉庫):
$sudo yum installunhide
在 Fedora 上則使用以下 dnf 命令:
$sudo dnf installunhide
如何在 Arch 上安裝 unhide
鍵入以下 pacman 命令安裝:
$sudopacman-Sunhide
如何在 FreeBSD 上安裝 unhide
可以通過以下的命令使用 port 來安裝 unhide:
# cd /usr/ports/security/unhide/
# make install clean
或者可以通過二進位文件安裝 hide,使用 pkg 命令安裝:
# pkg install unhide
如何使用 unhide 工具?
unhide 的語法是:
unhide[options]test_list
test_list 參數可以是以下測試列表中的一個或者多個標準測試:
brute
proc
procall
procfs
quick
reverse
sys
或基本測試:
checkbrute
checkchdir
checkgetaffinity
checkgetparam
checkgetpgid
checkgetprio
checkRRgetinterval
checkgetsched
checkgetsid
checkkill
checknoprocps
checkopendir
checkproc
checkquick
checkreaddir
checkreverse
checksysinfo
checksysinfo2
checksysinfo3
你可以通過以下示例命令使用 unhide:
# unhide proc
# unhide sys
# unhide quick
示例輸出:
Unhide20130526
Copyright?2013YagoJesus&Patrick Gouin
LicenseGPLv3+ :GNU GPLversion3orlater
http://www.unhide-forensics.info
NOTE:Thisversion of unhideisforsystems usingLinux>=2.6
Usedoptions:
[*]SearchingforHidden processes through comparison of results of systemcalls,proc,dirandps
如何使用 unhide-tcp 工具辨明 TCP/UDP 埠的身份
以下是來自 man 頁面的介紹:
unhide-tcp 取證工具通過對所有可用的 TCP/IP 埠進行暴力求解的方式,辨別所有正在監聽,卻沒有列入/bin/netstat或者/bin/ss命令輸出的 TCP/IP 埠身份。
注一:對於 FreeBSD、OpenBSD系統,一般使用 netstat 命令取代在這些操作系統上不存在的 iproute2,此外,sockstat 命令也用於替代 fuser。
注二:如果操作系統不支持 iproute2 命令,在使用 unhide 時需要在命令上加上 -n或者 -s 選項。
# unhide-tcp
示例輸出:
Unhide20100201
http://www.security-projects.com/?Unhide
Starting TCP checking
Starting UDPchecking
上述操作中,沒有發現隱藏的埠。
但在下述示例中,我展示了一些有趣的事。
# unhide-tcp
示例輸出:
Unhide20100201
http://www.security-projects.com/?Unhide
Starting TCP checking
Found Hidden port thatnotappearsinnetstat:1048
Found Hidden port thatnotappearsinnetstat:1049
Found Hidden port thatnotappearsinnetstat:1050
Starting UDPchecking
可以看到 netstat -tulpn 和 ss 命令確實沒有反映出這三個隱藏的埠:
# netstat -tulpn | grep 1048
# ss -lp
# ss -l | grep 1048
通過下述的 man 命令可以更多地了解 unhide:
$manunhide
$manunhide-tcp
Windows 用戶如何安裝使用 unhide
你可以通過這個頁面獲取 Windows 版本的 unhide:
http://www.unhide-forensics.info/?Windows:Download
※用python在樹莓派上編程,你可以將項目擴展到令人難以置信的規模
TAG:嵌入式資訊精選 |