前段时间在某次护网中发现了某个私有docker仓库存在未授权访问,这引起了我的好奇。带着疑问进行了简单的研究。

仓库列表

遇到的仓库是开放了http的5000端口,访问http://xxx/v2/_catalog

Pasted_image_20240729205033.png

镜像标签

默认的镜像标签都是latest,不排除开发者故意设置其他的标签。如使用版本号作为标签。

这里可以使用他的api接口进行查询某一个镜像的所有标签,比如我这里查询sopplus镜像,可以看到存在两个标签。

Pasted_image_20240729205230.png

镜像拉取

这里交给docker进行pull。因为目标仓库使用了http协议,会被docker认为是不安全的。

这里可以修改 /etc/docker/daemon.json  文件(没有可以创建)内容如下:

Pasted_image_20240729205432.png

对docker服务进行重启  sudo systemctl restart docker ,到这里就可以进行拉取镜像了。
Pasted_image_20240729205550.png

镜像上传

可以本地制作恶意的镜像或添加后门代码到镜像中,使用tag给本地的镜像打个标签。

命令为:docker tag <local_images> <remote_images>:<tag>

Pasted_image_20240729205645.png

打完标签就可对该镜像进行push操作了,命令如下:
Pasted_image_20240729205751.png

对上传进行进行验证

使用api接口进行验证,是否真正的push上去了。使用如下接口进行访问
http://xxx/v2/<images>/tags/list
可以看到已经成功上传了我修改后镜像tag

Pasted_image_20240729205945.png

利用扩展

缺点:

由于对指定镜像投毒具有缓慢性,不清楚什么时候进行pull操作也有可能会push新的版本。

即使投毒成功也无法及时有效的知道镜像被部署到什么服务器中。

思路:

如下显示的镜像中存在基础镜像和编译镜像

Pasted_image_20240729210054.png

可以考虑如底层镜像centos中添加二进制后门,定期向指定服务器回传等操作。

还可以考虑如maven 编译镜像中添加后门程序,在正常编译程序的同时向正常代码中增加backdoor代码等。
······