恶意软件行为分析:Process Monitor与Wireshark组合实战指南

📅 2026/6/24 19:10:51
恶意软件行为分析:Process Monitor与Wireshark组合实战指南
1. 项目概述为什么需要组合分析恶意软件行为在安全分析这个行当里单打独斗的工具往往只能给你一个片面的视角。你可能会用杀毒软件扫出一个恶意文件但它是怎么进来的运行后又干了什么它偷偷联系了哪个服务器这些关键问题静态扫描常常无能为力。这就是为什么动态行为分析尤其是结合系统行为监控和网络流量抓取成为了我们分析未知威胁、复盘安全事件的“黄金标准”。这次要聊的就是如何把Process Monitor和Wireshark这两款神器拧成一股绳对恶意软件样本进行一场“外科手术式”的解剖。Process Monitor我们习惯叫它 ProcMon是 Sysinternals 套件里的王牌它能像手术台上的无影灯一样照亮样本在系统里的一举一动文件创建、注册表读写、进程启动、网络连接尝试事无巨细。而 Wireshark则是网络世界的听诊器能捕获和分析流经网卡的所有数据包让你看清样本在暗地里和外界“窃窃私语”了什么。单独使用它们你只能看到一个侧面ProcMon 告诉你“它想打开 C:\Windows\System32\cmd.exe”Wireshark 告诉你“它向 1.2.3.4 的 443 端口发送了加密数据”。但当你把两者的时间线对齐故事就完整了样本先篡改了注册表实现持久化ProcMon 记录然后启动了一个子进程ProcMon 记录该子进程立即尝试连接 C2 服务器Wireshark 记录并上传了系统信息Wireshark 解密或分析载荷后得知。这种关联分析能让你从“知道有问题”跃升到“清楚问题到底出在哪以及它想干什么”。这个分析流程特别适合安全研究人员、应急响应工程师、恶意软件分析师甚至是那些想深入了解自己电脑上某个可疑程序行为的进阶用户。它不依赖于特征码而是基于行为证据因此对于零日漏洞利用、无文件攻击、新型勒索软件等传统杀软可能漏报的威胁有着不可替代的价值。接下来我们就一步步拆解如何搭建这个分析环境并像侦探一样从海量日志和数据包中找出决定性的线索。2. 分析环境搭建与核心工具解析工欲善其事必先利其器。一个隔离、可控的分析环境是安全分析的基石而深刻理解手中工具的能力与局限则是高效分析的前提。2.1 安全分析实验室的构建要点分析恶意软件首要原则是隔离。绝对不能在日常使用的主机或公司生产网络上直接运行未知样本。常见的方案是使用虚拟机。我个人强烈推荐使用VMware Workstation Pro或VirtualBox来创建隔离的 Windows 分析环境。虚拟机配置要点网络隔离将虚拟机的网络适配器设置为“主机仅模式”或“NAT模式”。避免使用“桥接模式”以防样本感染同一局域网内的其他机器。在分析的最后阶段如果需要观察样本的网络行为可以短暂切换到“NAT模式”并配合防火墙规则进行控制。系统快照在安装完干净的 Windows 系统、分析工具但尚未运行样本之前创建一个干净的“快照”。每次分析结束后都回滚到这个快照确保每次实验都在一个纯净的状态下开始。资源分配给予虚拟机足够的内存建议 4GB 以上和 CPU 核心因为 ProcMon 和 Wireshark 在记录高频率事件时资源消耗较大。共享文件夹为了方便将样本文件传入虚拟机可以设置一个只读的共享文件夹。切记分析完成后该文件夹在宿主机上应被妥善处理或删除。注意高级的恶意软件具备检测虚拟机环境的能力。如果怀疑样本有反虚拟机行为可能需要使用更复杂的沙箱环境或对虚拟机进行特定配置如修改 BIOS 信息、隐藏虚拟机进程来绕过检测这属于更进阶的话题。2.2 Process Monitor系统行为的显微镜Process Monitor 不是一个简单的进程查看器。它实时监控并记录四种核心事件文件系统活动所有文件的读、写、创建、删除操作。注册表活动所有注册表键的读、写、创建、删除操作。进程/线程活动进程的创建、退出线程的创建与执行。网络活动TCP/UDP 的监听与连接注意它只记录“尝试连接”这个行为不捕获具体数据。它的强大之处在于过滤和详情。启动 ProcMon 后事件会像瀑布一样刷屏。如果不加过滤信息将毫无价值。核心操作逻辑开始捕获启动 ProcMon 后捕获默认是开启的工具栏上的“魔杖”图标是亮的。在运行样本前最好先点击“清除”按钮清空当前日志然后确保捕获是开启状态。运行样本在虚拟机中执行恶意软件样本。停止捕获样本行为执行完毕后或你认为关键行为已发生后点击“魔杖”图标停止捕获。关键过滤技巧按进程名过滤这是最常用的。在 Filter 菜单选择Filter - Filter...添加条件Process Nameis[你的样本进程名].exe然后选择Include。这样日志就只显示该进程的活动。按路径过滤如果你怀疑样本操作了特定目录如系统目录、用户文档目录可以添加PathcontainsC:\Windows\System32之类的过滤条件。按操作类型过滤可以只显示WriteFile文件写入或RegSetValue注册表设置值等特定操作。排除系统进程在分析初期可以排除System、svchost.exe等大量产生噪音的系统进程让画面更干净。需要重点关注的 ProcMon 事件进程创建样本启动了哪些子进程Process Create这可能是它注入代码、下载第二阶段载荷或执行横向移动的标志。文件写入在哪些路径创建或修改了文件特别是临时目录、启动目录、系统目录下的可执行文件或脚本。注册表持久化是否修改了Run、RunOnce、服务、计划任务等注册表键来实现开机自启命名管道/Mutex创建了哪些命名管道或互斥体这常用于进程间通信或作为“感染标记”防止同一恶意软件在系统中重复运行。2.3 Wireshark网络流量的录音机Wireshark 负责网络层面的监控。它的核心工作是抓包和解码。抓包前的关键设置选择正确的网卡启动 Wireshark在主界面会列出所有可用的网络接口。在虚拟机中通常只有一个虚拟网卡如“Intel(R) PRO/1000 MT”。你需要选择它作为抓包接口。捕获过滤器在开始抓包前设置用于在抓包阶段就丢弃不关心的流量减少资源占用和文件大小。例如如果你只关心样本与特定 IP 的通信可以设置host 1.2.3.4。对于初步分析建议先不设捕获过滤器以免漏掉关键信息。开始抓包点击选定的网卡Wireshark 立即开始捕获所有经过该网卡的数据包。运行样本与分析在 Wireshark 开始抓包后切换到虚拟机桌面运行恶意样本。观察 Wireshark 界面你会看到数据包列表开始滚动。样本行为结束后点击 Wireshark 的红色停止按钮。核心分析技巧显示过滤器这是 Wireshark 分析的核心。在抓包完成后使用用于在已捕获的数据中快速定位目标。ip.addr [样本IP或服务器IP]过滤出涉及特定 IP 的所有流量。tcp.port 443过滤出 HTTPS 流量。http或dns快速查看所有 HTTP 或 DNS 请求。tcp.stream eq [数字]选中一个 TCP 包右键 - “追踪流” - “TCP流”Wireshark 会自动生成显示过滤器只显示该完整会话的所有包这对于分析一次完整的通信极其有用。协议分层解码Wireshark 的强大在于它能解析数百种协议。对于一个 HTTPS 包它能展示以太网帧头、IP 头、TCP 头并告诉你这是一个 TLS 握手或应用数据。虽然无法解密 HTTPS 内容但通过分析 TLS 握手阶段的“客户端问候”包往往能发现样本连接的服务器的域名SNI 扩展这是一个非常重要的线索。端点与会话统计通过Statistics - Endpoints和Statistics - Conversations可以快速查看哪些 IP 地址之间通信最频繁使用了哪些端口这有助于快速定位可疑的 C2 通信。将两者关联的关键时间戳。ProcMon 和 Wireshark 的记录都带有精确到微秒的时间戳。当你发现 ProcMon 中记录样本进程创建了一个网络连接显示目标 IP 和端口你可以将这个时间点与 Wireshark 中对应时间点的 TCP 握手包SYN, SYN-ACK, ACK关联起来从而将系统行为与网络行为一一对应。3. 实战演练从样本执行到行为关联分析理论讲得再多不如亲手做一遍。我们假设有一个名为suspicious.exe的样本现在在隔离的虚拟机中用 ProcMon 和 Wireshark 对它进行一次完整的“体检”。3.1 准备工作与基线捕获在运行样本前我们需要一个相对“安静”的环境并确保工具就位。关闭非必要程序关闭虚拟机中所有不必要的应用程序特别是浏览器、邮件客户端、自动更新服务等以减少分析时的背景噪音。启动并配置 ProcMon以管理员身份运行 Process Monitor。点击工具栏上的“清除”按钮或按 CtrlX清空可能存在的旧日志。暂时不设置任何过滤器。确保捕获是开启的魔杖图标亮起。启动并配置 Wireshark以管理员身份运行 Wireshark需要权限才能抓包。选择正确的虚拟网卡接口。可选但推荐设置捕获过滤器为了初步减少噪音可以设置not arp and not icmp来过滤掉大量的 ARP 广播和 ICMP 协议包它们通常与样本核心行为无关。点击“开始捕获”按钮蓝色鲨鱼鳍图标。记录开始时间记下当前的系统时间或直接看 ProcMon/Wireshark 界面上的时间。这将是分析的起始锚点。3.2 执行样本与关键行为捕获现在是时候让样本“动起来”了。执行样本在虚拟机中找到suspicious.exe并双击运行。观察其窗口行为如果有的话例如是否快速闪退、是否弹出错误提示、是否请求管理员权限等。这些直观现象是后续分析的重要提示。观察与等待让样本运行一段时间例如 1-2 分钟以便其完成可能的持久化、下载、通信等行为。你可以同时观察 ProcMon 的日志是否在飞速滚动以及 Wireshark 是否有新的数据包出现。停止捕获首先回到 Wireshark点击红色停止按钮结束网络抓包。然后回到 ProcMon点击魔杖图标停止系统事件捕获。顺序很重要先停 Wireshark可以确保网络活动的结束点被准确记录后停 ProcMon可以捕获到样本进程退出等相关事件。此时ProcMon 的列表里可能已经有数十万条事件Wireshark 也可能捕获了成千上万个数据包。别慌我们一步步来提炼。3.3 ProcMon 日志深度剖析面对海量日志我们需要像淘金一样层层过滤找到最有价值的 nuggets。第一步定位样本进程本身在 ProcMon 中使用快捷键CtrlT调出进程树窗口。在这里你可以清晰地看到suspicious.exe是由哪个父进程启动的通常是explorer.exe以及它自己又创建了哪些子进程。这是理解恶意软件执行链的第一步。记下样本进程的完整名称和 PID进程ID。第二步应用进程过滤器在 Filter 菜单中添加一个新过滤器Process Nameissuspicious.exe操作选择Include。点击“应用”。现在视图里只剩下suspicious.exe这个进程产生的所有事件了。日志量会大幅减少。第三步按操作类型分类排查即使过滤后事件类型依然繁杂。我们可以借助 ProcMon 底部的“事件类型”选项卡进行快速分类查看注册表重点关注RegSetValue操作。逐条检查路径寻找常见的自启动项HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKLM\SYSTEM\CurrentControlSet\Services\创建新的服务HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options用于映像劫持 发现此类操作意味着样本试图在系统重启后依然保持活跃。文件系统重点关注WriteFile和CreateFile操作。它是否在C:\Users\[用户名]\AppData\Local\Temp\或C:\Windows\Temp\下创建了可执行文件.exe, .dll, .vbs这可能是释放的后续载荷。是否修改了系统关键文件如C:\Windows\System32\drivers\etc\hosts用于域名劫持是否在用户目录或桌面创建了疑似勒索信的文件如README.txt,DECRYPT_INSTRUCTIONS.html进程查看Process Create事件。样本启动了哪些新进程常见的可能是cmd.exe /c ...执行命令行指令。powershell.exe -EncodedCommand ...执行经过 Base64 编码的 PowerShell 脚本这是非常流行的无文件攻击手法。启动了另一个看似无关的进程可能是进程注入或进程镂空的结果。网络查看TCP Connect或UDP Connect事件。这里会显示样本尝试连接的目标 IP 地址和端口号。例如你可能会看到一条记录suspicious.exe尝试连接203.0.113.5:443。请务必记下这个 IP 和端口这是关联 Wireshark 分析的关键。第四步检查进程退出和清理痕迹查看样本进程的Process Exit事件了解它何时结束。同时注意观察在进程退出前后是否有其他进程可能是它创建的子进程进行了大量的文件删除操作这是恶意软件试图清除入侵痕迹的常见行为。3.4 Wireshark 流量关联分析拿到 ProcMon 中发现的疑似 C2 服务器 IP例如203.0.113.5和端口443后我们转向 Wireshark。第一步应用显示过滤器定位流量在 Wireshark 顶部的显示过滤器栏中输入ip.addr 203.0.113.5然后回车。视图将只显示所有源或目的 IP 是该地址的数据包。如果流量仍然较多可以进一步过滤端口ip.addr 203.0.113.5 and tcp.port 443。第二步分析通信模式TCP 三次握手找到最早的[SYN],[SYN, ACK],[ACK]序列包。这标志着连接的开始。查看这个握手过程的时间戳与 ProcMon 中记录的TCP Connect事件时间戳进行比对它们应该几乎同时发生。这证实了“是样本进程发起了这次连接”。协议识别连接端口是 443大概率是 HTTPS/TLS。观察握手后的数据包。展开一个 TLS 包查看协议详情。寻找域名在 TLS 握手阶段的Client Hello包中展开Transport Layer Security - Handshake Protocol: Client Hello - Extensions - server_name。这里可能会直接暴露其连接的域名SNI例如c2.malicious-domain.com。这个域名信息比 IP 地址更有价值因为它可能指向多个 C2 服务器或用于动态解析。观察心跳连接建立后是否每隔固定时间就有小尺寸的数据包交互这可能是恶意软件在发送“心跳”包向 C2 服务器报告自己依然在线。数据上传/下载观察Application Data包的长度。突然出现的一系列从本地发往服务器的大尺寸数据包可能是在上传窃取的文件如文档、截图而从服务器发来的大尺寸数据包则可能是在下载第二阶段的恶意模块或更新配置。第三步还原会话内容针对非加密协议如果样本不幸或者说我们幸运地使用了未加密的 HTTP、FTP 或自定义的明文协议我们可以直接看到通信内容。选中该会话的一个包右键 -追踪流-TCP流或UDP流。一个新的窗口会弹出以 ASCII 或十六进制形式展示整个会话的请求和响应。在这里你可能会直接看到HTTP 的 GET/POST 请求路径和参数。上传的数据可能是经过编码的系统信息。服务器下发的命令如whoami,dir,download http://.../payload.exe。第四步DNS 请求分析在运行样本前我们可能没有目标 IP。这时分析 DNS 请求至关重要。在 Wireshark 显示过滤器中输入dns。查看样本运行时间点附近产生的所有 DNS 查询请求。恶意软件在连接 C2 服务器前通常需要解析域名。关注那些看起来是随机生成的、长字符串的子域名例如xkjhdfg.duckdns.org或者模仿正常服务但略有差别的域名例如update.microsoft-gb.com这些很可能是恶意域名。通过以上步骤我们成功地将 ProcMon 中看到的“进程A在时间T1尝试连接IP:Port”这一系统行为与 Wireshark 中“在时间T1捕获到从本机到IP:Port的 TCP SYN 包且后续 TLS 握手显示域名为X”这一网络行为关联起来并进一步分析了通信内容。至此样本的网络行为意图就清晰了很多。4. 高级技巧、问题排查与行为报告提炼掌握了基础流程我们再来看看如何提升分析效率解决常见问题并将散落的证据整理成一份有价值的报告。4.1 提升分析效率的高级技巧ProcMon 的后台记录与启动日志对于某些一启动就结束或行为非常短暂的样本你可以在样本运行前就启动 ProcMon 并开始记录运行样本等几秒后停止。然后通过过滤样本进程名和其子进程来分析。更高级的用法是使用 ProcMon 的“启动日志”功能Options - Enable Boot Logging重启系统后ProcMon 会记录从内核启动开始的所有事件这对于分析那些作为驱动或服务加载的顽固 rootkit 特别有效。Wireshark 的着色规则与配置文件Wireshark 允许你自定义数据包的着色规则。例如可以将所有 DNS 查询失败NXDOMAIN响应的包标记为红色将到已知恶意 IP 的流量标记为紫色。你可以导入社区维护的恶意 IP/域名列表来创建规则这样可疑流量会在捕获时立即高亮显示非常直观。时间同步与精确关联确保分析虚拟机内的系统时间准确并且 ProcMon 和 Wireshark 都使用该系统时间。在分析时可以同时打开两个工具的窗口按照时间戳排序并排比对寻找精确匹配的事件。使用 Sysmon 进行增强微软的 Sysinternals 套件中还有一个强大的工具叫Sysmon。它可以作为系统服务安装将关键的安全事件如进程创建、网络连接、文件创建时间变更等记录到 Windows 事件日志中并且比 ProcMon 更适合做长期的、后台的监控。你可以将 Sysmon 的日志导出与 ProcMon 的详细日志互为补充。4.2 常见问题与排查实录在实际操作中你肯定会遇到各种棘手的情况。以下是我踩过的一些坑和解决办法问题一ProcMon 捕获的事件太多卡死或找不到重点。排查这是最常见的问题。通常是因为没有及时应用过滤器或者过滤器设置得不够精确。解决先停止捕获然后清除现有日志。在运行样本前就设置好过滤器。例如如果你知道样本文件名直接添加Process Nameis样本名.exe的Include过滤器。你还可以添加一个Process NameisSystem的Exclude过滤器来减少大量系统噪音。使用 ProcMon 的“丢弃过滤器”功能Filter - Drop Filtered Events。这会在内核层面直接丢弃被过滤的事件极大减轻内存和CPU压力但设置要非常小心以免误丢关键事件。问题二Wireshark 抓不到任何样本发出的网络包。排查1样本可能没有网络行为或者其网络行为被防火墙拦截。解决1检查 ProcMon 的“网络”事件选项卡确认样本进程是否有TCP Connect尝试。如果没有那它可能就是个不联网的勒索软件或破坏性病毒。排查2样本可能使用了非常规的网络通信方式如 ICMP 隧道、DNS 隧道或者通过 HTTP/HTTPS 代理通信。解决2在 Wireshark 中检查 ICMP 和 DNS 协议。观察是否有大量异常的、携带数据的 ICMP Echo 请求/回复或者是否有对同一域名频繁的、携带长子域名的 TXT 记录查询。检查样本是否在本地开启了代理设置可通过 ProcMon 查看其对HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings注册表项的修改。排查3Wireshark 选错了网卡。解决3在虚拟机中使用命令行ipconfig /all查看当前活跃的网络连接及其描述确保在 Wireshark 中选择的是正在使用的那个虚拟网卡。问题三样本连接使用了 HTTPSWireshark 无法解密内容。排查这是正常情况。TLS/SSL 加密的目的就是防止中间人窥探。解决关注元数据即使内容加密TLS 握手阶段的Client Hello包中的SNI服务器名称指示是明文的这通常就是域名。这是极其重要的情报。关注通信模式观察数据包的大小、频率、方向。规律的心跳、特定时间点的大数据量传输都能推断出行为。进阶尝试解密如果恶意软件使用硬编码的、或弱随机数生成的对称密钥理论上存在解密可能。但这通常需要逆向工程配合已超出本基础分析范畴。另一种情况是如果你能在客户端即你的分析虚拟机上安装该 HTTPS 服务的“假”证书并让系统信任它配合一些工具可以实现中间人解密但这在分析随机恶意软件时通常不现实。问题四样本进程很快就退出了但似乎有残留。排查这可能是“进程镂空”或“傀儡进程”技术。样本创建了一个合法的系统进程如svchost.exe,rundll32.exe然后将其内存替换为恶意代码执行随后父进程退出。解决在 ProcMon 中不要只过滤样本进程名。观察在样本进程运行期间有哪些其他新进程被创建。重点关注这些新进程在创建后是否立即有异常的文件、注册表或网络操作。查看样本进程退出后系统中是否仍有进程在持续进行可疑的网络连接在 Wireshark 中持续有来自新 IP/端口的外联流量。4.3 从数据到情报撰写行为分析报告分析的最后一步是将零散的技术观察整合成一份清晰、 actionable 的报告。一份好的行为分析报告应该包含以下部分样本信息文件名、MD5/SHA256 哈希值、首次发现时间等。执行概要用一两句话概括样本的主要恶意行为例如“该样本是一个窃密木马通过注册表实现持久化并通过 HTTPS 信道将窃取的浏览器凭证上传至 C2 服务器。”详细行为分析持久化机制详细描述它是如何实现开机自启的例如在HKCU\...\Run下创建了值Updater指向%TEMP%\svchost.exe。系统操作列举其创建、修改、删除的文件和注册表项。进程操作描述其创建的进程树包括进程名、参数和可能的注入行为。网络通信C2 服务器信息IP、端口、域名从 TLS SNI 获取。通信协议HTTP/HTTPS/DNS 隧道等。观察到的行为心跳包间隔、数据外传的迹象如 POST 请求上传数据、从服务器接收的指令如从http://[C2]/config.bin下载文件。关联指标IoC - Indicators of Compromise这是报告中最有价值的部分是其他安全设备如防火墙、IDS可以用来检测和阻断该威胁的“指纹”。文件哈希样本本身及它释放的所有文件的哈希。网络 IoCC2 域名、IP 地址、端口。主机 IoC创建的特定文件路径、注册表键值、Mutex 名称、服务名等。缓解与检测建议如何清除根据分析结果给出手动清除的步骤删除哪些文件、修复哪些注册表。如何检测建议在 SIEM 或终端防护软件中添加基于上述 IoC 的检测规则例如监控对特定注册表路径的写入、检测到对外部恶意 IP 的连接尝试则告警。通过这样一套组合拳你不仅“看到”了恶意软件的行为更“理解”了它的意图和手法并能将这些知识转化为保护其他系统的实际能力。这个过程就像侦探破案ProcMon 和 Wireshark 是你的放大镜和指纹采集器而你的分析和推理则是将线索串联成完整证据链的关键。