一次挖矿入侵处理记录(2021.01.27)

https://github.com/bg6cq/ITTS/blob/master/security/mine/README.md

转自上面链接,也是我的亲身经历,供大家学习。网络安全大家引以为戒。爱闹的小兄弟们,别闹了啊,让张老师花了好几天的心思在你们弄得事情上。

 

[原创]一次挖矿入侵处理记录(2021.01.27)

本文原创:中国科学技术大学 张焕杰

修改时间:2021.01.27

一、突发的大量SSH扫描

2021.01.25 22:40,接到用户报告发现有来自校内7个IP的大量SSH扫描。同时,部署的蜜罐也发现有校内IP在进行扫描。

这些IP只有一个有校外访问权限对外发起了扫描,其他IP都是校内通信。第一时间禁止了这些IP通信。

由于校内服务器管理员和用户安全意识不强,大量使用弱密码,因此类似扫描是经常发生的,一般是服务器被入侵引起的。

2021.01.26 发现有一个IP在对外扫描,碰巧管理员是熟悉的老师,就提醒管理员关注。

2021.01.27 管理员提供了密码,登录后发现有若干台虚拟机均为简单密码,其中一台有连接校园网的网卡,黑客从这个网卡 入侵后,又入侵了其他虚拟机。

二、被入侵机器的查处情况

登录被入侵的虚拟机,执行w、top、netstat等命令有很大延迟,top看到CPU利用率较高,但显示的进程CPU利用率并不高。

执行rpm -Va没有看到明显被修改的系统关键文件,netstat等程序也未发现明显异常。

执行ldd ldd /usr/bin/ls; ldd /usr/sbin/ss 发现多了/lib/libcurl.so.2.17.0 (0x00007f3718028000) 动态库, find / -name libcurl.so.2.17.0 找不到这个文件

执行strace /bin/ls 2>t 在t中可以看到

access("/etc/ld.so.preload", R_OK)      = 0
open("/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=22, ...}) = 0
mmap(NULL, 22, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x7f4f9c05c000
close(3)                                = 0
open("/lib/libcurl.so.2.17.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\34\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=27112, ...}) = 0

说明文件是存在的,但是ls /lib看不到,怀疑黑客使用/etc/ld.so.preload 加载了动态连接库后门来隐藏信息 (参考https://www.freebuf.com/column/162604.html ,警惕利用Linux预加载型恶意动态链接库的后门)

strace配合tcpdump可以发现每次执行命令时,会访问www.fullskystar.top,由于机器无法访问外网,所以命令执行的很慢。

允许IP可以访问外网,看到与www.fullskystar.top 443端口有如下典型的挖矿通信流量:

发送:{"id":1,"jsonrpc":"2.0","method":"login","params":{"login":"CPU: 4C/4T Memory: 3GB XMRig: 6.6.0 Since:2021/1/25 18:42:4",
  "pass":"x","agent":"XMRig/6.6.0 (Linux x86_64) libuv/1.40.0 gcc/9.3.1","algo":["cn/1","cn/2","cn/r","cn/fast","cn/half",
  "cn/xao","cn/rto","cn/rwz","cn/zls","cn/double","cn/ccx","rx/0","rx/wow","rx/arq","rx/sfx","rx/keva","argon2/chukwa",
  "argon2/chukwav2","argon2/wrkz"]}}

接收:{"jsonrpc":"2.0","id":1,"error":null,"result":{"id":"ac694f3d69b506b8","job":{"blob":
  "0e0eb6a3c580067396fd31ac9a0b378b84a253e104e5404dae018f2290647ea0f784eabc4de88a00000081db68a2d810b369ca7cbb49f052530888278262d2b52db767c8cb1acc494775235b",
  "job_id":"KcXF8WaZx0","target":"ffff0000","algo":"rx/0","height":2283630,"seed_hash":"f1a94ed2953f45f464eb3948e105899933ea0780d3c70918ee78359f2f571985"},
  "extensions":["algo","nicehash","connect","tls","keepalive"],"status":"OK"}}

下载静态编译的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等均无法看到黑客增加的文件和运行的程序。

三、被入侵机器的处理过程

  1. 修改密码

使用 passwd 修改密码

  1. 删除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 可以查看哪些进程被注入了
[root@localhost ~]# chattr -i /etc/ld.so.preload 
echo -n > /etc/ld.so.preload 
  1. 清理恶意程序

执行以上命令后,top可以看到/usr/bin/bioset占了大量CPU,这是挖矿程序

ls -al /usr/bin/bioset 时间与被入侵的时间一致,同时修改的还有程序/usr/bin/kthreadd

Kill -9 这两个进程,系统正常。

同时发现 /root/.ssh/authorized_keys 中添加有黑客的公钥。

chattr -i /usr/bin/kthreadd /usr/bin/bioset /root/.ssh/authorized_keys 后

以上4个文件备份后交给安全同行继续深入分析处理。

删除这4个文件,特别是authorized_keys,不然黑客还可以进来。

黑客还修改了/etc/resolv.conf,前面加了nameserver 223.6.6.6,但估计程序有bug,在resolv.conf后面填充了0,凑够了256字节,将这个文件也恢复。

至此处理完毕。


欢迎 加入我们整理资料

posted @ 2021-01-28 06:12  卡西莫多了  阅读(277)  评论(0编辑  收藏  举报