背景:总结一下遇到挖矿时应该如何做应急响应与溯源分析。
1.挖矿特征分析
当服务器或PC处于什么样的状态时,我们可以判定为被挖矿。通常来说,当我们的服务器或PC资源(CPU)使用率接近或超过100%,并持续高居不下导致服务器或PC操作延缓,我们就可以判定被挖矿。常见挖矿其它特征如下:
服务器或PC访问[过]不受信任的地址,这些地址包括:主机、IP、域名。这是由于大部分挖矿都需要从一个不受信任的地址下载初始化程序,而不受信任的来源主要是:第三方情报结构,企业内部历史数据沉淀。
服务器或PC新增异常或恶意文件、进程或服务,并且大部分异常文件保存在服务器或PC的TMP目录中。
服务器或PC的定时任务发生变更。
2.挖矿应急响应流程
PS:在整个处理挖矿的应急响应过程中,我们应该严格执行做好记录与备份工作。包括对分析过程中的命令、分析的文件都做好记录与备份。
这里的流程是一个最简化的流程,通常对于小B来说完整的流程包括:
2.1 确认告警是否属于挖矿
通常我们都是通过告警的形式得知服务器或PC被挖矿。这个时候我们首先需要判断告警是否属于误报,如果不是误报那么需要确认告警是否真的属于恶意挖矿,如果不属于需要丢到其它的应急响应流程中,如果属于挖矿就需要进行后续的处理。
下面是一些常见的确认挖矿方法:
使用图形化界面分析确认
a. 打开任务管理器
:Ctrl + Alt + Delete
快捷键 或者 win + r
快捷键,输入 taskmgr
;
b. 在任务管理器
中找到资源管理器
;
c. 通过资源管理器
找到占用CPU资源较高的服务或进程,获取其PID信息;
d. 利用获取的PID信息在任务管理器
中的详细信息
一栏中找到对应的程序,右键打开文件位置
,获取异常文件目录;
e. 进入到异常文件目录中,对文件进行分析,确认是否属于挖矿程序;
使用命令分析确认:打开终端或powershell:win + r
快捷键,输入 cmd
# 获取所有进程详情并将结果输出到tmp.txt文件
wmic process get caption,commandline /value >> tmp.txt
# 获取单一进程详情
wmic process where caption=”svchost.exe” get caption,commandline /value
# 获取子进程的父进程信息
wmic process where Name="svchost.exe" get ParentProcessID
使用第三方工具分析确认:各有千秋,大家自己选择。
Process Monitor:无需安装
Process Hacker:无需安装
火绒剑:需安装,界面展示更友好(个人意见)
a. 使用top
命令查看系统性能,找出消耗资源较高的进程PID;
b. 根据获取的PID信息利用ps -ef -p PID
命令找出系统进程详细信息;
c. 根据进程详细信息定位到文件位置,进入文件位置进行文件分析,确认是否属于挖矿程序。
# 除了top之外,还有很多比较好用的一些Linux命令
uptime # 查看机器的负载情况
vmstat 1 # 每秒输出一次系统核心指标
mpstat -P ALL 1 # 每秒显示所有CPU的占用情况
pidstat 1 # 每秒输出一次CPU的占用率
iostat -xz 1 # 每秒输出一次磁盘IO
# 在使用ps时,需要注意一些ps的参数
2.2 确认挖矿后的清理工作
当我们通过2.1确认服务器或PC属于被挖矿后,我们需要执行清理工作。当然了关于不同应急响应人员在执行2.2与2.3这两步时顺序可能不太一样,在小B看来没什么区别,如果先分析再删除,更多是为了不破坏被攻击的环境方便溯源;但是如果我们在整个过程中做好完整的备份与记录,先删除再分析也OK。
下面是一些常见的清理挖矿方法:
在2.1.1小节确认挖矿程序后,先对挖矿程序进行备份。然后先关闭对应的服务与进程,再删除对应的定时任务,最后删除对应的文件。在删除文件之后,反向再查询一遍定时任务、进程与服务,最好是在间隔一定时间段后再复查一次。
在Windows中通常使用图形界面进行操作,所以就不废话了。
Linux中在确认挖矿以后,也同样需要备份挖矿程序,再执行响应的操作。
停止服务:systemctl stop *.service
;
杀掉进程:kill 9 PID
,很多时候不光杀掉一个进程;
删除文件:rm -fr abnormal_file
,删除文件时可以使用find / -name abnormal_file
查找出系统中所有的恶意文件;
清理定时任务:crontab -e
;
与Windows相同的是在删除完成后我们需要反向操作一次与间隔一定时间后再复查一次是否清理干净。
2.3 为什么会被挖矿(溯源)?
主要分析用户的新增、修改(用户属性的修改)、删除、登录,以及两类用户:特权用户和可登录用户。
cat /etc/passwd # 查看用户信息
awk -F ":" '{ if($3==0)print $1 }' /etc/passwd # 查看特权账户
awk -F ":" '{ print $1,$7 }' /etc/passwd | grep -E "/bin/bash*" # 查看可登陆用户
# 除此之外Linux还有很多查看用户登录信息的命令
lastlog
users
w # w -s
who # who | cut -d' ' -f1 | sort | uniq
whoami
控制面板
--> 用户账户
,也可以通过命令行进行分析,对于Windows要分析历史登录用户信息需要从系统事件日志或安全设备日志着手,我这边没有发现有效的命令,大家知道可以私我。net user # 查看用户,值得注意的是,如果攻击者添加一个类似username$的用户,使用net user命令查看不到
net localgroup administrators # 查看属于管理员组用户,使用此命令可以看到类似username$的用户
query user # 查询当前登录用户
在分析端口与网络连接时有2个点需要注意,一是系统开放给互联网的端口并不一定真实开放了,需要考虑是否有防火墙等因素的存在,如果有我们还需要分析防火墙的规则;二是攻击者可能不一定是通过被挖矿服务器攻入,也可能是通过局域网内部其他机器侵入。
netstat -tulnp # 查看系统的udp与tcp连接
netstat -ano | find "ACK"
netstat -ano -p tcp | findstr "LISTENING"
分析定时任务需要注意不同目录、不同用户下的定时任务。
# 查看crontab目录中所有文件
cat /etc/cron.*/*
cat /etc/crontab
# 查看不同用户的定时任务
crontab -u username -l
# 通过定时任务日志进行分析
cat /var/log/cron*
管理工具
--> 任务计划程序
(PS:2008之后任务计划程序
不在控制面板
中了,而是在管理工具
中) ;二是BAT文件。前者打开即可查看,后者需要找到对应的文件进行查看。# 查看所有已启动服务
systemctl list-units --type=service
# 查看服务启动项
systemctl list-unit-files | grep enabled
Windows:对于Windows的启动项有两种形式分析
win + r
,输入shell:startup
查看。
注册表启动项::win + r
,输入regedit
,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
查看
历史命令分析一般只可以在Linux上进行分析,并且要保证历史执行命令以日志形式存储到统一日志分析平台中,否则历史命令容易被攻击者清除,并且如果攻击者未登陆服务器(以webshell的形式)执行命令也记录不到攻击者执行的命令。
溯源很多程度依赖日志分析,不论是 Windows Server 或者是 Linux Server ,我们都需要从日志中提取攻击者的攻击路径,是通过暴力破解服务还是通过应用层服务进入都可以从日志中找到痕迹,这里不做太多的叙述,大家有兴趣可以读一下公众号heysec的日志分析系列,关于分析的文章后续会陆续放出。
特定说一下的是Linux下的日志可以通过 awk
、grep
、sed
等命令直接进行分析,在文末的Refer中我有引入一些比较好的文章大家可以查看;对于Windows查看事件日志可以在图形化界面直接查看 win + r
,输入eventvwr
或者 控制面板
--> 系统和安全
--> 查看事件日志
。
Webshell:可以使用免费的一些工具对系统网站目录进行排查与分析。
Linux:相对Windows来说,Linux的病毒木马较少,主要是分析是否有rootkit,可以使用chkrootkit与rkhunter检查后门或rootkit信息。
Windows:Windows有很多的恶意病毒查杀软件,包括上文中提到的火绒也可以进行分析。
分析方法还可以查找系统特定目录最近一段时间被修改或访问过的文件。
在找到挖矿程序之后,首先我们可以分析挖矿程序在服务器或PC做的操作,这有助于帮助我们清理挖矿程序;其次我们还可以得到几个基本信息,利用这些信息我们也可以对其进行溯源。大部分的挖矿程序都是脚本文件可以直接使用文本编辑器进行分析,仅有少部分的挖矿程序需要用到类似WinHex等专业的文本工具。
挖矿程序运行用户,比如运用Confluence用户运行挖矿程序,很可能意味着我们服务器上的Confluence被攻陷了。
挖矿程序自身特征:名称、矿池或钱包地址。
通过模拟攻击者入侵的方式,对目标进行以获取权限的多维度渗透,一般耗时比较久不到万不得已一般不推荐使用。主要包括:端口扫描、暴力破解、GetWebShell、RCE、未授权访问等主流的获取权限方式。
服务器或PC补丁安装信息;
服务器或PC运行服务版本信息;
…………
2.4 对被攻陷目标进行安全加固
其实做加固,大部分情况都是如下三种:
打补丁或升级版本:不论是系统、应用程序、服务组件等都应该使用不含有已知高危漏洞的版本;
关端口或者通过防火墙做访问控制策略;
购买安全防护产品:IDS、IPS、Firewalls等;
2.5 举一反三内部排查
当我们完成了以上所有步骤后,我们还有件事情待做,这也是很多应急响应程序中忽视的一步,就是通过当前的整个过程去排查内部服务器或PC是否还有被挖矿的情况。也许没有被挖矿的情况但服务器或PC存在被攻击的可能性也是我们需要去排查的。
做完这一步,整个挖矿的应急响应流程也就基本结束了,写好报告进行汇报就是最后的收尾工作了!
3.常见的挖矿附链接
一般挖矿的攻击者是不会去找一些复杂的入侵手段的,目前市面上比较多的挖矿都是未授权访问和RCE漏洞,所以大家平时在对内部服务器或PC进行扫描或者测试的时候需要额外注意这类型的漏洞,以及在分析的时候也可以多向这个思路靠近。
confluence 挖矿木马应急响应:https://www.w3xue.com/exp/article/20199/53730.html
Linux 遭入侵,挖矿进程被隐藏案例分析:https://paper.seebug.org/629/
记一次失败的挖矿病毒应急响应:https://m09ic.top/posts/35826/
无文件挖矿应急响应处置报告:https://www.freebuf.com/articles/system/206611.html
一次入侵应急响应分析:https://www.freebuf.com/articles/network/186071.html
应急响应系列之OA被入侵挖矿分析报告:https://www.freebuf.com/articles/network/205387.html
应急响应系列之无文件攻击分析:https://www.freebuf.com/articles/network/216918.html