首页 > 技术文章 > Linux 下手动查杀木马过程

ningfg 2021-03-10 11:14 原文

1、模拟木马程序病原体并让木马程序自动运行

1、黑客让脚本自动执行的3种方法

(1) 计划任务:crontab
(2)开机启动
(3)系统命令被人替换,定一个触发事件

2、生成木马程序病原体

vim /usr/bin/fregonnzkq
#!/bin/bash
touch /tmp/aaa.txt
while true
do
echo `date` >> /tmp/date.txt
#通过动态查看/tmp/date.txt 中显示的时间,可以知道木马在实时运行
sleep 1
done
 chmod +x /usr/bin/fregonnzkq
 fregonnzkq & #可以执行
 ps -axu | grep freg # 查看是否运行

3、使用计划任务crontab让木马自动运行

crontab -e
1 2 * * * /usr/bin/fregonnzkq &

例:黑客以非root用户添加计划任务,最好使用已经存在的系统用户添加。如采用bin用户添加

crontab -u bin -e
1 * * * * echo "aaaaaa" >>/tmp/bin.txt

排查:

crontab -u  bin -l

如何查看所有用户的计划任务?

ll /var/spool/cron/  # 这个目录下存放着所有用户级别的计划任务

4、黑客在系统级别的计划任务中追加木马

1、查看系统级别的计划任务相关文件

ls /etc/cron

crontab #写具体时间的统级别的定时任务
cron.d/ #系统级别的定时任务
cron.daily/ #系统每天要执行计划任务
cron.hourly/ #系统每小时要执行计划任务
cron.monthly/ #系统每月要执行计划任务
cron.weekly/ #系统每周要执行计划任务

find /etc/cron* #查看可以添加系统级别的计划任务

例:添加系统级别的计划任务

vim /etc/crontab  # 在最后追加
01 3 * * * root /bin/workstat &

例:添加系统级别的木马程序,可以追加到系统自带的脚本中,也可以自己新创建一个脚本,放到对应的目录下。

vim /etc/cron.daily/logrotate  #在最后添加/usr/bin/fregonnzkq &
![](https://img2020.cnblogs.com/blog/2320000/202103/2320000-20210309161822242-2143955722.png)
/etc/cron.daily/logrotate #可以执行,这样木马就可以随着tmpwatch 执行了.

2、排查:利用MD5sum来检验文件的完整性
语法:md5sum 文件

md5sum /etc/cron.daily/logrotate  #生成文件的MD5值
echo "aaaa" >> /etc/cron.daily/logrotate #追加一行
md5sum /etc/cron.daily/logrotate  #再次查看md5值,发现不一样

3、如何排查/etc/cron*下所有文件有没有被黑客修改或追加

find /etc/cron* -type f -exec md5sum {} \; > /usr/share/file_md5.v1

4、做对比MD5值库
当发现服务器异常时,生成一个新的MD5值库

find /etc/cron* -type f -exec md5sum {} \; > /usr/share/file_md5.v2

diff /usr/share/file_md5.v1 /usr/share/file_md5.v2 #对比两个版本库

注:如果忘提前生成/usr/share/file_md5.v1 怎么办?
找一台正常和你服务器系统版本号一样的虚拟机,在虚拟机中生成 md5 值数据库文件。复制到咱们服务器上,再对比。

5、通过开机启动脚本运行木马

vim /etc/rc.local  #在开机启动脚本中添加
echo aaa

特例:很多人 vim 打开一个文件后,看到文档的后面是一片空白,就认为是达到文件的最后了。所以黑客在/etc/rc.local 中添加很多空行,然后在文档最后添加木马程序, 再把光标移动到行首,保存退出。也可以躲避一些运维人员的视线,达到隐藏木马的目的。
排查:过滤掉空行

grep -v ^$ /etc/rc.local

6、在Centos6系统下把木马追加到开机启动服务脚本中

1、把木马程序脚本写到已经存在的开机启动服务中

ls /etc/init.d/  # 这个目录下的脚本文件,都是可以开机启动的脚本文件
vim /etc/init.d/network  #添加内容
/usr/bin/fregonnzkq &

2、黑客自己写一个开机启动程序

vim /etc/rc.d/init.d/fregonnzkq
#!/bin/sh
# chkconfig: 12345 90 90
# description: fregonnzkq
### END INIT INFO
case $1 in
start)
/usr/bin/fregonnzkq &
;;
stop)
;;
*)
/usr/bin/fregonnzkq &
;;
esac
chmod +x /etc/init.d/fregonnzkq
chkconfig --add fregonnzkq
chkconfig --list fregonnzkq

3、排查

cd /etc/rc3.d/
ls *fre*  #开机启动,表示系统级别3下开机启动

4、查看每个系统级别下的启动脚本

ll /etc/rc*/* |grep fre

5、删除木马方法

chkconfig --del fregonnzkq
rm -rf /etc/init.d/fregonnzkq

6、排查对比法

find /etc/init.d/ -type f -exec md5sum {} \; > /usr/share/init.d.v1
find /etc/init.d/ -type f -exec md5sum {} \; > /usr/share/init.d.v2
diff /usr/share/init.d.v1 /usr/share/init.d.v2

7、排查方法
方法1:对比其他服务器好的配置文件,利用MD5值做对比
方法2:查看被黑当天生成或被修改的文件

find /etc/init.d/ -mtime -1  # 查看被前一天到现在被修改的文件

7、Centos7上的操作

1、使用rpm检查文件的完整性
语法:rpm -V 软件包的名字 #使用rpm命令检查软件包安装后,生产的所有的文件的完整性。
语法:rpm -Vf 命令的绝对路径 # 使用rpm检查命令的完整性
例:检查安装完httpd软件包后,哪些文件被人修改了

yum install httpd -y
echo aaa >>> /usr/sbin/httpd
rpm -V httpd #可以看到httpd被修改了

rpm -V 弹出的每列消息含意如下:
S file Size 大小不一致
MMode 模式不一致 (包括许可和文件类型)
5 MD5 sum 校验和不一致
DDevice 主从设备号不匹配
L readLink(2) 路径不匹配
UUser 属主不一致
GGroup 所属组不一致
T mTime 修改时间不一致
例:查看命令有没有被修改

rpm -Vf `which time`
echo aaa >> /usr/bin/time
rpm -Vf /usr/bin/time #检查文件,弹出消息,说明文件内容被修改了

例:系统中有很多命令和软件包,如何校队多有的命令和包?

rpm -Va > rpm_check.txt

黑客如何让脚本定时执行,有以下三种方法:
1、计划任务: crontab 和系统级别的计划任务
2、开机启动 rc.local 和开机启动脚本
3、系统命令被人替换,定一个触发事件
排查木马方法总结:
方法 1:通过生成 md5 值数据库,查询文件系统的完整性
方法 2: 利用 find 命令查找下最近被修改过的文件:一般情况下命令文件都很久之前被修改的。
方法 3: 被入侵后,检测所有 rpm -Va 生成的文件是否被改动过

2、生成木马程序父进程实时监控木马

生成木马的父进程,自动检测子进程,如果子进程被删除,父进程可以自动启动子进程。 这就是Linux删除木马后,木马自动又生成原因。
1、保留一份木马程序

cp /usr/bin/fregonnzkq /usr/wke

2、使用pgrep命令查看进程

pgrep fregonnzkq
pgrep fregonnzkq | wc -l

3、写一个木马程序的父进程脚本

vim /bin/workstat
#!/bin/bash
while true
do
 a=`pgrep fregonnzkq | wc -l` #统计当前系统运行了几个木马进程
 if [ $a -le 1 ]; then #如查木马进程数小于等 1,那么再启动一个子进程,这样可以保障,最少有两个木马子进程在运行
/bin/cp /usr/wke /usr/bin/fregonnzkq #防止子进程文件被删除
/usr/bin/fregonnzkq &
service network restart #防止管理员关闭外网,让木马主动启动网络和外面联系。也可以加上清空防火墙规则的命令
fi
done

4、排查
排查思路:这种情况下,你需要把找到木马的父进程,把父进程删除,再把病毒的原体删除

pstree | grep freg #查找父进程
 |-gnome-terminal-+-bash---workstat---2*[fregonnzkq---sleep]
ps -axu | grep workstat #查看父进程路径
vim /bin/workstat #可以查看一下父进程内容
rm -rf /bin/workstat #删除父进程
rm -rf /usr/wke #删除父进程中调用的病原体

5、如果进程杀掉后,快速又生成更多进程,怎么办?
解决方法:不杀进程,但是让进程不工作

 ps -axu | grep freg
 top -p 16011
 kill -STOP 16011 #让进程停止运行,不是杀掉。 直接杀死进程,会再产生新进程,这里把进程停止,让进程不在发挥攻击作用,然后你自己再慢慢排查

3、创建一个让root用户都删除不了的木马程序

实战场景:一台服务器被黑后,找到了木马程序 hack.sh 文件,hack.sh 文件权限为-rw-r--r--。但是使用 root 用户却删除不了此文件,也无法往此文件中写内容。
1、创建两个普通文件

touch hack.sh aa.sh
ll hack.sh aa.sh

2、黑客悄悄在后台添加attr扩展属性

chattr +i hack.sh

3、chattr chattr 扩展权限说明
+i:即 Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的
进程只能修改目录之下的文件,不允许建立和删除文件。
-i :移除 i 参数。
4、查看扩展权限

lsattr hack.sh

总结:如果工作中发现某个木马程序不停的运行,可以利用扩展属性,让木马程序没有可执行权限。

touch /bin/workstat
chmod 0000 /bin/workstat && chattr +i /bin/workstat

4、不让木马程序和外网数据主动通信

木马需要对外发大量数据包,管理可以通过 iptables 在 output 链上做限制,比如,把从 output 链出去 state 状态为 new 的全部 drop 掉。

iptables -t filter -A OUTPUT -m state --state NEW -j DROP

注:这是基于状态的防火墙规则。 由服务器自己自动发起的 TCP 链接状态为 NEW。木马程序一般都是主动发启连接的。

当然,黑客也可以在/bin/workstat 脚本中,添加放行木马通信的规则,如下:

iptables -F OUTPUT
iptables -t filter -A OUTPUT -m state --state NEW -j ACCEPT

这样木马就可以上网了。

5、使用rootkit把木马程序的父进程和木马文件隐藏(centos6下进行)

Rootkit 概述:Rootkit 是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是 Rootkit 一般都和木马、后门等其他恶意程序结合使用。我们接下来讲介绍 adore-ng (rootkit 其中一种)的使用方法。
adore-ng 可以在 linux 系统下实现:提权,隐藏进程号,隐藏文件等功能
官网:https://github.com/trimpsyw/adore-ng

1、通过rootkit隐蔽行踪

背景: 当黑客已经上传了木马-》获得普通权限-》提权成 root -》现在开始使用 rootkit 隐蔽行踪。
1、安装 adore-ng
上传 adore-ng-master.zip 到 linux 系统上

rpm -ivh /mnt/Packages/kernel-devel-2.6.32-220.el6.x86_64.rpm #安装依赖包
unzip adore-ng-master.zip
cd adore-ng-master
make -j 4 #编译,将源码编译成二进制文件,不需要执行 make install 文件
insmod adore-ng.ko #加载模块。

Usage: ./ava {h,u,r,R,i,v,U} [file or PID]
I print info (secret UID etc)
h hide file #隐藏文件
u unhide file
r execute as root #可以提权,以 root 身份运行程序
R remove PID forever
U uninstall adore
i make PID invisible #隐藏进程。隐藏你的木马程序
v make PID visible

2、演示 ava 提权功能

useradd ng #创建一个普通用户
echo 123456 | passwd --stdin ng
cp -r /root/adore-ng-master /tmp/ #复制木马程序到到/tmp,让普通用户 ng 可以执行 ava 命令,方便演示提权
chmod 777 /tmp/adore-ng-master/ -R #让 ng 普通用户也可以使用木马程序
ssh ng@192.168.1.63 #以普通帐号登录
cd /tmp/adore-ng-master/
ll /etc/shadow #普通用户对 shadow 没有权限
vim /etc/shadow #发现打开,看不到内容,说明没有权限
./ava r vim /etc/shadow #编辑时,可以写入一些内容,可以正常写入。说明提权成功。
# 在另一个终端上查看,运行此 vim 进程的用户身份是 root,说明提权成功

3、隐藏木马程序

模拟一个木马程序

vim hack.sh
#!/bin/bash
while true
do
echo `date` >> /tmp/date.txt
sleep 1
done
 chmod +x hack.sh #赋予执行权限
 ./hack.sh & #后台执行
 ps -axu | grep hack.sh #打开另一个终端,以root身份可以查看到木马程序
 ./ava i 6339 #隐藏进程
 ps -axu | grep hack.sh #已经找不到木马程序了

总结:当黑客隐藏进程后,找不出隐藏的进程,怎么办? 当进程找不到时,可以查找一下被黑那天或前几天产生的新文件,进行分析。重点是可以让黑客在网页上上传文件的目录。如我的网站存储用户上传头像或图片的目是/var/www/html/images ,那么可以执行:

find /var/www/html/images -mtime -1 #查找上传的文件

4、隐藏木马程序文件

场景:因为运维人员,可以按时间查出我的木马,所以我们可以把文件隐藏后,再执行木马程序。然后再把进程隐藏了。 这样运维人员,就彻底找不出后门了。

mkdir test #创建一个测试目录
cd test/
echo aaaa > webshell.php #模拟一个木马
touch b.php #创建一个普通文件
/tmp/adore-ng-master/ava h webshell.php #隐藏文件
ls #没有发现 webshell.php 文件。
ls -a #使用-a 选项也没有发现 webshell.php 文件
find ./ -mtime -1 #还是没有发现
cat ./webshell.php #黑客手动查看这个文件,还存在此目录下的,因为黑客自己知道文件的名字和路径,所以黑客自己还是可以执行木马的。

/tmp/adore-ng-master/ava u webshell.php #恢复显示文件

总结:有没有办法查找出 webshell.php,暂时没有。即使把 rootkit 木马程序关了,也很难确定所有木马都清除了。如果黑了你系统,能提权成 root,能隐藏木马进程,能隐藏文件。 那最好先找出网站中的漏洞,让开发修复一下,然后把系统重安装一下。

6、检查rootkit

使用 rkhunter Rootkit 猎手来检查rootkit
rkhunter 是 Linux 系统平台下的一款开源入侵检测工具,具有非常全面的扫描范围,除了能够检测各种已知的 rootkit 特征码以外,还支持端口扫描、常用程序文件的变动情况检查。
1、安装 rkhunter 和 unhide 包
rkhunter.noarch #用于扫描 rootkit 和本地提权漏洞
unhide.x86_64 #用于找到隐藏的进程和 TCP / UDP 后门端口

yum install epel-release -y #安装 epel 源
yum install rkhunter unhide
rkhunter --propupd #为基本系统程序建立校对样本,建议系统安装完成后,马上建立校对样本。
 ls /var/lib/rkhunter/db/ #查看存储样本文件的数据库
 ls /var/lib/rkhunter/db/rkhunter.dat #样本文件的数据库位置
grep passwd /var/lib/rkhunter/db/rkhunter.dat

2、运行 rkhunter 检查系统
rkhunter 主要执行下面一系列的测试:
(1). MD5 校验测试, 检测任何文件是否改动.
(2). 检测 rootkits 使用的二进制和系统工具文件.
(3). 检测特洛伊木马程序的特征码.
(4). 检测大多常用程序的文件异常属性.
(5). 执行一些系统相关的测试 - 因为 rootkit hunter 可支持多个系统平台.
(6). 扫描任何混杂模式下的接口和后门程序常用的端口.
(7). 检测如/etc/rc.d/目录下的所有配置文件, 日志文件, 任何异常的隐藏文件等等.
(8). 对一些使用常用端口的应用程序进行版本测试. 如: Apache Web Server, Procmail 等.
3、模拟黑客在系统中留后门

echo aaaaaa >> /usr/sbin/useradd #模拟黑客修改命令
vim aa.sh #模拟黑客创建一个木马程序
#!/bin/bash
sleep 3600

chmod +x aa.sh 
./aa.sh &
ps -axu | grep aa.sh
/root/adore-ng-master/ava i 3251 #故意隐藏 aa.sh 进程的 PID。

4、执行检测命令

rkhunter --check
rkhunter --check --sk   # --sk 遇到需要按 enter 的地方,直接跳过

5、在线升级rkhunter
rkhunter 是通过一个含有 rootkit 名字的数据库来检测系统的 rootkits 漏洞, 所以经常更新该数据
库非常重要, 你可以通过下面命令来更新该数据库:

rkhunter --update
rkhunter --versioncheck

总结:使用 rkhunter 的检测之后发现很多被黑客修改的地方后,处理被黑的服务器步骤如下:
(1).将原主机的网络线拔除,使用内网排查;
(2).备份数据,把重要的服务安装文件和数据备份;
(3).查看备份的数据中有没有怪异的文件,可以下载本地,使用 windows 中的杀毒软件,查一下
(4).重新安装一部完整的系统,使用 yum update 更新系统到最新版本
(5). 使用 nessus 之类的软件,检验系统是否处在较为安全的状态
(6).将原本的重要数据移动至上个步骤安装好的系统当中,并启动原本服务器上面的各项服务;
(7).配置防火墙的规则
(8).最后,将原本完整备份的数据拿出来进行分析,尤其是 logfile 部分,试图找出黑客是由那个服务?那个时间点? 以那个远程 IP 联机进入本机等等的信息,并针对该信息研拟预防的方法,并应用在已经运作的机器上。

7、使用 Tripwire 检查文件系统完整性

Tripwire 是目前最为著名的 unix 下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来。当文件现在的数字签名与保留的数字签名不一致时,那么现在这个文件必定被改动过了。
Tripwire 可以对要求校验的系统文件进行类似 md5 的运行,而生成一个唯一的标识,即“快照”snapshot。当这些系统文件的大小、inode 号、权限、时间等任意属性被修改后,再次运行 Tripwire,其会进行前后属性的对比,并生成相关的详细报告。
1、下载并安装

yum install epel-release
yum install tripwire -y

2、配置Tripwire
这一步使用密码为 Tripwire 生成一个站点(site)密钥和一个本地(local)密钥。这可以帮助保护Tripwire 免受未经授权的访问。本地密钥用于数据库文件,站点密钥用于配置文件和策略文件。您需要记住自己给出的密码,因为您更新策略文件或数据库时需要输入这些密码。下面的命令生成密钥:

tripwire-setup-keyfiles #密码都是 123456
tripwire --init #初始化数据库:生成基准数据库

3、配置 Tripwire 策略

vim /etc/tripwire/twpol.txt #一般不需要修改,默认就可以了
ls /etc/tripwire/

ipython.me-local.key ####加密本地密钥文件
site.key ####加密站点密钥文件
tw.cfg ####加密配置变量文件
tw.pol ####加密策略文件
twcfg.txt ####定义数据库、策略文件和 Tripwire 可执行文件的位置
twpol.txt ####定义检测的对象及违规时采取的行为
4、添加或修改一些文档

echo aaa >> /etc/passwd
useradd kill1 #添加一个用户名为 kill1 的用户

5、第一次完整性检查,和常用检查参数

tripwire --check #可以发现以下内容被修改了。

6、用法
例 1:只检查指定的文件或目录

tripwire --check /etc/passwd
tripwire --check /etc/

例 2:升级基准数据库文件

升级的目的是很正常的,因为 check 是基于基准数据的###

方法1:

tripwire --init

方法2:
在 /var/lib/tripwire/report 目录中,Tripwire 生成的所有报告文件都是hostname<date_stamp>.twr 形式的。通过按日期顺序列出文件,简单地选择这次 Tripwire 扫描生成的报告。一旦有了正确的文件,就可以使用下面这个命令更新数据库:

tripwire --update --twrfile /var/lib/tripwire/report/ningfg.cn-20171124-234117.twr

执行该命令之后,您就进入了一个编辑器。搜索所报告的文件名。所有侵害或更新都在文件名前面有一个 [x]。该演示中的查找模式如下:
[x] "/etc/passwd"
如果您希望接受这些更改为正当的,则只需保存并退出文件即可。Tripwire 不再报告此文件。如果您想要这个文件不被添加到数据库,那么请删除 'x'。
保存文件并退出编辑器时,若有数据库更新发生,会提示您输入密码以完成该过程。如果没有更新发生,那么 Tripwire 会通知您的,并且不需要输入密码。该演示中出现以下提示,因为数据库将被更新:
Please enter your local passphrase: 123456
Wrote database file: /var/lib/tripwire/ningfg.cn.twd

黑客运行木马原理:

1、生成病原体
2、通过脚本每隔 1 分钟自动检测一次,如果木马程序不存在,就从病原体复制一份儿到某个目录,然后执行副本木马,生成一个随机命名的程序。把副本放到系统计划任务多个路径下
3、修改自启动配置 chkconfig --add xxx
4、修改自启动项/etc/rc.local
排查解决方法:
1、删除病原体以及其副本
2、删除系统计划任务中可疑的程序
3、删掉自启动服务的脚本 chkconfig --del xxx
4、删掉可疑的自启动项:vi /etc/rc.local
5、删除/etc/crontab 下可疑的任务
6、删除/etc/cron*下可疑的 sh 脚本
7、重启,查看脚本是否还执行

推荐阅读