_)) > * _~ `;'__-' _ ____ | ) _ _____________________ ____ / / `` w w ____________________ ____ w w ________________AI_Goat______ ______________________________________ Presented by: rootcauz
通过一系列易受攻击的 LLM CTF 挑战来学习 AI 安全性。 无需注册,无云费用,在您的系统上本地运行所有内容。
由于ChatGPT和其他引擎的发布,许多公司已经开始构建与AI大语言模型(LLM)集成的软件。 这种兴趣的爆发导致了系统的快速开发,这些系统重新引入了旧的漏洞并施加了新类别的不太了解的威胁。 许多公司的安全团队可能没有完全具备处理法学硕士安全性的能力,因为该领域的工具和学习资源仍处于成熟阶段。
我开发了 AI Goat 来了解 LLM 开发以及使用它的公司面临的安全风险。 CTF 格式是安全研究人员获得实践经验并了解这些系统如何容易受到攻击以及如何被利用的好方法。 感谢您对这个项目的兴趣,希望您玩得开心!
LLM 应用程序的 OWASP Top 10 是开始了解 LLM 安全威胁和缓解措施的好地方。 我建议您仔细阅读该文档,因为 AI Goat 中探讨了许多概念,并且它提供了您将在挑战中面临的精彩总结。
请记住,封装在云环境中托管的 Web 应用程序中的 LLM 引擎将受到相同的传统云和 Web 应用程序安全威胁。 除了这些传统的威胁外,LLM项目还将受到以下不全面的威胁:
及时注射
不安全的输出处理
训练数据中毒
拒绝服务
供应链
权限问题
数据泄露
过度代理
过度依赖
不安全的插件
AI Goat 使用源自 Meta 的 LLaMA 的 Vicuna LLM 并结合 ChatGPT 的响应数据。 安装 AI Goat 时,将从 HuggingFace 下载 LLM 二进制文件到您的计算机本地。 这个大约 8GB 的二进制文件是挑战所围绕的 AI 引擎。 LLM 二进制文件本质上接受输入“提示”并给出输出“响应”。 该提示由在字符串中连接在一起的三个元素组成。 这些要素是: 1. 说明; 2. 问题; 3. 响应。 说明元素由所描述的法学硕士规则组成。 它们旨在向法学硕士描述它应该如何表现。 Question 元素是大多数系统允许用户输入的地方。 例如,输入聊天引擎的评论将被放置在“问题”元素中。 最后,“答复”部分规定法学硕士对问题做出答复。
预构建的 Docker 映像 ai-base 包含运行 LLM 和挑战所需的所有库。 该容器在安装过程中与 LLM 二进制文件一起下载。 启动每个挑战的 docker compose 会附加 LLM 二进制文件、特定挑战文件,并公开完成每个挑战所需的 TCP 端口。 有关入门说明,请参阅安装和设置部分。
已准备好一个可选的 CTFd 容器,其中包括每个挑战描述、提示、类别和标记提交。 容器镜像托管在我们的 dockerhub 中,与 ai-base 镜像一起称为 ai-ctfd。 ai-ctfd 容器可以从 ai-goat.py 启动并使用浏览器访问。
git
sudo apt install git -y
蟒蛇3
点3
sudo apt install python3-pip -y
码头工人
docker 撰写
docker组中的用户
sudo usermod -aG docker $USER
reboot
8GB 驱动器空间
最低 16GB 系统内存,其中至少 8GB 专用于挑战;否则LLM回复时间太长
对网络安全的热爱!
git clone https://github.com/dhammon/ai-goat cd ai-goat pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
本节要求您已经遵循Installation
步骤。
使用 ai-ctfd 可为您提供所有挑战和标记提交的列表。 它是您自己使用或举办 CTF 时使用的绝佳工具。 作为个人使用它可以为您提供挑战地图,并帮助您跟踪已完成的挑战。 它提供标记提交以确认挑战完成,并可以提供提示,将您推向正确的方向。 该容器还可以在内部服务器上启动和托管,您可以在其中将自己的 CTF 托管给一组安全爱好者。 以下命令在后台启动 ai-ctfd 并可以在端口 8000 上访问:
./ai-goat.py --run ctfd
重要提示:启动后,您必须创建一个用户并注册用户帐户。 此注册保留在容器本地,不需要真实的电子邮件地址。
您可以更改挑战源代码中的标志,然后更改 CTFD 中的标志(它们必须匹配)。
克隆存储库后,导航到ai-goat/app/challenges/1/app.py
并更改第 12 行字符串中的标志。
然后导航到ai-goat/app/challenges/2/entrypoint.sh
并更改第 3 行的标志。
接下来您需要更改 CTFD 中的标志。启动 CTFD( ./ai-goat.py --run ctfd
并打开浏览器访问http://127.0.0.1:8000
),然后使用root
用户使用qVLv27Dsy5WuXRubjfII
作为密码登录。
登录后,导航管理面板(顶部导航栏)-> 挑战(顶部导航栏)-> 选择挑战 -> 并点击“标志”子选项卡。
更改每个 CTFD 质询的标志以匹配您在源代码中更改的相同字符串。
玩得开心!
有关每个挑战的说明,请参阅Challenges
部分,或参阅Step 1
中的 ai-ctfd 网页。 以下命令启动第一个挑战:
./ai-goat.py --run 1
挑战容器将在后台启动,并提供有关如何与挑战交互的说明。 每个挑战都有一个标志,它是一个用大括号括起来的字符串。 例如: {eXampl3F!ag}
。 您可以通过提交 ai-ctfd 页面中的主题挑战来验证该标志。
重要提示:有时 LLM 会构成标志值,因此请确保在 ai-ctfd 中验证该标志;)
重要提示:LLM 回复可能需要 30 秒左右
可以通过重新运行挑战来重新开始挑战。 示例: ./ai-goat.py --run <CHALLENGE NUMBER>
。 如果容器已经在运行,此命令将重新启动容器。
您可能会无意中污染或破坏挑战容器。 如果需要,使用 docker 命令停止容器。 列出容器: docker container ps
。 要停止容器: docker stop <CONTAINER NAME>
。
主分支将始终包含最新版本。 历史版本将在各自的分支中维护。 升级说明:
cd ai-goat git pull pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
重要提示:ai-ctfd 将有效地从头开始,因此请确保创建一个新用户并根据需要重新提交/重做任何以前的挑战。
成功的即时注入攻击会影响法学硕士以他们不打算泄露的信息做出响应。在此挑战中,在端口 9001 上运行的 AI 聊天机器人将标志存储为秘密,并被提示不要放弃它。 你能说服或欺骗机器人给你旗帜吗?
./ai-goat.py -r 1
LLM01:立即注射 | LLM07:数据泄露
LLM 系统输出不应被信任,尤其是当该输出用于下游操作(例如操作系统命令或网络调用)时。 此挑战赛有另一个 AI 聊天机器人在端口 9002 上运行,它接受用户问题并返回网站标题。 用户输入由聊天机器人转换为 URL,用于在提取标题时请求该网站的源代码。 该聊天机器人还可以通过网络访问什么?
./ai-goat.py -r 2
LLM02:不安全的输出处理
最新版本是主分支。 您可以在CHANGELOG.md
文件中找到该版本。 为每个各自的版本创建分支。
CTF引擎:CTFD
艺术创作:ascii.co.uk 上的 ejm97
AI容器技术:
库: llama-cpp-python
大型语言模型:Vicuna LLM