技术速递|社区驱动的 AI 安全:一个面向安全研究的开源框架

作者:Kevin Backhouse

排版:Alan Wang

宣布 GitHub Security Lab Taskflow Agent------一个面向安全研究的开源协作框架,结合 AI 使用。

2019 年成立以来,GitHub Security Lab 的主要目标一直只有一个:社区驱动的安全。我们相信,提升软件安全性的最佳方式是分享知识和工具,并使用开源软件,使每个人都能审计代码并报告发现的漏洞。

六年过去了,现在出现了一个将社区驱动安全提升到新高度的新机会。借助 AI,我们现在可以使用自然语言来编码、共享和扩展我们的安全知识,这将使构建和分享新安全工具变得更加容易。而在底层,我们可以使用 Model Context Protocol (MCP) 接口,在现有安全工具(如 CodeQL)之上进行扩展。

作为一个社区,如果我们分享发现漏洞的方法,就能更快地消除软件漏洞。基于这一目标,我们团队一直在尝试一个名为 GitHub Security Lab Taskflow Agent 的智能体框架。我们已在内部使用一段时间,并最近向 GitHub Secure Open Source Fund 的参与者分享了它。虽然它仍处于实验阶段,但已经可以供其他人使用。

Demo:变体分析

使用 seclab-taskflow-agent 入门只需几个步骤:

  1. 创建个人访问令牌。

  2. 添加 Codespace 秘钥。

  3. 启动 Codespace。

  4. 用一行命令运行 taskflow。

请跟随演示并尝试操作!

注意:运行演示会消耗一些令牌配额,如果你使用的是免费 GitHub 账户,可能会遇到速率限制。不过我已设计 Demo 使其在免费账户下也能运行。如果触发速率限制,配额将在一天后刷新。

创建细粒度个人访问令牌

进入你的开发者设置页面,创建个人访问令牌(PAT)。

向下滚动,添加 "models" 权限:

添加 Codespaces 秘钥

出于安全考虑,不建议将刚创建的 PAT 保存到磁盘文件中。建议将其作为 Codespace Secret 保存,这样在启动 Codespace 时,它会作为环境变量提供。

  1. Codespaces 设置中创建一个名为 GH_TOKEN 的 Secret。

  2. 在 "Repository access" 下添加 GitHubSecurityLab/seclab-taskflows 仓库,这是我们将启动 Codespace 的仓库。

  3. 返回 Codespaces 设置,创建第二个 Secret AI_API_TOKEN,可使用同一个 PAT。

我们使用两个 Secret 的目的是:GH_TOKEN 用于访问 GitHub API,例如读取代码等操作,而 AI_API_TOKEN 用于访问 AI API。这个演示只需要一个 PAT,因为它使用的是 GitHub Models API,但该框架也支持使用其他(非 GitHub)的 API 来处理 AI 请求。

启动 Codespace

进入 seclab-taskflows 仓库并启动 Codespace:

在 Codespace 启动后,等待几分钟,直到你看到类似这样的提示:

看到提示前带有 (.venv) 非常重要,因为这表示 Python 虚拟环境已经创建完成。

用一行命令运行 Taskflow

在 Codespace 终端中输入以下命令运行变体分析演示 taskflow:

python 复制代码
python -m seclab_taskflow_agent -t seclab_taskflows.taskflows.audit.ghsa_variant_analysis_demo -g repo=github/cmark-gfm -g ghsa=GHSA-c944-cv5f-hpvr

当系统询问是否允许运行 memcache_clear_cache 时,请回答 "yes";这是第一次运行,所以缓存已经是空的。该演示会从仓库中下载并分析一个安全公告(在本例中是来自 cmark-gfmGHSA-c944-cv5f-hpvr)。它会尝试识别导致漏洞的源代码文件,然后下载该源代码文件并审查是否存在其他类似的漏洞。这个演示并不复杂,而且(值得庆幸的是)它在 cmark-gfm 中没有发现任何新漏洞 🫣。不过它简短且易于理解,我稍后会用它来说明什么是 taskflow。你也可以在其他仓库上尝试这个演示,比如你自己的仓库,只需在命令末尾更改仓库名称即可。

其他运行方式

我建议使用 Codespace,因为它是一个快速且可靠的入门方式。同时,它也是一个沙箱环境,对安全性有利。但如果你愿意,也有其他方式可以运行这个框架。

在 Linux 终端中运行

以下是在 Linux 系统上本地安装并运行该演示的命令:

plain 复制代码
export AI_API_TOKEN=github_pat_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export GH_TOKEN=$AI_API_TOKEN
python3 -m venv .venv
source .venv/bin/activate
pip install seclab-taskflows
python -m seclab_taskflow_agent -t seclab_taskflows.taskflows.audit.ghsa_variant_analysis_demo -g repo=github/cmark-gfm -g ghsa=GHSA-c944-cv5f-hpvr

这些命令会从 PyPI 下载我们的最新发布版本。请注意,框架中包含的一些工具箱可能无法通过这种方式开箱即用,因为它们依赖于其他软件的安装。例如,CodeQL 工具箱依赖于已安装的 CodeQL。你可以从我们用于构建 Codespaces 环境的 devcontainer 配置中复制安装说明。

在 Docker 中运行

我们发布了一个预装了 CodeQL 等工具的 Docker 镜像。你可以使用这个脚本来运行它。请注意,该 Docker 镜像仅包含 seclab-taskflow-agent。我们计划在未来发布第二个"全套工具"镜像,其中也会包含 seclab-taskflows。注意:我将在"协作模型"部分解释 seclab-taskflow-agentseclab-taskflows 之间的关系。

Taskflows

Taskflow 是一个 YAML 文件,包含一系列供框架执行的任务。让我们来看一下我演示用的 taskflow(来源):

plain 复制代码
seclab-taskflow-agent:
  filetype: taskflow
  version: 1

globals:
  repo:
  ghsa:

taskflow:
  - task:
      must_complete: true
      agents:
        - seclab_taskflow_agent.personalities.assistant
      toolboxes:
        - seclab_taskflow_agent.toolboxes.memcache
      user_prompt: |
        Clear the memory cache.

  - task:
      must_complete: true
      agents:
        - seclab_taskflow_agent.personalities.assistant
      toolboxes:
        - seclab_taskflows.toolboxes.ghsa
        - seclab_taskflows.toolboxes.gh_file_viewer
        - seclab_taskflow_agent.toolboxes.memcache
      user_prompt: |
        Fetch the details of the GHSA {{ GLOBALS_ghsa }} of the repo {{ GLOBALS_repo }}.
        ...

你可以看到,它的结构与 GitHub Actions 工作流非常相似。顶部是头部(header),下面是主体(body),其中包含一系列任务。任务由智能体框架逐一完成。让我们逐个部分进行讲解,重点关注最关键的内容:

Header 的第一部分定义了文件类型。最常用的文件类型包括:

  • taskflow:描述框架要执行的一系列任务。

  • personality:在执行任务时,通常需要指定某种特定角色。例如,我们有一个 action_expert 角色,用于审核 Actions 工作流。

  • toolbox:包含运行 MCP 服务器的指令。例如,本演示使用 gh_file_viewer 工具箱从 GitHub 下载源代码文件。

globals 部分定义了名为 repoghsa 的全局变量,这些变量通过命令行参数 -g repo=github/cmark-gfm-g ghsa=GHSA-c944-cv5f-hpvr 初始化。这是一种粗略的任务流参数化方式。

Task 1

任务总是指定一个要使用的 "personality"。对于非专业化任务,我们通常只使用 assistant 角色。

每个任务从一个全新的上下文开始,因此从一个任务传递结果到下一个任务的唯一方式是通过工具箱作为中介。在本演示中,我使用了 memcache 工具箱,它是一个简单的键值存储。我们发现这种方法更适合调试,因为它允许在测试时以一致的输入重新运行单个任务。

此任务还演示了工具箱可以在执行潜在破坏性操作前请求确认,这是防止提示注入攻击的重要保护措施。

Task 2

该任务使用 ghsa 工具箱从仓库下载安全公告,并使用 gh_file_viewer 工具箱查找公告中提到的源文件。它创建摘要,并使用 memcache 工具箱将结果传递给下一个任务。

Task 3

该任务使用 memcache 工具箱获取上一个任务的结果,并使用 gh_file_viewer 工具箱下载源代码并进行审核。

通常,提示词的措辞比看起来更微妙,这个第三个任务就是一个例子。之前版本的任务尝试一次分析整个源文件,消耗了过多的 token。因此第二段要求分析"文件的一小部分",对于任务的成功执行非常重要。

Taskflows 总结

希望这个演示能让你对任务流有一个初步了解。你可以在 README.mdGRAMMAR.md 中找到更详细的文档。你还可以在 seclab-taskflow-agentseclab-taskflows 的子目录中找到更多示例。

协作模型

我们希望社区成员能够发布自己的任务流套件。为了方便协作,我们构建在 Python 的打包生态之上。我们自己的两个仓库已发布为 PyPI 包:

  1. seclab-taskflow-agent:任务流框架的实现。

  2. seclab-taskflows:我们团队编写的一套任务流。

我们之所以有两个仓库,是希望将"引擎"与使用它的任务流套件分离。同时,seclab-taskflows 旨在作为一个易于复制的模板,供任何希望发布自己任务流套件的人使用。开始创建你的包时,我们建议使用 hatch new 命令来创建初始项目结构。它会生成 pyproject.toml 等文件,你在上传到 PyPI 时需要用到。接下来,我们建议创建一个类似的目录结构,为任务流、工具箱等创建子目录。你也可以复制 seclab-taskflows 的其他部分,比如 publish-to-pypi.yaml 工作流,它会在你推送类似 "v1.0.0" 的标签时自动上传你的包到 PyPI。

协作模型的一个重要特点是共享 MCP 服务器也很方便。例如,查看 seclab-taskflows 包中包含的 MCP 服务器。每个 MCP 服务器都有一个对应的工具箱 YAML 文件(在 toolboxes 目录中),其中包含运行该服务器的指令。

导入系统

任务流经常需要引用其他文件,比如 personalities 或工具箱。为了让协作模型良好运作,我们希望你能够重用来自其他包的 personalities 和工具箱。我们利用 Python 的 importlib 来方便引用其他包的文件。举例来说,seclab-taskflows 使用 seclab-taskflow-agent 的工具箱:

plain 复制代码
toolboxes:
  - seclab_taskflow_agent.toolboxes.memcache

实现方法是将名称 seclab_taskflow_agent.toolboxes.memcache 拆分为目录(seclab_taskflow_agent.toolboxes)和文件名(memcache)。然后使用 Python 的 importlib.resources.files 定位目录,并加载该目录下名为 memcache.yaml 的文件。这个系统唯一的特别之处是名称必须至少有两部分,这意味着你的文件必须至少存放在一个子目录中。但除此之外,我们直接使用 Python 的导入系统,这也意味着网上有大量文档和建议可供参考。

项目愿景

我们有两个主要目标。首先是鼓励社区驱动的安全。当前涌现的许多智能化安全工具是闭源的黑盒子,这与我们团队的理念完全相反。我们希望人们能够"掀开引擎盖"查看任务流的工作原理,也希望人们能够轻松创建和分享自己的任务流。作为社区,如果共享发现漏洞的方法,我们就能更快地消除软件漏洞。我们希望任务流能够成为实现这一目标的有效工具。

第二是创建一个我们自己想使用的工具。作为研究团队,我们希望工具适合快速实验。我们需要能够快速创建新的安全规则并进行测试。基于此,我们并不追求打造世界上最精美或最高效的工具,而是希望它易于修改。

如果想深入了解我们如何使用该框架进行安全研究,可以阅读我的同事 Peter Stöckli 和 Man Yue Mo 的博客文章,他们分享了如何使用该框架对 CodeQL 警报进行分级处理。

查看最新安全资讯 >

相关推荐
yong99901 小时前
基于SIFT的MATLAB图像拼接实现
人工智能·计算机视觉·matlab
雨大王5121 小时前
广域铭岛构建全链路智能制造新引擎
人工智能
ActionTech1 小时前
数据集推荐 06 | 首款 NL2GeoSQL 的测试基准和数据集来了!
数据库·人工智能·sql
龙萱坤诺1 小时前
联网搜索增强版同步上线!MiniMax M2.5-Search助力更聪明的信息决策
人工智能·minimax
德迅云安全杨德俊1 小时前
业务不中断、源站不暴露!DDOS高防 IP 抵御网络攻击
网络·安全·https·ddos
回敲代码的猴子1 小时前
2月12日打卡
人工智能·算法
明月_清风1 小时前
单点登录(SSO)在前端世界的落地形态
前端·安全
FIT2CLOUD飞致云2 小时前
支持OpenClaw智能体管理,新增企业微信、钉钉和飞书告警通知,1Panel v2.1.0版本发布
服务器·ai·开源·1panel
明月_清风2 小时前
OAuth2 与第三方登录的三个阶段(2010–至今)
前端·安全