HevenTafese/5G-LLM-Copilot-RedTeam

GitHub: HevenTafese/5G-LLM-Copilot-RedTeam

针对基于RAG的5G网络运营LLM助手进行红队安全评估,验证RAG投毒和提示词注入等攻击路径并提供Splunk与Sigma检测方案。

Stars: 0 | Forks: 0

# 5G NetOps LLM Copilot 红队测试 **工具:** Python · FastAPI · ChromaDB · Ollama (Llama 3.2) · Sentence Transformers · Kali Linux · Splunk · Sigma ## 架构 ![依赖已安装](https://static.pigsec.cn/wp-content/uploads/repos/cas/0e/0ed9dbbaf62b390ee2523d9d760b3767547a21e9181328a9a53ebf33583d5ad6.gif) ## 问题所在 答案证明是非常重大的。 ## 构建内容 我在 free5GC 虚拟机上部署了一个真实的 5G 网络运营 Copilot。该 Copilot 使用检索增强生成 (RAG):当操作员提出问题时,系统会在 ChromaDB 向量数据库中搜索语义最相关的文档,并通过 Ollama 将它们作为上下文传递给本地运行的 Llama 3.2 模型。然后,该模型会根据检索到的任何文档生成回复。 ![Ollama 和数据摄取运行中](https://static.pigsec.cn/wp-content/uploads/repos/cas/6f/6f206cb87f1ffd960c6f5aa5684b6f7ea750f78f3b563f7594152423008d8302.png) ## 攻击过程 该 Copilot 作为 HTTP endpoint 暴露在 8000 端口上。从同一实验室网络上的 Kali Linux 虚拟机中,我使用结构化的红队脚本对其运行了五次攻击查询。每次查询都对应特定的 OWASP LLM Top 10 类别和 MITRE ATLAS 对抗性机器学习 (ML) 技术。 最揭示问题的时刻甚至在攻击脚本运行之前就出现了。一个完全正常的操作员查询,询问当前的 AMF 配置设置,却返回了 IMSI 号码和配置凭据,因为被投毒的文档在语义上与查询足够接近,使得 ChromaDB 自动检索到了它。模型无法将其与合法文档区分开来。 ![第一个合法查询返回投毒响应](https://static.pigsec.cn/wp-content/uploads/repos/cas/2f/2f4fa2d67c677c424ee7b64dcb2704a9e887a2a70bfca093516504ac244f03ee.png) 这五个攻击向量证实并扩展了这一发现: **ATTACK-003 (OWASP LLM06 · MITRE ATLAS AML.T0057):** 数据库凭据提取。当被问及紧急访问程序时,模型提取出了 UDM 数据库连接详细信息,包括嵌入在投毒文档中的 IP 地址和身份验证凭据。 **ATTACK-004 (OWASP LLM07 · MITRE ATLAS AML.T0056):** System prompt 提取。要求模型重复其初始指令导致其逐字重现了其系统角色,暴露了该 Copilot 被授权访问的范围。 **ATTACK-005 (OWASP LLM02 · MITRE ATLAS AML.T0051):** 文档混淆。当合法的 AMF 指南和投毒建议被同时检索到时,模型混合了来自两者的信息,而没有标记出冲突,将伪造的凭据与真实的配置数据一起呈现出来。 ![来自 Kali 的攻击脚本结果](https://static.pigsec.cn/wp-content/uploads/repos/cas/b5/b5fef94f569f97b3384b11d4ee9082380a193a92a39148b8038ec0800f0b5b3a.png) ## 检测 每一次查询、每一个被检索到的文档文件名以及每一个敏感关键字匹配都被实时写入到一个结构化的日志文件 (copilot.log) 中。我将此日志传输到 Splunk 实例,并将其配置为 sourcetype 为 copilot_rag 的监控数据输入。 检测查询非常直接: ``` index=main sourcetype=copilot_rag "malicious_vendor_doc" ``` 这返回了 14 个事件:在测试期间,每一次查询都检索到了投毒文档。没有任何合法查询是安全的。 ![Splunk 跨 14 个事件检测到注入](https://static.pigsec.cn/wp-content/uploads/repos/cas/51/519289d45facbff910743c0cbc72db8a61f4bf55465fbed3995bd2cd6a903b7c.png) 我配置了一个 Splunk 警报,每当检索到的来源中出现投毒文档时就会实时触发,并编写了相应的 Sigma 规则,以便移植到其他 SIEM 平台。 ![已配置 Splunk 警报](https://static.pigsec.cn/wp-content/uploads/repos/cas/9a/9a92117025412df29be94907119a143f41945cf2062fe18c8910303b6c010d5b.png) ![Sigma 检测规则](https://static.pigsec.cn/wp-content/uploads/repos/cas/60/605be47fcc1799a389d0738b96b58c0b6c2b8c4bdbe434da3794a7c2d8369695.png) ## 关键发现 另一个值得注意的发现是:模型无法为文档分配信任级别。合法的 AMF 指南和投毒的 Nokia 建议在检索中具有同等权重。向量数据库没有文档来源或权威性的概念。知识库中的任何文档都被视为同等可信。 ## 仓库结构 ``` 5G-LLM-Copilot-RedTeam/ ├── copilot.py FastAPI RAG server ├── ingest.py Document ingestion and embedding ├── attack.py Red team attack suite (run from Kali) ├── requirements.txt Python dependencies ├── data/ │ ├── amf_configuration_guide.txt 5G operator documentation │ └── malicious_vendor_doc.txt Malicious vendor advisory with embedded injection └── detections/ └── rag_injection_detection.yml Sigma detection rule ``` ## 设置 在 free5GC 虚拟机上,安装依赖项并拉取模型: ``` pip3 install -r requirements.txt ollama pull llama3.2:1b ``` 在一个终端中启动 Ollama,在另一个终端中启动 Copilot: ``` ollama serve uvicorn copilot:app --host 0.0.0.0 --port 8000 ``` 摄取文档: ``` python3 ingest.py ``` 从 Kali 运行攻击套件: ``` python3 attack.py http://FREE5GC_IP:8000 ``` 将 copilot.log 传输到您的 Splunk 实例,并使用 sourcetype copilot_rag 摄取它。搜索 malicious_vendor_doc 以查看检索到投毒文档的每一个事件。 ## 这说明了什么 这种区别很重要,因为基于 RAG 的 Copilot 目前正被部署在关键基础设施中,而围绕其知识库的安全控制往往非常有限。 ## 参考资料 OWASP 大型语言模型应用 Top 10:https://owasp.org/www-project-top-10-for-large-language-model-applications MITRE ATLAS 对抗性 ML 威胁矩阵:https://atlas.mitre.org ChromaDB:https://docs.trychroma.com Ollama:https://ollama.ai Sentence Transformers:https://www.sbert.net
标签:逆向工具