挖矿病毒
0x00 固定证据¶
在发生任何安全事件时,确定安全事件真实存在以后,第一步都建议固定证据,固定证据一般有以下几种类型,受害单位可以根据实际需求选择
- 系统快照 - 一般云环境比较方便这么做
- 磁盘取证
- 针对性取证 - 例如日志文件、网络信息、数据库等
- 内存取证
系统快照¶
这种主要是云环境或虚拟化环境比较方便,目前似乎这类方式取证出来的内容都会丢失内存信息,属于是关机-快照-导出
虚拟机软件似乎支持例如暂停、冻结等功能,具体根据实际情况决定
磁盘取证¶
磁盘取证有很多工具可以考虑
dd
FTK Imager
针对性取证¶
这部分推荐我们自己的 NOPTrace-Collector
https://github.com/Just-Hack-For-Fun/NOPTrace-Collector
我们还推出了一套数字取证和应急响应规范,可以根据此规范自己开发取证程序
https://github.com/Just-Hack-For-Fun/OpenForensicRules
内存取证¶
DumpIt
FTK Imager
取证后,对证据进行分析时,需要先单独复制一份,保持所有安全人员分析的基础是相同的
0x01 确定 ioc 信息¶
ioc
主要以域名、IP地址、文件md5 为主,通过内网dns服务器、dns防火墙、流量审计设备、主机安全等设备获取
根据ioc
信息确定挖矿程序具体家族类型
- Virustotal
- 深信服威胁情报中心
- 微步在线
- venuseye
- 安恒威胁情报中心
- 360威胁情报中心
- 绿盟威胁情报中心
- AlienVault
- RedQueen安全智能服务平台
- IBM X-Force Exchange
- ThreatMiner
- 腾讯威胁情报中心
- 安天威胁情报中心
0x02 获取异常进程的 pid¶
1. CPU占用¶
1) 任务管理器¶
Ctrl+Shift+Esc
或图形化在下边栏右键,打开任务管理器,点击详细信息标签
可以通过点击 CPU
标题列来按照 CPU
占用降序排序,这样就可以获取到异常进程的 pid
了
2) Powershell¶
这里列出了 cpu
占用前 5 的进程以及 pid
,但是不是很直观显示占用率
3) Process Explorer¶
https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
https://download.sysinternals.com/files/ProcessExplorer.zip
这个工具现在已经是微软官方的工具,界面看起来和任务管理器差不多,实质上它还有一个功能,就是替换系统的任务管理器
4) Process Hacker¶
https://processhacker.sourceforge.io/
看起来和process explorer
看起来差不多,功能选项也差不多,功能项数似乎少一些,也是通过点击就可以看到进程 CPU
占用信息
5) System Informer¶
应该是
process hacker
开发者的新项目,支持多种cpu
架构https://systeminformer.sourceforge.io/
这个项目还在不断更新,可以考虑使用
2. 内存占用¶
1) 任务管理器¶
点击内存标题列,降序排序
2) Powershell¶
Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object -Property Id, ProcessName, WorkingSet -First 5
3) Process Explorer¶
https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
https://download.sysinternals.com/files/ProcessExplorer.zip
通过点击 Working Set
降序排序获取内存占用较高的进程 pid
4) Process Hacker¶
https://processhacker.sourceforge.io/
通过点击 Private bytes
降序排序获取内存占用较高的进程 pid
5) System Informer¶
应该是
process hacker
开发者的新项目,支持多种cpu
架构https://systeminformer.sourceforge.io/
使用方法与 process hacker
基本一致
3. 网络占用¶
1) 资源监视器¶
任务管理器 -> 性能 -> 点击下方打开资源管理器
或可以通过搜索 resmon
启动
点击网络标签
在这里可以看到网络占用较高的进程,也可以通过点击列标题进行排序
2) Process Hacker¶
https://processhacker.sourceforge.io/
标题栏右键,选择显示的栏
根据实际需要,找到添加显示的栏,这里以 Network total rate
为例
按照 Network total rate
降序排列,就可以找到流量占用较大的进程 pid
3) System Informer¶
应该是
process hacker
开发者的新项目,支持多种cpu
架构https://systeminformer.sourceforge.io/
在标题栏右键,点击 Choose columns...
这里可以通过搜索network
可以快速筛选出与网络相关的栏,这里就是按照实际需求选择了,这里以总的网络速度为例 (Network total rate
)
这里按照选择的栏进行降序排序就好
4. 内存搜索关键字¶
将已获取的域名、IP等作为关键字,使用僵尸网络查杀工具在内存中进行搜索
成功发现恶意程序
具体使用方法见 小技巧 -> 0x03 内存中搜索字符串
0x03 寻找恶意样本¶
经过以上步骤,已经确定了恶意进程的 pid, 接下来我们通过 pid 找到恶意文件位置以及恶意文件启动时的参数
部分程序可能是通过 powershell 远程加载等方式实现无文件挖矿,此时需要根据实际情况进行分析
1. 任务管理器¶
任务管理器默认情况显示的列里没有文件位置以及启动参数,可以通过调整显示列来显示
勾选路径名称
和 命令行
至于其他与任务管理器类似的程序也是一样的逻辑
2. Powershell¶
将以下内容保存为 Powershell
脚本 file.ps1
,之后在 Powershell
终端中执行就可以了
$maliciousPid = <恶意进程的PID>
$process = Get-WmiObject -Class Win32_Process -Filter "ProcessId = $maliciousPid"
$processName = $process.Name
$processPath = $process.ExecutablePath
$commandLine = $process.CommandLine
Write-Host "进程名称:" -NoNewline -ForegroundColor Green
Write-Host $processName
Write-Host "进程文件位置:" -NoNewline -ForegroundColor Green
Write-Host $processPath
Write-Host "命令行参数:" -NoNewline -ForegroundColor Green
Write-Host $commandLine
当然,也可以变成一行
$maliciousPid=<恶意进程的PID>; $process=Get-WmiObject -Class Win32_Process -Filter "ProcessId = $maliciousPid"; $processName=$process.Name; $processPath=$process.ExecutablePath; $commandLine=$process.CommandLine; Write-Host "进程名称:" -NoNewline -ForegroundColor Green; Write-Host $processName; Write-Host "进程文件位置:" -NoNewline -ForegroundColor Green; Write-Host $processPath; Write-Host "命令行参数:" -NoNewline -ForegroundColor Green; Write-Host $commandLine
3. wmic¶
4. Process Explorer¶
当然,在 Process Explorer
中还可以在选中异常进程后,右键 Properties
看该进程的详细信息
5. Process Hacker¶
也可以通过右键的方式来查看
6. System Informer¶
也可以通过右键进行查看
7. OpenArk¶
https://openark.blackint3.com/
https://github.com/BlackINT3/OpenArk
OpenArk 也是一款集成性的安全排查工具,用于对抗 Rootkit
可以查看属性
0x04 确定进程启动时间¶
这一步骤的主要意义在于对比进程启动时间与恶意文件的相关时间,确定在进程启动后,该文件是否修改过。
根据上述信息简单判断一下启动该异常进程的文件是否为我们找到的文件
1. Powershell¶
# 代码版
$maliciousPid = <恶意进程的PID>
$process = Get-Process -Id $maliciousPid
$startTime = $process.StartTime
Write-Host "进程启动时间:" -NoNewline
Write-Host $startTime
# 压缩成一条命令
$maliciousPid=<恶意进程的PID>; $startTime=(Get-Process -Id $maliciousPid).StartTime; Write-Host "进程启动时间:" -NoNewline; Write-Host $startTime
2. wmic¶
wmic
的显示格式不是很友好,但是依旧可读,而且更详细
3. Process Explorer¶
当然还是可以通过右键属性的方式查看
4. Process Hacker¶
5. System Informer¶
6. OpenArk¶
7. 获取异常文件的时间信息¶
文件浏览器
Process Explorer
0x05 处理异常进程¶
1. 恶意文件样本采样¶
在 Windows 上这个就简单多了,可以直接通过网络或者 U
盘等介质进行取样
2. 威胁分析¶
既然有了恶意样本,可以通过人工或在线平台进行分析
3. 寻找病毒分析报告¶
4. 进程查杀¶
我们不仅可以杀死进程及进程树,还可以让进程暂停(
suspend
)或者进程重启进程查杀是一个危险操作,所以可以考虑先暂停,看看是否符合预期,再决定是否杀死进程
需要注意的是,即使暂停了进程,该进程的网络连接不见得会断,一般情况下无法发送和接收数据
1) 暂停进程¶
【资源监视器】
进程暂停后,ping
的动作随即暂停
进程处于暂停状态时,可以恢复进程执行,也可以直接结束掉进程或进程树,我们尝试恢复
被暂停掉的进程继续执行,暂停和恢复前 pid
不会发生变化
通过暂停以及恢复,我们基本可以确定要被处理的进程是否为该进程,当然,如果有必要的话才这么做
【PsSuspend
】
https://learn.microsoft.com/zh-cn/sysinternals/downloads/pssuspend
https://download.sysinternals.com/files/PSTools.zip
暂停进程
恢复进程
其他图形化工具基本上都是右键,点击选择就可以了
2) 杀死进程¶
【taskkill
】
【Powershell
】
【wmic
】
【pskill
】
https://download.sysinternals.com/files/PSTools.zip
【资源监视器】
其他图形化工具也是类似的使用方法
3) 杀死进程树¶
如果恶意进程所在的整个进程树都是恶意的,那就需要杀死整个进程树,在某个进程上杀死进程树就是杀死由该进程起的所有子孙进程
杀死进程已经是危险操作了,杀死进程树更要谨慎
查看进程树
这件事自带的工具并不直观,需要借助第三方工具
【Process Explorer
】
可以看到, PING.EXE
进程的父进程为 cmd.exe
pid
为 3252
, 再上一层父进程为 explorer.exe
pid
为 3140
如果此时在 PING.EXE
上右键,杀死进程和杀死进程树是没有大区别的,因为 PING.EXE
并没有子进程,但是如果在上一层 cmd.exe
上杀死进程树,那么 cmd.exe (pid: 3252)
以及其子进程 conhost.exe
和 PING.exe
也会被杀死
尝试在 PING.EXE
右键杀死进程树
可以看到,其实只有 PING.EXE (pid: 6656)
自己被杀死了
我们再启动 PING.EXE
,尝试在 conhost.exe (pid: 5240)
进程右键杀死进程树
虽然 cmd
的黑框框消失了,但是 PING.EXE
还在继续运行,如果仅在 cmd.exe (pid: 5272)
上右键,仅杀死进程
PING.EXE
进程还是会继续运行下去
接下来尝试"赶尽杀绝"
尝试重新起一个 cmd
并且执行 PING.EXE
,在 cmd
进程上右键杀死进程组
这回由该cmd.exe (pid: 5500)
其的进程以及子进程都被杀死了
【Process Hacker
】
Process Hacker
以进程树形式显示的话,没有找到相关选项,可能默认就是吧,如果你的不是,可以通过以下方法实现
点击 Name
标题栏三次,其实就是我们之前排序,第三次正好是取消排序,之后就会以进程树的形式显示
剩下的使用方法和 Process Explorer
一样了
【System Informer
】
基本与 Process Hacker
一样
这里需要提一点,可以看到,在
PING.EXE
上右键时,结束进程树的按钮是灰色的,这些小细节应该就是System Informer
与Process Hacker
相比进步的地方吧,所以现在比较建议用新工具,当然前提是你测试过没有蓝屏这种严重bug
4) 杀死线程¶
这是一个更加危险的操作,可能对操作系统的稳定性产生影响,尤其是在你手抖的时候
【System Informer
】
通过右键 -> 属性(Properties
) -> Threads
就可以看到该进程具体的线程信息了
在线程上右键就可以选择 Terminate
来杀死线程
可以看到,杀死 PING.exe
进程中的一个线程后, 原本的 ping
命令卡死了,不再输出 ping
命令的信息,但是并没有退出(结束进程),进程依旧活着,而且剩余两个线程也没有退出
过了几秒
整个进程死掉了
Process Explorer
会提示下载一个其他程序,但是不下载也能显示,System informer
没有这个提示
0x06 删除恶意文件¶
1. 确定文件占用情况¶
图形化工具中可以直接通过搜索框进行搜索关键字
更好方式是通过搜索文件句柄
handle
程序
https://download.sysinternals.com/files/SysinternalsSuite.zip
这是Sysinternals Suite中的一个方便的命令行实用程序,可显示哪些文件由哪些进程打开等
可以通过下面的链接单独下载 handle
https://download.sysinternals.com/files/Handle.zip
若发现存在其他进程占用恶意文件,可能也是恶意进程,可以考虑按照之前的方法处理
2. 查询注册表¶
部分恶意程序可能对注册表进行了修改,内容包含恶意程序的名字,这里需要在注册表中搜索一下
Win + r
打开运行框,输入 regedit
,回车
这样就可以进行全局搜索了
即使搜索到了,也不要着急删除或修改,跟各方确定好,这很重要
3. 删除恶意文件¶
直接图形化删除或者通过下面的命令
0x07 善后阶段¶
直接查看善后阶段即可,主要为定损以及针对性排查处理,目的是解决潜在的受害服务器
0x08 常规安全检查阶段¶
直接根据常规安全检查章节进行安全检查即可,目的是找出当前系统中存在的隐藏后门等