二进制安全学习之路
2023-4-10 16:8:0 Author: xz.aliyun.com(查看原文) 阅读量:25 收藏

之前一直有写文章总结一下学习二进制安全过程的想法,但是因为某些原因(好吧就是懒)一直未行动。恰好泡泡看到平台上的问题来邀请我回答一下,就借这个机会做个小总结,希望能给当时像我一样略微迷茫的同学一些帮助。

从0到1

初入大学之前的暑假,我才第一次听到C语言这个名字。作为一名选择了计算机专业的电脑小白,除了一开始在课堂跟着老师写点hello world,在专业知识上十分迷茫。 后来我大一就加入了院里的信息安全社团--Blue Whale,社团的学长给我们推荐了一些非常有用的书籍。其中两本书也推荐给刚开始学习二进制安全的你:

  1. 《大学计算机基础》(如果你是计算机小白,强烈推荐)
  2. 《程序员的自我修养:链接、装载与库》。这本书详细介绍了你写的C的hello world,从源代码到机器最终去执行这个过程发生了什么。

从理论到实战--CTF入门

CTF的介绍我这里就不多写了,有兴趣了解的朋友可以参考CTF-wiki 。CTF竞赛是一个可以将理论知识进行实践的过程。我在大二到大三大约一年多的时间里频繁参加各类CTF竞赛。也是在这个过程中,我明显感到自己的动手能力和快速学习能力有明显的提升。顺便推荐下二进制方向的CTF学习上手最好从Reverse方向上手,原因后面会说明。
这个过程中,推荐你多去动手查资料,可以关注一些知名战队的twitter或者别的发布渠道,在赛后阅读一下费了功夫但是未解出的题目的writeup。 同时可以尝试去阅读一些操作系统方向类的书籍或者操作系统源码,这部分在后续的二进制安全学习中多多少少会用到;除了安全方向,基础的算法和编程能力建议也不要落下,像《算法导论》和ACM竞赛这类都是值得去学习尝试的。

从入门到精通--CTF进阶

当你觉得国内CTF竞赛已经学不到新的东西时,我建议你多去尝试参加一些国际类CTF竞赛,如Defcon,Plaid CTF等。这类国际CTF竞赛的赛题质量相对高一些。这一阶段也可以尝试去上手pwn方向题目,学习过程可以参考Reverse类题目的学习过程,通过刷题去掌握必要的知识和套路。这里解释下我为什么建议二进制安全的学习入门选择reverse方向。不论是pwn方向还是后续的软件漏洞挖掘与利用,难度主要集中在两点上:漏洞的发现和漏洞的利用。漏洞的发现在很多场景下会依赖个人的逆向能力。因此,扎实的逆向能力会是学习二进制漏洞挖掘与利用的前提条件。

从CTF到真实漏洞挖掘

我挖掘到的第一个真实软件的漏洞是存在于Qemu中的一个除法错误漏洞(在这之前我都不相信这类bug可以作为一个漏洞来报告)。从经验来说,我建议刚开始尝试独立挖掘CVE的同学先去复现一些某个方向的漏洞,如windows内核提权,Linux内核提权等,之后再尝试对已公开的漏洞举一反三,对漏洞上下文或附近代码进行分析,看看是不是有类似的漏洞未被发现(俗称捡漏)。近年来一些国际性的CTF也会偏向于通过0day或者1day漏洞来出题,这类题目也是学习不同方向漏洞分析与利用方法的好途径。另外,很多国际安全会议会有一些安全研究人员分享一些最新的漏洞挖掘思路和利用技巧,这些也很值得关注和学习。如果你计划读研或者读博,去读一读顶会二进制安全方向的论文也是一个不错的选择。

二进制安全研究现状和学习资料推荐

二进制漏洞挖掘目前主要有两种方式,一种是通过模糊测试(fuzz),通过尽可能模拟程序的所有输入,增加代码覆盖率,使程序产生crash来发现漏洞;一种是通过代码审计或者逆向,人工去发现漏洞。二进制漏洞挖掘常见的方向包括:IoT安全,浏览器安全,操作系统安全,移动端安全,虚拟化安全等(基本都是基于C/C++编写)。每个方向深入学习都需要不少的学习成本,所以我建议刚开始接触真实软件漏洞挖掘时,选定一个方向,不要贪多。以下是一些方向的介绍与学习建议。

IoT安全

也称嵌入式安全。包含的种类较大,小到如家用路由器,摄像头,电动门锁,大到商用交换机,车联网安全都跟这个方向强相关。这个方向建议多学习基础的理论和硬件知识,如大学电子系的各类专业课等。推荐书籍:《硬件安全攻防揭秘》

浏览器安全

主要包括Chromium,Safari,Edge,Firefox等主流浏览器。浏览器安全中目前被关注较多的主要是JS引擎安全和渲染引擎安全。其中JS引擎安全涉及Javascript代码在客户端运行时的优化等,想要理解相关代码建议阅读《编译原理》等编译相关书籍。不少研究人员通过开发针对JS引擎和渲染引擎的fuzz工具也有不错的产出。浏览器安全的学习我推荐sakura的浏览器相关blog(https://eternalsakura13.com/)。

操作系统安全

针对三大桌面操作系统(Windows,Linux,Macos)的漏洞挖掘。 Windows内核安全推荐阅读《windows internals》。Linux内核安全推荐直接多阅读Linux内核代码,读不懂的部分就google相关资料。目前也有很多好用的针对不同操作系统内核的fuzz工具,大家也可以尝试使用或改进这类工具来发现漏洞。

虚拟化安全

个人或企业类的虚拟化软件漏洞挖掘。建议从Qemu,VirtualBox等开源软件漏洞挖掘入手。推荐阅读这个github 中收录的文章。

小结

暂时就想到了这么多,大家有其他问题欢迎评论提问


文章来源: https://xz.aliyun.com/t/12402
如有侵权请联系:admin#unsafe.sh