- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2017-4-11
1
第五讲 代码安全检测
5.1 代码安全检测流程
5.2 代码信息提取
5.3 缓冲区溢出介绍
5.4 缓冲区溢出检测
2017-4-11
2
5.1 代码安全检测流程
1.检测内容
代码安全缺陷检测主要完成对程序源代码中安全缺陷问题的检测,该部分是程序安全静态分析工具的核心。它在前端工作的基础上,逐步遍历代码的中间表示,记录变量的有关信息,利用相关技术求解程序运行时可能的上下文执行环境,然后根据求得的上下文执行环境,依据系统制定的约束条件检测代码中存在的安全缺陷。
本课程主要检测C程序中的以下几类与指针相关的安全问题:
缓冲区溢出
内存泄漏
空指针引用
危险库函数引用
变量未定值使用
2017-4-11
3
2.控制流图遍历方法
控制流图是系统后续工作的基础,在检测代码中的安全缺陷等操作时需要遍历控制流图,模拟程序的执行路径,根据操作类型提取相关的变量信息,并依此检测代码中存在的安全缺陷。
在遍历控制流图的过程中,可以使用深度优先遍历的算法完全模拟出程序的执行路径,当程序中分支嵌套较多时,路径会以指数级增长,效率较差。在此,我们可以采用在顺序遍历的基础上并行处理控制流图中的分支部分的方法,即遇到分支结点后,首先遍历每条分支路径,然后再遍历分支结点之后的结点。具体遍历过程如下图所示:
控制流图遍历
控制流节点的处理包括提取指针等变量的信息和检测存在的安全缺陷。
2017-4-11
4
在遇到分支路径时,除了执行上述操作外,还会对各分支路径的执行结果取并集作为处理后续节点的基础。例如在右图控制流图中,结点1处存在两条分支路径2、3,并最终汇集到结点4。系统对该流程图的遍历过程为1?(2、3)?4,即在结点1的前提下分别遍历2、3结点,其次再遍历结点4,而非完整的遍历每条路径1?2?4和1?3?4。同时,在处理结点过程中将2、3结点的操作取并集作为处理结点4的前提。
2017-4-11
5
2017-4-11
6
3.代码安全检测流程
代码安全缺陷检测遍历代码的控制流图,记录变量的有关信息,利用相关技术求解程序运行时可能的上下文执行环境,然后根据求得的上下文执行环境,依据系统制定的约束条件检测代码中存在的安全缺陷。
具体流程见右图:
4.实例
int *p;
void del()
{ delete p; }
int main()
{
p = new int();
del();
return 0;
}
2017-4-11
7
代码声明了一个全局指针变量;del()函数完成对全局指针变量引用空间的释放。根据上文对函数摘要的分析知道del()函数的摘要信息中仅包含一个操作:释放p。在分析主函数时,系统首先为全局变量申请了一个空间,其次调用了del()函数,在此系统并不是去分析del()函数,而是分析del()的摘要信息。进而知道主函数首先申请了一个空间,随后又释放掉该空间。因此,系统未检测出安全缺陷问题。
5.2 代码信息提取
1.数据结构设计
在检测代码中存在的安全缺陷时,需要一些变量的属性信息,如指针指向位置等。根据代码中的操作提取变量的属性信息,并随遍历的进行而动态更新这些信息。
1)作用域结构
对于静态检测而言,作用域的作用不仅仅是用来分析某位置使用的变量应该匹配哪层作用域内的变量声明,以分析该变量的可能取值。作用域还限定了局部变量的生存周期,局部定义的变量在局部代码块的生命期结束后会被系统自动销毁。
2017-4-11
8
基于以上原因,将作用域结构分为两种:
全局作用域glbscope:全局变量列表
局部作用域locscope:局部变量列表
全局作用域链表本质上是一个全局变量的链表,其中变量的作用域都是相同的。局部作用域链表则相对复杂些,具体结构可以如下:
2017-4-11
9
局部作用域使用了一个链表来表示作用域的嵌套关系,memlist是当前作用域内关于内存空间属性的链表,varlist是当前作用域内关于局部变量属性的链表。
该链表只允许系统在链首进行添加和删除作用域结点,这样就可以完成对作用域的嵌套的表示。在对代码进行分析的过程中,遇到一个新的作用域时,则为该作用域生成一个作用域结点并插入到链表。如果前作用域结束,则删除链首结点。这样的链式结构可以确保链表元素始终代表当前作用域。如需查找上层作用域内的变量,只需要从链首汗始逐次遍历作用域链表的结点。
2017-4-11
10
2)指针变量结构
指针的相关信息不仅仅包括指针的类型、指针本身的值等,还包括指针指向的内存空间的属性,如该空间的类型、内存空间的大小以及指针值在该空间所处的位置等信息。这些信息是判断指针操作合法性的基础。基于以上原因把指针信息分为指针变量本身的属
您可能关注的文档
最近下载
- 2025年湖北省监督数据分析应用中心专项公开招聘22名工作人员笔试备考试题及答案解析.docx VIP
- 兽医毒理学完整版本.doc VIP
- 2025湖北省监督数据分析应用中心专项招聘22人考试备考试题及答案解析.docx VIP
- 2025湖北省监督数据分析应用中心专项招聘22人考试练习试题及答案解析.docx VIP
- 2025湖北省监督数据分析应用中心专项招聘22人笔试备考题库及答案解析.docx VIP
- 2025湖北省监督数据分析应用中心专项招聘22人笔试备考试题及答案解析.docx VIP
- 2025湖北省监督数据分析应用中心专项招聘22人笔试模拟试题及答案解析.docx VIP
- GB 55032-2022 建筑与市政工程施工质量控制通用规范.docx VIP
- 2025湖北省监督数据分析应用中心专项招聘22人笔试模拟试题及答案解析.docx VIP
- 基孔肯雅热防控科普讲座PPT课件.pptx
文档评论(0)