安全圈里有个很普遍的现象:单拎某个漏洞出来,不少人能讲得头头是道——SQL注入怎么判断、XSS怎么闭合标签、反序列化Payload怎么构造;但一被问到"这个漏洞在整个攻击链条里处在什么位置""攻击者走到这一步之前都经历了什么""防御方应该在哪个环节拦截",很多人就卡壳了。我当年也是这样,先啃了一堆漏洞原理,又学了一堆工具,知识全是碎的。直到后来真正参与项目,才慢慢把碎片拼成一张图。这个系列的上一篇,我们盘的是安全攻防最底层的地基——CIA三元组、攻击面、红蓝队分工、常见安全术语。这一篇作为知识地图的第二部分,我会把这些地基砌成一面墙,再把墙上每个关键位置标出来:攻击者会从哪进来、走到哪一步在干什么、防御方在哪些节点能把这条线打断,以及Web、网络、主机、人几大战场上的核心对抗逻辑。
这篇内容适合三类人:一是准备入行安全、想建立整体认知的;二是打CTF或做SRC漏洞挖掘、需要补全体系化知识的;三是开发或运维背景、想搞懂安全团队每天在防什么、怎么配合的。读完这张地图,你至少能回答三个问题:攻击者的完整路径长什么样,防御到底在哪些环节起作用,你自己下一步该往哪个方向深挖。这里先提醒一句:所有攻防技术讨论都默认发生在授权测试、CTF比赛、护网演练或自己搭建的靶场环境里,未经授权去测试任何系统,性质就变了。
1. 从"概念清单"到"作战地图":第二篇到底在画什么
1.1 第一张地图留下的问题
上一篇我们建立了一批基础概念,但概念和概念之间是孤立的。你知道什么是CIA三元组,可你不知道一次真实的入侵过程里,攻击者什么时候在破坏"机密性"、什么时候在破坏"完整性"、什么时候在威胁"可用性";你知道什么是攻击面,可你不知道攻击者会按什么顺序去触碰这些面。这就是典型的"知识点懂,知识网没有"。
行业里称这种现象叫"有知识、没地图"。知识是颗粒,地图是这些颗粒之间的连接关系。真正有用的知识地图,至少要包含两套坐标系:一套是攻击者的视角——他按照什么步骤推进一次攻击,每个步骤的目标是什么;另一套是防御者的视角——在攻击者的每一个步骤,防御方有哪些手段可以察觉、阻止或减轻影响。两套坐标系叠加在一起,你才能看到一个真实攻防场景里,双方是在哪个位置发生碰撞的。
1.2 这张地图的坐标轴:攻击链和防御纵深
我这篇知识地图的主干,用两条线搭起来。
第一条线是攻击者的推进线。业界最经典的两个模型:Lockheed Martin提出的网络杀伤链(Cyber Kill Chain)和MITRE公司维护的ATT&CK框架。Kill Chain把一次攻击粗分成七个大阶段,适合用来建立整体感觉;ATT&CK把每个大阶段再往下拆成具体的战术和技术,适合用来对标真实攻击行为。这两者是互补关系,后面会放到一起看。
第二条线是防御者的纵深线。互联网边界、网络内部、主机端点、应用层、数据层、人员层,每个位置都有对应的防护手段。我习惯把防御想成六道门:第一道门是减小暴露面(资产梳理、收敛端口),第二道门是事前防护(WAF、IPS、补丁),第三道门是事中发现(流量检测、主机检测、日志分析),第四道门是响应处置(阻断、隔离、取证),第五道门是恢复重建,第六道门是复盘改进。攻击链是横向推进的,防御纵深是纵向叠加的,横纵交叉,就是一张完整的攻防地图。
这张图我用下来最大的价值,不是让你记住某个具体工具或漏洞,而是让你在任何一次实战、任何一篇技术文章面前,都能快速找到它的位置:这个内容是攻击链哪个阶段的事,对应防御纵深的哪扇门。思路一旦清晰,学习效率会明显不一样。
2. 攻击链路全拆解:从踩点侦察到拿到收益的七个阶段
2.1 Kill Chain七步走:每一步攻击者在想什么
网络杀伤链最早是军工领域的概念,用来描述一次导弹攻击从发现目标到命中目标的全过程,后来被Lockheed Martin引入网络安全,把一次网络攻击拆成了七个阶段。我用大白话给你翻译一遍:
一、侦察(Reconnaissance)。攻击者开始收集目标的公开信息:域名、IP段、员工邮箱、GitHub上泄露的代码、招聘信息、办公地点。目标只有一个——找到可以下手的入口。这阶段攻击者不会直接触碰目标系统,动作非常轻。
二、武器化(Weaponization)。攻击者把侦察到的信息变成武器,最常见的是制作一个带恶意宏的Office文档、构造一条恶意链接、或者把一个正常软件捆绑上后门。
三、投递(Delivery)。把武器送到目标面前,手段包括钓鱼邮件、诱导下载、U盘摆渡、水坑攻击。这一步最大的特点是需要受害者参与——点一下、开一次、装一下。
四、利用(Exploitation)。武器被触发,攻击者利用系统漏洞或人的疏忽,在目标机器上执行代码。可能是浏览器漏洞、Office漏洞,也可能是弱口令直接登录。
五、安装(Installation)。拿到初步权限后,攻击者会想办法把这个权限"固定"下来,比如写计划任务、注册服务、植入后门,确保机器重启、网络断开后还能回来。
六、指挥与控制(Command and Control,C2)。被控机器主动回连攻击者的服务器,等待指令。很多企业在这里才第一次发现异常——内网主机频繁访问一个未知域名。
七、目标行动(Actions on Objectives)。攻击者开始真正干"正事":窃取数据库、加密文件勒索、下载敏感文档、或者继续向内网横向移动。
这七个阶段不是每次攻击都会走完。勒索软件往往走到第七步直接加密;APT组织可能在前六步花几个月时间;也有攻击者第七步什么数据都不窃取,只是把系统当跳板。但无论怎么变化,攻击者每一步都有明确的收益目标,理解这条链,防御才有参照物。
2.2 用ATT&CK补全Kill Chain的颗粒度
Kill Chain的七步很好理解,但实际作战时颗粒度不够。举个例子,"利用"这一步,到底是利用了Web漏洞还是主机漏洞?"安装"这一步,后门具体是怎么实现持久化的?这时候就该ATT&CK上场了。
ATT&CK是一个对抗战术和技术知识库,它把攻击行为拆成十几类战术(Tactics),每类战术下面又有大量具体技术(Techniques)和子技术(Sub-techniques)。比如"初始访问"这个战术下面,有鱼叉式网络钓鱼、面向公网的利用、通过合法账号登录等一大票具体手法;"持久化"下面,有注册表运行键、计划任务、服务创建等几十种实现方式。
用一张简单的表把Kill Chain和ATT&CK对照起来,思路会更清楚:
| Kill Chain阶段 | 对应ATT&CK战术(简化) | 防御方可观察的信号 |
|---|---|---|
| 侦察 | 侦察 | 异常的扫描流量、DNS查询 |
| 武器化 | 资源开发 | 基本无信号(攻击者在自己的环境里) |
| 投递 | 初始访问 | 钓鱼邮件特征、可疑下载、异常登录 |
| 利用 | 初始访问/执行 | 漏洞利用日志、异常进程行为 |
| 安装 | 持久化 | 新增计划任务、开机启动项、服务注册 |
| 指挥与控制 | 命令与控制 | 内网主机回连未知IP、异常DNS请求 |
| 目标行动 | 收集/横向移动/影响 | 大量数据外传、内网扫描、文件加密 |
我实际做威胁狩猎时,最常用的是ATT&CK的"数据源"字段,它会告诉你某个技术会在什么日志里留下痕迹——Windows事件日志、进程命令行、网络连接记录、DNS日志等。你从Kill Chain建立宏观思路,用ATT&CK去查具体技术点的检测建议,两个框架配合,比只看任何单一模型都实用。
2.3 实战视角:攻击链路不是一路畅通的
第一次看攻击链的人,容易有一个错觉:攻击者是按七步一路顺畅走到底的。真实的攻防完全不是这样。攻击者每走一步,都可能撞上防御方的某道门;撞上了被拦下来,就换一条路继续试。一次成功入侵的背后,往往有几十次被拦下的试探。
这给防御方的启发是:不需要也没办法让每一步都固若金汤,但至少保证攻击者在推进过程中"碰壁"时,你能看得见、有记录、能响应。很多安全团队最大的问题不是防线太弱,而是攻击者已经试了十几次,日志里全躺着记录,却没人去看。知识地图的意义,恰恰是让你知道"哪个位置应该有什么信号",然后把这些信号接入监控,让噪音变成线索。
3. 防御方的破局点:为什么"断链"比"补洞"更现实
3.1 从"补漏洞"思维切换到"断链条"思维
刚接触安全的人,普遍认为防御就是修漏洞:系统有漏洞就补丁,代码有漏洞就重写,设备有漏洞就升级。这个思路不能说错,但不现实。现实是漏洞修不完,0day你根本不知道,1day的补丁打下去还有可能影响业务。如果一个防御策略完全建立在"把所有洞都堵上"的基础上,这个策略从一开始就失败了。
更务实的思路是:攻击者的七天链路里,只要有一个环节被切断,整条链就断了。断在侦察阶段,他找不到入口;断在投递阶段,钓鱼邮件进不了门;断在利用阶段,漏洞打不通;断在C2阶段,权限拿不稳;断在横向移动阶段,数据出不来。防御要做的不是筑一道完美的墙,而是在关键节点上设置足够多的"断点",让攻击成本远高于收益,攻击者自然就放弃了。
3.2 检测和响应:EDR、NDR、SIEM、SOAR各自站在哪
要把"断链"落到实处,需要一套检测与响应体系。这个领域缩写特别多,我按层次理一遍:
- 端点检测与响应(EDR):部署在服务器和终端上,监控进程行为、文件读写、注册表改动、内存异常。它盯的是攻击链的"安装"和"利用"阶段,比如一个Office进程突然去执行PowerShell,这行为明显不正常。
- 网络检测与响应(NDR):部署在网络流量侧,分析南北向和东西向流量,找异常连接和协议特征。它最容易发现C2回连和批量数据外传。
- 安全信息和事件管理(SIEM):把各种日志集中起来做关联分析。EDR报一条告警、防火墙记一条拦截、AD里多了一个新账号,单独看都不起眼,SIEM把它们串起来,才能还原一条完整的攻击线索。
- 安全编排自动化和响应(SOAR):把检测和响应动作自动化。比如EDR上报可疑进程,SOAR自动提取样本、查询威胁情报、阻断IP、通知值班人员,把分钟级响应压缩到秒级。
我给一个比较简化的定位表:
| 工具 | 盯着哪一层 | 主要防守的攻击链阶段 |
|---|---|---|
| EDR | 主机端点 | 利用、安装、横向移动 |
| NDR | 网络流量 | 侦察、C2、数据外传 |
| SIEM | 全量日志 | 全阶段(关联分析) |
| SOAR | 响应流程 | 全阶段(自动化处置) |
| WAF | Web应用 | 投递、利用 |
这些工具不是越贵越好,也不是装得越多越好。中小企业第一步往往是先把日志留全、装一个轻量EDR、把互联网出口流量镜像接出来,就已经能覆盖大多数攻击者了。别一上来就堆重型平台,堆完没人分析,跟没有一样。
3.3 威胁情报和威胁狩猎:从被动的等着到主动的找
攻击链打断得多了,防御者还会遇到一个新的瓶颈:手里的告警基本都是已知攻击的特征,遇到没见过的手法就失灵。这时候要做两件事。
第一件事是接威胁情报。它告诉你哪些IP、域名、文件哈希已经在外面被标记为恶意,在你的网络里出现过没有。这是快速提升检测能力的捷径,但要注意:威胁情报是"已知的恶意",对新型攻击帮助有限。
第二件事是威胁狩猎。狩猎的思路是反向的——不从告警出发,而从假设出发。我常用的做法是:假设某个攻击手法已经绕过现有防御进来了,然后去想"它应该会在我的日志里留下什么痕迹",再写查询语句去历史日志里翻。比如假设有人用PowerShell做了无文件攻击,我就把过去30天所有PowerShell执行记录拉出来,筛可疑的命令行参数。这个习惯我强烈建议刚入行的人从上手第一天就培养,它能逼着你把知识地图上的每个阶段,落到具体的日志字段和检测逻辑上。
4. Web攻防主战场:那些高频漏洞背后的共同本质
4.1 注入类漏洞:数据和代码没有分家
接下来把镜头拉到具体的战场上。Web应用是当前攻防对抗最密集的区域,不是因为Web代码写得更烂,而是因为它直接暴露在公网上,是攻击者成本最低的入口。
注入类漏洞是Web漏洞里的老牌冠军,包括SQL注入、命令注入、代码注入、XML外部实体注入(XXE)等。它们的共同根源只有一个:程序把用户的输入当成了代码或命令的一部分去执行。一个登录框,如果在拼接SQL语句时不过滤特殊字符,用户输进去的' or 1=1 --就会被当作查询逻辑执行,这就是SQL注入。
理解注入漏洞的关键不是背几个Payload,而是理解"数据"和"代码"的边界。你从键盘输入的所有内容,本质都是数据;程序通过拼接、格式化等方式把这些数据变成逻辑的一部分,数据就有了代码的"身份"。防御手段因此也很清晰:参数化查询让数据永远以数据身份参与数据库操作;白名单校验让非法字符根本进不到拼接环节;最小权限原则让即使注入成功,数据库账号也动不了别的库。这三板斧是经过大量实战验证的,基本能防住绝大多数注入问题。
4.2 XSS:攻击的目标从服务器转移到了用户
跨站脚本(XSS)是另一种高频漏洞。它的本质是攻击者的恶意脚本被存储、反射或通过DOM方式注入了受害者的浏览器,然后在用户的会话上下文中执行。很多人觉得XSS危害不大,无非是弹个框,这是严重的误判。一个存储型XSS配合管理员权限,可以窃取会话Cookie、篡改页面、后台静默执行操作,实际危害完全能到达"接管整个Web应用"的级别。
防御XSS有一条主线:永远不要相信用户的输入要展示给浏览器时还是安全的。具体做法包括:输出编码(根据上下文对HTML、属性、JavaScript、URL分别编码)、使用CSP(内容安全策略)限制脚本来源、给Cookie加HttpOnly属性防止脚本读取、输入侧做白名单校验。很多团队只做输入过滤,忽略输出编码,这等于只守住了第一道门。
4.3 访问控制和SSRF:越权为什么是漏洞榜常客
OWASP Top 10连续几届把"访问控制失效"排在最前面。这类漏洞不依赖什么高深技术,纯粹是业务逻辑问题:用户在A页面发起一个请求,服务端没检查他有没有权限访问B资源。我就见过一个很典型的案例:后台接口通过URL参数里的ID直接返回用户资料,开发人员没做权限判断,任何人登录后改一下ID就能看到别人的订单。这种漏洞的危害数据越权级别越高,越接近核心资产。
服务端请求伪造(SSRF)是另一个重点,服务器的功能是去请求一个URL,而攻击者控制了URL的内容。比如图片处理功能允许传一个URL,攻击者传http://127.0.0.1:3306,服务器就会替他去访问内网数据库端口,相当于把服务器变成了攻击内网的跳板。SSRF防御核心是严格限制URL的协议、域名解析结果、端口和响应,而不是简单过滤几个关键词。
4.4 文件上传和解析:边界校验的最后一道关
文件上传功能每一个Web应用几乎都有,头像、附件、证书、导入导出,处处都用到。这类漏洞的隐患在于:开发者默认上传上来的东西是"文件",不会去想它可能是可执行的代码。
实际上,攻击者可以把一个WebShell改名成jpg上传,再通过解析漏洞或路径拼接让它以脚本形式执行。防御的关键在于"假设上传内容不可信":用白名单限制扩展名和MIME类型、重命名文件避免攻击者控制路径和文件名、文件存储和Web访问目录分离、对上传目录禁止脚本执行权限,这几个动作组合起来,基本能封死文件上传这条攻击线。
如果你做开发或运维,看这一段时我建议你记住一句话:Web安全的绝大多数问题都不是技巧问题,而是信任边界问题。想清楚哪些输入是永远不可信的,在数据进入系统的每个边界都做校验和转换,这一篇讲的绝大多数漏洞都能规避掉一大半。
5. 网络与主机战场:流量侧和端点侧都得心里有数
5.1 网络层攻防:入口、扫描和横向移动
攻击者过了Web应用这一关,进入内网之后,战场就转移到了网络和主机层。网络层的第一个动作往往是探测:对内网发起端口扫描,找开放的服务,对照已知漏洞找突破口。这也是为什么我强调东西向流量检测——攻击者在内网里的扫描行为,放到互联网流量里很不起眼,但在企业内网里,正常的业务主机不会突然去扫几千个IP。
网络层第二个值得关注的点是弱口令。很多内网系统用的是默认密码或拼音加生日,攻击者拿到一个账号后会批量尝试登录其他系统。防御上最有效的手段其实是微隔离:按业务单元做网络分段,让攻击者即使拿下一台机器,也没办法随意访问整个内网。把内网当成公网来防,这个思路我这几年越来越认同。
5.2 主机层攻防:提权、持久化和基线加固
站到了主机上,攻击者接下来做两件事:提权和持久化。提权是从普通用户权限爬到管理员或系统权限,常见的路径是内核漏洞、错误配置、带SUID权限的可执行文件;持久化是在系统里安家,方式包括写启动项、创建计划任务、替换服务DLL。这两步动作在Windows和Linux上都有大量ATT&CK技术可供对标,也是EDR最关注的行为模式。
防御端最基础的其实是主机基线加固:关闭不需要的服务和端口、删除默认账号、配置密码策略、开启审计日志、定期打补丁。听起来平平无奇,但做了和没做差别非常大。我见过太多被攻破的主机,事后排查发现系统账号密码六七年没改过、防火墙规则放了一堆不用的端口。基础加固不做好,上再多高级产品也白搭。
5.3 蜜罐和欺骗:给攻击者修一条假路
攻击和防御的思路里,还有一个很有意思的分支叫"欺骗防御",典型产品是蜜罐。原理很简单:在内网故意放一些假系统、假账号、假文件,攻击者踩上去之后,防御方立刻收到高置信度告警。蜜罐的价值在于它能捕捉从未见过的攻击手法,方向上就是"以退为进"——不硬扛,而是诱导。
我给大家一个务实的建议:蜜罐的系统指纹一定要做旧做假,别放太新的系统,攻击者也不傻,看见一个全内网都没人用的奇异系统,大概率会绕开。另外蜜罐一定要放在能观测到流量进出的位置,否则攻击者进去了你根本不知道。这算是我自己踩坑之后的经验。
6. 最薄弱的环节是人:社会工程学攻防的现实与对策
6.1 社工的底层逻辑:信任、紧迫感、从众心理
技术再高明的攻击者,最后往往都会选择"人"作为突破口。社会工程学不是骗术玄学,它的底层逻辑是三个心理杠杆:信任、紧迫感、从众。攻击者伪装成IT管理员打电话,让人报出验证码,用的是"权威+信任";发一封标题写着"您的账号即将停用,请点击链接登录处理"的邮件,用的是"焦虑+紧迫感";邮件里写"公司全员都已参与此项薪酬调研",用的是"从众心理"。
理解这些心理杠杆,对防御极其重要。安全意识培训如果只是念PPT"不要点陌生链接",效果几乎为零。真正有效的培训是让员工理解攻击者的思考方式:为什么这个邮件会让我紧张、为什么我会下意识想点这个链接。人性弱点没法靠工具彻底封住,但可以被认识和提防。
6.2 钓鱼攻击的常见模式
钓鱼邮件是最典型的社会工程学载体。常见模式有:仿冒发件人(把发件人显示名改成"系统管理员",实际邮箱是外部地址)、仿冒登录页(邮件里给一个高度相似的假域名)、携带恶意附件(诱导打开宏文档)、制造紧急事件(账号异常、工资复核、会议邀请)。这里我不展开具体的话术,但你可以去搜一搜"钓鱼邮件模板分析",这类公开分析报告非常多,看过几份你就能对攻击者的套路有直觉。
6.3 防御侧:MFA、邮件网关和实战化演练
针对人的防御,我认为有三个关键动作。
第一,强制多因素认证(MFA)。就算员工在钓鱼页面交了账号密码,攻击者没有第二因素也登录不进去。这已经是当前性价比最高的防线。
第二,邮件安全网关。从技术侧拦截钓鱼邮件,做SPF、DKIM、DMARC校验,仿冒域名的邮件直接进垃圾箱。这是"人还没看到邮件之前"的前置防线。
第三,实战化钓鱼演练。自己团队或请第三方向员工发送模拟钓鱼邮件,看多少人会中招,然后针对性培训。注意演练的目的不是抓典型惩罚人,而是让团队形成"看到可疑邮件先报告"的氛围。我们每次演练之后都复盘分析点击数据的特征,再调整后续的培训内容和邮件网关规则,效果是实打实的。
7. 把知识地图变成成长路线:实战训练与避坑心得
7.1 从地图到能力:分阶段深挖
地图是宏观的,能力是微观的。看完这张地图,建议你按三个阶段往前走。
第一阶段打地基:网络基础(TCP/IP、DNS、HTTP)、操作系统基础(Windows/Linux的账号、权限、日志)、一门脚本语言(Python优先)。这阶段的目标是把地图上的名词都变成你能实际操作的东西。
第二阶段选方向:Web安全、二进制安全、红队攻防、安全运营、安全开发,完全是几条不同的路线。这张地图覆盖了公共基础,但每个方向展开都是一个大坑。建议先精再广,把一个方向做到有实战产出,再横向扩展。
第三阶段进实战:去靶场练手、参加CTF、在授权范围内做漏洞挖掘。实战的意义在于它会强迫你把"知识点"变成"战斗力"。
7.2 必去的练习平台和靶场
这里按场景列几个我用过且口碑不错的平台,供新手参考。
| 平台 | 适合场景 | 特点 |
|---|---|---|
| DVWA | Web漏洞入门 | 本地部署,有不同安全等级,适合新手反复练习 |
| Pikachu | Web漏洞入门 | 中文界面,覆盖全面,适合初学者理解原理 |
| 靶场类在线平台(CTF题/实战模拟) | 综合训练 | 题型丰富,社区活跃,能接触真实攻防思路 |
| TryHackMe / Hack The Box | 综合性渗透 | 模拟真实环境,覆盖完整攻击链,适合进阶 |
| 虚拟化自建靶场 | 内网渗透练习 | 自己搭域环境,练完可一键还原,最接近实战 |
个人建议新手别一上来就扎进高难度的在线靶场。先把本地DVWA和Pikachu刷明白,理解了漏洞原理,再去打综合靶场,否则很容易被教"怎么点工具"而忽略了背后的原理。
7.3 写代码不强的安全人,怎么补短板
最后聊一个很多人私下问我的问题:不会写代码能不能做安全?我的回答是:能做,但要挑方向。安全运营、应急响应、合规审计对代码能力要求相对较低;漏洞挖掘、红队攻防、安全研发则对代码能力有硬性要求。但即使做运营类岗位,我也建议至少学会读懂常见代码和日志,能够看懂攻击Payload在干什么,这是安全从业者区别于普通运维的基本功。脚本语言里最推荐先学Python,使用面极广,门槛也低。
另外我强烈建议养成写文档的习惯。搞安全接触的线索、思路、复盘非常多,不写下来过两周就忘。我自己的做法是每做一个靶场、每完成一次应急响应,都写一份结构化的复盘笔记:目标是什么、攻防路径怎么走、哪些环节做得好、哪里最薄弱。时间长了,这些笔记就是你自己最宝贵的一手知识库,比任何公开教程都更适合你的实际水平。
我的经验里还有一条很重要的:安全这个领域,不存在"学完"这回事。今天学好的一套框架,明天可能就出现新的攻击手法,后天可能又有新的防御工具。知识地图的价值不在让你一次记住所有内容,而是让你永远知道"新来的知识该挂在哪个位置"。这张地图后面的更新里,我会再展开内网渗透与域环境攻防、云安全、应急响应流程这几个专题,把主干地图向纵深延展。你在这个过程中如果遇到哪个节点觉得"这块看不懂、连不起来",很大概率不是你的理解力问题,而是基础环节有缺口,回头把上一层的概念补上再看,很多疑问会自己解开。