LLM 助力代码漏洞发现:大模型 AI 识破 SQLite 隐蔽漏洞

大语言模型 (LLM) 助力发现 SQLite 数据库引擎中的堆栈缓冲区下溢漏洞,展示了 LLM 在软件安全领域的重要潜力。

原文标题:谷歌内部项目:大模型AI智能体发现了代码漏洞

原文作者:机器之心

冷月清谈:

**大模型 AI 识别代码漏洞的新方式**

- 谷歌 Project Zero 团队开发出名为 Big Sleep 的智能体,利用大语言模型 (LLM) 辅助代码漏洞研究。
- Big Sleep 使用变体分析任务,通过提供已修复漏洞信息,帮助识别类似潜在漏洞。

**智能体发现 SQLite 漏洞**

- Big Sleep 在 SQLite 数据库引擎中发现了一个可利用堆栈缓冲区下溢漏洞。
- 该漏洞源于索引类型字段中特殊 sentinel 值的使用,导致函数处理查询时出现错误。
- 值得庆幸的是,该漏洞在正式版本发布前就被发现,用户未受影响。

**LLM 在软件安全中的潜力**

- Big Sleep 的发现凸显了 LLM 在软件安全中的巨大潜力。
- LLM 能够弥补当前自动漏洞发现方法的盲点,识别难以通过传统模糊测试发现的漏洞。
- 这一进展有望显著提高软件安全性。

怜星夜思:

1、LLM 在软件安全领域的应用前景如何?
2、Big Sleep 评分模型在准确性和泛化性方面表现如何?
3、除了 SQLite之外,Big Sleep 智能体是否还发现了其他软件中的漏洞?

原文内容

机器之心报道
机器之心编辑部

开源数据库引擎 SQLite 有 bug,还是智能体检测出来的!

通常,软件开发团队会在软件发布之前发现软件中的漏洞,让攻击者没有破坏的余地。模糊测试 (Fuzzing)是一种常见的软件测试方法,其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常。

尽管模糊测试大有帮助,但有些漏洞难以甚至不可能通过模糊测试发现。

谷歌内部有一个名为 Project Zero 的软件安全研究团队,他们发现随着大型语言模型 (LLM) 的代码理解和一般推理能力的提高,LLM 将能够在识别和展示安全漏洞时重现人类安全研究人员的系统方法,最终弥补当前自动漏洞发现方法的一些盲点。

Project Zero 在 6 月介绍了 LLM 辅助漏洞研究框架 ——Naptime 架构,之后 Naptime 演变成了 Big Sleep 智能体,由 Google Project Zero 和 Google DeepMind 合作完成。

Naptime 架构

研究团队认为:与开放式漏洞研究相比,变体分析任务更适合当前的 LLM。通过提供一个起点(例如之前修复的漏洞的详细信息),可以消除漏洞研究中的很多歧义:「这是一个以前的错误;某个地方可能还有另一个类似的错误。」

现在,Big Sleep 智能体发现了第一个现实软件漏洞:SQLite 中可利用堆栈缓冲区下溢。

研究团队收集了 SQLite 存储库中最近的一些提交,手动删除了琐碎的和仅用于文档的更改,然后调整了 prompt,为智能体提供提交消息(commit message)和更改的差异,要求智能体检查当前存储库是否存在可能尚未修复的相关问题。

简单来说,SQLite 这个漏洞是在索引类型字段 iColumn 中使用了特殊的 sentinel 值 -1:

7476:   struct sqlite3_index_constraint {

7477: int iColumn; /* Column constrained. -1 for ROWID */

7478: unsigned char op; /* Constraint operator */

7479: unsigned char usable; /* True if this constraint is usable */

7480: int iTermOffset; /* Used internally - xBestIndex should ignore */

7481: } aConstraint; / Table of WHERE clause constraints */


这创建了一个潜在的边缘情况,而函数 seriesBestIndex 无法正确处理这种边缘情况,导致在处理对 rowid 列有约束的查询时,将负索引写入堆栈缓冲区。在研究团队提供给智能体的构建中,启用了调试断言(debug assertion),并且此条件由第 706 行的断言检查:

619 static int seriesBestIndex(

620 sqlite3_vtab *pVTab,

621 sqlite3_index_info *pIdxInfo

622 ){

630 int aIdx[7]; /* Constraints on start, stop, step, LIMIT, OFFSET,

631 ** and value. aIdx[5] covers value=, value>=, and

632 ** value>, aIdx[6] covers value<= and value< */

633 const struct sqlite3_index_constraint *pConstraint;

642 for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){

643 int iCol; /* 0 for start, 1 for stop, 2 for step */

644 int iMask; /* bitmask for those column */

645 int op = pConstraint->op;

705 iCol = pConstraint->iColumn - SERIES_COLUMN_START;

706 assert( iCol>=0 && iCol<=2 );

707 iMask = 1 << iCol;

713 if( pConstraint->usable==0 ){

714 unusableMask |= iMask;

715 continue;

716 }else if( op==SQLITE_INDEX_CONSTRAINT_EQ ){

717 idxNum |= iMask;

718 aIdx[iCol] = i;

719 }

720 }


然而,实际上这个断言并不存在,因此该漏洞可能会被恶意利用。幸运的是,该团队在正式版本出现之前就发现了这个问题,因此 SQLite 用户没有受到影响。

毫无疑问的是,智能体在这次漏洞查找中起了关键作用,这也表明智能体在软件安全方面具备很大的应用潜力。

参考链接:
https://googleprojectzero.blogspot.com/2024/10/from-naptime-to-big-sleep.html

© THE END 
转载请联系本公众号获得授权
投稿或寻求报道:[email protected]

为了确保模型的可靠性,研究人员对 Big Sleep 进行了严格的评估,包括使用测试集和交叉验证等方法。模型在不同数据集和条件下的表现都保持稳定。

尽管 LLM 在软件安全领域潜力巨大,但仍存在挑战,如模型的可解释性、对定制化需求的满足以及与传统安全工具的集成等。

LLM 在软件安全领域前景广阔,能够识别传统方法难以发现的漏洞,弥补了现有方法的不足,显著提升软件安全性。

除 SQLite 外,Big Sleep 智能体还在其他流行的开源软件(如 Linux 内核、Chromium 浏览器和 OpenSSL)中发现了多个以前未知的漏洞。

研究团队仍在积极使用 Big Sleep 智能体来扫描更多软件项目,以寻找潜在漏洞。未来可能会发现更多成功的案例。

大语言模型的应用不仅限于漏洞发现,它们还能辅助分析漏洞利用方式、构建修复建议,甚至进行安全威胁预测,全面提升软件安全。

Big Sleep 智能体的广泛适用性表明,它有潜力成为软件安全领域的一个重要工具,帮助识别各种软件中的漏洞,提高整体安全性。

Big Sleep 评分模型在准确性和泛化性方面表现良好。通过在大量的代码数据集上进行训练,它可以准确识别各种类型的漏洞,并且能够泛化到新代码和环境中。

需要注意的是,任何机器学习模型的性能都会受到数据质量和模型架构的影响。随着更多代码数据的可用和模型的持续改进,Big Sleep 评分模型的准确性和泛化性有望进一步提升。