unhide 搜索隐藏进程和 TCP/UDP 端口——通过修改加载的so文件来实现隐藏,待研究实现思路
问题现象:服务器负载很高,top和ps 无法查看进程,有异常任务计划但是查不到进程排查困难
排查还在/etc/hosts发现增加了如下异常映射
猜测是,但是没有进程最终核实到是/etc/ld.so.preload 设置了隐藏进程
尝试直接删除或编辑此文件无效, 最终尝试echo “”>/etc/ld.so.preload 可以正常输入
然后查看可以查看到具体进程了
OK! 能看到进程就方便排查了
此问题排查时主要卡在了隐藏进程无法进一步核实分析,只要处理了隐藏进程就好排查处理了
问题延伸: 可以安装unhide查看隐藏进程
安装:
Ubuntu 或者 Debian 发行版:sudo apt-get install unhide
CentOS/RHEL:yum install unhide
执行:unhide proc 查看隐藏进程
如何安装 unhide 并搜索隐藏的进程和 TCP/UDP 端口
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:
$sudo apt-get install unhide
一切顺利的话你的命令行会输出以下内容:
[sudo]password forvivek:
Reading packagelists...Done
Building dependency tree
Reading state information...Done
Suggested packages:
rkhunter
The following NEWpackages will be installed:
unhide
0upgraded,1newly installed,0toremove and0notupgraded.
Need toget46.6kB of archives.
After thisoperation,136kB of additional disk space will be used.
Get:1http://in.archive.ubuntu.com/ubuntu artful/universe amd64 unhide amd64 20130526-1 [46.6 kB]
Fetched46.6kB in0s(49.0kB/s)
Selecting previously unselected packageunhide.
(Reading database...205367files anddirectories currently installed.)
Preparing tounpack.../unhide_20130526-1_amd64.deb...
Unpacking unhide(20130526-1)...
Setting up unhide(20130526-1)...
Processing triggers forman-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 install unhide
在 Fedora 上则使用以下 dnf 命令:
$sudo dnf install unhide
如何在 Arch 上安装 unhide
键入以下 pacman 命令安装:
$sudo pacman -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©2013Yago Jesus & Patrick Gouin
License GPLv3+ : GNU GPL version3orlater
http://www.unhide-forensics.info
NOTE : Thisversion of unhide isforsystems using Linux >= 2.6
Used options:
[*]Searching forHidden processes throughcomparison of results of system calls,proc,dir andps
如何使用 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 UDP checking
上述操作中,没有发现隐藏的端口。
但在下述示例中,我展示了一些有趣的事。
# unhide-tcp
示例输出:
Unhide20100201
http://www.security-projects.com/?Unhide
Starting TCP checking
Found Hidden port that notappears innetstat: 1048
Found Hidden port that notappears innetstat: 1049
Found Hidden port that notappears innetstat: 1050
Starting UDP checking
可以看到 netstat -tulpn 和 ss 命令确实没有反映出这三个隐藏的端口:
# netstat -tulpn | grep 1048
# ss -lp
# ss -l | grep 1048
通过下述的 man 命令可以更多地了解 unhide:
$man unhide
$man unhide-tcp