详情

基于LLVM的C/C++代码检测工具

申报人:朱炳龙 申报日期:2021-05-27

基本情况

2021国省级项目管理
基于LLVM的C/C++代码检测工具 学生申报
创新训练项目
工学
计算机类
学生自主选题
一年期
此项目基于LLVM/clang、TscanCode等代码分析检测工具,制作C/C++语⾔的自动化代码审计检测程序。此程序的创造灵感来自C/C++语法因其所拥有的灵活性所造成代码中存在各种隐患的可能性。若能提前发现潜在的错误,便能极大减轻测试人员的压力,减少项目出错成本。
作为成员参加2020批次“基于Unicorn的恶意应用动态检测技术的研究”项目
省级

项目成员

序号 学生 所属学院 专业 年级 项目中的分工 成员类型
朱炳龙 计算机科学与工程学院(软件学院) 软件工程(本科) 2018 审计代码编写
杨军杰 计算机科学与工程学院(软件学院) 网络工程(本科) 2019 gui设计
陈洋 计算机科学与工程学院(软件学院) 网络工程(本科) 2019 接口设计
周子学 计算机科学与工程学院(软件学院) 软件工程(本科) 2019 信息查询,数据整理
蔡连强 计算机科学与工程学院(软件学院) 网络工程(本科) 2019 扫描代码编写

指导教师

序号 教师姓名 所属学院 是否企业导师 教师类型
王峰 计算机科学与工程学院(软件学院)
李杰 计算机科学与工程学院(软件学院)

立项依据

C/C++语言拥有其他语言所没有的灵活性,这种灵活性带来了代码效率的提升,但相应也使得代码编写居有很大的随意性。另外C/C++编译器不进行强制类型检查,也不做任何边界检查,这就增加了代码中存在隐患的可能性。如果能够在代码提交测试之前发现这些潜在的错误,就能够极大地减轻测试人员的压力,减少软件项目的除错成本,可是传统的C/C++编译器对此已经无能为力,这个任务只能由专用的代码检测工具完成。

1)研究相关的基础知识,对于LLVM进行深入的学习,了解其原理与实现。

2)对C/C++代码可能存在的隐患进行统计和分析。

3)利用静态分析和动态调试对代码进行分析。

4)整理资料,实现出一套可行的方案。

随着传统计算机网络和移动互联网的快速发展与普及,黑客攻击手段层出不穷,攻击技术也日臻成熟。其中C/C++因其语言灵活、程序执行效率高且具有较好的可移植性等特点,一直受到程序员的青睐。但代码不时会出现安全漏洞。如缓冲区溢出漏洞、空指针引用漏洞、格式化字符串漏洞、内存泄露漏洞等。因此,人们也越来越多地关注计算机系统的源代码安全检测,以降低软件安全漏洞。

降低代码安全漏洞我们可以先选择出色的代码查看软件,如Notepad++CtagsInsight等,利用这些查看器可以在编写代码时初步进行人工代码审计。

但在实际中这还不够,所以目前业界在解决软件安全漏洞的问题上,重点研究高效、准确的代码审计技术。

代码审计技术分为静态代码检测技术与动态代码检测技术。静态检测技术涉及的主要方法包括静态分析和程序验证。其利用二进制比对技术(Binary Contrast)、词法分析(Lexical AnalyasyB)、形式化验证技术阿或者手工测试技术,对被测软件的源程序或二进制代码进行扫描,然后从语法、语义上理解程序的行为,分析程序的特征,找出可能导致程序异常的漏洞。该技术具有简单高效自动化的优势,缺点是仅对代码本身的特征进行检查,对漏洞间复杂的逻辑关联,存在大量的误报和漏报。

早年出现的LClint(1994)Lin(1978)ESC(1995)为以后的静态检测工具起到了奠基作用,如:

1.Lint提供了最初的规则检查思想;

         2.LClintLint上进行了改进,但仍需用户手动添加注释来描述意图;

3.ESC对抽象数据流符号执行起奠基作用。

然而他们的实际应用价值并不高,在其基础上形成的静态检测工具大概经历了两个发展过程。

第一代代码静态检测工具。众所周知的Lint, 因为它使程序员可以在编程开发的时期就能自动对代码中存在的问题进行分析,从而使得开发者能够编出质量更优的代码。由于它采用编译器进行安全缺陷检查,使得它成为第一个可实际应用的源代码安全缺陷静态检测工具。

第二代代码静态检测工具。20世纪以后出现了使词法分析更加准确的Rats模型检测和符合执行方面的MOPSSLAMMjolnir,规则检查方面更为自动化的MCSplint,以及其他诸如E auClaireCQualCCuredESP等经典工具。静态检测技术在这两年都已经初具雏形。

在国内,国内安全研究机构的代表有绿盟科技、网络安全焦点(xfocus)、启明星辰和中因教育和科研计算机网紧急响应组(CCERT)等。相对来说,国内对代码审计技术的研究起步较晚,绿盟科技根据多年安全研究经验和漏洞挖掘经验开发了针对各类应用的代码分析、数据流跟踪、漏洞挖掘工具N sfocus  Code Scanner

动态检测技术则是通过构造、调试运行软件系统,根据输出或数据流向判断异常,从而判断被测软件系统是否存在漏洞。动态检测技术准确率高,但由于各种软件系统的功能和流程是不同的,所以不能进行统一的扫描,导致其检测效率低下。然而,此方法仅能穷举有限个输入,并不能对所有的输入都进行测试,因此存在覆盖率低和输入数据针对性不强等缺点。

1)基于LLVM

    LLVM是个很大很大的项目群,几乎把从编译到调试的各个构建环节都重新实现了一遍,尽可能地模块化现有代码以方便在此基础上进行二次开发,并且提供比传统构建工具链更好的用户体验。clang是LLVM的子项目,是一款非常优秀的C++编译器,前端clang+后端LLVM就是一款可替代GCC的优秀编译器。

2)C/C++代码检测

    C/C++代码,由于其编译器的特点,可能存在较多的缺陷。本项目可以帮助检测C/C++代码中可能存在的缺陷。

1)研究相关的基础知识,对于LLVM环境进行深入的学习,了解其机制与原理

2)对C/C++代码中可能存在的隐患进行统计和分析

3)基于LLVM进行代码编写

4)形成一个可运行的基于LLVM的C/C++代码检测工具演示系统一套

时间

工作计划

20211~20213

对项目知识进行深度学习,初步确定方案,购买项目所需用品

20214~20215

查找相关知识,对基于LLVM的C/C++代码检测工具进行基础构架

20216~20218

针对初步方案进行编码与测试运行。

20219~202111

对软件所产生的数据进行统计,处理分析,并对软件进行优化。

202112~20221

全面分析各项问题并撰写研究论文和总结报告,申请结题。

尚无

1)计算机科学与工程学院组织强有力的专业导师对项目进行专业指导。

2)专门为该团队提供一间70平方米的研发室。基于该团队提供5台PC,用于开发、实验、研究。

3)三江学院给予团队经费支持。

4)学院提供大量文献资料与相关书籍。

经费预算

开支科目 预算经费(元) 主要用途 阶段下达经费计划(元)
前半阶段 后半阶段
预算经费总额 10000.00 总额 5000.00 5000.00
1. 业务费 7000.00 用于市外调研、住宿、交流等 3500.00 3500.00
(1)计算、分析、测试费 2500.00 用于系统开发支出 1250.00 1250.00
(2)能源动力费 0.00 0.00 0.00
(3)会议、差旅费 2000.00 会议、差旅费 1000.00 1000.00
(4)文献检索费 2500.00 用于专利检索、著作权申报等 1250.00 1250.00
(5)论文出版费 0.00 0.00 0.00
2. 仪器设备购置费 2000.00 用于仪器设备购置 1000.00 1000.00
3. 实验装置试制费 0.00 0.00 0.00
4. 材料费 1000.00 购买相关材料、资料 500.00 500.00
结束