前言
本篇文章以实战攻防过程中对于远程控制和恶意程序运行等利用手段做后续的应急排查工作,根据所能获取到的信息进一步跟踪动向进行排查处置。
一、远控后门
确定IOC信息
远控后门一般不会由服务器CPU或内存等占用过高告警而发现,大多数情况都是安全设备告警,可能是流量设备,可能是主机安全设备
流量设备告警通常可以得到的信息如下
- 异常域名
- 外连 IP
- 外联端口
- 事件时间
主机安全设备告警通常可以得到的信息如下
- 恶意文件位置
- 恶意文件动作
主机安全:直接定位文件
主机安全程序的详细描述信息十分重要,至少可以知道本次是否执行成功,不过即使执行失败,我们还是需要尝试根据文件位置查找进程
图形化工具中可以直接通过搜索框进行搜索关键字
更好方式是通过搜索文件句柄
【handle 程序】
https://download.sysinternals.com/files/SysinternalsSuite.zip
这是Sysinternals Suite中的一个方便的命令行实用程序,可显示哪些文件由哪些进程打开等,可以通过下面的链接单独下载handle
https://download.sysinternals.com/files/Handle.zip
通过查询文件占用情况,如果发现存在异常进程,可以获取到进程的pid
流量检测:域名、IP、端口
如果域名没有采用 cdn
或者有稳定的 ip
,就很好办了
1、netstat
netstat -ano | findstr "ip/端⼝"
netstat
这个命令结果和标题栏对应关系没有 Sysinternals Suite
中其他工具那么好,但是还是能看出pid
的位置
2、PowerShell
Get-NetTCPConnection
Get-NetUDPEndpoint
3、图形化工具
如果域名采用了cdn
,且端口号比较大众化,可以考虑DNS
缓存和诱骗的方式
4、DNS缓存
(1)cmd
ipconfig /displaydns
(2)PowerShell
Get-DnsClientCache
(3)wmic
wmic path Win32_PerfFormattedData_DNS_DNSCache get *
5、地址诱骗
-
找一个内网或公网固定IP主机(诱捕主机),监听恶意域名采用对应的端口
-
在受害主机上监控受害主机与我们的诱捕主机之间网络连接,若有链接,记录进程id、文件位置等信息
-
通过修改host文件,将恶意域名解析到我们的诱捕主机上
-
等待受害主机上的监控返回结果
这种方法可以有效解决域名采用了 cdn
找不到IP以及进程的问题
修改 host
文件方式如下
以恶意域名 du.testjj.com
为例
通过修改 C:\Windows\System32\drivers\etc\hosts
将 du.testjj.com
解析IP修改为
123.123.123.123
监控脚本如下
@echo off
:loop
if exist "%USERPROFILE%/Desktop/bat_result.txt" (
echo "find it!!!"
timeout /T 5 /NOBREAK
goto loop
) else (
for /f "tokens=5" %%a in ('netstat /ano ^| findstr 123.123.123.123') do (
wmic process where processid=%%a get
name,executablepath,processid,CommandLine >>
%USERPROFILE%/Desktop/bat_result.txt
)
timeout /T 1 /NOBREAK
)
goto loop
6、内存搜索关键字
将已获取的域名、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=<恶意进程的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
wmic process where ProcessId=<恶意进程的PID> 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 "进程启动时间:" -NoNewline
Write-Host $startTime
# 压缩成⼀条命令
$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团队安全情报分析 – https://edr.sangfor.com.cn/#/information/information?%24tab=b
- 火绒安全最新资讯 – https://www.huorong.cn/info/
- 安全客 – https://www.anquanke.com/
- Freebuf – https://www.freebuf.com/
- 微步在线 X 情报社区 – https://x.threatbook.com/
- 安天 – https://antiy.cn/research/index.html
- …
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没有这个提示
删除恶意文件
1、确定文件占用情况
图形化工具中可以直接通过搜索框进行搜索关键字
更好方式是通过搜索文件句柄
【Handle程序】
https://download.sysinternals.com/files/SysinternalsSuite.zip
这是Sysinternals Suite中的一个方便的命令行实用程序,可显示哪些文件由哪些远程打开等
可以通过下面的链接单独下载handle:前往下载
若发现存在其他进程占用恶意文件,可能也是恶意进程,可以考虑按照之前的方法处理
2、查询注册表
部分恶意程序可能对注册表进行了修改,内容包含恶意程序的名字,这里需要在注册表中搜索一下
Win+R
打开运行框,输入regedit
,回车
这样就可以进行全局搜索了
即使搜索到了,也不要着急删除或修改,跟各方确定好,很重要
3、删除恶意文件
直接图形化删除或者通过下面命令
# cmd
del xxx
# Powershell
Remove-Item -Path xxx
善后阶段
后续文章会更新有关善后阶段相关内容,主要为定损以及针对性排查处理,目的是解决潜在的受害服务器
常规安全检查阶段
后续文章会更新该阶段有关内容,目的是找出当前系统中存在的隐藏后门等