2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

全球超万亿使用量的热门数据库,首次被大模型揪出了严重漏洞

  • 2024-11-07
    北京
  • 本文字数:2477 字

    阅读完需:约 8 分钟

全球超万亿使用量的热门数据库,首次被大模型揪出了严重漏洞

谷歌的研究人员日前声称,他们首次利用大语言模型发现了一个重要漏洞。


在一篇博客文章中,谷歌表示,他们相信这是 AI agent 在广泛使用的现实软件中发现此前未知的、可利用的内存安全问题的首个公开案例。具体来说,它在 SQLite 中发现了一个可被利用的堆栈缓冲区下溢漏洞。

这个漏洞在 10 月就被谷歌报告给 SQLite 开发团队,后者在同一天已经修复了它。由于漏洞在官方发布之前就被消除了,因此并没有影响到 SQLite 的用户。

利用大模型发现漏洞:或致程序崩溃甚至执行任意代码

这款基于大语言模型的漏洞挖掘 AI agent 名为“Big Sleep”,是谷歌的 Project Zero 和 DeepMind 合作的成果。据称,它是今年 6 月宣布的早期项目“Project Naptime”的延伸。


谷歌指出,在 8 月份的 DEFCON 安全会议上,负责创建 AI 辅助漏洞研究工具的网络安全研究人员在 SQLite 中发现了另一个问题,这激发了他们的团队去尝试看能否找到更严重的漏洞。


SQLite是一款开源的数据库引擎,堆栈缓冲区下溢漏洞可能允许攻击者导致程序崩溃,甚至执行任意代码。进一步地说,崩溃或代码执行会发生在 SQLite 可执行文件(而非库)中,原因是在代码的某个地方,特殊值 -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 列有约束的查询时,将负索引写入栈缓冲区。在团队提供给 agent 的构建中,启用了调试断言,这个条件在第 706 行的断言中得到了检查:

619 static int seriesBestIndex(620   sqlite3_vtab *pVTab,621   sqlite3_index_info *pIdxInfo622 ){...630   int aIdx[7];           /* Constraints on start, stop, step, LIMIT, OFFSET,631                          ** and value.  aIdx[5] covers value=, value>=, and632                          ** 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   }
复制代码


然而,在发布版本中,这个断言不存在。因此,在谷歌的测试中(这会因编译器和优化级别而异),在第 718 行的后续写入操作会破坏指向 pConstraint 的指针的最低有效 32 位,这将在下一次循环迭代中导致取消引用。这种漏洞可能会被利用。


不过,谷歌的研究人员也承认,这个漏洞的利用难度不小。


“Big Sleep”目前仍处于研究阶段,到目前为止,它使用带有已知漏洞的小型程序来评估其查找漏洞的能力。这是它的在真实世界环境中的首次实验。


在测试中,团队收集了 SQLite 代码库最近的几次提交。“在手动删除了琐碎的和仅用于文档的修改后,我们调整了 prompt,向 agent 提供了提交消息和更改的差异,并要求 agent 审查当前的代码库(在 HEAD)中是否存在可能未被修复的相关问题,”谷歌在博文中写道。


基于 Gemini 1.5 Pro 的大模型最终发现了这个漏洞。在博文中,“Big Sleep”团队还详细介绍了代理评估代码、发现漏洞、导致系统崩溃以及生成根本原因分析的步骤要点。详情可查看:https://googleprojectzero.blogspot.com/2024/06/project-naptime.html

AI 是模糊测试的未来?


像谷歌这样的许多公司使用一种称为“模糊测试”(Fuzzing)的过程,通过向软件提供随机或无效的数据来测试软件,以识别漏洞、触发错误或使程序崩溃。


但谷歌表示,模糊测试在“帮助防御者找到那些难以(或不可能)通过模糊测试发现的漏洞”方面做得还不够,并补充说,他们“希望 AI 能缩小这一差距”。


“我们认为这项工作具有巨大的防御潜力,”“Big Sleep”团队博客文章中宣称。“这个漏洞本身非常有趣,而且现有的 SQLite 测试基础设施(通过 OSS-Fuzz 和项目自己的基础设施)都没有发现这个问题,因此我们做了一些进一步的调查。”


值得注意的是,在 10 月,总部位于西雅图的 Protect AI 公司宣布了一款免费、开源的工具,声称可以在 Anthropic 的 Claude AI 模型的帮助下,在 Python 代码库中发现零日漏洞。这个工具名为 VulnHunter,根据其开发人员的说法,它已经在大型开源 Python 项目中发现了十多个零日漏洞。


根据谷歌的说法,这两个工具的目的不同。谷歌的一位发言人在接受《The Register》采访时强调,“我们在博客文章中的声明是,‘Big Sleep’在广泛使用的真实软件中发现了首个未知的、可被利用的内存安全问题。”“Python 的 LLM 发现的不是与内存安全相关的漏洞,而是不同类型的缺陷。”


“然而,我们想重申,这些都是高度实验性的结果,”谷歌团队写道。“‘Big Sleep’团队的立场是,Big Sleep Agent 目前针对特定目标的模糊测试工具在(发现漏洞)方面至少同样有效。”


参考链接:

https://www.theregister.com/2024/11/05/google_ai_vulnerability_hunting/

https://googleprojectzero.blogspot.com/2024/06/project-naptime.html

https://www.forbes.com/sites/daveywinder/2024/11/05/google-claims-world-first-as-ai-finds-0-day-security-vulnerability/

2024-11-07 17:0111764

评论

发布
暂无评论
发现更多内容

5G NR MIB详解

柒号华仔

5G 7月月更

XGRIDS三维重建服务,构建云上数字孪生世界

阿里云弹性计算

容器 3D渲染 弹性计算 GPU算力

JUnit 5简明教程

okokabcd

Java junit5

解构陌生人社交,「融云游戏房」上线

融云 RongCloud

数通网络

乌龟哥哥

7月月更

模块一作业

薛敏

直播带货系统源码(开源系统版)——如何搭建测试呢?

开源直播系统源码

软件开发 直播源码 语音直播源码 连麦直播

从代码角度,带你手把手调试

芒果酱

7月月更

Qt|VS2017中编译QWT并使用

中国好公民st

qt 7月月更

Qt | 实现一个简单的可以转动的仪表盘

YOLO.

qt 7月月更

【愚公系列】2022年07月 Java教学课程 03-Hello World的运行

愚公搬代码

7月月更

架构师训练营第八期-刘新国

liu

模块一作业

张立奎

一文带你了解JavaScript的数据类型

是乃德也是Ned

JavaScript 7月月更

Ceph Swift 实践运用(四)

Lansonli

云原生 Ceph 7月月更

【古月21讲】ROS入门系列(1)——ROS命令工具的使用及创建工作空间和功能包

秃头小苏

ROS 7月月更

jQuery(二)

Jason199

jquery 选择器 7月月更

Qt 实现 禁用快捷键

小肉球

qt 7月月更

【LeetCode】行星碰撞Java题解

Albert

LeetCode 7月月更

读书笔记之数据密集型应用的可扩展性

宇宙之一粟

读书笔记 设计数据密集型应用 7月月更

查找——分块查找

乔乔

7月月更

两数之和 II - 输入有序数组

面试官问

LeetCode 两数之和

架构实战营模块一作业

zhihai.tu

Green Hills Software(GHS)的安装和申请License文件

不脱发的程序猿

嵌入式 MCU Green Hills Software GHS 集成开发环境

采用Qt设计一个即时群聊天系统软件

DS小龙哥

7月月更

从0开始的TypeScriptの十三:infer、extends、keyof、typeof、in

空城机

typescript 7月月更

【愚公系列】2022年7月 Go教学课程 011-字符串类型

愚公搬代码

7月月更

Lombok 使用在 IDEA 中进行 JUnit 测试的时候提示 variable log 错误

HoneyMoose

Hibernate 元数据模型(MetaModel)提示类没有找到错误

HoneyMoose

zookeeper-安装zookeeper与znode说明

zarmnosaj

7月月更

全球超万亿使用量的热门数据库,首次被大模型揪出了严重漏洞_数据库_罗燕珊_InfoQ精选文章