有许多仓库为想要学习安全的人提供易受攻击的环境,例如 Web 应用程序、容器或虚拟机,这不仅有助于学生或刚入行的人学习相关安全技术,也有助于安全专业人员保持实战经验。
在这些方法中,目前最简单的方式是使用容器(例如 docker 或 podman)。
只需一条命令(例如 docker run 或 docker compose up)即可运行容器,听起来很棒!
问题在于,如果只是在不知道容器是如何构建的情况下运行它,你就无法准确知道它会做什么(尤其是考虑到它是一个易受攻击的容器)。
Dockerfile 提供了这些信息。
尽管有时可以在注册表服务(如 hub.docker.com 或 quay.io)中获得 Dockerfile,或者可以从 docker history 或镜像层(IMAGE LAYERS)中推断出使用了哪些命令,但要想找出一些重要信息(例如用于构建镜像的基础镜像,如在 Dockerfile 中通过 FROM 指定的)仍然很困难。
更危险的情况是,当用户被要求使用 -v 选项运行 docker,或使用配置文件包含卷(volume)配置的 docker-compose 时。如果用户不注意,可能会出现主机上的文件被恶意用户窃取的场景。
如果用户被要求使用 --privileged 或 --user=root 运行容器,情况就会严重得多,因为攻击者有可能在容器中建立据点,进而逃逸到你的主机。
有关 Docker 安全的更多信息,请参阅 Docker Security - OWASP Cheat Sheet Series。
因此,想要学习或搭建测试环境的用户在运行易受攻击的容器镜像时必须谨慎。向用户提供 Dockerfile 和文档的访问权限将有助于(即使不能完全消除)最大限度地降低此类风险,从而让用户能够安全地学习和实践安全技术。
OWASP Vulnerable Container Hub(VULCONHUB)是一个提供以下内容的项目:
仓库中提供的文件允许用户构建易受攻击的容器镜像,从而让他们能够自由且安全地学习、玩耍、练习,并对 CVE 漏洞进行快速概念验证,或将其用于准备 CTF 挑战。
该项目的最终目标是成为首选参考,帮助任何对安全感兴趣的人分享和维护此类用于安全学习与实践的有用容器构建文件。
$ git submodule init
$ git submodule update
也可以只指定你所需的路径,以减少时间并将磁盘占用保持在最低水平。
$ git submodule init <path> [--recursive]
有关 git 子模块的更多信息,请参阅 https://git-scm.com/book/en/v2/Git-Tools-Submodules。
$ docker build . -t local/<image-name>`
$ docker run -p <hostport>:<containerport> local/<image-name>
非常欢迎任何形式的贡献!!
请创建 Pull Request 来添加新的容器构建文件。无论是添加你自己的文件还是添加子模块,我们都欢迎。
为了使 Pull Request 被合并,每个目录必须包含以下内容: