Spring Boot进程被异常终止-记一次挖矿木马处理

时间:2024-04-09 08:08:07

目录

1.故障现象

2.处理过程

3.简单分析一下这个木马

4.总结

5.参考


1.故障现象

朋友的某客户生产环境Spring Boot进程被异常终止,重复启动无效,请求支援。

  • 使用脚本在后台启动Spring Boot程序后,多次执行xx.sh status查看状态,最后应用进程pid 24366消失。

Spring Boot进程被异常终止-记一次挖矿木马处理

  • 在命令行前台执行启动后不久,显示“Killed”进程被终止。

Spring Boot进程被异常终止-记一次挖矿木马处理

2.处理过程

经了解,客户当天晚上关闭该虚拟机增加了内存,除此之外没有程序的变更和发布,也未调整过其他操作系统参数。

由于是帮朋友忙,客户的环境和应用并不熟悉,手头没有主机、应用的监控历史。

  • 首先还是复现故障,手动在shell前台执行java -jar启动应用,直到进程退出,照例同时使用top观察CPU、内存使用正常,tail -f /var/log/message查看没有异常日志记录,查看dmesg无异常,查询last -x | head | tac无异常登录。
  • 怀疑是不是发生了OOM进程自动退出了,加上生成OOM dump文件的参数,再次启动应用并观察:java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/app/gc.hprof -jar -Dserver.port=6002 -Dspring.profiles.active=app SpringBootApp-1.0.jar ,发现启动后30s左右就再次回显“Killed”,异常退出,并没有任何dump文件生成,说明应该不是发生了OOM退出的。
  • 再次启动应用,使用jmap命令多做几次dump,jmap -dump:file=/home/app/javaDump01.hprof,format=b 24344,把dump文件下载到自己PC上,使用jvisualvm查看dump文件,没有发现什么死锁之类的异常。
  • 再次shell前台启动应用,jps查看该java pid=111413。yum -y install strace,使用strace跟踪进程:strace -f -T -tt -e trace=all -p 111413 ,进程被kill后,strace显示:01:27:01.801830 +++  killled by SIGKILL  +++,也并没有看到更多的有用信息。

Spring Boot进程被异常终止-记一次挖矿木马处理

  • yum -y install psmisc,使用pstree -apnh查看进程树,发现一个异常进程“daemon”及其5个子进程,开始怀疑是否中招了。

Spring Boot进程被异常终止-记一次挖矿木马处理

  • lsof -p 110583查看这个"daemon"进程访问的文件,发现其访问了/mnt/daemon这个可执行文件,经客户确认没人知道这个可疑文件和守护进程,也不是虚拟机的agent  tools工具。

Spring Boot进程被异常终止-记一次挖矿木马处理

Spring Boot进程被异常终止-记一次挖矿木马处理

  • crontab -l发现每分钟都会启动一次/mnt/daemon,基本可以确定是中木马了。木马文件故意命名为"daemon"伪装混淆,并且可能早就潜伏在系统里,只是本次维护重启服务器后启动运行了。

Spring Boot进程被异常终止-记一次挖矿木马处理

  • 立即crontab -e注释掉上面那行计划任务,kill -9 110583杀掉"daemon"进程。再次启动应用观察就不会出现被kill的情况了。

3.简单分析一下这个木马

在主机PC上新创建一个CentOS7的虚拟机,把木马文件放上去,执行一下果然复现了上面的情况:(1)在crontab中创建每分钟执行一次从计划任务(2)后台运行daemon木马进程。

  • lsof -p查看,发现有一条:TCP centos7temp:43900->185.238.3.72:http (ESTABLISHED),说明正在访问185.238.3.72(IP地址在荷兰)的80端口。

Spring Boot进程被异常终止-记一次挖矿木马处理

  • netstat -lantp也证实了对185.238.3.72的访问

Spring Boot进程被异常终止-记一次挖矿木马处理

  • 抓包看看吧,tcpdump tcp -i ens33 -s 0  -w ./tcpdump202011_01.cap,把tcpdump文件下载下来,用wireshark打开分析,发现是jsonrpc协议的数据流。根据这篇文章分析suricata下的挖矿行为检测,抓包中的jsonrpc request和response的特征,符合门罗币挖矿木马的行为。

Spring Boot进程被异常终止-记一次挖矿木马处理

Spring Boot进程被异常终止-记一次挖矿木马处理

4.总结

  • 一定要做好内外网安全,定期检查是否有异常进程,做好监控。
  • 虽然定位到了挖矿木马程序并清理掉了,但仍未确定为什么该木马会kill掉Spring Boot的进程。。留待以后研究吧。

5.参考

  1. 通过jps、jstack、jmap、jstat指令监控分析当前虚拟机堆栈运行状态情况以实时排除调式运行阶段问题
  2. jvm启动参数设置OOM异常时,自动生成dump文件
  3. 强大的strace命令用法详解
  4. 我的进程去哪儿了,谁杀了我的进程
  5. suricata下的挖矿行为检测