莫非AI再进化一番,微软的全球蓝屏事故就可以永远幸免了?点击收听本新闻听新闻 porn hongkongdoll LLM竟然在真正寰球的代码中,发现了一个过错? 遐想一下,AI正在沉默地督察着咱们日常使用的软件。忽然,它发现了一个你我可能从未察觉的安全隐患,何况悄无声气地把它建设了! 就在刚刚,谷歌的Big Sleep神志揭示了一个惊东谈主的后果:一个真正寰球的安全过错,出当今全球芜俚使用的SQLite数据库中,而这个过错竟然被AI得手识别出来了?在真正寰球的危险扩散之前,它实时援助了场合。 从...
porn hongkongdoll
LLM竟然在真正寰球的代码中,发现了一个过错?
遐想一下,AI正在沉默地督察着咱们日常使用的软件。忽然,它发现了一个你我可能从未察觉的安全隐患,何况悄无声气地把它建设了!
就在刚刚,谷歌的Big Sleep神志揭示了一个惊东谈主的后果:一个真正寰球的安全过错,出当今全球芜俚使用的SQLite数据库中,而这个过错竟然被AI得手识别出来了?在真正寰球的危险扩散之前,它实时援助了场合。
从属于谷歌Project Zero和Google DeepMind的团队宣称,这是AI Agent在芜俚使用的履行软件中,发现未知可利用内存安全问题的第一个公开示例。
要知谈,这不单是是一个崩溃的测试用例,它是AI初次在真正寰球的软件中找到未知的、可利用的内存过错。
此前,聚积安全巨头CrowdStrike闹出的一个由「C-00000291*.sys」建立文献触发的系统逻辑乖僻,眨眼间就唠叨掉全寰球约10亿台计较机,平直导致微软蓝屏、全球停摆。
要是翌日某一天,AI能帮咱们惩办悉数时期领域的单点瞬时故障,不知会帮东谈主类节俭下些许金钱?
用LLM在真正寰球中「捉虫」
跟着LLM代码说明和一般推明智商的提高,谷歌接头者一直在探索这些模子如安在识别和演示安全过错时,再行东谈主类安全接头东谈主员的方法。
在《Project Naptime:评估大型话语模子的攻防智商》中,Big Sleep团队先容了一个利用LLM援助的过错接头框架,并通过在Meta的CyberSecEval2基准测试上进步了最新的性能,展示了这种方法的后劲。
从其时起,Naptime就变成「Big Sleep」,成为了Google Project Zero与Google DeepMind的勾通神志。
就在刚刚,谷歌接头者粗糙地示意,Big Sleep Agent发现了首个真正寰球过错:一个存在于SQLite中的可利用栈缓冲区下溢过错。
SQLite是一款被芜俚使用的开源数据库引擎。
在十月初,Agent发现涌现这个过错,于是谷歌接头者坐窝将其讲述给了开发者,他们在归并天进行了建设。
运道的是,AI在这个问题出当今官方发布版块之前,就发现了它,因此SQLite的用户未受影响。
要知谈,SQLite手脚轻量级镶嵌式数据库,芜俚应用于智高手机、浏览器、镶嵌式系统、IoT斥地等多种环境,涵盖了很多用户和明锐信息。
要是袭击者利用该过错进行数据败露、系统入侵或唠叨,潜在亏空金额可能少则几百万,多则数十亿好意思元!
谷歌接头者示意,这是AI Agent初次在芜俚使用的真正寰球软件中发现未知的、可利用的内存安全问题的公开案例。
之是以会有此次尝试,是因为本年早些时期,在DARPA的AIxCC举止中,亚特兰大团队在SQLite中发现了一个空指针取消援用的过错,这就给了谷歌接头者启发——
是否可以使用SQLite进行测试,望望能否找到更严重的过错呢?
果然,AI Agent果真找出了一个过错。
这项做事,无疑具有遒劲的后劲。
在软件尚未发布前就发现过错,就意味着袭击者莫得契机利用:过错在他们有契机使用之前,就已被建设。
天然浑沌测试也能带来显贵的匡助,但咱们更需要的是一种方法,匡助驻防者找到那些很难通过浑沌测试发现的过错。
当今,AI有望安祥这一差距!
谷歌接头者示意,这是一条有但愿的谈路,能为驻防者带来永别称的上风。
因为这个过错至极真谛,而且SQLite的现存测试基础设施(包括OSS-Fuzz和神志本人的测试)并莫得发现它,因此谷歌接头者进行了深入访问。
方法架构
Naptime和Big Sleep神志的关键驱上路分,便是也曾发现并修补的过错变种,仍在履行中无间被发现。
不言而喻,fuzzing(浑沌测试)并不成得手拿获此类变种过错,而对袭击者而言,手动变种分析的方法仍然性价比很高。
谷歌接头者觉得,比拟更为平淡的绽开式过错接头问题,这种变种分析任务更相宜刻下的LLM。
通过提供一个具体的起先——比如斯前建设的过错的刺眼信息——咱们就可以缩短过错接头中的不笃定性, 何况还能从一个明确的、有表面支柱的假定启程:「这里也曾存在一个过错,很可能在某处还存在肖似的问题」。
面前,他们的神志仍处于接头阶段,正在使用带有已知过错的微型步履来评估接头进展。
最近,他们决定通过在SQLite上开展初次大规模的真正环境变种分析实验,来测试他们的模子和器用链。
他们网罗了SQLite repository近期的一系列提交,手动筛除了无关烦躁的调动和纯文档更新。
随后,他们鼎新了prompt,为AI Agent同期提供了提交信息和代码变更,并要求它审查刻下代码库(在HEAD位置)中可能仍未建设的联系问题。
Project Naptime
Naptime接管了一种特地的架构来增强假话语模子进行过错接头的智商,其中枢是AI Agent与标的代码库之间的交互。
系统架构
为了让AI Agent可以效法东谈主类安全接头员的做事历程,接头团队开发了一系列专用的器用:
代码浏览器用(Code Browser)使AI Agent梗概浏览标的代码库,这与工程师使用Chromium Code Search的方式肖似。它提供了检察特定实体(如函数、变量等)源代码的功能,并能识别函数或实体被援用的位置。
Python器用让AI Agent梗概在烦躁的沙盒(Sandbox)环境中运行Python剧本,用于履行中间计较并生成精准而复杂的标的步履输入。
调试器器用(Debugger)为AI Agent提供了步履交互智商,可以不雅察步履在不同输入下的行径推崇。它支柱断点确立并能在断点处评估抒发式,从而终了动态分析。
讲述器用(Reporter)为AI Agent提供了一个结构化的程度通报机制。AI Agent可以发送任务完成信号,触发闭幕器考证是否达成得手条目(通常推崇为步履崩溃)。当无法取得进一步进展时,它还允许AI Agent主动中止任务,幸免堕入停滞气象。
发现过错
这个过错至极真谛,比如在一个通常为索引类型的字段iColumn中,使用了一个特殊的哨兵值-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函数在处理这个edge case时存在颓势,当处理包含rowid列不断的查询时,导致写入了带有负索引的堆栈缓冲区。
在接头者提供给AI Agent的编译版块中,debug assertion功能已启用,这种特殊情况会被第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; inConstraint; 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行的后续写入操作会越界写入aIdx缓冲区下方的内存区域,导致pConstraint指针的最低有用32位被唠叨。
当这个被唠叨的指针在轮回的下一次迭代中被取消援用时,就会产生潜在的可利用过错条目。
不外,即使有了这么的过错证明,对于东谈主类接头员来说,要精准说明奈何触发这个过错仍然不易。
天然针对ROWID列确立不断昭彰是个可以的切入点,但要彻底说明,还需要深入研读代码。
而 AI 智能体似乎也曾掌合手了比东谈主类接头员更多的SQLite联系学问,这使它梗概更高效地定位问题!
这种情况的一个典型例子,便是LLM在生成测试用例时会平直使用generate_series捏造表。
(天然接头者也不雅察到模子会先接头可用的捏造表的情况,但很昭彰,它梗概在这里平直愚弄已有的学问)。
履行过程重心分析
在此次基于Gemini 1.5 Pro的得手测试中,seed commit为 [1976c3f7],这是一个规模较大、复杂的代码变更。
而接头者的AI Agent发现的过错,与该seed commit中的变更仅存在松散关联——这种情况在手动变种分析中较为常见,因为在说明代码库中的某个过错时,接头东谈主员时常会由此发现其他潜在问题。
以下是关键节点提要,其中,悉数ASSISTANT块中的骨子均平直来自AI Agent。
AI Agent对互异中的变化进行了合理的评估,并以此手脚接头的切入点:
ASSISTANT
通过引入termFromWhereClause函数,CL校正了在捏造表查询中处理OR分支分享的WHERE条目的方式。该函数在讨论嵌套子句的情况下,从WhereClause中检索特定的条目。
在此更变之前,由于条目索引映射不正确,分享的条目可能未被正确处理,可能导致低效的查询霸术或乖僻的闭幕。
最可能出现的问题触及在allocateIndexInfo和whereLoopAddVirtualOne函数中不正确地处理WHERE子句不断,其中 CL 修改了奈何使用新的援助函数来处理不断偏移量。
我将起初查验allocateIndexInfo函数。
在经过数个门径探索联系代码后,AI Agent酿成了一个更明确的测试假定——它试图通过运行patch中测试用例的修改版原来考证这个假定,但未能得手。
原因在于patch中的测试用例依赖于一个在刻下建立环境中未启用的推广模块:
TOOL(debugger_run )
步履在未崩溃或射中断点的情况下退出。退出代码为1。
STDERR输出为:
Runtime error near line 2: no such module: tcl
Parse error near line 3: no such table: x1
ASSISTANT
步履完结是因为TCL模块不可用。测试依赖于TCL捏造表模块,需要在编译SQLite时启用该模块。提供的步履的输入基于bestindexC.test文献,它使用TCL模块来测试捏造表的最好索引选定。
为了惩办这个问题,需要更变步履输入,使用不需要TCL模块的其他捏造表。但是,该过错与捏造表的查询霸术联系,是以咱们仍然需要一个捏造表来触发此问题。
我将使用code_browser_source器用来检索SQLite中的内置捏造示意例。然后,我将鼎新输入,使用其中一个捏造表,并再行在whereLoopAddVirtualOne中确立断点。
AI Agent很好地应付了这个问题,准确识别出了建设测试用例所需的各个门径,并在后续几个门径中得手网罗到了悉数构建测试用例所需的信息,最终终涌现触达whereLoopAddVirtualOne的标的:
ASSISTANT
sqlite3_create_module函数用于注册捏造表模块。shell.c文献包含了多个这么的实例,包括generate_series、fsdir、completion和expert模块。其中json表的终了也很值得蔼然。
我起初蔼然的是generate_series,然后构造出一个使用该模块的查询,从而触发乖僻的不断处理。
需要防御的是,在领先发现和复现该过错时,AI Agent对于它试图触发的「不正确不断处理」的形色至极浑沌。
在这种情况下,竣工的履行轨迹读起来颇似东谈主类接头员的想维过程——从一个想法启动,在访问过程中产生其他几个想法,最毕生成了一个可以复现略有不同过错的测试用例。
在本例中,当whereLoopAddVirtualOne在generate_series表上被调用时,履行历程最终会参预seriesBestIndex,在那处不断如实被乖僻处理了。
特别真谛的是,一朝步履崩溃,模子会在讲授问题时推崇得更为出色——在生成根因分析(root-cause analysis)和竣工崩溃讲述时,咱们可以看到AI Agent深入地构造了一个测试用例来触发特定的已识别边际案例:
ASSISTANT
联系的字段是sqlite3_index_constraint结构体中的iColumn。该字段示意不断的列编号。要导致断言失败,咱们需要对索引大于3或小于-1的列确立不断。
让咱们构建一个触及这些列不断的SQL查询。generate_series表着名为value、start、step和stop的列。它们的索引是:
- value: 0
- start: 1
- step: 2
- stop:3
要触发此过错,咱们可以对ROWID施加一个不断,并对ROWID的不断使用iColumn = -1。
示例查询如下:
SELECT * FROM generate_series(1,10,1) WHERE ROWID = 1;
该查询将导致seriesBestIndex函数崩溃。
最终,得到了一个深入准确的问题追念,着实可以平直用于过错讲述!
TOOL(debugger_run)
步履崩溃:SIGABRT at :0
STDERR输出为:
sqlite3: src/shell.c:6816: int seriesBestIndex(sqlite3_vtab *, sqlite3_index_info *): Assertion `iCol>=0 && iCol<=2' failed.
ASSISTANT(report_success)
步履在履行SELECT * FROM generate_series(1,10,1) WHERE ROWID = 1;时因seriesBestIndex函数中的断言失败而崩溃。
断言assert(iCol>=0 && iCol<=2)失败的原因是sqlite3_index_info结构体中的iColumn字段可能包含超出列索引有用范围的值,举例在不断触及ROWID时为-1。
这导致iCol被计较为-2,从而导致断言失败。
对于浑沌测试
一个不言而喻的问题是:为什么传统的浑沌测试莫得更早发现这个过错?
谜底就在浑沌测试器用链的建立上。
OSS-Fuzz使用的器用并莫得启用generate_series推广,而替代的fuzzingshell.c器用包含的是旧版块的seriesBestIndex函数,未受此过错影响。
天然SQLite AFL仓库中包含一个针对接头者提供给Big Sleep智能体的、交流CLI二进制文献的浑沌测试建立,但似乎并未被芜俚使用。
草榴地址这个过错是否果真容易发现?
为此,接头者尝试通过浑沌测试再行发现它。
他们受命SQLite文档中的浑沌测试证明,并使用CLI标的。在启动AFL运行之前,他们还考证了浑沌测试语料库中包含所需的generate_series和rowid关键字。
但是,经过150个CPU小时的浑沌测试,问题仍未被发现。
随后,他们尝试通过将必要的关键字添加到AFL的SQL字典中,来简化浑沌测试的任务。
但是,似乎惟有当语料库包含与导致崩溃的输入至极接近的示例时,过错才调被快速发现,因为代码掩盖率对这个特定问题并不是可靠的标的。
诚然,AFL并不是针对像SQL这种基于文本的情势最相宜的器用,大大宗输入在语法上无效,会被剖判器断绝。
但是,要是将这一闭幕与Michal Zalewski在2015年对于浑沌测试SQLite的博客著述进行比较,会发现十分真谛的事。
其时,AFL在发现SQLite过错方面至极有用;经过多年的浑沌测试,该器用似乎也曾达到天然的足够点。
天然接头者迄今为止的闭幕与AFL发布时带来的显贵效果比拟显得微不及谈,但它有我方的上风——有概率梗概有用地发现一组不同的过错。
论断
对于团队来说,这个神志无疑得手了。
在芜俚使用且浑沌化的开源神志中找到过错,至极一个令东谈主粗糙!
这也就意味着:当提供正确的器用时,刻下的LLMs可以进行过错接头。
不外,接头者想重申,这些王人是高度实验性的闭幕。
Big Sleep 团队示意:面前,在发现过错方面,针对特定标的的浑沌器可能至少一样有用。
接头者但愿,翌日这项做事将为驻防者带来显贵上风——
不仅有可能找到导致崩溃的测试用例,还能提供高质料的根柢原因分析,使得问题的分类和建设变得更低廉且更有用。
谷歌接头者示意,会络续分享我方的接头后果,尽可能安祥大师时期前沿和特别时期前沿之间的差距。
Big Sleep团队也会将络续辛勤,鼓励零日霸术的做事,让0-day变得愈加困难。
团队先容
Dan Zheng
团队中独一的华东谈主Dan Zheng是谷歌DeepMind的接头工程师,从事代码和软件工程的机器学习,以及编程话语的接头。
此前,他曾参与Swift for TensorFlow的做事,专注于Swift中的可微分编程。
他在普渡大学得回了计较机科学专科的学士学位。毕业后,他作念了多年的学生接头员,时期接头后果颇丰。