一次挖矿入侵处理记录(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等均无法看到黑客增加的文件和运行的程序。
三、被入侵机器的处理过程
- 修改密码
使用 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 可以查看哪些进程被注入了
[root@localhost ~]# chattr -i /etc/ld.so.preload
echo -n > /etc/ld.so.preload
- 清理恶意程序
执行以上命令后,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字节,将这个文件也恢复。
至此处理完毕。
欢迎 加入我们整理资料