代码安全PPTQA-第三章 C和C++安全编码.pptxVIP

代码安全PPTQA-第三章 C和C++安全编码.pptx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

C和C++开发安全现状

C和C++常见安全漏洞C和C++安全编码规范

目录

3.1

3.23.3

1

1.了解C和C++开发的安全现状;

2.理解C和C++安全漏洞的原理;3.理解C和C++漏洞的防御方法;4.掌握C和C++安全编码规范;

本章学习目标

2

3.1C和C++开发安全现状

Aug2016

Aug2015Change

Programming

Language

Ratings

Change

1

1

Java

19.010%

-0.26%

2

2

C

11.303%

-3.43%

3

3

C++

5.800%

-1.94%

4

4

C#

4.907%

+0.07%

5

5

Python

4.404%

+0.34%

6

7

PHP

3.173%

+0.44%

7

9

JavaScript

2.705%

+0.54%

8

8

VisualBasic.NET

2.518%

-0.19%

9

10

Perl

2.511%

+0.39%

10

12

Assemblylanguage

2.364%

+0.60%

C和C++拥有很好的内存操作能力,工作效率更高。

C和C++的应用领域非常广泛,包括操作系统、浏览器、嵌入式开发,游戏引擎和各类编辑器。

C和C++语言在2015,2016年TIOBE编程语言排行榜中稳固二三名。

C和C++开发现状

(1)指针的使用

程序员可通过指针对内存地址进行显示类型转换,访问对象的私有成员,破坏了对象的安全性,出现

非法指针解引用、内存泄漏等漏洞。

(2)全局变量不加封装

局部变量的修改可能导致全局空间的变量取值发生变化,从而影响其他函数取值和运行。

(3)调用危险函数

标准C/C++语言库中包含一些存在漏洞的危险函数,开发人员在编写代码时常调用这些危险函数。

C和C++的安全问题

3.2C和C++常见安全漏洞

缓冲区溢出是指程序员向缓冲区读写的数据超出了缓冲区定义的容量,从而覆盖了缓冲区后面的其他内

存数据的现象。

攻击者可通过控制用户输入人为覆写栈帧或邻接内存的数据结构,从而执行构造的恶意代码。

典型的缓冲区溢出漏洞有心脏流血漏洞(OpenSSLHeartbleed),攻击者通过构造特殊的数据包使

得用户心跳包中无法提供足够多的数据,从而导致memcpy函数把SSLv3记录之后的数据直接输出。

缓冲区溢出

攻击流程:

(1)攻击者在内存释放对象A

时大量申请与A同样大小的

对象X,使A释放的内存分配

给X。

(2)在继续使用引用b时,

由于A内存已被X占据,攻击者

可使用引用b执行任意代码。

申请对象A:

A*a=newA

引用对象A:

A*b=a

AfterFree-UAF)漏洞是指程序中错误的保留了已释放内存对象的引用,继续访问已

原a内存已被x占据,

使用引用b执行任意代码:b.func()

大量申请与A同样大

小的对象X,使A释放

内存分配给X

释放后使用(Use

释放内存的行为。

释放后使用

释放对象A:deletea

使用引用b:b.func()

整数溢出是指由于程序员将数据放入了比它本身小的存储空间中,而出现的溢出现象。

三类整数操作可导致整型溢出漏洞:

(1)无符号整数的下溢和上溢:因无符号整数不能识别负数导致。

(2)符号问题:符号整数之间的比较;有符号整数的运算;无符号整数和有符号整数的对比。

(3)截断问题:在高位数的整数(如32位)复制到低位数的整数(如16位)时发生的溢出现象。

整型溢出

空指针解引用是指在引用指向空地址单元的指针变量时产生的空指针引用故障。

空指针引用故障可能导致系统崩溃、拒绝服务等诸多不良后果。

典型例子:

deep—rev—state_process()函数在关闭了套接字后仍然允许接受操作,若没有阻止攻击者对己经废弃

套接字的操作,可造成空指针引用。

空指针解引用

格式化字符串漏洞是指软件使用了格式化字符串作为参数,且该格式化字符串来自外部输入。

触发格式化字符换漏洞的函数有printf、sprintf、fprintf等print家族函数。

格式化字符串的利用分为两种:

(1)有binary且格式化字符串在栈中:可直接修改函数返回地址,利用%n来写入数据以修改控制流。(2)有binary且格式化字符串不在栈中:通过构造跳板来实现利用。

格式化字符串

内存泄漏

内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,导致程序运行速度减

慢甚至系统崩溃等后果。

内存泄漏以产生的方式可以分为四类:

(1)常发性内存泄漏:发生内存泄漏的代码会被多次执行到,每次

文档评论(0)

人生风雪客 + 关注
实名认证
文档贡献者

如果有遇到文件不清或断篇的或者需要转换文件格式的情况请联系我,会在第一时间帮你完成完整的文档。文档如有侵权,请及时告知,本人将尽快予以删除,谢谢啦。

1亿VIP精品文档

相关文档