C++安全编程与渗透测试培训大纲
第一部分:C++程序安全概览
要点:从C++程序角度的安全定义,Top 25 Errors,CVE,资源
第二部分:渗透测试基础
要点:Pentest,背景,测试过程,重要资源,
Kali Linux, Metasploitable 2,
BackBox,
环境搭建,
渗透测试的五大步骤,
Metasploit Framework详细解析,
主机入侵完整过程演示(利用IRC漏洞远程登录被攻克目标机),
Armitage
[试验一]使用MSF利用IRC的溢出漏洞入侵主机
第三部分:WinDBG精要
要点:WinDBG的命令类型,常用命令,命令语法,调试符号,符号文件的种类,符号服务器,
定制调试事件的方法和重要的调试命令,
软件断点、硬件断点,复杂的断点命令,
x86寄存器和反汇编技巧
[试验二] WinDBG基础(15分钟)
第四部分:栈和局部缓冲区溢出
要点:栈基础,栈帧,栈帧布局,
栈指针被破坏(Stack pointer corruption.),
局部缓冲区越界(Overruns),
栈被破坏(Stack corruption.),
缓冲区溢出攻击(BOA),
实例演示,SQL Server案例,Win7案例,IRCDaemon案例,GS机制(基于Cookie的溢出检测机制),编译器的保护措施
[试验三] 理解缓冲区溢出攻击(30分钟)
第五部分:异常处理和应用程序崩溃
要点:结构化异常处理(SEH),C++异常处理,
Windows的异常奋发机制,
程序崩溃的完整过程和调试方法,
转储的基本知识,
如何使用ADPLUS自动产生用户态转储,以及分析用户态转储的常用命令和技巧
[试验四] JIT调试和异常事件处理(30分钟)
第六部分:多线程同步和死锁
要点:并发和并行,多线程,
C++程序中创建线程的多种方法,
在VC和WinDBG中观察和操纵线程的方法,
使用WinDBG来调试多线程程序和同时调试多个进程,包括控制线程执行状态,临界区,观察同步对象、分析死锁的方法,
案例演示,CPU的同步机制,互锁系列内建函数(intrinsic)
第七部分:堆和堆腐败
要点:C++程序中动态分配内存的多种方法(malloc, new, HeapAlloc),
介绍调试内存有关的典型问题的方法和技巧,
包括使用CRT堆和Win32堆的调试支持,
分析内存泄漏、访问违例和栈溢出等,
在探讨实践经验的同时会穿插重要的理论知识,
包括Win32对和CRT堆的结构、内存管理常识、堆布局等,真实案例分析
[试验五] 使用UMDH追踪堆的分配细节(30分钟)
第八部分:安全开发和威胁建模
要点:SDL(Security Development Lifecycle),SD3C,SDL定义的主要过程和佳安全实践,
Software Assurance Maturity Model (SAMM),TOP 25编程错误解析,
常用建模方法概览(Trike 、OCTAVE 和P.A.S.T.A),
威胁建模,Microsoft Threat Modeling过程,STRIDE,风险评级,
微软Threat Modeling Tool 2016用法演示
第九部分:代码扫描
要点:源代码扫描和黑盒扫描,
静态扫描的优势,
Coverity介绍,
工作过程,AST树,Checkers,
三类事件,误报问题和函数建模,
开源的扫描工具
第x部分:数字签名和代码完整性基础
数字签名的工作原理和有关的密码学基础,
非对称加密,
Key的保护和管理,
Windows系统检查代码完整性的过程和有关的系统部件,对文件进行数字签名的工具和方法
第x部分:钩子和外挂
介绍钩子(Hook)技术的背景和简要历史,
分析Windows平台上的常用钩子技术及其工作原理,
包括DLL注入、IAT挂钩、消息挂钩等,
然后针对保护键盘输入这一目标,
讨论键盘输入的数据路径,
防止按键被嗅探的方法 |