Vulnerability Discovery and Triage Automation Training
漏洞发现和分类自动化
培训讲师
Richard Johnson:一位专注于软件漏洞分析的计算机安全专家。目前是思科公司Talos安全智能和研究组的研究负责人。拥有15年专业经验的Richard Johnson在软件安全行业具有领导地位。目前的职责包括研究和开发先进的模糊测试分析技术,以促进漏洞挖掘过程的自动化。理查德十年来每年都出席世界顶级的安全行业会议,并受邀在几个主要活动中发言。Richard Johnson也是co-founder杂志的共同创办人,并且在USENIX攻击技术研讨会上担任委员。
概况
本课程旨在向学生介绍可用于自动挖掘漏洞和崩溃诊断的最佳工具和技术,重点提供在任何规模实际操作中应用此技术的实用方法。
通过对介绍性程序分析和二进制翻译的应用理解,将讨论用于查找各种Bug的技术以及用于改进崩溃现象的方法。通过整数溢出,未初始化的变量,UAF漏洞以及应用工具(如编译器插件,
二进制检测框架,内存调试器和模糊器)来进行内存损坏分析。
接下来会深入讲解fuzzing技术,涵盖了查找bug的所有方面的实用方法。作为最熟悉及最通用的工具,将使用不同的fuzzing技术进行实操演练。学习分析攻击面、编程和生成有效库的策
略。探索创新细节,例如利用代码覆盖进行监督进化式的模糊测试以及符号推理concolic模糊测试。
通过脚本化调试器和程序分析技术来进行崩溃诊断和分析。将再次研究在崩溃情况下内存损坏的表现。应用反向调试和内存调试脚本等工具来协助交互式诊断崩溃的根本原因。 然后利用
dynamic taint tracking和graph slicing的功能来帮助隔离程序中用户控制输入的路径,并确定影响崩溃的具体输入字节。 最后将研究可行的方法来帮助确定漏洞的严重性。
本课程将基于x86 / x64体系结构的Windows和Linux环境,但是也包含有关ARM和移动平台应用程序的一些讨论,而且这些概念也会其他运行环境中非常有用。
培训对象
本课面向希望为软件添加自动安全分析组件的专业开发人员或安全研究人员。通过本课程的学习,希望采用程序或工具驱动法分析软件漏洞和崩溃审阅的学员将受益匪浅。
关键学习目标
• 学习使用新工具和新技术发现漏洞的有效策略;
• 了解采用静态分析法发现缺陷的应用软件;
• 了解如何利用功能强大的框架分解和分析程序;
• 学习如何编写基本的 clang 分析器插件;
• 程序分析中级语言简介;
• 图形搜索、转换和切片的简介;
• 利用动态二进制翻译进行高效跟踪和程序的深度检查;
• 掌握最新模糊测试技术、文件策略和网络模糊测试;
• 学习语法模糊测试、演化模糊测试、内存模糊测试和符号模 测试;
• 语料库生成、模糊测试工具部署和确定目标;
• 采用污点分析和图形切片等先进技术进行崩溃分析。
议程
第一天:程序分析
上午:
自动发现漏洞的策略;
分析内存崩溃漏洞的属性;
了解程序分析的性能和应用;
C/C++ 源代码的程序分析;
高级模式匹配和 AST 搜索简介;
利用数据流分析进行缺陷检测之简介;
介绍如何编写 clang 分析器插件;
练习:编写 clang 分析器插件。
下午:
通过黑盒测试查找缺陷时的动态内存分析;
Linux 和 Windows 操作系统执行二进制翻译的有效工具;
Valgrind 和 Dr. Memory 工具简介;
PIN、DynamoRIO 和 DynInst 翻译平台的代码覆盖率;
使用 BAP 进行动态污点分析之简介 ;
练习:代码覆盖率、污点分析和属性检查。
第 2 天:模糊测试和审阅 1
上午:
通过黑盒测试研究漏洞的攻击面分析;
枚举可信边界;
枚举输入;
利用图形可达性分析;
练习:可达性分析
分代模糊测试和突变模糊测试的最佳方法;
通过模糊测试暴露漏洞;
高效突变引擎 (mutation engine);
高效生成语料库;
创建协议和文件格式语法;
崩溃检测;
练习:分代模糊测试
下午:
演化模糊测试;
代码覆盖率驱动的模糊测试;
修改目标代码以优化演化模糊测试;
实现高性能的最佳方法;
练习:演化模糊测试下的二进制代码和源码目标;
交互式崩溃调试和脚本崩溃调试;
发现内存损坏缺陷根本原因;
内存调试器和代码覆盖率;
调试器插件和脚本 API;
反向调试;
练习:调试器脚本
第 3 天:模糊测试和审阅 2
上午:
高级模糊测试;
使用 QEMU 对内核和其他构架进行模糊测试;
使用动态符号执行(concolic execution) 进行混合模糊测试;
对浏览器和语言解释程序进行模糊测试;
练习:对动态符号、浏览器和语言解释程序进行模糊测试
下午:
高级崩溃分析;
动态污点分析和图形切片;
可利用性分析的前向符号执行 (forward symbolic execution);
练习:使用污点切片和符号执行技术进行调试