发布于20小时前20小时 本文以一次授权内网攻防演练为背景:某 Windows 终端出现异常外联,EDR 仅记录到一个伪装成更新组件的进程,进程名为 updater.exe,运行账户为普通域用户。目标不是制作或改造远控木马,而是在获得授权的前提下,对样本进行取证、逆向分析、通信确认和清理验证。分析环境建议使用与生产网络隔离的虚拟机,并准备原始磁盘镜像、内存镜像、EDR 导出日志和 DNS、代理、边界防火墙日志。不要直接在受感染主机上双击样本,也不要把样本上传到公共在线扫描站点,以免泄露企业代码和内部信息。一、问题定位:先证明异常,再进入逆向初步告警通常来自三个方向:异常进程、异常持久化项和异常外联。三者需要形成证据链,不能仅凭文件名或杀毒软件单条告警下结论。进程侧:确认进程路径、父子进程关系、签名、创建时间、命令行参数及运行账户。文件侧:计算 SHA-256,记录文件大小、PE 时间戳、节区权限和数字签名状态。网络侧:关联 DNS 查询、目的 IP、端口、TLS SNI、代理日志和连接持续时间。持久化侧:检查服务、计划任务、启动项、WMI 事件订阅、IFEO 和用户目录中的快捷方式。如果进程仍在运行,优先在隔离网络中采集内存和句柄信息,再终止进程。直接删除文件会破坏后续的内存取证和时间线分析。二、主机现场采集以下命令适用于 Windows 授权取证。建议以管理员权限执行,并将输出写入只读证据目录。命令本身不会执行样本,仅读取进程、网络和持久化信息。mkdir C:\IR\case-20250308 Get-FileHash C:\Users\Public\updater.exe -Algorithm SHA256 Get-AuthenticodeSignature C:\Users\Public\updater.exe | Format-List * Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,ExecutablePath,CommandLine | Out-File C:\IR\case-20250308\process.txt Get-NetTCPConnection -State Established,Listen | Sort-Object OwningProcess | Format-Table -AutoSize | Out-File C:\IR\case-20250308\network.txt Get-CimInstance Win32_Service | Where-Object {$_.PathName -match 'Users|ProgramData|Temp|Public'} | Select-Object Name,State,StartMode,PathName | Out-File C:\IR\case-20250308\services.txt taskschd.msc reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run /s reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run /s wevtutil epl Microsoft-Windows-Sysmon/Operational C:\IR\case-20250308\sysmon.evtx在实际采集中,还应保存当前用户 SID、主机名、时区和系统时间,避免后续把不同主机的时间线混在一起:hostname > C:\IR\case-20250308\host.txt whoami /all > C:\IR\case-20250308\identity.txt systeminfo > C:\IR\case-20250308\systeminfo.txt w32tm /query /status > C:\IR\case-20250308\time.txt三、静态逆向:从 PE 结构判断能力边界静态分析重点不是寻找一个“木马特征”,而是确认样本具备哪些能力,以及这些能力是否与告警行为对应。建议按以下顺序处理:PE 基础信息:确认架构、入口点、节区数量、节区熵、导入表和资源目录。加载行为:关注 LoadLibrary、GetProcAddress、VirtualAlloc、VirtualProtect、CreateThread 等 API 的组合,而不是单独看到某个 API 就判定恶意。持久化能力:检索服务创建、计划任务、注册表 Run 键、WMI 订阅和 DLL 搜索顺序相关字符串。通信能力:提取域名、IP、URL、HTTP 头、TLS SNI、命令分隔符、固定长度数据包和配置结构。权限边界:检查是否尝试令牌复制、服务配置修改、UAC 绕过或访问其他用户目录。如果样本存在明显字符串加密,应先记录解密函数的输入输出和调用位置,不要急于修改样本。可以使用 x64dbg、Ghidra 或 IDA 在隔离虚拟机内对入口点、TLS 回调、网络初始化和配置解码函数设置断点。对疑似配置的内存区域做转储时,要同时记录模块基址和偏移,便于复核。四、动态分析与通信还原动态分析应使用无敏感数据的快照环境,网络通过可控的模拟服务或 sinkhole 接收,不允许样本连接真实 C2。重点观察四类事件:进程创建:确认是否由 Office、脚本解释器、服务进程或临时目录程序拉起。文件与注册表:记录创建、修改、删除操作,特别是启动项、服务和计划任务。网络:记录 DNS、首次连接时间、目的地址、端口、TLS SNI、HTTP 方法和周期性心跳。内存:关注可执行匿名内存、线程起始地址落在非映像区域、解密后出现的域名和命令字符串。在 Sysmon 已部署的环境中,重点关联事件 ID 1、3、7、8、10、11、12、13、22。一个常见的证据链是:脚本解释器创建临时目录中的可执行文件,随后该文件创建 Run 键并周期性访问固定域名。这比单独依赖文件哈希更可靠,因为哈希可能因样本变种而变化。五、用 YARA 固化样本族特征规则应优先使用稳定的字符串组合、配置结构和导入特征,避免只写单一文件名。下面是一条示例规则,适合在授权环境中对已知样本族做初筛,不能替代沙箱和人工复核。rule Suspected_Remote_Admin_Trojan_Sample { meta: description = "Example rule for an authorized incident response lab" author = "IR" reference = "case-20250308" strings: $s1 = "Software\\Microsoft\\Windows\\CurrentVersion\\Run" wide ascii $s2 = "/config" ascii nocase $s3 = "User-Agent:" ascii nocase $s4 = "beacon" ascii nocase $api1 = "InternetOpenA" ascii $api2 = "WinHttpOpenRequest" ascii condition: uint16(0) == 0x5A4D and 2 of ($s*) and 1 of ($api*) }规则部署前应使用企业软件基线、签名文件和历史样本进行误报测试。命中后应回到文件路径、签名、父进程和网络日志做上下文判断,不要直接依据 YARA 命中结果封禁整个目录。六、权限边界与横向影响判断远控样本本身未必具备域管权限。分析时应区分“样本执行权限”和“攻击者实际获得的权限”。需要重点核对:样本是否以普通用户、服务账户或本地管理员身份运行。是否访问了浏览器凭据、SSH 密钥、云凭据、共享目录或内存中的令牌。是否出现 SMB、WMI、WinRM、远程服务创建或计划任务下发行为。同一哈希、域名、注册表键和父进程是否在其他终端出现。如果发现样本以域用户运行,不能只重置该用户密码。应同时检查其登录过的主机、Kerberos 票据使用情况、访问过的共享资源和异常认证事件。必要时撤销活动会话、重置相关凭据,并对高权限组成员做额外审计。七、日志留痕与检测规则建议启用进程创建审计并记录命令行参数,Sysmon 至少覆盖进程创建、网络连接、文件创建、注册表修改、DNS 查询和驱动加载。Windows 安全策略中可关注 4688、4697、4698、4657、4624、4648、4672 等事件。检测逻辑可以从行为组合开始,例如“用户可写目录中的新进程 + 创建 Run 键 + 外连非基线域名”,而不是简单封禁 updater.exe。网络侧将 DNS、代理和终端网络事件按主机时间线关联,可以识别样本更换 IP 或文件名后的重复活动。八、修复与验证隔离受影响主机,保留磁盘和内存证据,记录隔离时间。基于哈希、路径、域名、证书指纹和行为规则做全网检索。删除或禁用恶意服务、计划任务、启动项和 WMI 订阅,并确认没有替代持久化。清理样本及其释放文件,修复被修改的代理、DNS、主机防火墙和安全策略。对泄露风险涉及的账号执行凭据轮换,优先处理管理员、服务账号和云访问密钥。重新部署可信镜像或完成完整性验证后再恢复网络,避免只删除一个文件就宣告结束。验证阶段应在 EDR、Sysmon、DNS、代理和防火墙日志中确认:恶意进程不再启动、持久化项不再出现、已知 C2 不再解析或连接、相同账户不存在异常登录。至少观察一个完整的心跳周期和业务高峰期,避免样本因定时任务或延迟触发而漏检。总结逆向木马远控的核心不是“找到一个可疑文件”,而是把样本能力、主机行为、网络通信、权限边界和日志时间线串成可复核的证据链。授权测试中应坚持隔离分析、最小化执行、保留原始证据和先修复后验证的原则。对变种样本,稳定的检测依据通常来自持久化方式、通信协议、配置结构和行为组合,而不是文件名或单一哈希。 逆向分析、样本行为与调试流程示意 服务器、云资产与权限边界梳理示意
19小时前19小时 这类演练建议把“进程/样本—网络五元组—持久化入口”放到同一条 UTC 时间线上分析。先限制主机外联并保全证据,不要一上来杀进程、删任务;否则已删除但仍在运行的文件、内存配置和现存连接都会丢失。还要记录主机与日志平台的时钟偏差。 1. 从连接反查进程和样本 Windows 先保存连接、进程及父子关系,再对可执行文件做哈希和签名检查: Get-NetTCPConnection | Where-Object { $_.State -in @('Established','Listen') } | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,ExecutablePath,CommandLine,CreationDate Get-FileHash 'C:\path\suspect.exe' -Algorithm SHA256 Get-AuthenticodeSignature 'C:\path\suspect.exe' | Format-List * Get-Item 'C:\path\suspect.exe' -Stream * 历史记录重点看 Security 4688、Sysmon 1/3/11/12-14/19-22、PowerShell 4104。Sysmon 3 默认不一定启用,没有的话要结合 EDR、主机防火墙和网关日志。文件时间不能单独作为依据,最好再对照 Prefetch、Amcache、Shimcache、$MFT 和 $UsnJrnl。 Linux 上如果进程对应文件显示为 (deleted),要在停止进程前从 /proc 留样: ss -tpna lsof -nP -i ps -eo pid,ppid,user,lstart,cmd --forest readlink -f /proc/1234/exe tr '\0' ' ' < /proc/1234/cmdline cp --preserve=all /proc/1234/exe /mnt/evidence/sample.1234 sha256sum /mnt/evidence/sample.1234 样本建议通过既有取证或 EDR 通道收集,隔离保存且不要直接执行;涉及内部代码、配置时也不宜直接上传公共查杀平台。 2. 通信还原不要只盯域名 先通过 DHCP、VPN、NAT 日志确认事发时间点对应的真实终端,再按“时间、源/目的 IP、端口、协议、进程 PID”关联 DNS、代理、防火墙和终端日志。IP 复用、CDN 和域前置都会导致仅按域名或 IP 得出误判。 tcpdump -i any -nn -s 0 -G 300 -W 12 \ -w '/mnt/evidence/host-%Y%m%d%H%M%S.pcap' 'host 10.0.0.23' tshark -r host.pcap \ -Y 'dns || http.request || tls.handshake.type == 1' \ -T fields \ -e frame.time_epoch -e ip.src -e ip.dst \ -e dns.qry.name -e http.host -e http.request.uri \ -e tls.handshake.extensions_server_name 加密通信无法直接看到载荷时,仍可还原 SNI、证书、DNS 应答、包长、上下行比例和固定心跳周期,再与进程启动时间对齐。JA3/JA4 只能作为线索,不建议单独作为定性依据。若需要提取协议配置,应在断网沙箱或内存镜像中进行,避免样本再次真实外联。 3. 持久化要覆盖非常规入口 Windows 除了 Run 键,还应检查服务、计划任务、WMI 永久订阅、启动目录、Winlogon 和 IFEO: Get-CimInstance Win32_StartupCommand Get-CimInstance Win32_Service | Select-Object Name,State,StartMode,StartName,PathName schtasks /query /fo CSV /v Get-CimInstance -Namespace root\subscription -ClassName __EventFilter Get-CimInstance -Namespace root\subscription -ClassName CommandLineEventConsumer Get-CimInstance -Namespace root\subscription -ClassName __FilterToConsumerBinding reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /s 对应事件可重点看 4697、4698、4702、7045 和 1102。计划任务和服务不能只看名称,要检查实际执行路径、参数、运行账户、文件签名、ACL 以及首次出现时间。 Linux 侧至少覆盖 systemd、cron、SSH key、动态链接器和登录脚本: systemctl list-unit-files --state=enabled systemctl list-timers --all for u in $(cut -d: -f1 /etc/passwd); do crontab -u "$u" -l 2>/dev/null done find /etc/systemd/system /etc/cron* /etc/profile.d \ -xdev -type f -mtime -14 -ls find /home /root -path '*/.ssh/authorized_keys' -type f -ls cat /etc/ld.so.preload 2>/dev/null 清理时应先记录持久化项与落地文件的关联,再移除入口并持续观察是否被重新创建;如果会自动恢复,通常还存在第二个守护进程、任务或远程下发源。最终最好形成“初始执行、样本落地、首次外联、持久化建立、后续活动”五个时间点的闭环,而不是只给出一个哈希或恶意 IP。
创建帐户或登录后发表意见