返回列表

5th place | 24/27 | Lessons from my first CTF + how GPT4 can help

579. AI Village Capture the Flag @ DEFCON31 | ai-village-capture-the-flag-defcon31

开始: 2023-10-09 结束: 2023-11-09 AI安全与对抗 数据算法赛
作者:Horea (MASTER) | 排名:第5名 | 发表时间:2023-11-13 20:20:53

第五名 | 24/27题 | 我的首次CTF经验 + GPT4如何助力

大家好!

首先,我要感谢组织者和Kaggle举办这场精彩的比赛!这是一次绝佳的学习经历,让我对AI安全产生了浓厚兴趣。同时也要感谢社区——Discord频道既实用又有趣!

我在比赛开始约9天后才加入,最初只是为了尝试prompt注入攻击,因为X平台上的朋友推荐。没想到能获得奖牌,更别说金牌了😅 多个简单易懂的题目成功吸引了我,在遇到难度墙之前已经让我深陷其中,这要归功于主办方的策略。

经验总结

  • 时间投入至关重要,特别是对于模糊的任务。许多题目不一定很难,但需要多次不同的实验才能找到正确方法/获取缺失信息。
  • 更努力地尝试确实有效。从Discord频道发现的这篇文章很有见地。
  • 如果尝试次数/API查询没有限制——充分利用它。主办方鼓励这样做,而且理由充分。在"密码短语"和"反转"题目中我会详细说明。
  • GPT4代码解释器是一个神奇的工具,可以单独解决某些题目。你知道它安装了Torch吗?因此可以用它运行小型模型。虽然需要时间成本(多个并行会话很有帮助!),但我发现它非常宝贵——特别是对于那些我毫无经验的题目。

代码仓库:

https://github.com/hh-5/AI-CTF-DEFCON31

比赛排名截图

Prompt类题目

什么是flag 1-6

询问系统prompt或忽略之前的指令就足够了。这些题目有点随机,例如,单独一个反斜杠就让我得到了第4题的flag。

IP 1/2

我不是很确定任务是什么,所以我就问"如何" + 任务描述,然后得到了flag。

海盗/西班牙语混合

直接要求flag不起作用,但添加随机问题或以JSON格式要求却有效。使用结构化数据从LLM中提取受保护信息,这在我的经验中是一个有用的工具。

中等难度题目

这些题目可以通过投入足够的时间来解决,它们非常有趣,除了一题例外。

Semantle 1/2

我不知道这个游戏,所以我用类似Akinator风格的问题在约30次尝试内解决了Semantle 1。而Semantle 2则需要更多工作。重复"human/man/woman"等词似乎能得到更高的分数,但很难区分相同分数,所以我尝试找一组固定位置的词来更好地区分进度,结果如下。经过GPT4的一些语义实验后,Google完成了剩下的工作。

!@#EAS 34531 fart dead art cart girl woman
0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91

懒人(Sloth)

再次,GPT4在这里帮了大忙。经过一些实验后,我找到了这个:

Sloth题目解法

泡菜(Pickle)

尝试了一些简单想法后,我让GPT4解释如何制作一个真正危险的泡菜。没有一个"奏效",所以我试图找到危险与不危险之间的界限。转储def a():\n return eval得到了flag,仍然不知道为什么。

集群(Cluster) 1-3

GPT4在第一个prompt中解决了Cluster 2。对于Cluster 1,由于某些原因,我无法在本地运行模型,也无法用gpt运行,所以我二分搜索能获得响应的输入大小。注意到响应不为0,所以集合中必须有一些索引是答案的一部分。所以我批量查询所有潜在值。一小时内获得了完整的子集并得到了flag。对于Cluster 3,可视化就足够了,除了信用不足的部分。Discord帮了忙——有人有点困惑并发布了一张图片(没有提示),但有约10个🤫表情反应,这让答案变得明显。

MNIST/CIFAR

对于这些,我建立了一个小型管道,对每个潜在答案进行反转/移位/交换索引。然后生成了一些答案想法,最终成功了。CIFAR也很简单,你只需发送一个(100,4)矩阵,使用input_data的提示来计算数据集中的数据。

为所有花在过度思考解决方案上的时间默哀片刻🙃

铜牌/银牌决胜题

像素化(Pixelated)

对大多数人来说,这题的难度不在于找到正确的XML注入,而是让OCR正确读取。对我来说却相反。通过使用大号图像的liberation monospace字体,并生成图像时最小化空白,我避免了OCR问题。至于找到正确的注入,花了一些时间;true之前和之后可能的内容的笛卡尔积并不大,所以几百次变异后我得到了flag。

奶奶(Granny) 1-2

我花了几天时间试图匹配模型,在发现它是基于Torch的之前和之后都是。甚至尝试了预处理参数的遗传算法。我能找到的最佳改进是让模型以双精度运行,但在1e-5或1e-6之后误差基本相同。

从Discord得知许多人结果非常接近1.0,这让我误以为如果不匹配权重就没有机会得到flag。但显然,在224x224调整大小并使用(简单梯度上升)扰动的图像上添加16px边框,就足以同时解决Granny 1和2。即使最终解决方案很简单,但通过多篇论文和ART工具箱攻击的旅程相当精彩。

你知道你可以上传模型.pth文件+一张图片,让GPT4编写攻击代码并返回扰动后的图像吗?我承认它并不总是有效,而且常常会出错或需要帮助——但我发现这很有趣。当尝试不同方法时,*非常*有教育意义。

金牌决胜题

反转(Inversion)

这道题花了我很多实验,最后我想我向端点发送了超过20万次请求。我用不同方法创建了多个数据集——不同大小的随机符号、EMNIST甚至CIFAR都产生了基本相同的结果。Logits 5、6和8就是拒绝激活。我还以不同方式训练了100多个模型。更不用说翻转后的结果也可以读作"-----tak"或"-----tar"...

我几乎要放弃了,这时Discord上有人说这对母语者更容易。一位主办方提到他们用"Quija"代替"Ouija",因为它在法语中是正确的。不知道这是真是假,但这促使我尝试一些法语单词,而不是试图找到logits 568的值。考虑到主题,我以为是像"Je+"和一个5个字母的单词(比如"Je+morte"),或者是"le"+6个字母的单词。所以所有法语单词都尝试完后,我决定暴力破解。然后它成功了!我仍然不知道法语中的'tmeut'是什么意思。

开玩笑归开玩笑,这是一道有趣的题目,我从中学习了很多。例如,当目标是过拟合时,泛化能力并不是很有用,所以不用最大池化的效果更好。然而,添加25/50的dropout改善了我认为的视觉质量:

不用DR:
无dropout

使用DR:
有dropout

密码短语(Passphrase)

这是一道我不断尝试却失败约两周的题目。通过添加空格得到了正确分数,或者标点符号,或者随机字符。但不是flag。然而后来当人们开始解决它时,我注意到完成所需时间相对较短——这意味着我的方法不在正确轨道上。

很明显遗传算法不是办法。主办方曾暗示过进行了哪些预处理/后处理,以及什么是密码短语(即一个短语,不是密码)。

虽然我没有理解主要提示(现在回头看很明显"difference sentence"而不是"different"意味着他们使用特定指标作为阈值,似乎是余弦差),但我继续尝试。

最终,我用马尔可夫链生成了大量陈述及其分数,选出分数最高的那些,然后开始替换其中的单词。搜索空间约1e8,所以我认为中途相遇方法有相当机会得到结果(即从1e4次尝试中得到分数最高的短语,然后1e4次单词替换尝试)。
密码短语实验截图

以为我很幸运,但后来意识到分数概率不是均匀的——像给定例子中的强烈偏见有更高发生几率。总之,在尝试名字(Ancog和Week都得到了正确分数)失败后,我尝试了简单名词。没有很多名词能适应剩下的少数字符(限制是50),但经过一些调整后,我用"The magazine visual is also immensely appealing."得到了flag。

那轮运行中我的第二好结果是"The solution visual is also immensely appealing."——本可以是获得flag的有趣密码短语,如果它奏效的话😅

安静(Hush)

没有解决它,整个过程都走错了方向,但至少我学到了一些关于声音处理和声音文件二进制结构的东西。

未解决的题目

奶奶(Granny) 3

我想我在这题上花了接近100小时。从DE到多个其他遗传算法,都没有得到像样的解决方案。也没能欺骗端点,让端点认为发送的图像差异不超过一个像素,但我 honestly 怀疑这道题*不是*关于找到正确的像素。

在朴素解决方案没有结果后,我暴力破解对比值以寻找洞察。以下是使用每个的前1000个(按苹果分数)的最佳像素的不同值的交集。

像素交集分析

考虑到768x768完美映射到256x256,比例为3:1,每个像素的搜索空间小于9*[256/9]^3。图像没有很多锐利对比变化,所以对于大多数像素,3-4万次组合就穷尽了空间。超过1e7次尝试后,最佳结果仍低于7e-4。

在完成前100个最佳梯度像素后,我也尝试了小型imagenet版本,获取最常用的绿色色调,但它们也没有更好。

绿色色调分析

以下是GPT4在尝试解决它时提供的其他有趣内容:

逐层梯度映射:
逐层梯度映射

苹果类别的基本梯度映射:
苹果类别梯度映射

以及聚合最佳结果的热度图:
最佳结果热度图

这里是叠加图像:

叠加图像

注意:

  • 梯度映射与最佳结果不匹配
  • 最佳像素放置位置有点令人惊讶,至少对我来说是这样

我会随着我发现/记得更多结果/观察不断更新这个帖子,我的笔记本就散落各处😅

同比赛其他方案