strace -tt -T -f -e trace=file -o /opt/strace.log -s 1024 -p $(lsof -i:$(netstat -na | awk '/51./&&/SYN_SENT/{gsub(".*:","",$4);print $4}') | awk 'NR>1{print $2}')
先检查当前服务器的网络连接,查看是否有陌生 IP
netstat -na|awk '/ESTABLISHED/{print $5}'|awk -F: '{print $1}'|sort -r |uniq -c
查看到有一个默认 IP 是 51.x.x.x,将 IP 放到 ip138 网站一查,是国外的 IP,又查了下中国的公网地址段,发现中国没有 51.x.x.x 的地址段。遂在安全组里面先把 这个 IP 设置成黑名单。让他无法与外网完成 TCP 连接,当安全组配置好以后,再检查发现,这个挖矿程序总共有 4 个 IP,继续通过查网络连接的脚本 4 个 IP 都获取到,然后放到安全组里面加入黑名单,这样几个黑名单的 IP 就都无法与外网完成 TCP 连接了。
然后就是通过端口查进程,但发现这个进程几乎秒关。完全无法获悉到。既然手动查进程不行,就用脚本来搞
因为 51 开头的 IP 都已经被限制了访问,所以网络连接状态一直是 SYN_SENT。按照这个思路,用下面脚本把本地端口获取到。
netstat -na | awk '/51./&&/SYN_SENT/{gsub(".*:","",$4);print $4}'
单独开一个窗口监控进程的命令
watch -d -n1 'netstat -na |grep 51.'
获取到端口以后,我考虑通过 lsof -i:端口 来查进程 PID。 然后把上面的命令结合起来,就能指导进程 PID 了
lsof -i:$(netstat -na | awk '/51./&&/SYN_SENT/{gsub(".*:","",$4);print $4}') | awk 'NR>1{print $2}'
有了 PID 就好办了。我们可通过 ls -l /proc/PID 来查看这个进程的状态。但要想把进程调用的所有文件复制出来还是不是很容易(因为进程 1 秒左右就被自动干掉了),所以我想了个方法:捕获进程调用的内存信息。这样就可以看到他跑了哪些信息,为了方便看数据,我就用 starce 来跑了。并把结果存储到一个日志文件中。这样就可以观察到整个程序是怎么工作的
strace -tt -T -f -e trace=file -o /opt/strace.log -s 1024 -p $(lsof -i:$(netstat -na | awk '/51./&&/SYN_SENT/{gsub(".*:","",$4);print $4}') | awk 'NR>1{print $2}')
快速杀死进程,避免产生复制程序和软连接(单独杀一个进程是杀不死的) 其实在处理之前我也观察了下,有 4 个主进程,且每个进程的长度都是 10 为,且全为连续的小写字母。这就为我做过滤提供了非常准确的信息。为甚么这些进程是 10 位呢。因为是通过 systemd-udev 来生成的。
ls -l --full-time /usr/bin/* /bin/* /tmp/* | awk -F'/' "/^-/&&/$(date +%F)/&&length(\$NF)==10"|awk '{print $NF}' | xargs rm -rf
-
Linux
944 引用 • 943 回帖
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于