freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ChatGPT在源代码分析中可靠吗?
白盒测试工具 2023-04-06 13:59:49 212311
所属地 北京

引文

ChatGPT自发布以来,它在各行各业都掀起了一股学习热潮。由于其惊人的语言理解和生成能力,ChatGPT已经备受全世界瞩目。它在智能对话、翻译、摘要、文本生成等领域中展现出了非凡的能力,让人们对其充满了好奇、敬畏和赞叹之情,同时开始怀疑自己的行业是否马上就会被人工智能所替代,甚至感到担忧。

作为代码分析领域中的从业者,GPT是否对这个领域具有较强的冲击力呢?本文将以敏感性这个代码分析中最重要的指标对GPT进行简单的测试以探究ChatGPT在敏感性相关的代码分析过程中的表现,我们以C/C++程序中关注度较高的内存泄漏为例进行测试。在测试中,我们发现ChatGPT展现出了一定的精度和检测能力,能够识别和定位部分代码中潜在的内存泄漏问题。但与绝大部分自动检测工具类似,也会在一些敏感性相关的代码分析中表现不足,出现较低级误报和漏报。

以下是一些内存泄漏相关的片段代码在ChatGPT中的分析结果与误漏报分析。

0基础代码片段

1680760553_642e5ee97e180f1b9cbfd.gif!small?1680760554450

分析:ChatGPT对于该例子的判断和分析过程都是正确的。我们在此例子上增加敏感性看看他的表现。

例1流敏感(误报)

1680760570_642e5efaaca40b4027fce.gif!small?1680760571421

误报分析:对代码稍做修改,增加流敏感性,将flag的初值设置为1,然后再改为0,chatGPT检测的结果是误报,且分析过程也出现了错误。采用我们的代码分析工具做了流敏感分析是不会出现该误报的。

2 路径敏感(误报)

1680760586_642e5f0a4afe2876195f6.gif!small?1680760586981

分析:虽然chatGPT给出的判断结果是正确的,但是分析过程存在一些问题。第一个条件语句中,如果a小于b,就将b重置为a-1,那么第二个条件的a<b就一定不成立,所以肯定会导致内存泄漏,但chatGPT分析不出来第一个条件分支执行后对第二个条件分支的影响,所以给出的分析是一些笼统的判断。

1680760609_642e5f21cdbb67445dd29.gif!small?1680760610844

误报分析:这是一个路径敏感的小例子,ChatGPT给出的结果是误报。在第一个条件判断中,如果a>=b,那么b会被重置为a+1,以保证第二个条件语句的条件a<b一定成立,那么程序肯定会调用free(ptr)语句,因此不存在内存泄漏问题。所以chatGPT给出的判断和分析都不正确。采用我们的代码分析工具是做了常量传播是不会出现该误报的。

3 上下文敏感(误报)

1680760632_642e5f38b7a8091b460aa.gif!small?1680760633429

误报分析:这是一个典型的上下文敏感的例子,chatGPT给出的判断结果显然是误报。ptr1将调用函数Fun分配内存,ptr2同样调用了函数Fun,但并没有分配内存。在函数结尾处释放了ptr1,不存在内存泄漏问题。而chatGPT分析中得到了ptr2为NULL指针,却又说另一个内存块没有被释放,明显是错误的。

4 域敏感(漏报)

1680760647_642e5f47b72838eb97792.gif!small?1680760648634

漏报分析:chatGPT给出的判断是不存在内存泄漏,很明显这是漏报。分析中指出了分配了两块内存,只释放了一块内存,分析结果却是“没有任何未释放的内存块,不会发生内存泄漏”。采用我们的代码分析工具,对每个内存段都建立的模型就不会出现该漏报。

1680760659_642e5f536f916995ccf39.gif!small?1680760660190

分析:同样的例子,当将参数改为free(ptr[1]),chatGPT给出的判断结果仍是不存在内存泄漏,所以仍是漏报。分析中指出了分配了两块内存,只释放了一块内存,分析过程说是剩余的内存由程序退出时释放。

分析:笔者反复将free(ptr[0])和free(ptr[1])修改几次,chatGPT给出的结果是free(ptr[1])判断有内存泄漏,free(ptr[0])没有内存泄漏。与前面的结果对比,在分析过程中出现了同样的代码,却给出了不同的判断结果,这种情况让使用者产生了极大的困惑。根据笔者的经验,在代码分析工具使用过程中,多次结果的不一致问题是不可接受的,可靠性同样是衡量工具优劣的重要指标之一。

小结

通过对上述片段代码在ChatGPT中进行简单测试后,不难发现,尽管ChatGPT在一定程度上能够帮助代码分析,但其分析结果的准确性仍具有很大的不确定性,特别是在处理敏感性相关的代码时,这种不确定性可能会更加明显,而这本身也是静态代码分析中的重点和难点。但是总体来说GPT仍旧具备一定的竞争力,

  • 能够支持编译不通过即片段代码的分析,这也是大多数静态分析工具不具备的。
  • 具备的静态分析工具的不具备的缺陷模式自动采集能力。绝大多数静态分析工具针对新的缺陷类型往往都是靠经验总结,新模式也需要在检测器中增加新的代码。但是GPT这些工作都是自动的,这也是传统代码分析工具无法做到的。

所以,我们认为GPT更多的是知识型的分析方法,不是符号逻辑型的。这两种方法是可以做到互补来提高代码分析工具的能力。当传统的代码分析工具,受困于状态爆炸必须进行折中而存在较高的误漏时,也可以结合AI的方式来进一步提高检测精度,突破现有分析能力的瓶颈。

鸿渐科技的代码分析技术正是结合了基于值依赖分析的符号逻辑分析技术和基于AI模式的自动模式生成技术以产生新的缺陷模式和函数摘要快速收集新的漏洞缺陷知识,同时也可以做到编译不通过情况下的片段代码分析,以达到更优的检测效果。

# SAST # 静态代码分析 # 鸿渐科技 # 静态代码检测工具 # 静态应用程序安全测试
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 白盒测试工具 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
白盒测试工具 LV.3
专业代码安全产品(SAST、SCA)供应商,北京鸿渐科技有限公司 官方认证 / 官方网站:http://www.redrocket.cn [公众号:RedRocket_]
  • 17 文章数
  • 3 关注者
SCA工具对安全分析真的有实际帮助吗?
2023-06-07
天下没有免费的午餐,国产化替代迫在眉睫
2021-10-29
如何将SAST融入DevSecOps流程中?
2021-09-13
文章目录