漏洞挖掘指南
前言
既然本文档的标题是漏洞挖掘指南,那为了后续更加方便学习,因此在这里就来好好的做一版漏洞挖掘指南。
基础篇
涉及的主要是大学中的计算机基本课程,夯实计算机基础。
C++与STL内容
编程是学习漏洞挖掘和代码审计最基础的技能,参考笔记:https://github.com/Kiprey/Skr_Learning/tree/master/week1-2
学习STL无疑是学习侯捷的课程,不会的查看侯捷的书籍
同时在github上看到了不错的C++的教程,内容总结得非常不错
课程资源
链接: https://pan.baidu.com/s/1Nq9ic1K5ipUJKFke6Hi-RA 提取码: 8bpw
–来自百度网盘超级会员v5的分享
至于C++语言,在大学都是修过,这里就不过多的推荐教程
刷一波AcWing的语法基础课
CSAPP
深入学习计算机系统
斯坦福大学的CSAPP是很不错的,全英文教学,不过B站有翻译好的
完成课后作业是很有帮助
不过也可以看国内的视频
编译原理 CS144
学习编译原理是至关重要的,很多大学都不开设这门课程,但是在实战中或安全研究中会用到大量编译原理的知识。
学习编译原理首推的斯坦福的CS143
除此之外,哈工大的编译原理也是很不错的教程
SFU大学的编译器。基于LLVM
http://anoopsarkar.github.io/compilers-class/syllabus.html
学习任务就是自己实现一个小语言的解释器或者编译器
优秀笔记
1、https://github.com/Kiprey/Skr_Learning/tree/master/week3-6
网络编程/unix编程
掌握进程间通信、多进程多线程等等知识
建议直接跟着《unix网络编程》这本书进行学习,实现相关的功能
可以完成两个基本覆盖知识点的开源项目
网络编程实战课程还是值得看看的
编译原理实战——LLVM IR Pass代码优化
参考课程:[ 多伦多大学课程 CSCD70github资料
参考笔记:https://github.com/Kiprey/Skr_Learning/tree/master/week7-8
学习书籍:学习LLVM12
官方文档:LLVM文档
学习教程:1、https://llvm-tutorial-cn.readthedocs.io/en/latest/index.html
2、https://llvm.org/docs/tutorial/index.html
3、【首推】https://github.com/These-us/awesome-llvm-security
相关的开源项目
4、A collection of out-of-tree LLVM passes for teaching and learning
5、使用全新的pass-manager管理llvm pass
计算机网络
CS144 计算机网络
视频链接:CS144
中科大的计算机网络课程讲解也是不错的
课后实验笔记
计算机组成原理
首先推荐的是哈工大的计算机组成原理
其次便是stanford的CS111这门课程,主要讲解的便是线程、并发、加锁这类的操作。
视频课程:CS111
课表:CS111 2021
当然伯克利大学的课程也是不错,并且也有视频课程
视频课程:CS162
课表:CS162 2020
操作系统
如果是想要学习kernel相关的知识,那么操作系统是一门很好的课程来带入我们学习内核
国外的课程推荐:麻省理工的操作系统
相关的笔记:Mit6.S081学习笔记
相关的课表:MIT6.S081的课表和教材
上面这个是本科生的独立的课程,后面又分出一门课专门为研究生准备的课程
不过目前只能看PPT,并没有视频https://blog.csdn.net/u013577996/article/details/108679997)
国内课程推荐:学堂在线中的清华大学的操作系统课程
相关的课后作业:8个lab实验 、不过有在线的平台进行实验,感觉用处不大,还是考虑自己本地搭建平台吧
相关的笔记:操作系统实验笔记
https://github.com/chyyuu/os_course_info
软件分析
程序分析是一门重要的课程,主要是讲解如何分析流程,比如soot、污点分析,数据流分析等等技术,可谓是目前安全静态代码审计的必经之路,目前很多半自动化或者自动化漏洞检测工具都是会基于软件分析。
学习这门课程的前提是学过编译原理
课后作业:相关的笔记已经非常的多,课后作业在PPT中都有所提到,建议是看课程,跟着课程完成对应的课堂作业。
前面推荐的是国内优秀的两个课程,接下来是推荐国外的优秀软件分析课程
UFMG大学的DCC888
该课程的优势在于是基于C/C++来进行讲解的,LLVM作为分析器,相比较上面的两个课程而言更加的深入,并且课程的质量也是非常的不错,讲师开放了相关的PPT和课程
视频和PPT:link
当然国内也有公司基于这个讲义进行讲解
SOLA program analysis
总共涵盖了三个主题:静态分析、分析程序的源代码、动态分析,基于通用数据流分析框架为javascript实现污点分析。
可以配合南京大学的课程进行搭配学习。
课程地址:程序分析
讲义以及课件:PPT
网络安全
这是麻省理工的网络安全的课程,可谓是非常的经典,并且课程内容都是非常的新,每年都有更新。
这个课程的春季课程是可以看到视频,并且内容和Mit6.857有重复性的,但是麻省理工的课程(mit6.857)并没有公开完全的PPT,所以可以优先看这个课程,来学习吧,不过密码学教程是有更加详细的教程。
除此之外,其秋季课程(CS161 2021)公开了PPT。
这套课程可是非常棒,内容课网络安全非常的接近,涉及到Android、Linux、cpu等等方面的知识。并且还youtube上在存有课程,可以结合课程进行学习。
内容和mit6.858相似,不过内容也会有所差异,可惜的是并未有开放视频教程,不过有ppt
以上内容就是基础课程,学习完成这些基础内容,计算机能力可谓相当扎实。
能力篇
基础漏洞学习
想要学习挖洞,那必然是需要熟悉基础漏洞原理,学习途径大致如下
在CTF-wiki中包含了绝大多数漏洞类型,同时也是含有漏洞练习,同时可以训练写EXP
练习pwn题目还是要去做高质量的赛事的题目,很多滥竽充数的比赛的题目就是无限脑洞
与tw相似的网站
4、首选推荐的是这个pwn.college上的Challenges
在该挑战中,不仅仅是做题目,其中还涉及很多pwn相关的视频教程,非常适合用来学习
课程资源:之前长亭科技开展了一场免费的PWN培训
链接: https://pan.baidu.com/s/1_eS-irqHkEGd2WzQkuqwNQ 提取码: b6o1
–来自百度网盘超级会员v5的分享
快速学习pwn可以直接看上面的长亭公开课或者中国台湾大学开设的PWN课程,涵盖了CTF-wiki中大部分知识。
同时在B站中有团队讲解PWN,整体来看是一个不错的教程。
相关书籍推荐
《程序员的自我修养:链接、装载和库》
《CTF竞赛权威指南:PWN》
《黑客之道 漏洞发掘的艺术》
《漏洞战争 软件漏洞分析精要》
《0Day安全:软件漏洞分析技术》
当然还有NULL和FlappyPig两个战队出的CTF指南
辅助技能学习
这个部分就是学习一些辅助或者是提效的知识点
1、fuzz学习
fuzz的学习是一个很大的方向,很多方向的漏洞挖掘都可以使用fuzz来进行,学习fuzz不仅仅是学习这个工具,而是去学习这个思想,重点是掌握修改fuzz工具来挖掘自己的目标。
学习和调试AFL fuzz,几乎后期的很多fuzz工具都是基于这个来修改的。
相关资料:
2、AFL二三事——源码分析 当然在看雪和他自己的博客中有更多内容,深信服千里眼
当然还有很多关于AFL的文章,不过最终都是需要自己动手调试代码
作业:动态调试AFL代码完成笔记
视频教程
①、Fuzzing with AFL - by Michael Macnair
该教程时间比较长,3小时的讲解,但是对AFL的讲解是很细致的,是学习AFL的一门好教程。
fuzz相关的月刊
Fuzzing Labs Monthly Newsletter
每个月初都会总结上个月出现的与fuzz相关的文章、工具、论文等等
2、fuzz实战分析
利用fuzz去进行漏洞挖掘,实际分析案例来增加对fuzz的原理的熟悉程度。
①、
- 实战首选是推荐使用Fuzzing101,总共含有10个真实的样本提供练习
- AFL-Training
作业:依靠fuzz分析crash并分析漏洞,总结两个练习
②、如果在分析漏洞过程中觉得路径太过于陡峭,不妨先从下面这两个教程中来进行学习。
这两个内容是差不多的,可以当做是入门级别的教程,想比fuzzing101来讲并不是这么陡峭
作业:实现教程中的程序,总结相关的技术,写出同样的教程。
③、拓展课视频课程
来自youtube的专门讲解各种fuzz的视频教程
主讲人来自印度的,英语听起来很麻烦,也无法识别,好在有操作,可以看视频操作。
在其中涉及到很多fuzz工具的讲解
fuzzing基础课
fuzzing with AFL\Hongfuzz\WinAFL\libfuzzer\radamsa\AFL++\libAFL\e9afl\Jackalope
其中还含有调试相关、patch相关的内容
除此之外,youtube上的fuzzing lab的课程可以看看,不过缺点是不成体系,得加钱
作业:学习其中提到的各种优秀的fuzz工具
3、Codeql实战
这个github与Semmle合并开源出来的产品,该工具的功能是非常强大的。
官方文档是学习这个工具最好的手册
值的学习的Codeql资源库:link
参考文章
1、CodeQL 若干问题思考及 CVE-2019-3560 审计详解
2、📎根据GitHub_Security_Lab上的例子学习CodeQL.pdf github_Security_lab
视频教程
1、CodeQL as an auditing oracle
2、Finding security vulnerabilities in JavaScript with CodeQL
实战篇
Android漏洞
1、Android应用层漏洞
这里是学习应用层的漏洞,并不是深入到系统级别。
基本的了解
同时今年的byteCTF的Android题目还是可以拿来学习一下
Android APP层的漏洞类型基本都是基于四大组件为攻击入口来进行。
网上基本开源的和商用的自动化检测平台基本上都是这些漏洞类型
科恩APKpoker wiki
APP层的漏洞可能更多的是信息泄露或则其他组合漏洞类型进行越权访问,危害性基本上是跟随着业务的重要性来决定。
学习教程
练习教程
练习Android APP的漏洞类型,还是需要去分析漏洞demo
下面这几个漏洞demo都是值得去练习
https://github.com/B3nac/InjuredAndroid
https://github.com/dineshshetty/Android-InsecureBankv2
https://github.com/RavikumarRamesh/hpAndro1337
https://github.com/OWASP/MSTG-Hacking-Playground
https://github.com/OWASP/owasp-mstg/tree/master/Crackmes
课后作业:总结练习的漏洞demo类型
参考文章:
1、在该博客中含有最新的APP漏洞分析
- Android安全检查表:Webview
- 对三星设备的原装APP漏洞挖掘 part1 part2
2、破解小米的应用程序 part1
3、Android中的特殊攻击面 邪恶的对话框 危险的deeplink 隐藏的call函数
2、Android漏洞
这个部分的漏洞往往都是漏洞利用链,与Android系统相关的内容会比较多,难度也是比较大的,同时漏洞的危害也是相当大。
基本的了解
- 可以看Android安全团队的maddiestone Android Explort 101 video PPT
- 📎漏洞挖掘与利用-鹏城实验室交流.pptx
这个主题是比较难并且分享也是比较少的,所以能够找到的教程也是非常少,很多学习基本上都是依靠自己来看相关安全会议的paper或者直接看漏洞公告分析补丁。
针对Android的fuzz
参考文章
参考文章收集的都是比较经典的教程或者会议的paper
[Android Binder:The Bridge To Root](https://conference.hitb.org/hitbsecconf2019ams/materials/D2T2 - Binder - The Bridge to Root - Hongli Han & Mingjian Zhou.pdf)
实际上这类漏洞都是与Linux kernel 或者 AOSP相关,甚至很多CVE是基于特定厂商的ROM才有的漏洞。
3、Android漏洞的自动化探索
这一小节就是来讲上面所学的漏洞类型进行抽象出来,探索自动化漏洞发掘方案。
Linux漏洞
Linux漏洞应该算是各大平台的漏洞基础,很多平台都是基于Linux来进行开发的。
想要学习这块内容,前面的基础操作系统是必不可少的,熟悉Linux内核,最好是实现一个基本的Linux kernel
最强的学习清单:Linux-kernel-explortation
学习教程:
- pwn.college中的kernel部分,并含有大量的练习题目。
- 台大的Linux kernel教程
视频教程:latest Linux kernel CVE security vulnerabilities
系列教程:Linux kernel Explort 内核漏洞学习
教程文章
学习文章
Linux pwn题目入门 paper1
IOT/车联网漏洞
IOT是一个比较热门的方向,目前来看难度也不是那么的顶,是学习漏洞挖掘可以考虑的路径。
由于这块是一个比较庞大的方向,又和前面的有一定的差异,因此这块内容规划有几个子模块。
基础篇
基础学习参考书籍
《家用路由器0day漏洞挖掘技术》
《物联网渗透测试》
当然针对不同的设备有不同的会有不同的书籍
基本学习的视频
看完这两个视频,基本上对IOT有大致的了解。
比较全的IOT指南:https://iot-security.wiki/
学习文章
实战篇
IOT这块学习主要还是去直接复现固件,学习别人的分析思路,分析漏洞,因为IOT涉及到的知识是比较全面。
参考文章
[家用路由器漏洞挖掘实例分析图解D-LINK DIR-815多次溢出漏洞]
拓展篇
前沿安全技术研究
这块主要是去阅读Fuzz或者和安全相关的paper,ppt等材料,算是能力的推展篇,可能对漏洞挖掘不会有很大的增幅,但是可以掌握。
既然是前沿安全技术研究,为了更加的凝聚,大致收集这几类的论文和演讲课题
fuzzing 相关的论文以及课题
DL、ML应用于安全的论文以及课题
安全大杂烩——angr、新一代汇编工具、逆向思路
其他感兴趣的paper
前言
李沐的论文精读
在学习看论文或者是筛选论文之前,我想学习一下如何精读论文是一个非常好的开端。上面的教程就是教你如何选择合适的论文,如何去精读论文。
fuzzing 相关
基于AFL、libfuzzer等优秀的工具进行改写得fuzz,很多研究生的课题就是去漏洞挖掘,那必然会去二次开发或者重构自己的fuzz工具,适用于不同的场景,不同的设备来挖掘漏洞。
- 推荐深圳大学博士生的 fuzz paper项目,几乎涵盖了大部分与fuzz相关的论文和会议
DL、ML应用于安全的论文以及课题
机器学习和深度学习这块应用于安全还并不会特别的普遍,不过这应该是前沿技术研究,科恩就在尝试AI+binary的研究
有一个安全博主就在刚好写了一篇总结稿:AI for security,可以从中找到一点在安全方面的应用
《网络安全之机器学习》这本书也是一本讲解应用的书籍。
在看论文中,发现大部分的DL、ML都是在恶意软件识别
安全大杂烩
- 使用rust写的一款符号执行和污点分析框架,是基于radare2工具的插件
- 使用污点分析批量挖掘路由器固件安全漏洞