首页 / 资讯中心 / 文章详情

恶意代码分析入门:从零搭建病毒分析环境与实战流程

恶意代码分析入门:从零搭建病毒分析环境与实战流程 ★ FEATURED ARTICLE
开车前我想先说一个场景你电脑里突然多了个不认识的进程CPU爆满后台疯狂向外发数据包。这时候你脑子里只有一个问题——这玩意儿到底是干嘛的它想偷什么它藏在哪如果你第一次面对这种局面感到手足无措那这篇文章就是给你准备的。我做了六七年的恶意代码分析从只会双击杀毒软件扫描的纯小白到后来能靠纯手工逆向把一组混淆过的样本拆到明明白白。说实话这个领域门槛看着高真正走进去之后你会发现它跟你想象中那种“黑客大战”完全不一样更像是一场耐心的拼图游戏。这篇文章不扯废话直接把我从零基础到能够独立分析病毒程序这条路上最核心的思路、工具和实操流程全部摆出来。你不需要一开始就懂汇编也不需要懂内核驱动只要跟着这套路线走先把“快速分析”这四个字落地后面再往深了钻。1. 分析病毒程序前先搞清楚对手的运作逻辑1.1 病毒程序的行为链条和生命周期很多人拿到样本就急着开虚拟机双击这是最大的误区。你连对手要做什么都不知道点下去之后只会在茫茫日志里迷失方向。正常来说一个病毒程序无论包装得多复杂它的行为链条永远逃不过这几个阶段。第一是投放阶段也就是它通过什么途径进入你的系统。可能是钓鱼邮件附件、可能是捆绑安装包、也可能是利用浏览器漏洞自动下载。这个阶段决定了你分析它时的侧重点如果是钓鱼附件那大概率是Office宏或者脚本加载器如果是捆绑安装那就要留意它是否带了正经软件的数位签名来混淆视听。第二是执行阶段。病毒被启动之后第一件事往往是自我定位。它会检查当前进程权限够不够不够就尝试提权会检查是不是在虚拟机里是的话就装死还会把自身复制到更隐蔽的位置比如%AppData%或者%Temp%然后启动一个新进程来脱离初始的加载器。第三是驻留阶段。病毒需要保证自己能在系统里活下来。常见的手段是写入注册表Run键、计划任务、服务创建更隐蔽的还会用WMI事件订阅。这一步是最容易被杀软拦截的也是我们作为分析师最容易抓到的痕迹。第四是横向模块释放。真正的恶意功能往往不在初始样本里而是通过从远程服务器下载或从自身资源中释放后续模块。这就是为什么你分析一个样本跑了十分钟只看到它反复探测网络——它实际上在等待C2命令与控制服务器下发真正的任务指令。第五才是真正的恶意行为窃密、勒索、挖矿、弹广告随便哪一种。你把这套行为链条刻在脑子里之后再去看任何样本思路就会非常清晰我不用追着它满屏乱跑我只需要盯住每一个阶段对应的系统痕迹就够了。这也是我后面要讲的分析流程的核心逻辑——不是去读每一行代码而是追踪行为痕迹。1.2 从零开始需要补哪些基础知识说句实在话刚开始学的时候我也被那些大牛写的逆向文章劝退过满屏的汇编代码谁看了不头疼。但你真去分析病毒程序根本用不着一开始就成为汇编大师。我按实际需求排了一个优先级。排第一的是Windows操作系统的基础机制进程、线程、注册表、服务、DLL加载流程还有用户态与内核态的边界。你不理解这些就算把病毒的行为日志摆在你面前你也看不出哪些是异常的。比如一个进程把DLL注入到 explorer.exe你要是不知道系统里本来就存在大量合法的DLL注入就可能把正常行为当成恶意行为。排第二的是PE文件格式。Windows可执行程序的骨架就是PE入口点、导入表、导出表、节区、资源段这些概念必须烂熟于心。90%的病毒分析工作都是围绕PE文件展开的你不需要能手写解析器但至少要能在PE浏览工具里看懂每一项的含义。排第三的是x86/x64汇编基础。不需要精通但常见指令要认得jmp、call、push、pop、mov这些高频指令以及函数调用约定。更进一步是一句关键的话分析的时候不需要逐行读汇编只需要定位关键API调用和关键的跳转分支大多数样本的核心逻辑半小时内就能锁定。排第四的是脚本语言和常用工具链。Python在自动化分析里是主流Poweshell也要懂一些因为很多无文件攻击依赖它批处理的基础也顺手了解一下。讲到这里你可能注意到了我没有列“编程能力”这一项。实际上写病毒的人水平参差不齐很多样本的逻辑极其粗糙你要做的不是重新实现它而是理解它。动手能力是在一轮一轮实战中练出来的不是坐在那里看三个月教程就能会的。2. 从零到精通的四个阶段少走弯路的路线图2.1 阶段划分入门、进阶、实战、精通我带过很多新人发现一个很普遍的问题学习路线定得太激进。今天刚看完PE结构明天就想直接上手分析勒索软件结果被高强度混淆和反调试打个手足无措。我给按四段式推进的路线图。第一阶段是入门目标锁定在“能识别熟悉的恶意文件类型”。这个阶段别碰混淆过的样本就用那些初代的远控木马、简单下载器来练手。任务只有一个在隔离环境里让样本跑起来然后通过进程监控、文件监控、注册表监控把它的行为痕迹全部记录下来能说得清“它改了什么、写了什么、连接了哪里”。这一阶段大概需要一到两个月视你已有的系统底子而定。第二阶段是进阶目标锁定在“能读懂恶意代码的静态逻辑”。开始接触加壳样本、混淆脚本、Powershell的载荷。任务是用查壳工具确定壳类型用脱壳工具或手动脱壳手段还原样本原始代码然后再用静态分析工具去追踪关键路径。到了这个阶段你基本可以说自己“入了门”。第三阶段是实战目标锁定在“能独立完成一份完整分析报告”。样本范围扩大到勒索软件、银行木马、窃密者这些高威胁家族。这一阶段的核心不是技术难度而是流程纪律——从静态到动态从行为到网络从落地到提取IOC入侵指标每一步都要有记录最后能产出一份让应急响应团队直接拿去用的报告。第四阶段是精通目标锁定在“能对抗高级混淆与反调试”。这已经不是日常分析需求了而是在做逆向研究。如果你走到这一步你会需要虚拟机守护进程检测、反虚拟化技巧、加壳壳的脱壳、加密算法的识别和还原这些硬核内容。我个人到了第三阶段就已经能处理市面上95%的样本了第四阶段更多是你决定深耕安全研究时的方向不必急于求成。2.2 学习资源选择和每周练习节奏资源这个东西贵精不贵多。我不建议囤教程因为现在的知识更新太快你看完一套老教材再对照新样本容易产生挫败感。系统性课程可以看国外几所大学的安全入门课内容扎实又没有功利性的“速成”味道。实战平台方面我强烈推荐那些公开的恶意样本库比如MalwareBazaar、VirusShare上面有大量真实样本供你分析。要注意的是下载样本之前一定要确认自己的分析环境是隔离的这一点我在下一部分会详细解释。每周练习节奏我个人建议是“三次分析 一次复盘”。一周找三个样本一个简单、一个中等、一个略难每个样本给自己设定时间上限简单样本两小时中等样本四小时难样本不要超过八小时。到时间就出报告没分析完的部分就阉割掉直接记录“未完成”和“卡在哪个点”下周复盘的时候集中解决。这个节奏看起来压力不大但它有一个很重要的作用——逼你在有限时间内只抓关键行为而不是陷入细节泥潭。分析速度本质上就是在这种时间约束下练出来的。3. 实操前置搭建一个绝对安全的分析环境3.1 分析环境的核心原则隔离、还原、采集我先说一个很多人忽略的事实分析病毒程序最危险的时候不是运行它的那一瞬间而是你以为自己已经关闭了环境、实际上样本还在后台活跃的时候。所以环境的搭建必须遵循三条铁律。第一条铁律是物理隔离。分析虚拟机所在的宿主机不能承担任何重要工作最好是一台专用的分析机器或者一台配置还行的旧笔记本。宿主机的系统要打好补丁、装好杀软并且不要使用同一个账户保存重要数据。第二条铁律是网络可控。病毒要跟C2服务器通信你就让它连但你要布下监控。我现在常用的方案是虚拟机的网卡桥接到一张独立物理网卡再用宿主机上的Wireshark或者FakeNet工具把流量引到可控通道上。更稳妥的替代方案是在虚拟机里配置一个仅主机模式的网络环境然后在宿主机上架设一个DNS和HTTP的模拟服务比如INetSim让病毒的恶意请求全部落在你的模拟服务器上。这样你既能观察它访问了哪个域名又不会真的跟外部网络建立联系。第三条铁律是快照回滚。虚拟机一定要在干净状态下做一个基础快照样本每次运行结束后必须回滚到这个干净状态再换下一个样本继续分析。这比在同一个系统里反复清理样本要安全一百倍也省去你排查残留痕迹的时间。3.2 完整工具组合和搭建步骤我使用的虚拟化平台是VMware Workstation Pro个人学习用的话免费版也够用了。虚拟机操作系统建议装Windows 10因为目前超过70%的恶意样本目标都是Win10环境同时在虚拟机里最好再加一套Windows 7用来兼容老样本。虚拟机里要预装以下工具这件事在快照之前就必须做完因为很多监控工具要求比样本更早启动Process Monitor实时监控进程行为、注册表和文件系统访问。Process Explorer查看进程树和线程详情。Regshot比较注册表快照差异。Wireshark抓取网络流量。API Monitor抓取进程的API调用序列。x64dbg手动调试恶意代码用。PE-bear / Detect It EasyDIE查壳和PE结构分析。INetSim装在宿主机或专门的Linux虚拟机里模拟网络服务。ThreatMimic 或者 FakeNet自动模拟网络响应。搭建步骤我按顺序写一遍。第一步VMware里新建Windows 10虚拟机分配至少4GB内存、60GB硬盘空间。关于分配问题多说一句硬盘不要填满留出几十GB准备后续加装工具集和样本存储用协议上选择默认的NAT模式就不错。第二步安装系统完成后做Windows更新装好VMware Tools然后把系统防火墙默认关闭禁用Windows Defender这一步非常关键否则样本运行到一半会被杀软直接清掉你就什么都看不到了。第三步把上面列的工具全部安装并配置好。特别注意Process Monitor要开启开机自动启动因为很多样本是在系统启动早期就活跃的晚一步监控就缺失一大块。第四步关闭Wireshark以外的所有软网络服务将虚拟机的网络适配器切换到仅主机模式并把宿主机上对应虚拟网卡配置成可路由状态。第五步全部准备就绪后关闭虚拟机在VMware里拍一个快照命名为“Clean Baseline”。每次分析完一个样本直接恢复到Clean Baseline。这个过程熟练以后跑一个样本加恢复系统只需要三分钟效率极高。4. 静态分析实战不开进程也能看出所以然的门道4.1 先查壳、再看PE摸清文件的底细拿到一个待分析样本先别急着双击我习惯性做的第一件事是计算哈希值SHA256把这个作为样本的唯一ID记录到分析笔记里。然后打开Detect It EasyDIE快速看一眼文件有没有加壳、什么编译器、什么语言写的。壳这个东西我详细讲一下。加壳本质上是对原始代码进行压缩或加密运行时再在内存里还原执行这样杀软和静态分析工具就看不到真实的代码逻辑。常见的壳有UPX这种纯压缩壳也有Themida、VMProtect这种带反调试和保护机制的商业壳。对UPX来说脱壳很简单直接下载UPX工具反向解压就行。对后者快速分析阶段建议不要在脱壳上死磕而是跳过静态转动态行为分析照样能拿到大部分关键结论。壳的信息看完之后接着用PE-bear打开文件重点看导入表和节区。如果发现导入表里只有LoadLibrary和GetProcAddress那说明这个程序是故意隐藏行为、运行时才拉取真正的功能如果看到几个明显的敏感API比如VirtualAlloc、WriteProcessMemory、CreateRemoteThread那几乎可以断定它具备进程注入的能力。节区名称也是一个关键信号正常编译器生成的标准节区名一般是.text、.data、.rsrc一旦看到自定义的乱码节区名大概率也是加壳或障碍处理过的样本。还有一个容易忽略的细节是文件的数字签名。有些恶意软件为了伪装会盗用合法公司的证书。你看到签名显示“某某软件公司”本能放松警惕但仔细检查证书链可能发现证书已经被吊销或者根本就是白签名。不能依赖签名来判断是否安全它只是分析的一部分线索。4.2 字符串提取与YARA规则的快速识别静态分析里有一种性价比极高的方式就是提取字符串。一个样本会不可避免地留下许多可读文本包括URL、IP地址、注册表路径、文件名、命令参数、互斥体名称。用strings工具跑一遍再人工筛选往往能直接发现它要连接的C2地址或者要释放的载荷文件名。这里要提一个容易踩的坑混淆过的样本通常会加密字符串你不是直接就能看到的。常见对策是运行后再从内存中提取。我一般会先用动态分析跑一遍同时开一个原样提取字符串的任务等进程运行之后再用Process Explorer或者内存转储工具从进程内存里拉取解密后的字符串两相对照效率很高。YARA规则是另一个静态分析利器。你可以把已知家族样本的特征字符串、PE特征写成YARA规则扫描样本库几秒钟就能判断当前样本跟哪些已知家族吻合。实际上新样本绝大多数跟老样本有血缘关系YARA规则命中之后你就不用从头分析了直接去查对这个家族的历史分析报告省一大半时间。关于YARA规则的编写技巧强烈建议初学者先去Github上找到著名安全研究员的规则项目看他们怎么写、用什么特征再自己仿写。静态分析的最终产出是一份初步评估你要能说清楚文件类型、是否加壳、有没有签名、有没有可疑的导入函数、有没有值得关注的关键字符串。做完这些你才具备打开下一步动态分析的前提。5. 动态分析实战让病毒跑起来然后用监控工具抓个正着5.1 行为监控进程、注册表、文件与网络四线并进动态分析的哲学是静态分析跟它捉迷藏不如直接看它做什么。准备就绪之后我按一个固定的顺序把四类监控全部打开。第一类是进程监控。Process Monitor里设置过滤器只显示样本进程及它的子进程相关操作。运行样本后观察它的进程树是否能分裂出多个进程有没有注入行为有没有创建一个奇怪路径下的进程。一般来说良性软件的进程树呈树状结构恶意软件则更倾向于在启动后立刻创建不相关的子进程、边运行边释放新进程。第二类是文件系统监控。还是Process Monitor你把文件操作事件筛出来。特别关注它对C:\Windows\System32、C:\Users\Public、C:\ProgramData这些目录的读写。这些非用户目录是恶意文件最常落地的地方因为它不想让普通用户注意到。第三类是注册表监控。进程运行起来后Regshot工具打一份快照等样本运行结束后再打一份快照Diff出注册表的变化。判断标准很简单看有没有添加Run启动项、有没有创建计划任务、有没有混淆的CLSID写入。第四类是网络监控。Wireshark跑起来抓取样本运行期间的所有网络流量。这时候重点关注DNS请求和HTTP请求如果是明文HTTP流量你可能直接看到它向哪个域名上传了什么数据对勒索软件的外联行为这一步价值极大。四类监控数据收集完毕后把它们按时间线对齐。这里我踩过不少次坑——单看一类监控很容易被误导比如说注册表里多了个Run键看起来像是驻留但进程立刻退出了Run键可能只是用来当标志位的并不是真正的启动项。只有把四类数据拼起来看你才能在脑子里重建完整的攻击链图谱。5.2 调试器应用与反调试对抗的基础操作如果行为监控发现了一个关键点但你还想搞清楚它具体怎么运作比如它怎么生成解密密钥、怎么判断当前环境这时候就要上调试器了。我常用的调试器是x64dbg打开样本后让它停在入口点Entry Point。这里讲一个关键基础概念样本在入口点之前的代码不是真正的原始代码如果加壳了你在入口点看到的其实是壳的解压代码这时候下断点需要等壳跑完才能命中原始代码区。比较常用的方式是在内存断点上补齐先运行程序让壳自解密等到程序跳到原始代码段执行我们再断下来。反调试这块必须有一个基本认知。很多样本会调用IsDebuggerPresent检测自己是否被调试发现是就直接退出或走迷惑路径。应对方式很简单x64dbg里可以直接修改API的返回值或者用ScyllaHide这个插件自动隐藏调试痕迹。当然也有更高级的比如通过计算函数执行时间判断是否被单步跟踪、通过检测特定窗口类名识别分析工具这些在进阶阶段多用几次就能感知到规律。调试过程里我最常用的断点策略是API断点对病毒程序里高频出现的几个敏感API设断点——VirtualAlloc、WriteProcessMemory、CreateRemoteThread、URLDownloadToFile、RegSetValueEx。一旦命中断点顺着调用栈往回看基本就能定位到核心行为代码的位置。调试器这块不要指望看两遍教程就会了我强烈建议你先拿一个自定义的简单程序自己写一个Delay执行和读取注册表的程序来做调试练习熟悉各类断点后再跟恶意样本硬碰硬。6. 常见问题与排查技巧实录分析路上的高频坑6.1 遇到样本一跑就退出八成在检测环境这种情况新手遇到得最多。样本检测到它在虚拟机里运行就直接退出行为监控什么都抓不到。应对手段按顺序试先检查虚拟机里是不是开了VMware Tools的进程如果没有禁用样本扫一眼进程列表就能识别出来。关掉VMware Tools的启动项改动虚拟机的显示驱动再有针对性地隐藏虚拟机的硬件特征比如BIOS信息和网卡MAC可以借助一些反虚拟机检测的开源小工具完成。如果这些还不奏效说明样本用了反虚拟化指令比如通过CPU指令检测当前环境。这时候别硬刚用静态分析先找反VM检测代码把相关跳转直接改掉之后再做动态执行。6.2 样本死活连不上C2服务器怎么办如果VirusTotal已经标记这是窃密木马但你的动态环境里它一直不联网有两个可能。第一是样本内置了域名失效机制你抓到的域名可能已经不存在。第二是它用了域名生成算法DGA在当前时间点算出来的是一个新域名。这种情况下你可以用FakeNet或INetSim对所有外部DNS请求统一返回一个本机IP这样样本发出的HTTP请求就会被引导到你的模拟服务上你就可以看到它请求的路径和POST/GET参数。很多时候它把窃取的信息通过HTTP POST提交即使没有真实服务器光看参数名就能猜出它偷了什么数据。6.3 一个非常实用的高频率分析模板最后分享一个我整理的分析模板它可以直接拿来做笔记。每次拿到新样本按这个顺序填空分析速度会明显提升样本哈希SHA256 / MD5 / SHA1文件类型 / 大小 / 加壳情况DIE信息数字签名检查结果静态字符串提取结果中最可疑的五条导入表里敏感API列表运行后创建的进程树文件系统新增文件列表带路径注册表新增项列表带路径网络外联域名 / IP / HTTP请求疑似恶意行为分类下载器、远控、窃密、勒索、挖矿提取到的IOC列表文件哈希、域名、IP、注册表路径、文件路径结论与建议处置建议、查杀特征这个模板的妙处在于它逼着你按分析流程走不会漏掉任何一个关键维度。用多了之后你会发现面对不同类型样本也能快速套用不会慌张。分析病毒程序这件事说白了就是经验堆出来的手艺。你第一次分析一个样本可能要忙活一整天第三次遇到同家族的变体时可能四十分钟就能出报告。我这些年最深的感受是分析速度不是靠天赋堆出来的而是靠清晰的方法论和大量重复练习。把这篇文章里的流程吃透把工具链跑熟再把模板用起来三个月之后你再回头看一定会发现自己看样本的视角完全不一样了。到那时候你可以开始研究那些真正让人头疼的混淆技术和内核级对抗了。
阅读完成 · 觉得有帮助?
咨询建站