漏洞挖掘指南

前言

既然本文档的标题是漏洞挖掘指南,那为了后续更加方便学习,因此在这里就来好好的做一版漏洞挖掘指南。

基础篇

涉及的主要是大学中的计算机基本课程,夯实计算机基础。

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的语法基础课

教程https://www.acwing.com/activity/content/21/

CSAPP

深入学习计算机系统

斯坦福大学的CSAPP是很不错的,全英文教学,不过B站有翻译好的

完成课后作业是很有帮助

http://csapp.cs.cmu.edu/3e/labs.html

课后作业参考

不过也可以看国内的视频

https://www.bilibili.com/video/BV1kE411X7S5

https://www.bilibili.com/video/BV1rE41127Re

https://www.bilibili.com/video/BV1jE411874k

编译原理 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网络编程》这本书进行学习,实现相关的功能

可以完成两个基本覆盖知识点的开源项目

1、tinyserver

2、webServer 源码

网络编程实战课程还是值得看看的

编译原理实战——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

相关的开源项目

1、一款基于ollvm魔改工具

2、LLVM增强的ollvm

3、LLVM CFG混淆pass

4、A collection of out-of-tree LLVM passes for teaching and learning

5、使用全新的pass-manager管理llvm pass

计算机网络

CS144 计算机网络

视频链接:CS144

中科大的计算机网络课程讲解也是不错的

课后实验笔记

1、lab-writeup

2、Stanford CS144 学习笔记

计算机组成原理

首先推荐的是哈工大的计算机组成原理

其次便是stanford的CS111这门课程,主要讲解的便是线程、并发、加锁这类的操作。

视频课程:CS111

课表:CS111 2021

当然伯克利大学的课程也是不错,并且也有视频课程

视频课程:CS162

课表:CS162 2020

操作系统

如果是想要学习kernel相关的知识,那么操作系统是一门很好的课程来带入我们学习内核

国外的课程推荐:麻省理工的操作系统

相关的笔记:Mit6.S081学习笔记

相关的课表:MIT6.S081的课表和教材

上面这个是本科生的独立的课程,后面又分出一门课专门为研究生准备的课程

MIT6.828

不过目前只能看PPT,并没有视频https://blog.csdn.net/u013577996/article/details/108679997)

国内课程推荐:学堂在线中的清华大学的操作系统课程

相关的课后作业:8个lab实验 、不过有在线的平台进行实验,感觉用处不大,还是考虑自己本地搭建平台吧

相关的笔记:操作系统实验笔记

https://github.com/chyyuu/os_course_info

软件分析

程序分析是一门重要的课程,主要是讲解如何分析流程,比如soot、污点分析,数据流分析等等技术,可谓是目前安全静态代码审计的必经之路,目前很多半自动化或者自动化漏洞检测工具都是会基于软件分析。

学习这门课程的前提是学过编译原理

  • 首先推荐的是南京大学新开设的课程《软件分析》

    课程是开放在B站上的,本课程是以java为基础,以soot为静态分析工具

    视频课程:软件分析

    课件地址:PPT

  • 北京大学公开课程熊英飞老师《软件分析技术》

    这个课程和南京大学差不多,都是基于soot的分析,可以作为补充材料进行

    视频:软件分析技术

    课件地址:PPT

课后作业:相关的笔记已经非常的多,课后作业在PPT中都有所提到,建议是看课程,跟着课程完成对应的课堂作业。

前面推荐的是国内优秀的两个课程,接下来是推荐国外的优秀软件分析课程

  • UFMG大学的DCC888

    该课程的优势在于是基于C/C++来进行讲解的,LLVM作为分析器,相比较上面的两个课程而言更加的深入,并且课程的质量也是非常的不错,讲师开放了相关的PPT和课程

    视频和PPT:link

    当然国内也有公司基于这个讲义进行讲解

  • SOLA program analysis

    总共涵盖了三个主题:静态分析、分析程序的源代码、动态分析,基于通用数据流分析框架为javascript实现污点分析。

    可以配合南京大学的课程进行搭配学习。

    课程地址:程序分析

    讲义以及课件:PPT

网络安全

这是麻省理工的网络安全的课程,可谓是非常的经典,并且课程内容都是非常的新,每年都有更新。

Berkeley安全课表

Berkeley CS161 计算机安全

这个课程的春季课程是可以看到视频,并且内容和Mit6.857有重复性的,但是麻省理工的课程(mit6.857)并没有公开完全的PPT,所以可以优先看这个课程,来学习吧,不过密码学教程是有更加详细的教程。

除此之外,其秋季课程(CS161 2021)公开了PPT。

MIT6.858:计算机系统安全

这套课程可是非常棒,内容课网络安全非常的接近,涉及到Android、Linux、cpu等等方面的知识。并且还youtube上在存有课程,可以结合课程进行学习。

stanford CS155 计算机和网络安全

内容和mit6.858相似,不过内容也会有所差异,可惜的是并未有开放视频教程,不过有ppt

以上内容就是基础课程,学习完成这些基础内容,计算机能力可谓相当扎实。

能力篇

基础漏洞学习

想要学习挖洞,那必然是需要熟悉基础漏洞原理,学习途径大致如下

1、CTF-wiki 或者看Nightmare

在CTF-wiki中包含了绝大多数漏洞类型,同时也是含有漏洞练习,同时可以训练写EXP

2、pwnable.tw

练习pwn题目还是要去做高质量的赛事的题目,很多滥竽充数的比赛的题目就是无限脑洞

📎pwnable.tw-部分题目WP合集.pdf

3、pwnable.kr

与tw相似的网站

4、首选推荐的是这个pwn.college上的Challenges

在该挑战中,不仅仅是做题目,其中还涉及很多pwn相关的视频教程,非常适合用来学习

5、CS6265信息安全实验

课程资源:之前长亭科技开展了一场免费的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工具都是基于这个来修改的。

相关资料:

1、sakuraのAFL源码全注释

2、AFL二三事——源码分析 当然在看雪和他自己的博客中有更多内容,深信服千里眼

3、AFL内部实现细节小记

4、AFL文件变异一览

当然还有很多关于AFL的文章,不过最终都是需要自己动手调试代码

作业:动态调试AFL代码完成笔记

视频教程

①、Fuzzing with AFL - by Michael Macnair

该教程时间比较长,3小时的讲解,但是对AFL的讲解是很细致的,是学习AFL的一门好教程。

fuzz相关的月刊

Fuzzing Labs Monthly Newsletter

每个月初都会总结上个月出现的与fuzz相关的文章、工具、论文等等

2、fuzz实战分析

利用fuzz去进行漏洞挖掘,实际分析案例来增加对fuzz的原理的熟悉程度。

①、

作业:依靠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实战

Codeql官方代码

这个github与Semmle合并开源出来的产品,该工具的功能是非常强大的。

官方文档是学习这个工具最好的手册

值的学习的Codeql资源库:link

参考文章

1、CodeQL 若干问题思考及 CVE-2019-3560 审计详解

2、📎根据GitHub_Security_Lab上的例子学习CodeQL.pdf github_Security_lab

3、CodeQL实用指南

视频教程

1、CodeQL as an auditing oracle

2、Finding security vulnerabilities in JavaScript with CodeQL

实战篇

Android漏洞

1、Android应用层漏洞

这里是学习应用层的漏洞,并不是深入到系统级别。

基本的了解

📎张波:安卓漏洞利用与技术实践.pdf

同时今年的byteCTF的Android题目还是可以拿来学习一下

Android APP层的漏洞类型基本都是基于四大组件为攻击入口来进行。

网上基本开源的和商用的自动化检测平台基本上都是这些漏洞类型

APP层的漏洞可能更多的是信息泄露或则其他组合漏洞类型进行越权访问,危害性基本上是跟随着业务的重要性来决定。

学习教程

Android安全指南、路线图

练习教程

练习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

https://github.com/satishpatnayak/AndroGoat

https://github.com/rewanthtammana/Damn-Vulnerable-Bank

课后作业:总结练习的漏洞demo类型

参考文章:

1、在该博客中含有最新的APP漏洞分析

2、破解小米的应用程序 part1

3、Android中的特殊攻击面 邪恶的对话框 危险的deeplink 隐藏的call函数

4、Android版本的TikTok组合漏洞分析

2、Android漏洞

这个部分的漏洞往往都是漏洞利用链,与Android系统相关的内容会比较多,难度也是比较大的,同时漏洞的危害也是相当大。

基本的了解

这个主题是比较难并且分享也是比较少的,所以能够找到的教程也是非常少,很多学习基本上都是依靠自己来看相关安全会议的paper或者直接看漏洞公告分析补丁。

用Rust编写Android模拟器

针对Android的fuzz

参考文章

参考文章收集的都是比较经典的教程或者会议的paper

实际上这类漏洞都是与Linux kernel 或者 AOSP相关,甚至很多CVE是基于特定厂商的ROM才有的漏洞。

3、Android漏洞的自动化探索

这一小节就是来讲上面所学的漏洞类型进行抽象出来,探索自动化漏洞发掘方案。

Linux漏洞

Linux漏洞应该算是各大平台的漏洞基础,很多平台都是基于Linux来进行开发的。

想要学习这块内容,前面的基础操作系统是必不可少的,熟悉Linux内核,最好是实现一个基本的Linux kernel

最强的学习清单:Linux-kernel-explortation

学习教程:

视频教程:latest Linux kernel CVE security vulnerabilities

系列教程:Linux kernel Explort 内核漏洞学习

教程文章

学习文章

IOT/车联网漏洞

IOT是一个比较热门的方向,目前来看难度也不是那么的顶,是学习漏洞挖掘可以考虑的路径。

由于这块是一个比较庞大的方向,又和前面的有一定的差异,因此这块内容规划有几个子模块。

基础篇

基础学习参考书籍

《家用路由器0day漏洞挖掘技术》

《物联网渗透测试》

当然针对不同的设备有不同的会有不同的书籍

基本学习的视频

比较全的IOT指南:https://iot-security.wiki/

学习文章

实战篇

IOT这块学习主要还是去直接复现固件,学习别人的分析思路,分析漏洞,因为IOT涉及到的知识是比较全面。

参考文章

拓展篇

前沿安全技术研究

这块主要是去阅读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都是在恶意软件识别

安全大杂烩

IOS漏洞挖掘


漏洞挖掘指南
http://example.com/2023/03/10/漏洞挖掘指南/
作者
John Doe
发布于
2023年3月10日
许可协议