从零基础到零日漏洞——写在前面的话

183 阅读8分钟

零日漏洞(Zero day)。这个词在信息安全圈里往往带有紧迫感、恐惧感,甚至兴奋感。之所以称为零日,是因为除了发现它们的研究人员外,没有人知道这些漏洞的存在,修补漏洞的倒计时尚未开始。因此,发现零日漏洞的人可以自由地利用它们。零日漏洞稀有、危险,且常被过度炒作,深深吸引着安全爱好者,他们将零日漏洞研究视为攻防安全的巅峰之一。

刚开始我还是一个有些小成就的安全测试“打杂”者时,寻找零日漏洞在我眼中是一门神秘的艺术,只有最聪明、最有经验的黑客才有资格掌握。我读博客,看大会分享,见识了各种令人惊叹的零日漏洞发现与利用案例,但就像魔术表演的观众,只能被最后的惊喜吸引,而难以理解其中的原理和技巧。研究人员怎么知道要去看代码的那个特别部分?为什么选择这个漏洞利用而非另一个?这些问题通常留给读者自己思考。尽管我后来涉足红队、网站渗透测试等领域,但这些经历也没能让我对零日研究的真相豁然开朗。我感觉自己离目标有很大差距:不是完全的新手,但离高手仍远。

然而,在有机会实践诸如恶意软件逆向工程等跨学科技能,并拥有时间和空间专注于深度安全研究后,我逐渐发现零日漏洞挖掘其实没想象中那么神秘。就像魔术背后其实有规律可循,更重要的是可学习的过程。尽管目标和技术多样,但研究人员有许多共同的工具和方法,能够高效发现新漏洞。本书旨在带你从零日新人一路走到发现首个零日漏洞乃至更远的旅程。

谁应该读这本书以及为什么

这本书写给那些站在鸿沟对面、对零日研究感到冒名顶替症(Impostor Syndrome)的人,尽管他们掌握了良好的攻防基础知识。你可能刚入门,偶尔参加靶场比赛或抓旗赛。你或许读过Peter Yaworski的《真实世界漏洞挖掘》或Daniel G. Graham的《道德黑客》之类书籍。也许你有渗透测试或红队经验,但面对真正开始安全研究时仍感迷茫。

网络上的博客和资料虽有教授零日研究,但难以像书籍那样全面深入涵盖所需技术,或者深度偏向某个细分领域,却缺少整体策略和思考流程指导。本书正是我刚入门时希望拥有的资源,既提供宏观视角,也涵盖具体细节,且不假设读者有太多先验知识。读完后,你应能自主启动安全研究项目。

本书内容简介

本书涵盖零日研究的三大技术:代码审计、逆向工程和模糊测试(fuzzing)。但不只是教你怎么用这些技术,更讲为什么这么用,如何针对不同目标最佳部署。我将介绍如何分析目标,识别最可能存在弱点的位置,并结合真实案例演示。例如在讲述代码审计中的污点分析时,我会带你从零开始重新发现一个公开漏洞。

虽然不可能完全详尽介绍三大技术(每一项都足够写几本书),但我会细致介绍各领域的子方向,帮助你对工具和技术做出明智选择。比如模糊测试工具不仅包括传统随机模糊器,还包括利用编译时或运行时插桩的覆盖引导模糊器。掌握这些概念后,你就能自主深入探索。

章节虽然分为不同部分方便针对技术跳读,但我建议按照顺序阅读,逐步加深对目标的理解。直接跳到“全面模糊测试”(第9章)可能会浪费大量时间对错误目标进行模糊。若你对某部分已很熟悉,也可跳过。

章节概要

  • 第0章:Day Zero
    介绍零日漏洞研究的关键概念,与其它攻防领域区别,并教你如何挑选研究目标。

  • 第一部分(代码审计)
    专注于理解和分析源码,尽管并非所有目标都有源码,但此部分教授的漏洞发现基础可应用于逆向和模糊测试。介绍如何从手工到自动化提升覆盖率。

    • 第1章:污点分析,结合真实示例手工进行源与汇分析,讲解源到汇的分析策略。
    • 第2章:代码与攻击面映射,教你如何识别攻击路径。
    • 第3章:自动化变种分析,介绍CodeQL、Semgrep等工具,并讲解如何批量覆盖多目标。
  • 第二部分(逆向工程)
    聚焦从目标二进制提取信息,理解输入如何流经程序直至可利用代码。先手工,再自动化。

    • 第4章:二进制分类,介绍常见二进制类型和逆向工具。
    • 第5章:源与汇发现,利用静态和动态方法定位重点分析区域。
    • 第6章:混合分析,介绍仿真、覆盖率和符号执行结合缩小分析范围。
  • 第三部分(模糊测试)
    介绍高度自动化、可扩展的模糊测试技术。结合前面章节的知识,理解模糊如何绕过流程,并演示提升模糊效率的方法。

    • 第7章:快速启动模糊测试,基础模糊文件与协议。
    • 第8章:覆盖引导模糊,讲解AFL++,如何编写测试挂钩与分析表现。
    • 第9章:全面模糊测试,更多复杂格式与二进制目标。
    • 第10章:超越Day Zero,介绍漏洞协调披露、撰写报告、将漏洞研究转化为安全改进。

这本书将带你系统学习并亲手实践零日漏洞研究,从代码审计到逆向工程,再到模糊测试,逐步成为能够独立开展安全研究的研究员。

源码和在线资源

本书包含许多可操作的示例,建议你亲自尝试。大多数示例均基于撰写时最新版本的 Kali Linux,或使用免费开源软件,但部分示例涉及 Windows 目标系统,因此最好使用虚拟机运行相应的操作系统和目标程序。示例均基于 x86 和 x64 架构,因此虚拟机不能使用 ARM 架构,这意味着无法在 Apple Silicon 设备上运行。
本书示例所用的源码和脚本均托管于本书的代码仓库:github.com/spaceraccoo… 。建议你直接参考该仓库,以节省复制粘贴代码的时间。仓库中包含 Git 子模块,这些是特定版本的开源仓库副本,克隆后需要额外执行以下命令来初始化子模块:

$ git clone https://github.com/spaceraccoon/from-day-zero-to-zero-day
$ cd from-day-zero-to-zero-day
$ git submodule update --init

在操作过程中,如果遇到任何问题或有进一步的疑问,欢迎在 GitHub 仓库提交 issue,或通过 X 账号 x.com/spaceraccoo… 联系我。

进一步阅读

书中引用了我在安全研究博客 spaceraccoon.dev 上的多个示例,我会持续更新新的研究和网络安全相关话题。
读完本书后,推荐进一步阅读聚焦特定目标和技术的书籍,如下:

  • Dennis Andriesse 著《Practical Binary Analysis》(No Starch Press, 2018)详细讲解逆向工程,特别是针对 x86-64 Linux 二进制的分析,能够系统奠定逆向基础。
  • James Forshaw 著《Attacking Network Protocols》(No Starch Press, 2017)深入解析网络协议,需要特殊工具捕获和分析,书中详述协议内部机制和加密技术,是逆向技术的重要补充。
  • Jasper van Woudenberg 和 Colin O’Flynn 合著《The Hardware Hacking Handbook》(No Starch Press, 2021)涵盖广泛的硬件目标与实用技能,如电路工作原理,适合硬件安全研究。
  • Fotios Chantzis 等著《Practical IoT Hacking》(No Starch Press, 2021)介绍硬件、固件及物联网生态系统(包括移动应用),是物联网安全研究的优秀导览。

掌握漏洞研究基本原理后,你会更好地理解这些书中介绍的高级和专业技术。

零日漏洞研究领域广阔且不断发展,资深与新晋研究员们持续分享新发现,建议关注社交媒体平台如 X 和 infosec.exchange/public/loca… 以获取最新信息。此外,可以查阅 hardwear.io、DEF CON、Hack In The Box、OffensiveCon 等网络安全会议的档案,这些是研究报告和演讲的宝库。还应关注零日研究组织和公司的博客,包括 Zero Day Initiative(www.zerodayinitiative.com/blog),它们会揭秘高影响力零日漏洞的细节。

让我们开始零日漏洞狩猎之旅吧!