文章目录
- 前言
- 一、事前准备
- 操作系统基本配置
- 工具准备
- 二、挖矿病毒
- 确定IOC信息
- 获取异常进程的pid
- 寻找恶意样本
- 确定进程启动时间
- 处理异常进程
前言
本篇文章主要以WIndows系统为例围绕红蓝对抗和攻防角度实施应急响应的技术手段,以多方面、多维度进行展开,对于常见的应急事件所采取的应对措施进行阐述,希望对从事网安工作的小伙伴们有所帮助!
一、事前准备
操作系统基本配置
1、开启显示隐藏文件和文件后缀
(1)Windows Server 2016:文件资源管理器=>查看=>勾选文件扩展名、隐藏的项目
(2)Windows 10:文件夹(文件资源管理器)=>查看=>勾选文件扩展名,隐藏的项目
(3)Windows 7:文件夹=>工具=>文件夹选项=>查看=>勾选显示隐藏的文件=>取消勾选隐藏已知文件类型的扩展名
工具准备
- 写保护 U 盘
- 数据盘
- 启动 U 盘
- Windows Server 系列虚拟机或镜像
- 建议同时准备 32 位工具,以应对 32 位操作系统
1、排查工具
- System Informer
- OpenArk
- 火绒剑
- D盾
- Sysinternals Suite
- Windows 调试工具集
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-dow
nload-tools - 编程语言解析环境
如果你的检查工具依赖于解释器,自行准备好,尽量避免使用受害主机上的环境 - ⼀套基本功能的小工具,类似于 busybox
- 日志分析工具 (例如 FullEventLogView)
- LastActivityView 最近活动记录查看器
- Netsh (系统自带) 流量监控⼯具
- Wireshark 流量分析工具
2、杀毒工具
- 360
- 火绒
- 腾讯安全管家
- webshell 查杀⼯具
- D盾
- 安全狗
- 深信服-僵尸网络查杀⼯具
3、漏洞验证工具
- Fscan
- Goby
- Nuclei
4、编解码与文本对比工具
- 编解码&文本对比
He3
5、内网文件传输工具
- Localsend
6、日常使用小工具
- Everything
- bandzip 或 360 压缩
- Edge 或 Chrome 浏览器
- 代码编辑器
VSCode
Sublime
Editplus
二、挖矿病毒
确定IOC信息
ioc 主要以域名、IP地址、文件md5 为主,通过内网dns服务器、dns防⽕墙、流量审计设备、主机安全等设备获取
根据IOC信息确定挖矿程序具体家族类型
- Virustotal – https://www.virustotal.com/gui/
- 深信服威胁情报中心 – https://ti.sangfor.com/analysis-platform?lang=ZH-CN
- 微步在线 – https://x.threatbook.com/
- venuseye – https://www.venuseye.com.cn/
- 安恒威胁情报中心 – https://ti.dbappsecurity.com.cn/
- 360威胁情报中心 – https://ti.360.cn/
- 绿盟威胁情报中心 – https://ti.nsfocus.com/
- AlienVault – https://otx.alienvault.com/
- RedQueen安全智能服务平台 – https://redqueen.tj-un.com/IntelHome.html
- IBM X-Force Exchange – https://exchange.xforce.ibmcloud.com/
- ThreatMiner – https://www.threatminer.org/
- 腾讯威胁情报中心 – https://tix.qq.com/
- 安天威胁情报中心 – https://www.antiycloud.com/#/antiy/index
获取异常进程的pid
1、CPU占用
(1)任务管理器
Ctrl+Shift+Esc 或图形化在下边栏右键,打开任务管理器,点击详细信息标签
可以通过点击 CPU
标题列来按照 CPU
占用降序排序,这样就可以获取到异常进程的
pid
了
(2)PowerShell
Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First
5 ProcessName,Id,CPU
这里列出了 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内存中搜索字符串)
寻找恶意样本
经过以上步骤,已经确定了恶意进程的pid,接下来我们通过pid找到恶意文件位置以及恶意文件启动时的参数
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=7592; $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
wmic process where ProcessId=17996 get Name, ExecutablePath, CommandLine /format:list
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
可以查看属性
确定进程启动时间
这一步骤的主要意义在于对比进程启动时间与恶意文件的相关时间,确定在进程启动后,该文件是否修改过
根据上属信息简单判断一下启动该异常进程的文件是否为我们找到的文件
1、PowerShell
$maliciousPid = <恶意进程的PID>
$process = Get-Process -Id $maliciousPid
$startTime = $process.StartTime
Write-Host "startTime:" -NoNewline
Write-Host $startTime
以上代码放在start_time.ps1中,然后去运行
压缩成一条命令
$maliciousPid=<恶意进程的PID>; $startTime=(Get-Process -Id $maliciousPid).StartTime; Write-Host "进程启动时间:" -NoNewline; Write-Host $startTime
2、wmic
wmic process where ProcessId=<进程PID> get ProcessId, CreationDate
wmic
的显示格式不是很友好,但是依旧可读,而且更加详细。
3、Process Explorer
当然还是可以通过右键属性的方式查看
4、Process Hacker
5、System Informer
6、OpenArk
7、获取异常文件的时间信息
文件浏览器
Process Explorer
处理异常进程
1、恶意文件样本采样
在 Windows上这个就简单多了,可以直接通过网络
或者U盘
等介质进行取样
2、威胁分析
既然有了恶意样本,可以通过人工或在线平台进行分析
- 微步云沙箱 – https://s.threatbook.com/
- Virustotal – https://www.virustotal.com/gui/home/upload
- virscan – https://www.virscan.org/
- 哈勃 – https://habo.qq.com/
- jotti – https://virusscan.jotti.org/
- scanvir – http://www.scanvir.com/
- 魔盾 – https://www.maldun.com/submit/submit_file/
- HYBRID – https://www.hybrid-analysis.com/
- 奇安信情报沙箱 – https://sandbox.ti.qianxin.com/sandbox/page
- 大圣云沙箱检测系统 – https://sandbox.freebuf.com/
- YOMI – https://yomi.yoroi.company/upload
- 360沙箱云 – https://ata.360.net/
- 安恒云沙箱 – https://sandbox.dbappsecurity.com.cn/
3、寻找病毒分析报告
- 深信服EDR团队安全情报分析
- 火绒安全最新资讯
- 安全客
- Freebuf
- 微步在线 X 情报社区
- 安天
- …
4、进程查杀
我们不仅可以杀死进程及进程树,还可以让进程暂停(Suspend)或者进程重启。
进程查杀是一个危险操作,所以可以考虑先暂停,看看是否符合预期,再决定是否杀死进程。
需要注意的是,即使暂停了进程,该进程的网络连接不见得会断,一般情况下无法发送和接受数据。
(1)暂停进程
【资源监视器】
进程暂停后,ping
的动作随即暂停
进程处于暂停状态时,可以恢复进程执行,也可以直接结束掉进程或进程树,我们尝试恢复
被暂停掉的进程继续执行,暂停和恢复前pid
不会发生变化
通过暂停以及恢复,我们基本可以确定要被处理的进程是否为该进程,当然,如果有必要的话才这么做
【PsSuspend】
https://learn.microsoft.com/zh-cn/sysinternals/downloads/pssuspend
https://download.sysinternals.com/files/PSTools.zip
暂停进程
pssuspend.exe <进程id>
恢复进程
pssuspend.exe -r <进程id>
其他图形化工具基本上都是右键,点击选择就可以了
(2)杀死进程
【taskkill】
taskkill /F /PID <进程ID>
【PowerShell】
Stop-Process -Id <进程ID> -Force
【wmic】
wmic process where ProcessId=<进程ID> call Terminate
【pskill】
https://download.sysinternals.com/files/PSTools.zip
pskill64.exe <进程ID>
【资源监视器】
其他图形化工具也是类似的使用方法
(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
没有这个提示