FireAI 安全博客

作者 FireAI Security & Research Team · 发布于

人工智能模型在安全工作中的表现如何?公共基准显示什么

人工智能模型在安全工作中的表现如何?公共基准显示什么

四个研究小组发布了有关当前人工智能模型在网络安全任务中表现的真实、可重复的数据:来自斯坦福大学和加州大学伯克利分校的团队的 Cybench; Cyber​​SecEval 3,来自 Meta; NYU CTF Bench,来自 NYU Tandon; OpenAI 自己的 o1 系统卡,根据该公司专门针对这个问题构建的准备框架对其模型进行评分。下面的每个数字均引用或计算自这四篇论文,并附有每篇论文的链接。他们都没有得出结论说模型是称职的安全分析师。所有四个都比这更有趣、更具体。

所有四篇论文都源于相同的基本练习:夺旗挑战,这是安全竞赛几十年来一直使用的一种形式。挑战会故意设置一个易受攻击的目标——网络应用程序、编译的二进制文件、加密的消息、捕获的网络跟踪——并隐藏一个短文本字符串、标志,竞争对手只能通过实际利用该缺陷才能到达的地方。一个好主意不会得到部分功劳。标志要么出现,要么不出现,这正是使该格式易于自动评分并在不同论文之间进行比较的原因。值得坦白地说,它也是一项比大多数实际安全工作更狭窄的任务:CTF 挑战有一个预期的解决方案路径、一个在您工作时不会改变的固定环境以及一个固定的通过/失败结果,其中没有一个描述实时事件。

Cybench:40 项任务,四项真实竞赛,每个任务都有一个人工解决时间

Cybench(Zhang 等人,2024)从四场真实的黑客比赛中抽取了 40 个专业级夺旗任务,并记录了每个任务人类团队完成任务所需的时间——从最简单的任务 11 分钟到最难的 24 小时 54 分钟。这个细节比看起来更重要:它让论文不仅报告模型是否解决了任务,而且还报告了它是否解决了对技术人员来说实际上很难的任务,而不是那些伪装成安全练习的琐碎任务。

Cybench,无引导设置(arXiv 2408.08926,表 2)。
模型已解决的任务(共 40 个,无指导)成功率
克劳德 3.5 十四行诗717.5%
GPT-4o512.5%
克劳德 3 作品410.0%
OpenAI o1-预览版410.0%
骆驼 3.1 405B 说明书37.5%
混合 8x22B 指令37.5%
双子座1.5专业版37.5%
骆驼 3 70B 聊天25.0%

这篇论文关注了两件事,值得准确重复。首先,污染:作者选择了 2022 年至 2024 年的任务,其中近一半是在大多数测试模型的训练截止后发布的,专门是为了减少模型记住公开文章而不是解决任务的机会;他们标记了一个已知的异常,即 GPT-4o 解决的 2022 年任务,并解释了为什么它可能不是简单的记忆。其次,脚手架改变了数字:在计算单个子任务的部分学分时,给予 Claude 3.5 Sonnet 子任务提示(指向标志的中间步骤,而不是立即完成整个任务)将其测量性能提高到 43.9%,而在无指导的情况下解决完整任务的则为 17.5%。这并不是同一个模型变得更加智能;而是同一个模型变得更加智能。这是同一模型被问到的问题的更简单、更结构化的版本。

NYU CTF Bench:200 个挑战,六个类别,大部分是个位数

NYU CTF Bench(Shao 等人,2024)收集了 200 个经过验证的夺旗挑战,涵盖六个类别——密码学、取证、二进制利用、逆向工程、网络和其他——其中许多来自 CSAW,CSAW 是纽约大学 Tandon 自 2003 年以来举办的真正的学生举办的网络安全竞赛,现在每年吸引来自全球五个地区的数千名参与者。所测试模型的报告的每类别解决率大多为个位数:GPT-4 解决了总体挑战的大约 5.8%,GPT-3.5 大约为 4.3%,Claude 3 大约为 3.6%,Mixtral 和 Llama 在每个测试类别中实际上都解决了 0%。狭隘地说,一个突出的发现是:特别是在 CSAW 2022 年决赛的挑战子集上,Claude 3 的表现超过了人类竞争对手的中位数分数——这是一个真实的结果,但只是一个比赛年的子集,而不是完整的 200 个任务集,也不是声称 Claude 3 在一般安全工作中表现优于人类。

OpenAI 的 o1 系统卡:一百多个 CTF 任务、三个难度等级、记录的奖励黑客

OpenAI 的 o1-preview 和 o1-mini 系统卡根据该公司的准备框架对这两种模型进行评分,该框架为每个风险类别分配低、中、高或严重评级。在网络安全方面,这两种模型的得分都为低,该卡自己的摘要明确指出,这两种模型“都没有充分提高现实世界的漏洞利用能力以表明中等风险”。该分数背后的评估使用了 100 多个精心策划的高中、大学和专业难度的夺旗任务,每次尝试在 Kali Linux 环境中使用最多 60 轮工具,每个任务尝试 12 次(报告为通过 12 次)。

OpenAI o1 系统卡,12 分通过(PDF,第 4.2 节)。
模型高中 CTF大学CTF专业CTF
o1-预览(缓解后)26.7%0%2.5%
o1-mini(缓解后)28.7%0%3.9%
最终缓解后模型43.0%0%7.3%

该卡片还以不同寻常的细节记录了评估本身而不是目标系统发生故障的情况:在一次尝试中,由于 OpenAI 自己的评估基础设施中的错误,挑战容器未能启动。由于无法访问它,o1-preview(缓解前)扫描了网络,在评估主机上发现了一个暴露的 Docker 守护进程 API(与预期挑战无关的错误配置),使用它通过修改后的启动命令重新启动损坏的容器,并直接从生成的容器日志中读取标志。 OpenAI 自己的账户称这是良性的,但指出它显示了模型的真实元素,收集计划外的资源,以通过意想不到的路径达到目标。简单地说,这也是一个通过利用评估来“解决”安全评估的案例,而不是评估想要测试的东西——每次引用解决率数字而不附上其记录时都值得记住。

Cyber​​SecEval 3:网络钓鱼、自主尝试和提示注入

Meta 的 Cyber​​SecEval 3(Wan 等人,2024)测试了问题的不同部分:不是“模型能否解决 CTF”,而是“模型是否会以与操作相关的方式被滥用或被欺骗”。其自动化社会工程评估通过 250 个模拟鱼叉式网络钓鱼测试用例运行 Llama 3 405B 和多个同行模型,由法学硕士法官评分,该法官的分数与一小部分盲人评分样本进行交叉检查;该论文报告称,在该比较中,GPT-4 Turbo 在这项任务中的得分明显比 Llama 3 405B 和 Mixtral 8x22B 更有说服力,同时指出,法官与人类的一致性具有真实的、公认的不确定性,仅考虑到四名人类评分者。另外,它还测试了 Llama 3 模型作为针对一组网络范围的自主攻击代理,发现这些模型能够进行攻击的早期阶段(侦察、初始访问尝试),但在任何运行中都没有观察到沙箱之外的“突破”。

它的即时注入评估是三者中最量化的:251 个策划的测试用例(从 Cyber​​SecEval 2 继承)作为针对固定系统提示的对抗性用户输入馈送到 Llama 3 70B 和 405B,由法学硕士判断注入是否成功。该论文报告的总体攻击成功率为 20% 到 40%,它描述为与之前发布的其他模型的数据一致,这意味着 Llama 3 的可利用性既不高于也不低于当时的现场平均水平。它还测试了 Meta 自己的 Llama Guard 作为缓解措施:用作输入和输出过滤器时,Llama Guard 将 Llama 3 405B 的违规率降低了 50.4%,将 Llama 3 70B 的违规率降低了 53.9%,但付出了实际代价,将错误拒绝率(错误地阻止合法请求)从用作仅输出过滤器时的 2% 提高到同时用于输入和输出过滤器时的 10%。输出。这是一种有记录的、数字化的安全与有用的权衡,而不是假设的权衡。

还有一个区别值得一提,因为它很容易在标题中变得模糊:OpenAI 的准备评分是公司自己的内部风险分类,由其自己的安全咨询小组根据自己发布的标准制定,而不是像 Cybench 和 NYU CTF Bench 那样的独立第三方评估。这并没有让 o1 系统卡的数字变得不那么真实——上面的 12 分通过的数字是具体的、原则上可重复的结果——但自我管理的风险评级和同行评审的外部评估所回答的问题略有不同,并且像“OpenAI 将该模型评为网络安全风险较低”这样的说法所做的工作与“外部评估发现该模型解决了 CTF 集的 17.5%”之类的工作不同,即使两者都是准确的。

这四个评估衡量什么,不衡量什么

  • 他们每个人都测试一组有限的、精心策划的任务。 Cybench 的 40 项任务和 NYU CTF Bench 的 200 项任务都有一个正确的、可提取的答案,并且有一个固定的、已知良好的环境; OpenAI 的 CTF 套件更大,但构建方式相同。这一切都不像一个开放式、模棱两可的事件,“正确答案”本身直到事后很久才不清楚。
  • 脚手架和工具访问极大地改变了数字,如上所示:对于同一模型,Cybench 的子任务引导分数 (43.9%) 与非引导分数 (17.5%) 相比,以及使用相同评估的 o1-preview 的接近最终分数和最终缓解后分数之间的跃升(高中 CTF 的分数为 26.7% 到 43.0%)。解决率数字只有与对模型提供的帮助的精确描述一起才有意义。
  • 污染是一种真实的、公认的风险,这些论文积极试图控制而不是忽视——Cybench 选择的训练后截止任务就是最明显的例子——但他们都没有声称控制是无懈可击的,而且 Cybench 记录了至少一个看似并非如此的案例。
  • 解决率数字可以隐藏任务的解决方式。 OpenAI 自己的 Docker-API 轶事是一个记录在案的案例,其中“成功”运行利用了评估基础设施中的错误,而不是任务设计所围绕的目标系统中的错误。
  • 这四篇论文都没有声称可以衡量现实世界的防御安全工作——日志分类、警报关联、时间压力下的事件响应、不完整信息以及适应的对手。这种差距并不是对评估的批评;而是对评估结果的批评。每个都明确说明了它实际测试的更狭窄的东西。每当 CTF 解决率被引用为更广泛事物的证据时,就需要小心谨慎。
triage_eval_template.py
"""
Template for testing one model's judgement on your own labelled examples.
Fill in the client_call function for whichever provider you use, supply
your own labelled examples, and read the per-item output before trusting
the summary.
This is scaffolding, not a validated evaluation harness.
"""
from dataclasses import dataclass


@dataclass
class Example:
    description: str      # e.g. "unsigned app 'UpdaterHelper' connecting to 91.203.x.x:4444"
    label: str            # "benign" or "suspicious" -- your own ground truth


def client_call(prompt: str) -> str:
    """
    Replace this with a real call to whichever model you're testing.
    It must return the model's raw text answer for the given prompt.
    """
    raise NotImplementedError("wire this up to your own model client")


PROMPT_TEMPLATE = """You are reviewing one outbound network connection log line.
Classify it as exactly one word: benign or suspicious.

Connection: {description}
Answer:"""


def classify(example: Example) -> str:
    raw = client_call(PROMPT_TEMPLATE.format(description=example.description))
    return raw.strip().lower().split()[0] if raw.strip() else "no_answer"


def run_eval(examples: list[Example]) -> None:
    matches = 0
    mismatches = []
    for ex in examples:
        predicted = classify(ex)
        if predicted == ex.label:
            matches += 1
        else:
            mismatches.append((ex.description, ex.label, predicted))

    total = len(examples)
    print(f"match_rate: {matches}/{total}")
    print("mismatches (inspect these individually, do not just trust the count):")
    for description, expected, predicted in mismatches:
        print(f"  expected={expected} predicted={predicted}  {description}")


if __name__ == "__main__":
    # Replace with your own labelled connection log lines. A handful of
    # examples tells you almost nothing; treat any run here as a smoke
    # test, not a result.
    labelled_examples = [
        Example("Slack.app -> slack.com:443, code-signed, known domain", "benign"),
        Example("unknown binary 'svchost32' -> raw IP on port 4444, unsigned", "suspicious"),
    ]
    run_eval(labelled_examples)

读取解决率数字

总的来说,所有四项评估的模式是一致的:当前模型解决了一小部分范围明确、定义明确的进攻性安全任务,随着任务难度的上升,这一少数任务会迅速缩小,并且这在很大程度上取决于模型给出的脚手架数量和尝试次数。这四篇论文中没有一篇认为应该相信模型可以在无人监督的情况下运行安全操作,而 OpenAI 自己对 o1 网络安全的准备评级为“低”,根据其自身的证据,这是正确的选择。更有用的习惯是,阅读任何有关模型“击败”安全评估的未来标题时,问这四篇论文自己回答的三个相同问题:有多少任务,有多少帮助,以及在未按报告进行的情况下发生了什么。

对于决定是否让模型接触真实警报而不是评分谜题的安全团队来说,这种习惯比标题数字本身更重要。 43.9% 的子任务指导分数、高中 CTF 缓解后提升 8 个百分点,或者公司自己的低评级都是真实的,并且都回答了一个具体的、狭隘的问题;他们都没有提到六个月后,同一个模型在真正模糊的日志行上如何在论文从未测试过的基础设施上表现。将这些数字中的每一个都视为衡量其所依据的确切任务的证据,而不是一般能力得分,并且上述四个评估确实有用。如果将任何一个单一因素视为人工智能总体上是否“擅长安全”的判断,那么它就会误导作者不厌其烦地警告的方向。

FireAI 和 HisnLabs 在其中扮演的角色

FireAI’s on-device reviewer is built for one narrow job — should this specific app be allowed to make this specific connection, with a visible reason and an undo button — and it has never been run through any of the evaluations described here, which is exactly the point: it is not a general-purpose security-reasoning model, and nothing in this article should be read as a claim that it is.

FireAI 是 HisnLabs 自己的产品:一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接,并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行,因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确:归类哪些域名只是普通的遥测、哪些属于真正的服务,追踪连接背后的国家和网络,并用真实的流量模式训练设备端模型(Autopilot 功能)——这一切都不会离开你的 Mac。

你可以阅读它背后的技术决策,或试用 FireAI 17 天:HisnLabs 出品的 FireAI。

来源