换新东家已经快 8 年了,公司给我们做的网安培训也花了快小十万了吧。但直到今年才略微开窍,一方面可能是因为每年就突击一两周,训练密度太低;一方面也是因为这个行业的培训老师都是野路子,凝练总结能力太差——这么说太刻薄了些,可事实就是他们连文档都写不明白,能指望他们清晰地阐述方法论?!🤣🤣🤣。
0. 入门
网安的竞赛一般分为几大方向:
- web,网站漏洞利用、网络流量解析;
- re,reverse,逆向;
- crypto,加解密;
- pwn,系统漏洞利用;
- misc,杂项(如隐写、取证等);
今年来还有 mobile、AI 等方向。
错错错❌❌❌。虽然每个 CTF 老师都是这么带入门的,但这种分类之后让菜鸟感到割裂、困惑。这些方向只是表象,也是人为的复杂化,对把握网安的核心逻辑毫无帮助。理解网安的核心逻辑,需要我们从时间 & 空间两个维度上「双管齐下」。
1. 杀伤链(Cyber Kill Chain)——理解攻击时序的重要
这是 Lockheed Martin 公司提出来的一套方法论,但原理论有点像 OSI 七层模型,我想把它简化为 TCP/IP 那样的四层模型:



对于初学者来说,没必要区分得这么精细,重要的就三步:
- 踩点,即通过搜索🔍 & 锁定🔒(Find & Fix),识别系统最脆弱的突破口——攻击面;
- 突防,即突破边界(break boundary),拿下立足点(foothold)/ 突破口(initial access);
- 接管,即实现持续地控制;
当然,也可以稍微细分一下:
| no. | 攻击阶段 | Attack Phase | 目标 |
|---|---|---|---|
| 1⃣️ | 踩点 | 通过搜索🔍 & 锁定🔒(Find & Fix),识别系统最脆弱的突破口——攻击面; | |
| 1.1 | 侦查 | Reconnaissance | 搜集可访问的攻击入口; |
| 1.2 | 组装武器 | Weaponization Build | |
| 2⃣️ | 突防 | 突破边界(break boundary),拿下立足点(foothold)/ 突破口(initial access); | |
| 2.1 | 投掷攻击载荷 | Delivery | |
| 2.2 | 击发 / 漏洞利用 | Exploitation | |
| 3⃣️ | 接管 | 实现持续控制; | |
| 3.1 | 植入 / 驻留 | Installation | 提升权限(Privilege Escalation),以接触到更多系统。 |
| 3.2 | 回连 / 建立 C2 channel | Command & Control | |
| 3.3 | 收割 | Actions on Objectives |
这里面有一个重要且极容易被忽视的点是——时序。为什么在攻防中时序异常重要?我们可以把它视作攻防这个战场上的「红绿灯」。红绿灯是用来精密调控交通流量,而攻击时序信息可以精准分割攻击 / 排查区域,让我们迅速收缩主攻方向。
2. 漏斗模型——搜索空间的通用策略
其实攻防的每个阶段,都存在一个相同的套路,即一个不断缩小攻击 / 排查范围的过程。我们可以称之为「漏斗模型」。
具体怎么筛选呢?基于「攻击时点」是一个常见的方法。这也是为什么「找出第一次攻击得手的时点」这么重要。
当然,现在的我们依然是「做过的题目才有可能复现,没做过的那是一定不会」,尚不具备泛化 / 迁移能力。我们还需要一些具体的、术层面的微观通用技巧。
这样的技巧存在吗?存在的,因为所有攻防技巧只有一个核心问题——加解密。
3. 翻箱倒柜找钥匙🔑——通用微观策略
我们以 web 流量解析为例,Alice 想把东西悄默默给到 Bob :
- 商定私有加密协议🔐(一定要赶在流量加密前解密,这是我们破解加密流量的唯一机会);
- 加密通讯;
同样,这个思路也适用于 re ——找到套壳代码在内存展开的那一瞬,剩下的迎刃而解。
回过头再看 web、re、crypto、pwn、misc 是否更清晰了一些呢?当然,强化不同的方向也还是要抓住起核心模型的,比如 Linux 文件的三种权限。
4. α & β——宏观之上,已知 🆚 未知
其实,我们还可以进一步抽象:网络攻防的手法无外乎两种—— α & β 。
- β,就是建立基线;
- α,就是 0 day ;
但还不够,现在我们依然面临和加解密相同的难题——时间不够。
5. 如何系统化训练?
5.1.训练方法上—— 一个靶机🎯做三遍
既然知道了一个完整的攻击流程,那么练习——也就是做靶机🎯——时也应该遵循这个完整套路才能习得网络攻击的核心逻辑。即需要把每一个靶机🎯做上三遍——渗透(即以攻击者视角)做上一遍 ➡️ 应急响应(即以防守者视角)做上一遍 ➡️ 最后做一遍加固,看之前的攻击方法还好不好使(也可以理解为做数学题时的验算)。
这样做上几个靶机,也就建立起攻击链条的宏观视野。但这时还是感到很零碎,为什么要选择这个攻击点,而非那些攻击点?……
为什么强调「一个靶机🎯做三遍」?是为了从不同角度观察同一事物!比如:不要看到别人的 writeup 上写的用 A 工具,就只知道用 A 工具复现一下。要问「为什么不用 B 工具?」。更重要的是,A、B、C……工具按照「操控粒度」如何排序?哪些能够提供原子级的操控?哪些只能提供「捆」的操作(自动化程度越高,依赖的假设也越多,可泛化适配的场景越少)?……当我们遇到一个问题,手里有一整个武器库,还能知道首选 A,不行换 B,再不行换 C……,这才算是「吃透了这个问题场景」。
只有以体系才能对抗体系。我们需要做好两方面准备:脚本上的准备 & 知识上的储备(即 tools & ideas 的两手准备)。
5.2. 框架脚本🤖️ / workflow
为什么不借用别人的攻防框架,有必要非要建立自己的框架脚本(或是形成自己的 workflow )吗?「心灯不借他人火,自照乾坤步步明」,集成一定要由自己来搭建,以后再逐步替换为成熟组件。
同时,强调「脚本化」,是为了更快的「复用」。「操作」是不能复用的,能复用的是「脚本」。更有利的是,在 LLM 的助力下,可以更简单、更省力地让 LLM 帮我们填充攻防框架的「血肉」。可以说,以前需要长期积累 & 海量精力投入的事情,今天都有了实现的可能,实现难度、实现成本陡然下降。
同时,脚本化还能「并行」+「减少攻击痕迹」。总之,好处多多。
5.3. 笔记📝
5.3.1. 检验笔记做得好不好的标准——可复现
做笔记的标准就是「可复现」——可人工复现 & 能让机器复现(即纳入框架脚本)。
5.3.2. 做笔记 = 记录 + 索引
不管何种形式的笔记,本质上就是我们的「第二大脑🧠」。∴它也有着「记忆 + 回忆 / 提取」这个过程。重点是「提取」,记录也必须围绕「便于提取」这个目标服务。
也许用「播种」来形容「记录」更贴切,我们记录的目的不是单单记录下来,而是建立一个主题,以便今后和这个主题相关的信息、知识、智慧能够得以附着。既然是播种,那么就得经常「浇水」——围绕这个讨论的主题相互勾连,也可以理解为「将未知问题规约 / 转化为已知解决方案」。
其实,目标也不是做笔记或是搭建 workflow,而是形成 context ——译作「环境」?读书的时候,学校往往强调学习对象的定义是什么,这是从内部结构去定义;但往往忽略了从外部(与其他概念的交互、所处的结构洞……)去定义。而将一个事物从内、外两个方面都定义清楚了,这才是真正学明白了。
∴我们可以把培养学习习惯看做「三步走」——学会做笔记 → 形成 workflow(即教会机器如何应对)→ 搭建 context 。
6. 如何提高泛化 / 迁移能力?
……