OA系统被入侵挖矿排查
说来惭愧,这个挖矿程序在服务器上跑了有两年多了,最近接手了安全设备,安全设备一直告警,烦死了,烦死了。
当时的出现的情况是:执行 top、w、netstat命令的时候,会出现卡住的情况,无法正常使用我就知道大事不妙,然后我就下载了ss lsof等命令,结果还是很慢,啊啊啊啊啊虽然这个挖矿程序已经下线了,估计早就被打掉了(TMD),但是它一直就往外部连接,看着真的很烦,这个挖矿不用以往的挖矿程序,这个程序简单了看了一下,隐藏的特别深。
APT预警攻击平台
防病毒的
开始搞起来,准备工具
从相同服务器上传新的top、netstat等命令之后,只是看到CPU使用率比较高,但是看不到占用CPU的异常进程、TMD
来分析一下系统内核-perf工具
perf 是 Linux 内核的性能分析工具集,它可以用来监控和分析系统和应用程序的性能。perf 提供了一系列功能强大的子命令,可以帮助开发者和系统管理员:
监控 CPU 使用率:识别最消耗 CPU 的代码段。
分析缓存命中和未命中:优化内存访问模式。
记录和分析系统调用:追踪系统调用和事件。
生成调用图:分析函数调用关系。
检测软件和硬件事件:如页面错误、CPU 循环、分支预测等。
通过这些功能,perf 可以帮助诊断性能瓶颈、解决性能问题,并提高应用程序和系统的效率。
perf常用命令行参数
perf 提供了许多命令行参数来定制其行为。以下是一些常用的参数:
-a, --all-cpus:监控所有 CPU 的性能。
-c, --count:设置事件计数周期。
-F, --freq:设置采样频率避免采样数据过大,或降低对程序的性能影响。
-g:启用调用图记录。
-p, --pid:监控特定进程的性能。
-t:指定要跟踪的线程id,用于抓取单个线程的信息
-e, --event:指定要监控的事件 如cpu-cycles,cache-misses,branch-instructions,branch-misses。
-call-graph:指定调用栈信息获取方式,支持fp/dwarf/lbr三种方式。
这些参数可以组合使用,以收集特定的性能数据。
perf查看历史信息
虽然 perf 主要用于实时性能分析,但它也可以通过 perf record 和 perf report 命令来查看和分析历史性能数据。例如:
perf record -a -g sleep 10
perf report
这个可以生成火焰图,这里就不生成了,需要看火焰图的可以自行百度。看以上的系统内核使用情况,发现有很多不知道的内核使用,wairiteday!!
百度,百度,太难搞了
参考 中国科学技术大学 张焕杰 老师的文章
https://github.com/bg6cq/ITTS/blob/master/security/mine/README.md
有问题的机器,命令被改了
没问题的机器
有没有眼神好的同学发现了哪里不对劲。没有也没关系,我都标注出来了,没错就是他丫的。
/lib/libcurl.so.2.17.0 (0x00007f806eea5000)
再多看几个命令、netstat、w等等
确定了没错了,就是这个/lib/libcurl.so.2.17.0 库,我该怎么办呢,换一个吧,换个没事情的动态库,思路没啥毛病,搞起来。还是原来的方法,替换就完了!!啰嗦一下 ,我来解释一下这个个libcurl 库的一些主要用途 **
libcurl.so.2.17.0是
libcurl 库的一个特定版本的动态链接库(Dynamic Link Library,简称 DLL)文件。
libcurl` 是一个非常流行的客户端 URL 传输库,它支持多种协议,包括 HTTP、HTTPS、FTP、SFTP、SCP、DICT、TELNET、TFTP、POP3、IMAP、SMTP 等。**
libcurl
库的一些主要用途:
-
网络请求:允许程序通过各种网络协议发送数据和接收数据。
-
文件传输:支持通过 FTP 和 SFTP 等协议进行文件的上传和下载。
-
网页内容获取:常用于从互联网检索 HTML、XML、JSON 或其他格式的数据。
-
API 交互:用于应用程序与基于 HTTP 或 HTTPS 的 Web API 进行交互。
-
自动化脚本:可以被用来创建自动化脚本来定期从网络获取数据或执行其他网络任务。
-
多协议支持:由于
libcurl
支持多种协议,它被广泛用于需要处理多种网络通信场景的应用程序。
.so
扩展名表示这是一个共享库,.so
是 “shared object” 的缩写。共享库允许多个程序共享同一份库代码,以节省内存并减少磁盘空间的使用。
版本号 2.17.0
表示这是 libcurl
库的第 2 版,第 17 小版的第 0 次补丁。库的版本号对于确保应用程序使用的是与开发时相兼容的库版本非常重要。
开发者在 C 或 C++ 程序中使用 libcurl
时,通常会包含这个库的头文件 curl/curl.h
并链接到相应的 .so
文件。
如果你的系统中有 libcurl.so.2.17.0
这个文件,这意味着你可以使用 libcurl
库的功能来开发网络相关的应用程序。如果你需要使用 libcurl
功能,但系统中没有这个库,你可能需要安装或更新它。在大多数 Linux 发行版的软件仓库中,libcurl
都是可用的。
好了继续搞!!!!
find / -name libcurl.so.2.17.0 找不到这个文件,我觉得我正常的也没这个,不解,可能是系统版本不一致吧
下载个工具
yum install -y strace
执行strace /bin/ls 2>cc在t中可以看到(这个是有异常的),正常的没有libcurl,应该是利用了这个,并不是系统里面有的这个动态库
这篇文章有必要看看,研究一下了
https://www.freebuf.com/column/162604.html
问题到这里基本上已经确定了
strace配合tcpdump可以发现每次执行命令时,会访问www.fullskystar.top,由于机器无法访问外网,所以命令执行的很慢。
允许IP可以访问外网,看到与www.fullskystar.top 443端口有如下典型的挖矿通信流量:
不过我还是要看一下tcpdump的流量分析。
tcpdump -i eno3 dst host www.fullskystar.top
下载静态编译的busybox,继续处理
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64
mv busybox-x86_64 busybox
chmod +x busybox
[root@localhost ~]# ./busybox ls -al /etc/ld.so.preload
-rw-r--r-- 1 root root 22 Jan 25 17:38 /etc/ld.so.preload
[root@localhost ~]# ./busybox cat /etc/ld.so.preload
/lib/libcurl.so.2.17.0
[root@localhost ~]# ./busybox ls -al /lib/libcurl.so.2.17.0
-rwxr-xr-x 1 root root 27112 Jan 25 17:38 /lib/libcurl.so.2.17.0
由此可以判定黑客通过 /etc/ld.so.preload 加载 libcurl.so.2.17.0 动态链接库,拦截对系统的访问,从而隐藏了有关信息, 导致top、netstat、ls等均无法看到黑客增加的文件和运行的程序。
开始清理病毒啦哇
第一步
修改密码
使用 passwd 修改密码
第二步
删除preload的动态库
执行以下命令,执行后ld.so.preload还在,但是libcurl.so.2.17.0被改了名字后不起作用
[root@localhost ~]# ./busybox sh
~ # ./busybox chattr -i /lib/libcurl.so.2.17.0; ./busybox mv /lib/libcurl.so.2.17.0 /lib/libcurl.so.2.17.0.old
~ # exit
# 执行以上命令后,退出重新登录,否则之前的bash是注入过libcurl.so的
# 下面的命令要等所有注入过libcurl.so.2.17.0的进程都退出后才有用,否则还会被改
# grep libcurl.so.2.17. /proc/*/maps 可以查看哪些进程被注入了
grep -rl 'libcurl.so.2.17.0' /proc/[0-9]*/maps | sudo xargs -I {} awk -F'/' '{print $3}' {} | sudo xargs -I {} kill -9 {}
其次,将下列文件只读属性去除。并将/etc/ld.so.preload文件内容置空;
[root@localhost ~]# chattr -i /etc/ld.so.preload
echo -n > /etc/ld.so.preload
第三步
清理恶意程序
执行以上命令后,top可以看到/usr/bin/bioset占了大量CPU,这是挖矿程序
ls -al /usr/bin/bioset
说来惭愧2021年1月30日的毒,今天终于可以被清除了,发现同时修改的还有程序/usr/bin/kthreadd
Kill -9 这两个进程,系统正常
同时发现 /root/.ssh/authorized_keys 中添加有黑客的公钥。
chattr -i /usr/bin/kthreadd /usr/bin/bioset /root/.ssh/authorized_keys
删除这4个文件,特别是authorized_keys,不然黑客还可以进来。
最后删除下列文件中除/etc/ld.so.preload文件之外的四个文件,以上操作完成后,可在此确认相关文件是否正常删除,若删除完毕,则完成该挖矿木马的清除。
```c
/etc/ld.so.preload
/lib/libcurl.so.2.17.0
/usr/bin/kthreadd
/usr/bin/bioset
/root/.ssh/authorized_keys
黑客还修改了/etc/resolv.conf,前面加了nameserver 223.6.6.6
以下代码为清除该挖矿木马的shell脚本代码,该代码仅在Centos7中测试,未在其他系统上测试,请参考使用。(若删除root用户的authorized_keys文件会影响实际业务,可手工删除木马写入的攻击者公钥。)
这个好像也是
/usr/bin/joseph
#!/usr/bin/bash
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 && mv busybox-x86_64 busybox && chmod +x busybox && mv busybox /usr/bin/
busybox ps -ef |grep /usr/bin/kthread |grep -v color |awk '{print $1}'| xargs busybox kill
busybox ps -ef |grep /usr/bin/bioset |grep -v color |awk '{print $1}'| xargs busybox kill
busybox chattr -i /etc/ld.so.preload
busybox echo "" >> /etc/ld.so.preload
busybox chattr -i /usr/bin/kthreadd
busybox rm -rf /usr/bin/kthreadd
busybox chattr -i /usr/bin/bioset
busybox rm -rf /usr/bin/bioset
busybox chattr -i /root/.ssh/authorized_keys
busybox rm -rf /root/.ssh/authorized_keys
busybox chattr -i /lib/libcurl.so.2.17.0
busybox rm -rf /lib/libcurl.so.2.17.0
至此处理完毕。
致谢:
```c
https://zhuanlan.zhihu.com/p/348960748
https://www.freebuf.com/column/162604.html
https://github.com/bg6cq/ITTS/blob/master/network/vpn/l2tpvpn/README.md