远控后门
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 信息¶
远控后门一般不会由服务器 CPU 或内存等占用过高告警而发现,大多数情况都是安全设备告警,可能是流量设备,可能是主机安全设备
流量设备告警通常可以得到的信息如下
- 异常域名
- 外连
IP
- 外联端口
- 事件时间
主机安全设备告警通常可以得到的信息如下
- 恶意文件位置
- 恶意文件动作
0x02 主机安全:直接定位文件¶
主机安全程序的详细描述信息十分重要,至少可以知道本次是否执行成功,不过即使执行失败,我们还是需要尝试根据文件位置查找进程
图形化工具中可以直接通过搜索框进行搜索关键字
更好方式是通过搜索文件句柄
handle
程序
https://download.sysinternals.com/files/SysinternalsSuite.zip
这是Sysinternals Suite中的一个方便的命令行实用程序,可显示哪些文件由哪些进程打开等
可以通过下面的链接单独下载 handle
https://download.sysinternals.com/files/Handle.zip
通过查询文件占用情况,如果发现存在异常进程,可以获取到进程的 pid
0x03 流量检测: 域名、IP、端口¶
如果域名没有采用 cdn
或者有稳定的 ip
,很好办了
1. netstat¶
netstat
这个命令结果和标题栏对应关系没有 Sysinternals Suite
中其他工具那么好,但是还是能看出 pid
的位置
2. Powershell¶
3. 图形化工具¶
如果域名采用了 cdn
,且端口号比较大众化,可以考虑 DNS
缓存和诱骗的方式
4. DNS 缓存¶
1) cmd¶
2) Powershell¶
3) wmic¶
5. 地址诱骗¶
- 找一个内网或公网固定IP主机(诱捕主机),监听恶意域名采用对应的端口
- 在受害主机上监控受害主机与我们的诱捕主机之间网络连接,若有链接,记录进程id、文件位置等信息
- 通过修改
host
文件,将恶意域名解析到我们的诱捕主机上 - 等待受害主机上的监控返回结果
这种方法可以有效解决域名采用了 cdn
找不到IP以及进程的问题
修改 host
文件方式如下
以恶意域名 du.testjj.com
为例
通过修改 C:\Windows\System32\drivers\etc\hosts
将 du.testjj.com
解析IP修改为 123.123.123.123
直接修改 hosts
无法保存,可以先保存到桌面,之后拖进去覆盖原来的 hosts
文件
监控脚本如下
@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 内存中搜索字符串
0x04 寻找恶意样本¶
经过以上步骤,已经确定了恶意进程的 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¶
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
可以查看属性
0x05 确定进程启动时间¶
这一步骤的主要意义在于对比进程启动时间与恶意文件的相关时间,确定在进程启动后,该文件是否修改过。
根据上述信息简单判断一下启动该异常进程的文件是否为我们找到的文件
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
0x06 处理异常进程¶
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
没有这个提示
0x07 删除恶意文件¶
1. 确定文件占用情况¶
图形化工具中可以直接通过搜索框进行搜索关键字
更好方式是通过搜索文件句柄
handle
程序
https://download.sysinternals.com/files/SysinternalsSuite.zip
这是Sysinternals Suite中的一个方便的命令行实用程序,可显示哪些文件由哪些进程打开等
可以通过下面的链接单独下载 handle
https://download.sysinternals.com/files/Handle.zip
若发现存在其他进程占用恶意文件,可能也是恶意进程,可以考虑按照之前的方法处理
2. 查询注册表¶
部分恶意程序可能对注册表进行了修改,内容包含恶意程序的名字,这里需要在注册表中搜索一下
Win + r
打开运行框,输入 regedit
,回车
这样就可以进行全局搜索了
即使搜索到了,也不要着急删除或修改,跟各方确定好,这很重要
3. 删除恶意文件¶
直接图形化删除或者通过下面的命令
0x08 善后阶段¶
直接查看善后阶段即可,主要为定损以及针对性排查处理,目的是解决潜在的受害服务器
0x09 常规安全检查阶段¶
直接根据常规安全检查章节进行安全检查即可,目的是找出当前系统中存在的隐藏后门等