版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录3.1C和C++开发安全现状3.2C和C++常见安全漏洞3.3C和C++安全编码规范
1本章学习目标1.了解C和C++开发的安全现状;2.理解C和C++安全漏洞的原理;3.理解C和C++漏洞的防御方法;4.掌握C和C++安全编码规范;2C和C++开发安全现状3.1C和C++开发现状C和C++拥有很好的内存操作能力,工作效率更高。C和C++的应用领域非常广泛,包括操作系统、浏览器、嵌入式开发,游戏引擎和各类编辑器。C和C++语言在2015,2016年TIOBE编程语言排行榜中稳固二三名。C和C++的安全问题(1)指针的使用程序员可通过指针对内存地址进行显示类型转换,访问对象的私有成员,破坏了对象的安全性,出现非法指针解引用、内存泄漏等漏洞。(2)全局变量不加封装局部变量的修改可能导致全局空间的变量取值发生变化,从而影响其他函数取值和运行。(3)调用危险函数标准C/C++语言库中包含一些存在漏洞的危险函数,开发人员在编写代码时常调用这些危险函数。C和C++常见安全漏洞3.2缓冲区溢出缓冲区溢出是指程序员向缓冲区读写的数据超出了缓冲区定义的容量,从而覆盖了缓冲区后面的其他内存数据的现象。攻击者可通过控制用户输入人为覆写栈帧或邻接内存的数据结构,从而执行构造的恶意代码。典型的缓冲区溢出漏洞有心脏流血漏洞(OpenSSLHeartbleed),攻击者通过构造特殊的数据包使得用户心跳包中无法提供足够多的数据,从而导致memcpy函数把SSLv3记录之后的数据直接输出。释放后使用释放后使用(UseAfterFree-UAF)漏洞是指程序中错误的保留了已释放内存对象的引用,继续访问已释放内存的行为。攻击流程:(1)攻击者在内存释放对象A时大量申请与A同样大小的对象X,使A释放的内存分配给X。(2)在继续使用引用b时,由于A内存已被X占据,攻击者可使用引用b执行任意代码。整型溢出整数溢出是指由于程序员将数据放入了比它本身小的存储空间中,而出现的溢出现象。三类整数操作可导致整型溢出漏洞:(1)无符号整数的下溢和上溢:因无符号整数不能识别负数导致。(2)符号问题:符号整数之间的比较;有符号整数的运算;无符号整数和有符号整数的对比。(3)截断问题:在高位数的整数(如32位)复制到低位数的整数(如16位)时发生的溢出现象。空指针解引用空指针解引用是指在引用指向空地址单元的指针变量时产生的空指针引用故障。空指针引用故障可能导致系统崩溃、拒绝服务等诸多不良后果。典型例子:deep—rev—state_process()函数在关闭了套接字后仍然允许接受操作,若没有阻止攻击者对己经废弃套接字的操作,可造成空指针引用。格式化字符串格式化字符串漏洞是指软件使用了格式化字符串作为参数,且该格式化字符串来自外部输入。触发格式化字符换漏洞的函数有printf、sprintf、fprintf等print家族函数。格式化字符串的利用分为两种:(1)有binary且格式化字符串在栈中:可直接修改函数返回地址,利用%n来写入数据以修改控制流。(2)有binary且格式化字符串不在栈中:通过构造跳板来实现利用。内存泄漏内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,导致程序运行速度减慢甚至系统崩溃等后果。内存泄漏以产生的方式可以分为四类:(1)常发性内存泄漏:发生内存泄漏的代码会被多次执行到,每次被执行时都会导致一块内存泄漏。(2)偶发性内存泄漏:发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。(3)一次性内存泄漏:发生内存泄漏的代码只会被执行一次,总会有一块且仅有一块内存发生泄漏。(4)隐式内存泄漏:程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。二次释放二次释放(DoubleFree)是指程序在释放一块内存后没有将指向这块内存的所有指针清零或回收,并在其他地方再次将指向同一块内存单元的指针交给内存分配器去进行释放操作。二次漏洞的利用:(1)在释放对象A时申请同样大小的对象B,在对象A被释放后,二次释放对象A,此时实际上释放了B的内存。(2)在对象A被二次释放时申请同样大小对象X,此时可调用b的方法执行任意代码。类型混淆类型混淆漏洞指程序使用一种类型初始化指针、对象等资源,而在随后使用另外一种(并不兼容的)类型对这些资源进行访问。典型例子:Word在解析docx文档处理displacedByCustomXML属性时未对customXML对象进行验证,其可传入其他标签对象进行处理,造成类型混淆,导致任意内存写入和远程任意代码执行。未初始化漏洞未初始化漏洞是指程序中变量或对象未赋予初始值就直接使用的问题,可能导致信息泄漏和任意代码执行。函数B可通过在变量地址出写入构造的任意值,从而对A函数的执行造成不可估计的影响。C和C++安全编码规范3.3编码规范(1)代码中避免硬编码明文口令、密码、身份证等用户敏感数据。(2)对不安全C和C++库函数进行重写后再调用。C++中的字符串相关库函数均为不安全函数,当相关参数可以被外界控制时就会存在溢出漏洞,重写可在函数内部检查输入参数的合法性。(3)定义了指针成员变量、静态成员变量的类必须重写拷贝构造函数。在C++中,有三种情况需要调用拷贝构造函数:①对象以值传递的方式传递给函数参数。②对象以值传递的方式从函数返回。③对象需要使用另外一个对象进行初始化。编码规范(4)避免通过日志代码打印明文密码等敏感信息。(5)定义为基类的类的析构函数必须定义为虚函数.(6)线程安全:在多线程的环境中考虑并发、线程同步、互斥锁等问题,任何操作都需要考虑有其他线程来竞争系统当前拥有的资源。(7)不安全加解密算法检查。不可逆加密算法:m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2020年-2025年新高考II卷阅读A篇语篇精讲+-2026届高考英语二轮复习专项
- 家政早教类培训课件
- 物业公司财务部年终总结
- 培训讲师课件
- 培训讲义与课件的关系
- 新任村干部培训材料课件
- 商场消防知识安全常识
- 合肥工业大学 现代变形监测技术第3章 变形监测新技术与工程实例
- 交通局安全生产培训课件
- 制作培训标准课件的要求
- 物业管理条例实施细则全文
- 电化学储能技术发展与多元应用
- 2026年安全员之C证(专职安全员)考试题库500道及完整答案【夺冠系列】
- 课堂翻转教学效果调查问卷模板
- 铜陵市郊区2025年网格员笔试真题及答案解析
- 掩体构筑与伪装课件
- 2026年广东省春季高考模拟数学试卷试题(含答案解析)
- 微带贴片天线基础知识
- 部编版初三化学上册期末真题试题含解析及答案
- GB/T 46561-2025能源管理体系能源管理体系审核及认证机构要求
- 光纤收发器培训
评论
0/150
提交评论