4006-998-758
3000+课程任你选择
C/C++安全编码(LINUX平台)
研发学院 设计模式 驱动程序 操作系统内核 开课时间:2022-02-17
张银奎

1996年毕业于上海交通大学信息与控制工程系,在软件产业工作20年,拥有13年Intel工作经历,任职于INTEL公司的上海研发中心,先后在PASD、DEG、CPG、PCCG、VPG等部门工作。在英特尔先后从事软件开发、系统测试、架构设计等工作,呈担任英特尔架构事业部视觉与并行计算事业群担任首席软件架构师职务。

对IA-32架构、操作系统内核、驱动程序、设计模式、软件调优、C和C++等有深厚的工作经验,对于精炼、易于维护的代码有不懈追求。10多年GPU、CPG等深度优化技术积累和代码重构经验,每天的主要工作除了设计和编写代码外,就是调试和重构C语言代码。


查看老师详情
课程内容

课程介绍


因为直接操作内存、历史问题众多等原因,C/C++程序的安全性一直是业界的一个难题。本着生动有趣、理论与实践密切结合的原则,本培训围绕最突出的内存和溢出问题,深度解析C/C++程序的安全风险以及最佳实践。整个培训旨在实现三大目标:(一)深刻认识C/C++程序的安全风险,编写安全的代码(二)深入理解内存管理、异常处理等底层机制,知其然知其所以然(三)学习安全开发、渗透测试、威胁建模等提高安全性的最佳实践。本培训由《软件调试》和《格蠹汇编》的作者张银奎主讲。


课程形式


讲解 + 真实案例演示 + 动手试验


课程对象


在Linux平台上从事开发或测试的软件工程师和技术带头人。


课程大纲


第一部分:栈和局部缓冲区溢出(1.5小时)

要点:栈基础,栈帧,栈帧布局,栈指针被破坏(Stack pointer corruption.),局部缓冲区越界(Overruns),栈被破坏(Stack corruption.),缓冲区溢出攻击(BOA),实例演示,SQL Server案例,Win7案例,IRC Daemon案例,GS机制(基于Cookie的溢出检测机制),扩展到LINUX平台,GCC编译器的保护措施

 [试验] 理解缓冲区溢出攻击(30分钟)

 

第二部分:漏洞和安全基础 (1.5小时)

要点:漏洞三要素,攻击类型,RCE,DoS,外部攻击和内部攻击,CVE,安全风险,Open Web Application Security Project(OWASP),OWASP的十大安全风险排名,深刻理解注入攻击(经典的溢出注入和SQL注入),重要的学习资源——DVWA、mutillidae样本网站,Botnet和黑色产业链

 

第三部分:攻击工具和渗透测试(2小时)

要点:Pentest,背景,测试过程,重要资源,Kali Linux, Metasploitable 2,BackBox,环境搭建,渗透测试的五大步骤详细介绍,Whois,WhatWeb, NMAP,ZenMap,PingScan,静态扫描工具,OpenVas,Metasploit Framework详细解析,主机入侵完整过程演示(利用IRC漏洞远程登录被攻克目标机),Armitage;DoS攻击

 [试验] 使用MSF感受主机入侵(30分钟)

[试验] 使用ARMITAGE感受主机入侵(20分钟)

 

第四部分:页机制和内存管理器(1.5小时)

要点:物理内存,从core到DRAM,NUMA,page,pfn,页表管理,TLB,MMU,页错误,观察页错误,虚拟内存,交换分区,匿名交换和非匿名交换,进程的地址空间,vma,maps,vmstat,活跃内存和非活跃内存,内核池,从/proc/meminfo 观察内存使用情况,meminfo 信息深入分析

 

第五部分:堆和堆溢出攻击(1.5小时)

要点:用户态堆,ptmalloc,arena,heap,主arena的布局,辅anrena的创建,堆块结构,分配策略,bin,bin的组织,分配过程,释放过程,C++程序中动态分配内存的多种方法(malloc, new, HeapAlloc),堆块溢出,溢出攻击,案例分析,基于堆的安全漏洞和分析

 

第六部分:内存安全和自动检查工具(1.5小时)

要点:堆有关的错误,故障调试,valgrind,valgind的工作原理,Address Sanitizer(ASan),ASan的工作原理,影子记录,检查过程,额外开销

 试验:使用valgrind调试典型的堆错误(15分钟)

堆很脆弱,经不起的考验有很多:溢出、多次释放、野指针……,在Linux解决这些问题的最有力武器就是valgrind,以老雷亲自编写的GeMalloc程序为样本,模拟各类堆错误,并使用valgrind一一捕获

 试验:使用ASAN发现内存使用不当(30分钟)

 

第七部分:GDB精要(1.5小时)

要点:为自由而生,Richard Stallman传奇,GDB诞生记,GDB版本,GDB的架构和工作原理,ptrace,命令类型,命令语法,常用命令,调试符号,DWARF,符号文件,下载Ubuntu的符号包和源代码,ELF结构,readelf,寻找符号的方法,栈回溯(bt),软件断点、硬件断点,复杂的断点命令,控制线程

 [试验]:使用GDB调试Linux应用程序 (30分钟)

 

第八部分:信号、异常和意外出口(1.5小时)

要点:信号概要,信号屏蔽,设置信号处理器,理解古老的异常处理方式,setjmp,longjmp,段错误,段错误实例介绍,core文件,ulimit,core_pattern,ubuntu的错误收集机制,aport,分析core文件,本地分析,跨机器分析,分析core文件的最佳实践,异常处理有关的安全漏洞,不合理的异常处理器,因为异常和执行意外代码,代码实例分析

 试验:使用GDB调试后台服务因段错误崩溃 (90分钟)

Linux下重要后台服务(Daemon)随机崩溃,深挖到底,竟然与C语言的规范有关,让你深刻认识C与C++的一个大不同之处,感受著名的头文件陷阱;熟悉如下工具和主要技能:GDB,GCC,map,dmesg,调试Linux应用程序,反汇编,插入代码JIT调试;温习如下知识点:虚拟内存,分页机制,页表,缺页异常,段错误,空指针,AT&T汇编和Intel汇编,调用规约

 

第九部分:文件系统和文件句柄安全(1.5小时)

要点:“一切皆文件”,文件系统架构,组成,文件操作,设备文件系统,使用内核调试器帮助理解文件系统,EXT FS,Reiser FS,四个核心对象,准文件系统,proc fs(原理,关键代码,重要的应用,meminfo,maps等),sysfs,debug fs

 试验六:感受文件句柄混论

应用程序与驱动程序通信时,驱动程序总是收到错误的数据,打印出来观察,竟然是日志信息送给了驱动…分析数据混乱原因,理解虚拟文件系统、Linux驱动程序、sysfs、标准文件等理论化

 

第十部分:内核模块和Rootkit(1小时)

要点:可加载内核模块(LKM),init和exit,LKM,rootkit, 典型rootkit分析

 

第十一部分:反序列化(1小时)

要点:序列化背景,对象序列化,反序列化,2017-A8,对象篡改,破坏数据完整性,提升特权,DoS攻击演示,已经公布的漏洞,检测工具

 

第十二部分:安全开发(1 小时)

要点:SDL(Security Development Lifecycle),SD3C,SDL定义的主要过程和最佳安全实践,Software Assurance Maturity Model (SAMM),TOP 25编程错误解析

 

第十三部分:漏洞扫描(1小时)

要点:源代码扫描和黑盒扫描,Coverity介绍,工作过程,AST树,Checkers,三类事件,误报问题和函数建模,W3AF介绍和用法演示,OWASP ZAP用法和演<<<示

 

第十四部分:威胁建模(1小时)

要点:常用建模方法概览(Trike 、OCTAVE 和P.A.S.T.A),详细介绍Microsoft Threat Modeling过程,STRIDE,风险评级,微软Threat Modeling Tool 2016用法演示,




返回上一级