课程简介
就漏洞用途而言,主要分为远程代码执行(RCE,Remote Code Execution)、权限提升(EoP,Elevation of Privilege)、拒绝服务(DoS,Denial of Service)、信息泄露(Information Disclosure)等,其中,RCE是用的最多的。
对于具体的漏洞,其利用方式都有固定的套路,这实际上是一个攻与防不断的较量过程,从最初绕过各种保护(例如RCE中经典的Bypass ASLR+EIP获取+Stack Pivoting+ROP+Bypass DEP+Shellcode模式)到现今的RW primitives获取,并且随着安全防护措施的不断提升,很多时候需要漏洞组合才能达到利用的目的。
而对漏洞研究人员,其发展大致可分为3个阶段:
1)分析现有的公开漏洞及Exp;
2)在分析现有公开漏洞的基础上写Exp;
3)fuzzing漏洞并写Exp。
因此,初学者可选择一些公开的漏洞和Exp进行分析,主要目的在于熟悉漏洞利用的套路,漏洞可以选择较为常见的浏览器漏洞或者文档型漏洞等,当然,其中有个问题就是漏洞可能比较早了,可以尝试翻译国外的最新漏洞分析文章来作为补充。
预备知识
0 计算机基础:操作系统、程序语言、算法、数据结构、组成原理、网络等,这部分知识将会引领你走进计算机0和1的世界,从底层开始真正构筑起整个计算机脉络的体系架构。当然,不仅局限于漏洞分析,如果能把这些内容吃透,那么对于你在计算机安全方面的发展无疑是很有裨益的。
1 汇编基础:除了那些逻辑漏洞,其余漏洞大都会涉及到汇编,毕竟它是作为分析人员和计算机硬件之间交流的第一道桥梁,因此掌握好相应架构平台下的汇编语言是必须的。可以先弄懂x86汇编,这部分学习资料还是比较多的,后面再掌握其它平台的汇编就可以做到触类旁通了。
2 调试基础:单纯的看代码远不如实际调试来的真切,所以对于分析人员来说,软件调试是必须要掌握的一项基本技能,比如Windows平台下主要用到的WinDbg、OllyDBG和IDA调试,其它平台还有GDB、JEB等调试。
简言之,即“计算机知识”+“二进制逆向知识”。