恶意代码上机排查思路与方法
1、排查标准
- 记录检查机器IP信息
- 记录每个工具的检查截图
- 文件的启动时间、路径、命令行参数,如果文件源文件存在就截图保留文件修改、创建时间。
- 记录内存模块存在进程中的内存地址范围、 IOC在进程全部内存的位置。
- 记录启动项、服务
- 清除启动项、服务、进程,删除恶意代码文件。
应急响应保留现场经验
安全服务应急响应事件到客户现场先提醒客户注意保存现场。发现安全事件如果是当天还有流量,不要重启。
客户怕联网通报很正常。如果业务可以临时中断先拔出网线或者网络设备上设置中毒机器权限禁止跟互联网通信。
保存现场两个步骤:1、内存保存,2、硬盘文件留存。
* 内存保存:Windows下使用Dumpit.exe抓取,Linux下使用LiME抓取。提取的文件如果是可以插U盘就插U盘提取,不让插U盘就开启一个网络隔离区域,取证分析主机接入内网通过NC传送数据。
* 硬盘文件拷贝:看用户需求,视具体的情况而定。
避免重启后,出现无文件技术恶意代码无法提取的情况。
如果是当天检出的机器中招,有条件的情况下,找到C2回连的频率在设备上对中招机器的数据网络流量抓取一份含有C2联网的数据便于分析。
2、特征排查-自写上机排查工具
通过搜索国内外恶意代码公开的分析报告,分析样本,提取行为特征编写排查工具。
3、进程排查
1)数字签名排查
-
- 可疑进程检查。
通过校验数字签名、文件厂商、映像路径等信息排查存在的可疑程序。
关注重点
使用PChunter的右键模块【校验所有数字签名】检查所有进程的数字签名情况。
- 检查不存在数字签名(紫红色),数字签名非微软的进程(蓝色)。
- 2、查进程可疑DLL
检查每个进程里的DLL文件是不是被远程线程注入。
关注重点
使用PChunter的【查看进程模块】-【校验所有模块数字签名】,查看是否被非法注入了其他厂商的签名文件。
2)联网进程排查
关注联网的进程
关注重点
排查已知道恶意代码家族的域名、IP对应了哪个进程。使用Process Hacker 2的【Network】模块、PCHunter的【网络】模块检查正在联网进程。
3)进程注入技术排查
检查进程替换技术
关注重点
使用ProcessExplorer列出所有进程的DLL以树状结构显示。【分栏】-【View DLL】看文件描述看签名。从【View】-【Select Columns】可以显示DLL的属性和验证数字签名。
关注是不是有某家公司进程被其他家公司的签名文件注入的情况。
- 服务以粉色高亮显示、进程为蓝色、新进程为绿色、被终止进程为红色。绿色和红色高亮显示是临时的。
4)进程替换技术排查
数字签名验证的是磁盘上的景象文件,而不是内存中的,查找内存中驻留的字符串排查进程空间是否被替换。
关注重点
使用ProcessExplorer.exe的右键【Properties】找到【string】选项对比模块中的【image】、【memory】。
通过比较包含在磁盘上可执行文件的字符串与内存同一个可执行文件的字符串,通过左下角的单选按钮在这两个字符串视图切换。如果这两个字符串列表有很大不同,那么可能就发生了进程替换。例如字符串FAVORITES.DAT多次在【Memory】中(内存中的镜像),但是在【Image】中无法找到(磁盘上的镜像)。
4、文件排查
1)进程文件排查
通过进程查看工具找到对应的文件路径。
关注重点
使用Process Hacker 2的【Properties】模块查看进程运行的路径、命令行参数。
查看进程文件属性中的详细信息是否与映像路径、文件描述等相符合。
是否存在正常软件的说明信息。
检查文件说明、文件版本、产品名称、版权、原始文件名是否存在可疑信息。
如果为Wscript.exe、Powershell.exe、MShta.exe、MSBuild.exe这类程序要记录下来启动的命令参数,排查文件是不是还存在,存在就截图文件修改日期,创建日期。
几种可疑情况:
1)文件说明等必要信息不存在。
2)文件详细信息与映像路径不一致。
3)程序图标与程序功能说明不符。
4)原始文件名与现有文件名不符。
2)驱动排查
可疑驱动模块检查。检查数字签名、文件详细信息中是否存在可疑项。
关注重点
PChunter下的【驱动模块】-【校验所有数字签名】
如果文件不存在的情况( 正常应用不存在该现象)。此时需要用【拷贝内核内存】方式来获取样本。
拷贝内核内存:dump 驱动文件加载的内存。
5、启动信息排查
查看启动项,注册表启动、计划任务启动项目对应的文件、命令参数是否存在异常
关注重点
- PChunter
PChunter中的【启动信息】模块,关注数字签名信息、文件信息,还要关注启动路径中的参数。 PChunter中启动项、服务、计划任务可以通过右键【校验所有数字签名】查看未签名或签名非微软的启动项。
重点关注经常利用的 Windows 后门程序: Regsvr32.exe、Mshta.exe、Rundll32.exe、Powershell.exe等
- Autoruns.exe
更全面的信息可以在微软查看启动项的工具Autoruns.exe上查看,操作参数比操作PCHunter更方便。
打开软件界面,选择 【Scan Options】,勾选 【Verify code signatures】,选择 【Rescan】。
- 红色代表数字签名异常的程序,因此需要重点关注。
【Properties 】属性选项是需要打开去查看文件信息是否异常。Everything 项目太多,下面单独介绍每个标签页。
- Logon: 系统自启动项
查看文件信息是否异常,签名人是否异常,文件路径是否匹配等异常信息。
-
Explorer:文件资源管理器加载项
-
InternetExplorer:IE 插件
-
ScheduledTask:计划任务
-
Services: 服务程序
-
Drivers: 自加载驱动
6、内存排查
通过内存导出工具导出内存,使用内存取证分析框架分析。
1)异地操作
远程协助时用【Dumpit.exe】把系统内存Dump下来后可以用volatility取证分析框架里的yara规则分析哪个进程中存在IOC,还有恶意代码的驻留内存。
证明正常进程空间里含有恶意代码,volatility.py方法
vol.py -f "xxx.raw" --profile=winxx yarascan -y fm.yara
vol.py -f "xxx.raw" --profile=winxx yarascan -Y "xxxx"
vol.py -f "xxx.raw" --profile=winxx pslist > pslist
vol.py -f "xxx.raw" --profile=winxx memdump -p 604 -D C:\projectcode\vir_mem_dump\
把受感染进程的内存dump出来,通过微软工具String将内存里的字符串打印出来,搜索恶意代码域名字符串就可以看到网络特征里的恶意代码域名了。注:图中604这个PID号对应受感染后的Winlogon进程。
尝试把Winlogon的DLL全都dump出来,依次用Strings打印出来。就可以定位到哪个DLL里有被注入的ShellCode了
2)本地操作
- Winhex
使用Winhex 的搜索查找功能去查找 IOC 信息字符串或特征字符串,其支持字符串和 16 进制两种
搜索方式。
打开内存(ALT+F9)出现 Edit Main Memory 页面。【工具】-【打开RAM(R)】,选择要搜索的进程,选择【整个内存】,【搜索】-字符串检测已经知道的恶意代码域名是否存在该进程中,支持十六进制搜索和ASCII、UNICODE搜索。
3)排查内存模块恶意代码
排查进程中可疑的内存模块,找出可能是Shellcode的模块代码。
关注重点
通过processhacker2-【Momory】模块,找到【Type】为Private,权限为【RWX】,大小为180~300KB的模块。查到以下内容就导出
- - 1、权限是RWX权限的。
- - 2、文件块大小在170~300内
- - 3、代码头是以下3种字符
E8 DC C4 03
4D 5A
55 8B EC 8B 45