运行不可信模型时要格外小心。这类模型包括由未知开发者创建的模型或使用来源不明数据的模型。
始终在安全的隔离环境(如沙箱)中运行不可信模型(例如容器、虚拟机)。这有助于保护您的系统免受潜在的恶意代码侵害。
[!注意] 模型的可信度并非非黑即白。您必须根据具体模型及其与您的使用场景和风险承受能力的匹配程度来确定适当的谨慎级别。
某些模型接受各种输入格式(文本、图像、音频等)。用于转换这些输入的库具有不同的安全级别,因此隔离模型并仔细预处理输入以降低脚本注入风险至关重要。
为了在处理不可信输入时实现最大安全性,您可能需要采用以下措施:
- 沙箱化:隔离进行推理的环境。
- 预分析:通过提示注入测试(例如使用提示注入模糊测试)检查模型的默认表现。这将为您提供下一步工作的方向。
- 更新:确保 LLaMA C++ 和您的库都更新到最新的安全补丁。
- 输入净化:在将数据输入模型之前,严格净化输入。这包括以下技术:
- 验证:对允许的字符和数据类型实施严格规则。
- 过滤:删除潜在的恶意脚本或代码片段。
- 编码:将特殊字符转换为安全的表示形式。
- 验证:运行能识别潜在脚本注入的工具(例如检测提示注入尝试的模型)。
为了保护敏感数据免受潜在泄露或未经授权的访问,对模型执行进行沙箱化至关重要。这意味着在安全的隔离环境中运行模型,这有助于降低许多攻击风险。
如果您无法在安全和隔离的环境中运行模型,或者必须将其暴露在不可信网络中,请确保采取以下安全预防措施:
- 确认所有下载文件(例如预训练模型权重)的哈希值与已知的正确值匹配
- 通过网络发送数据时进行加密。
如果您打算在共享内存的情况下并行运行多个模型,您有责任确保模型之间不会相互影响或访问彼此的数据。主要关注领域包括租户隔离、资源分配、模型共享和硬件攻击。
-
租户隔离:模型应使用强隔离方法单独运行,以防止不必要的数据访问。网络分离对隔离至关重要,因为它可以防止未经授权访问数据或模型,并防止恶意用户以其他租户的身份发送执行图。
-
资源分配:一个模型造成的拒绝服务可能会影响整个系统的健康状况。实施包括速率限制、访问控制和健康监控等安全措施。
-
模型共享:在多租户模型共享设计中,租户和用户必须了解运行他人提供的代码的安全风险。由于没有可靠的方法来检测恶意模型,建议采用沙箱化模型执行来降低风险。
-
硬件攻击:GPU 或 TPU 也可能受到攻击。研究表明,GPU 上的侧信道攻击是可能的,这可能导致同一系统上同时运行的其他模型或进程的数据泄露。
请注意,安全使用 llama.cpp 下的任何主题都不被视为 LLaMA C++ 的漏洞。
如果您在本项目中发现了安全漏洞,请私下报告。**不要将其作为公开问题披露。**这让我们有时间与您合作修复问题,然后再公开披露,从而降低在发布补丁之前漏洞被利用的可能性。
请通过私密安全公告进行披露。
该项目由志愿者团队以合理努力的方式维护。因此,请在公开披露之前给我们至少 90 天的时间来修复问题。