借助AI进行代码审计

(下面示例代码来自于一款开源VPN源代码,非客户源代码)

最近做代码审计,由于代码量较大,对于一些缺陷涉及到较长的代码片段或复杂的代码时,我会借助AI工具进行分析和确认,的确加快了代码审计的速度。例如利用静态分析工具的扫描结果中有下面缺陷:

当鼠标定位到这行代码时,看到target这个结构体变量从堆内存中分配内存且被赋值,但是后面没有使用该结构体变量中的值进行任何操作,

借助AI进行代码审计_第1张图片

为了确认该缺陷, 首先要定位到target变量在哪里定义的,如果是全局变量,则不能确认存在缺陷,因为可以程序运行期间其它地方进行释放。

借助AI进行代码审计_第2张图片

通过查看该变量定义可以看到,target是在当前函数的254行声明的,并赋初值为NULL,对于局部变量其生存周期为当前函数,该变量也不是函数返回值。那需要再确认两个点,1是当前函数Vars_ActivePatch_AddData的参数是否为指针类型,且target把指针赋值给函数形参;2是在整个函数中,target是否赋值给其它全局对象。简单扫描了一下整个函数,没有发现上述两点。由于时间关系,那再借助AI工具分析一下这个函数吧。可以看到分析结果:

借助AI进行代码审计_第3张图片

    通过AI的分析结果第2点来看,target.Nametarget.Data是没有看到地方进行内存释放。ACTIVE_PATCH_ENTRY* e = &ActivePatchList[i];这一句中,ActivePatchList是全局变量,赋值给e,在后面的代码中e赋值给target,但是在for循环之后,在target非空的情况下,反而又申请了堆内存,后面给堆对象分别赋值后又没有使用,这段代码着实没有看懂功能,但是作为代码审计,我们看不到需求功能,所以只能根据逻辑判断是否存在缺陷。上面AI给出的分析结果,帮助我确认了问题。但是AI毕竟也是工具,对于ActivePatchList内存是否问题给出建议和示例代码,因为该变量是全局函数,什么时候使用和释放需要多时间的分析,通过SAST工具本身选中变量的右键功能,找到其声明定义地方。

借助AI进行代码审计_第4张图片

可以看到是静态全局变量,这种情况我们就不用去报出缺陷了,但是AI还是做了SAST的分析补充。

通过上面内存泄露缺陷的分析可以看到,AI工具与SAST工具结合,可以利用AI提供的分析信息,提升了我们分析效率。

总结一下,使用AI工具辅助进行代码审计的好处。使用人工智能(AI)进行代码审计或静态分析时,相对于传统的静态应用安全测试(SAST)工具,可能具有一些优势:

  1. 上下文感知性: AI能够更好地理解代码上下文,识别代码逻辑关系,从而提高检测的准确性。这有助于降低误报率,减少开发者需要花费在分析和修复虚假报告上的时间。
  2. 自适应性: AI系统可以学习和适应新的攻击模式和漏洞类型,而无需手动更新规则。这使得它们更能够应对不断演变的威胁环境,与SAST工具相比更具灵活性。
  3. 深度学习技术: 使用深度学习技术的AI可以通过训练模型来理解复杂的代码结构和漏洞模式。这种深层次的理解使得AI在检测一些非显而易见的漏洞时表现更为出色。这可能是SAST工具的发展方向。
  4. 自动化程度: AI可以自动化大部分代码审计的过程,从而节省人力资源。与手动审计相比,这有助于加速审计过程,特别是在大型项目中。
  5. 综合性能: 通过整合多个数据源和技术,AI可以提供更全面的安全分析。这包括结合静态分析和动态分析,以及考虑代码的整体上下文,而不仅仅是独立的代码片段。

然而,需要注意的是,AI在代码审计领域的应用仍然在不断发展中,且取决于许多因素,如训练数据的质量和数量,缺陷模型设计等。在实际应用中,通常还是建议将AI技术与传统的SAST工具相结合,以充分发挥它们各自的优势。

(结束)

你可能感兴趣的:(人工智能,供应链安全,代码审计,代码安全)