利用LLMs进行 0-Day 发现的方法

AI 2周前 admin
44 0 0

本文阅读大约需要20分钟;

自2023年ChatGPT震撼发布以来,我一直在关注人工智能在网络安全领域的前沿技术资讯和研究动态。坦率的说这一年多以来,在AI与网络安全创新领域并没有能够令人兴奋和激动的创新,直到我发现了今天的”标题“,我觉得是值得写成一篇文章,分享给大家。

今天介绍的这个漏洞挖掘的方法、技术以及工具来自于美国一家名叫“ZeroPath”的初创公司。准确的说是一家专注于应用程序安全的公司,公司团队由红队队员和安全工程师组成,核心成员来自谷歌、特斯拉等全球知名公司;其核心竞争力在于利用人工智能和深度程序分析技术来自动发现和验证 Web 应用程序和 AI 平台中的安全漏洞,特别是难以被传统安全工具检测到的业务逻辑漏洞和身份验证/授权问题。他们开发了一款AI 驱动的安全分析工具,可以对代码库进行深度扫描,识别潜在的安全风险,并生成详细的漏洞报告,帮助开发人员和安全团队及时修复漏洞,提高应用程序的安全性。

接下来就是他们在今年7月份-10月份在项目中的实践历程:

自 2024 年 7 月以来,ZeroPath 的工具已在流行的人工智能平台和开源项目中发现了关键的零日漏洞,包括 RCE、身份验证绕过和越权 IDOR。我们的方法已经识别了 Netflix、Salesforce 和 Hulu 拥有的项目中存在安全缺陷。

AI 驱动的零日漏洞检测时代已经来临。自2023 年初 AIxCC 研究人员首次展示大型语言模型(LLM) 在 AI 系统漏洞检测中的实际应用以来,AI 辅助安全研究一直在默默地发展。目前,现代 LLM 已被用于提高对现有 Web 漏洞(如 XSS、SQL 注入、CSRF)的检测精度,并发现以往静态应用安全测试 (SAST) 无法检测到的业务逻辑和身份验证问题。

那么,这对于AI自主进行安全研究意味着什么呢?自 2024 年 7 月以来,ZeroPath 一直致力于探索一条将深度程序分析与对抗性 AI 代理验证相结合的全新途径。利用这种方法,我们已经在生产系统中发现了众多关键的漏洞,其中一些是传统的静态应用安全测试 (SAST) 工具难以发现的。本文将深入探讨我们的研究方法。

发现的漏洞列表

注意:此列表仅代表我们调查结果的一部分。由于正在进行的修复工作或未决的负责任的披露流程,许多漏洞仍未公开。随着未来几个月新问题的披露,我们将更新此列表。

日期 项目名称   漏洞  技术影响 根本原因 CVE

2024/7/21

Fonoster Voice Server

本地文件包含

通过语音文件路径访问系统文件

路径验证不完整

CVE-2024-43035

2024/7/21

Uptrain

     R C E

通过eval执行任意代码

项目创建期间的 RCE

待定分配

2024/7/22

LibrePhotos

文件上传+路径遍历

通过照片上传任意文件写入

路径清理不足

待定分配

2024/8/22

Clone-Voice

命令注入

通过语音文件元数据执行系统命令

ffmpeg 命令中的未转义输入

待定分配

2024/9/2

RAGFlow

未授权的对话删除

彻底删除其他用户的聊天记录

少对象级授权检查

待定分配

2024/9/2

RAGFlow

未经授权的画布删除

删除其他用户的可视化画布

API 端点上的 IDOR 保护不足

待定分配

2024/9/2

RAGFlow

未经授权的知识库访问

读取其他用户的私有知识库

知识库查询中缺少租户隔离

待定分配

2024/9/2

RAGFlow

未经授权文件移动

移动/删除其他用户上传的文件

文件操作中缺少 ACL 检查

待定分配

2024/9/2

RAGFlow

未经授权的对话访问

阅读其他用户的私人对话

聊天检索中的访问控制被破坏

待定分配

2024/9/2

RAGFlow

未经授权的 API 密钥删除

删除其他用户的 API 密钥

密钥管理端点中的 IDOR

待定分配

2024/9/2

RAGFlow

未经授权的知识库枚举

枚举所有私有知识库

列表端点中缺少身份验证

待定分配

2024/9/2

RAGFlow

未经授权的对话删除

批量删除其他用户的对话

删除端点中的竞争条件

待定分配

2024/9/3

E2nest (Netflix)

本地文件包含

模型加载时通过路径遍历读取任意文件

配置加载中路径规范化不足

CVE-2024-9301

2024/9/5

LibrePhotos

未经授权访问用户作业

访问其他用户的处理作业

作业队列中缺少授权

待定分配

2024/9/5

LibrePhotos

令牌刷新认证绕过

完全绕过身份验证

令牌验证不当

待定分配

2024/9/20

Monaco (Hulu)

    R C E

通过反序列化执行代码

未经消毒的数据被传递到 pickle.loads

CVE-2024-48946

2024/9/20

Monaco (Hulu)

未经授权的Redis访问

访问摩纳哥管理的所有 Redis 集群

app_redis_api 端点中缺少身份验证

待定分配

2024/10/1

LogAI (Salesforce)

  目录遍历

通过日志路径访问敏感文件

断路穿越保护

待定分配

2024/10/24

DB-GPT

   目录遍历

通过备份路径访问数据库文件

缺少路径标准化

待定分配

漏洞分布

利用LLMs进行 0-Day 发现的方法

1. 授权缺陷

普遍性:53% 的漏洞(10 个实例)

常见问题:

  1. 缺少对象级访问控制;

  2. 租户隔离不足;

  3. API端点中的访问控制被破坏;

  4. 资源管理中的越权 IDOR 漏洞;

  5. 未经授权的Redis访问和配置暴露。


  • 影响:未经授权的访问、数据泄露和跨租户边界的资源操纵。


示例:

  1. RAGFlow 的多个 IDOR 漏洞允许操纵属于其他用户的对话、画布、知识库和 API 密钥;

  2. 由于缺少访问控制而导致对 Redis 实例的未经授权的访问。


2. 文件操作问题

普遍性:26%的漏洞(5 个实例)

常见问题:

  1. 配置加载时的目录遍历;

  2. 通过路径操作包含本地文件;

  3. 上传功能中不安全的文件处理;

  4. 路径验证和标准化不足。


  • 影响:未经授权的文件访问、敏感数据暴露以及潜在的系统危害。


示例:

  1. E2nest 通过模型路径遍历的 LFI (CVE-2024-9301);

  2. DB-GPT在备份路径中的目录遍历;

  3. LogAI的断路遍历保护。


3. 代码执行漏洞

普遍性:16% 的漏洞(3 个实例)

常见问题:

  1. 不安全的pickle反序列化;

  2. 文件处理中的命令注入;

  3. 系统命令中未经处理的输入。


  • 影响:远程代码执行、系统命令执行以及潜在的整个系统受损。


示例:

  1. 摩纳哥通过 pickle 反序列化实现的 RCE (CVE-2024-48946);

  2. Clone-Voice 通过 ffmpeg 元数据进行命令注入;

  3. Uptrain 通过项目创建进行 RCE。


技术方法论

长话短说:这些漏洞大多很简单,安全研究人员的代码审查,或者一些扫描器就能发现。但一直以来,自动发现这些漏洞的难点在于,传统的静态应用安全测试 (SAST) 工具依赖于模式匹配和预定义规则,对于那些不符合已知模式的复杂漏洞(例如业务逻辑漏洞、身份验证缺陷或来自依赖项的非传统接收器)就 力不从心了。而且,SAST 工具的误报率高,安全团队疲于奔命,效率反而降低了。

大型语言模型 (LLM) 的厉害之处在于,它们能够消除很多歧义,这些歧义以前经常导致扫描器无法使用,或者在批量扫描开源代码库时无法使用或者产生很少的结果。例如,你可以避免:

  1. 避免对测试代码发出警报;

  2. 避免对仅 CLI 管理员可访问的内容发出警报;

  3. 避免对攻击者实际上无法控制的注入点发出警报;

  4. 避免对已采取安全措施的注入点发出警报(例如,已限制输入为有效的 UUID)。


为了做好这一点,我们将深度程序分析与对抗性代理相结合,在每个步骤中测试漏洞的合理性。该解决方案最终反映了渗透测试的传统阶段——侦察、分析、利用(以及本文中未提及的补救措施)。

第一阶段:应用识别

ZeroPath 首先使用 AI 代理来调查存储库内有哪些应用程序,并收集有关它们如何工作的一些基本数据。在处理单一存储库或包含多个服务的存储库时(微服务架构经常发生这种情况),此步骤至关重要。具体来说,我们:

  1. 确定每个应用程序的目录边界;

  2. 生成应用程序描述和元数据,记录身份验证过程和技术堆栈等详细信息;

  3. 收集有助于后续分析阶段的其他上下文信息。


此过程有助于确保 ZeroPath 拥有有关应用程序的足够信息,以区分相关和不相关的安全问题。

第 2 阶段:AST 生成和索引

为了说明以下步骤,我们将使用一个基本的 Django 应用程序,该应用程序提供以下基本功能:

  1. 用户管理(创建和列出用户);

  2. 内容管理(创建和列出帖子);

  3. 用户身份验证(登录和注销功能)。


以下是从应用程序检索用户的方法示例:

class UserViewSet(View):    def get(self, request):        users = User.objects.all()        return render(request, 'user_list.html', {'users': users})
Python

这就是它以纯文本表示的方式,但与大多数语言一样,它在编译之前被分解为中间表示形式。使用tree-sitter,我们可以将方法定义转换为具有“function_definition”、“body”等标准名称的AST:

(function_definition  name: (identifier)  ; get  parameters: (parameters    (identifier)  ; self    (identifier))  ; request  body: (block    (expression_statement      (assignment        left: (identifier)  ; users        right: (call          function: (attribute            object: (attribute              object: (identifier)  ; User              attribute: (identifier))  ; objects            attribute: (identifier))  ; all          arguments: (argument_list))))    (return_statement      (call        function: (identifier)  ; render        arguments: (argument_list          (identifier)  ; request          (string)  ; 'user_list.html'          (dictionary            (pair              key: (string)  ; 'users'              value: (identifier))))))))  ; users

此 AST 表示分解了get_users函数,显示其结构、参数及其执行的操作。树中的每个节点都用括号表示,节点类型后跟其子节点。叶节点(如标识符和字符串)是直接表示的。分号后面的注释提供有关节点的附加信息或说明。

这种格式允许对代码结构进行详细的分层视图,从而更易于分析。特别是,我们从 AST 创建一个调用图,它是程序函数调用的映射。调用图有助于在漏洞分析期间浏览代码库,并且还提供应用程序结构和行为的全面摘要。这种整体理解对于我们的工具检测复杂的、上下文相关的漏洞的能力至关重要,它看起来像这样:

利用LLMs进行 0-Day 发现的方法

第三阶段:图谱增强

生成 AST 后,我们通过识别端点(可从外部访问的公开函数或 URL)等特征并向每个节点分配属性,用上下文信息丰富图表。这些属性可以是请求路径、HTTP 方法以及身份验证和授权机制等详细信息。例如,表示登录功能的节点可能会富含指示其接受 POST 请求并实现速率限制的属性。这种丰富的一个关键方面是认识如何在应用程序中实施中间件和其他安全控制。此过程将基本 AST 转换为应用程序结构和行为的更全面的表示。虽然最初的 AST 显示了各个函数的结构,但这个丰富的调用图演示了这些函数如何交互以及整个应用程序流程中采取了哪些安全措施。

利用LLMs进行 0-Day 发现的方法

第四阶段:漏洞发现和验证

最后我们到达最重要的部分,使用调用图来发现漏洞。在我们的应用程序安全分析中,漏洞分为三种主要类型:

1.技术漏洞:这些漏洞包括特定于实现的安全漏洞,例如 SQL 注入 (SQLI)、XML 外部实体 (XXE) 注入、跨站点脚本 (XSS)、跨站点请求伪造 (CSRF)、机密泄露和服务器漏洞。侧面请求伪造 (SSRF)。

2.业务逻辑缺陷:这些漏洞是由应用程序逻辑缺陷引起的。示例包括:

  • 电子商务系统中的价格操纵;

  • 利用优惠券系统导致错误定价;

  • 绕过预期的工作流程序列;

  • 缺乏速率限制,尤其是在与外部API交互时(导致提供商收取过高费用)


3.身份验证/授权问题:这些问题源于用户身份验证或访问控制机制的不当实施。常见的类型包括:

  • 不安全的直接对象引用 (越权IDOR);

  • 功能级访问控制缺失;

  • 会话管理失效。


每个漏洞类别都需要不同的分析技术。技术漏洞通常涉及模式匹配和污染分析,业务逻辑缺陷需要理解预期的应用程序行为,而身份验证/授权问题需要对用户会话和权限进行全面的流程分析。以下是一些我们常用的漏洞挖掘方法

1.静态规则:ZeroPath有大量静态规则,详细说明了易受攻击的代码模式,然后使用这些规则进行语义搜索给定的代码库是否使用它们。使用它,我们能够检测许多现有的问题类别。

2.威胁建模:让 ZeroPath 提出攻击场景,并通过对代码进行严格的调查来验证它们。

3.软件组成分析 (SCA):ZeroPath 主动监视应用程序内使用的依赖项是否存在已知漏洞,并查看这些依赖项的问题是否可从外部利用。

4.秘密扫描和验证:ZeroPath 还扫描秘密并对秘密执行验证以确保它们有效,并提供有关每个发现的秘密的信息以帮助快速轮换和实施最佳实践。

我们用于调查业务逻辑缺陷和破坏的身份验证漏洞的方法结合了两种人工智能技术:思想树 (ToT)和ReAct 框架的改编。

1.ToT 支持多路径推理、中间步骤评估和结果排名。这提高了我们探索复杂漏洞场景的能力。受 ReAct 启发的组件通过明确的行动理由强制执行结构化工具的使用,从而提高了我们调查过程的严谨性。

通过集成这些技术,我们开发了一个可以进行全面漏洞评估的框架。ToT 有助于彻底的场景探索,而 ReAct 适应则确保有条不紊的工具应用。事实证明,这种方法在解决业务逻辑和身份验证漏洞带来的细微挑战方面特别有效。

为了进一步增强我们的验证过程并确保已识别漏洞的可利用性,ZeroPath 采用了蒙特卡罗树自优化 (MCTSr) 算法。这种方法受到人工智能解决问题的最新进展的启发,使我们能够有效地探索和验证复杂的技术攻击向量。

蒙特卡罗树自精炼 (MCTSr)

我们的 MCTSr 实施建立在上海人工智能实验室、复旦大学和合作机构的研究基础上。他们使用蒙特卡罗树搜索和自我改进技术解决国际数学奥林匹克问题的工作为我们适应网络安全应用奠定了基础。我们修改了这种方法来导航涉及验证安全漏洞的决策树,从而可以更有效地探索潜在的攻击向量并减少误报。

使用 MCTSr 最重要的部分是定义“win 函数”。作为静态分析工具,我们的获胜函数是由LLM实现的,它确定假设的攻击起作用的机会以及问题的严重性。

对于 SSTI、SQLi、XSS 和业务逻辑问题等问题,我们使用的特定验证代理是不同的。一般来说,代理的设计目的是从先前阶段提取相关信息,并考虑可能使攻击变得不切实际的所有控制措施。如果LLM调查员确定给定的攻击高于给定的实用性阈值,则会将其发送到下一阶段,即补丁生成和调整。

结论

人工智能驱动的漏洞检测正在快速发展。虽然有些人刚刚进入这个领域,但它已经发展了一段时间了。自 2024 年 7 月以来,我们一直在探索深度程序分析与对抗性 AI 代理相结合如何发现传统工具可能忽视的关键错误。

有趣的是,其中许多漏洞都非常简单,可以通过可靠的代码审查或标准扫描工具来发现它们。但传统方法常常会错过它们,因为它们不能完全符合已知的模式。这就是人工智能发挥作用的地方,帮助我们发现可能被忽视的问题。

原文或更多详细内容:敬请参考地址:

https://zeropath.com/blog/0day-discoveries

如果您觉得文章对您有所帮助,还请您关注我!



欢迎您加群讨论:安全技术交流学习、HW情报分享讨论群!

利用LLMs进行 0-Day 发现的方法

原文始发于微信公众号(再说安全):利用LLMs进行 0-Day 发现的方法

版权声明:admin 发表于 2024年11月2日 下午6:00。
转载请注明:利用LLMs进行 0-Day 发现的方法 | CTF导航

相关文章