Metarget/metarget

GitHub: Metarget/metarget

Metarget 是一个自动化构建脆弱云原生基础设施的框架,通过一键命令快速部署包含已知漏洞的靶机环境,解决安全研究中漏洞环境搭建耗时过长的问题。

Stars: 1408 | Forks: 202

metarget-logo

[中文](README-zh.md) | [English](README.md) ## 1 介绍 Metarget = `meta-` + `target`,这是一个提供自动构建脆弱基础设施的框架,用于快速、自动地部署简单或复杂的脆弱云原生靶机。 ### 1.1 为什么需要 Metarget? 在安全研究中,我们可能会发现部署漏洞环境往往需要花费大量时间,而测试 PoC 或 ExP 的时间相对较短。在云原生安全领域,由于云原生系统的复杂性,这个问题更为严重。 然而,现有的项目主要关注应用程序中的漏洞。如果我们需要研究像 Docker、Kubernetes 甚至是 Linux 内核这样的基础设施中的漏洞,该怎么办呢? 因此,我们开发了 Metarget,希望能在一定程度上解决上述部署问题。此外,我们还期望 Metarget 能够帮助自动构建**多层**脆弱的云原生场景。 ### 1.2 安装漏洞! 在这个项目中,我们提出了*安装漏洞*和*安装脆弱场景*的概念。为什么不把像安装软件一样安装漏洞呢?我们可以做到这一点,因为我们的目标是进行安全研究和攻防演练。 具体来说,我们期望: - `metarget cnv install cve-2019-5736` 会将包含 CVE-2019-5736 的 Docker 安装到服务器上。 - `metarget cnv install cve-2018-1002105` 会将包含 CVE-2018-1002105 的 Kubernetes 安装到服务器上。 - `metarget cnv install kata-escape-2020` 会将包含 CVE-2020-2023/2025/2026 的 Kata-containers 安装到服务器上。 - `metarget cnv install cve-2016-5195` 会将包含 DirtyCoW 漏洞的内核安装到服务器上。 这很酷,对吧?无需更多步骤。不用 RTFM(去读那该死的手册)。执行一条命令,然后去享受你的咖啡吧。 此外,我们期望: - 在 Metarget 的帮助下,白帽子能够快速部署简单或复杂的云原生靶机,并通过攻击云原生环境进行学习。 - `metarget appv install dvwa` 会将 [DVWA](https://github.com/digininja/DVWA) 靶机安装到我们的脆弱基础设施上。 - `metarget appv install thinkphp-5-0-23-rce --external` 会将带有 `NodePort` 服务的 ThinkPHP RCE 漏洞安装到我们的脆弱基础设施上。 在安装一个新的 Ubuntu 后,你只需运行以下 5 条命令,即可获得一个多层级的漏洞场景: ``` ./metarget cnv install cve-2016-5195 # container escape with dirtyCoW ./metarget cnv install cve-2019-5736 # container escape with docker ./metarget cnv install cve-2018-1002105 # kubernetes single-node cluster with cve-2018-1002105 ./metarget cnv install privileged-container # deploy a privileged container ./metarget appv install dvwa --external # deploy dvwa target ``` RCE、容器逃逸、横向移动、权限维持,现在都任你摆布了。 更多酷炫的功能即将到来!敬请期待 :) 注意: 本项目旨在为安全研究提供漏洞场景。不保证生成场景的安全性。**不**建议在互联网上使用 Metarget 部署组件或场景。 ## 2 安装说明 ### 2.1 环境要求 - Ubuntu **20.04 / 22.04 / 24.04(推荐)**,也支持 18.04 - 在某些情况下(例如新的内核漏洞),需要特定的 Ubuntu 发行版 - 你可以阅读特定漏洞的说明(由星号 (\*) 标示)以获取详细信息 - **Python >= 3.7**(不支持 Python 2.x!) - pip3 ### 2.2 从源码安装 克隆仓库并安装相关依赖: ``` git clone https://github.com/Metarget/metarget.git cd metarget/ pip3 install -r requirements.txt ``` 开始使用 Metarget 构建脆弱场景。例如: ``` ./metarget cnv install cve-2019-5736 ``` ### 2.3 从 PyPI 安装 目前不支持。 ## 3 用法说明 Metarget 需要以 **root** 用户身份运行。 在调试时建议添加 `--verbose` 选项。 ### 3.1 基本用法 ``` usage: metarget [-h] [-v] subcommand ... automatic constructions of vulnerable infrastructures positional arguments: subcommand description gadget cloud native gadgets (docker/k8s/...) management cnv cloud native vulnerabilities management appv application vulnerabilities management optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit ``` 运行 `./metarget gadget list` 查看当前支持的云原生组件。 ### 3.2 管理云原生组件 ``` usage: metarget gadget [-h] subcommand ... positional arguments: subcommand description list list supported gadgets install install gadgets remove uninstall gadgets optional arguments: -h, --help show this help message and exit ``` #### 3.2.1 案例:安装指定版本的 Docker 运行: ``` ./metarget gadget install docker --version 18.03.1 ``` 如果上述命令成功执行,将会安装 18.03.1 版本的 Docker。 #### 3.2.2 案例:安装指定版本的 Kubernetes 运行: ``` ./metarget gadget install k8s --version 1.28.4 ``` 如果上述命令成功执行,将会安装 1.28.4 版本的 Kubernetes 单节点集群。 支持的 Kubernetes 版本范围:**1.9 – 1.33**。 注意: Metarget 为 Kubernetes 的安装提供了以下选项: ``` -v VERSION, --version VERSION gadget version --runtime {auto,docker,containerd} container runtime for k8s (auto: containerd for k8s>=1.24, docker otherwise) --runtime-version RUNTIME_VERSION version of the container runtime to install alongside k8s. For --runtime containerd: containerd.io apt version (e.g. 1.6.28). For --runtime docker with k8s>=1.24: cri-dockerd version (e.g. 0.3.15). Omit to install the latest/default version. --cni-plugin CNI_PLUGIN cni plugin, flannel by default --pod-network-cidr POD_NETWORK_CIDR pod network cidr, default cidr for each plugin by default --taint-master taint master node or not --domestic use domestic (Aliyun) mirrors for k8s images ``` **容器运行时选择:** - **k8s < 1.24**:默认使用 Docker(必须通过 `metarget gadget install docker` 预先安装)。使用 `--runtime containerd` 强制使用 containerd。 - **k8s >= 1.24**:自动安装并配置 containerd 作为 CRI(默认为 `--runtime auto`)。无需手动安装 Docker。 - **k8s >= 1.24 + `--runtime docker`**:自动安装 [cri-dockerd](https://github.com/Mirantis/cri-dockerd) 作为 CRI shim(必须预先安装 Docker)。使用 `--runtime-version` 来指定特定的 cri-dockerd 版本。 示例: ``` # 使用 containerd 安装 k8s 1.28(自动选择) ./metarget gadget install k8s --version 1.28.4 # 使用特定 containerd 版本安装 k8s 1.28 ./metarget gadget install k8s --version 1.28.4 --runtime containerd --runtime-version 1.6.28 # 使用 Docker + cri-dockerd 安装 k8s 1.28(必须预装 Docker) ./metarget gadget install k8s --version 1.28.4 --runtime docker # 使用 containerd 安装 k8s 1.20(强制使用旧版本) ./metarget gadget install k8s --version 1.20.15 --runtime containerd ``` **Metarget 支持部署多节点集群。如果你想向集群中添加更多节点,可以在单节点集群成功安装后,复制 `tools/install_k8s_worker.sh` 脚本并在每个工作节点上运行它。** #### 3.2.3 案例:安装指定版本的 Kata-containers 运行: ``` ./metarget gadget install kata --version 1.10.0 ``` 如果上述命令成功执行,将会安装 1.10.0 版本的 Kata-containers。 注意: 你也可以使用 `--kata-runtime-type` 选项指定 kata 运行时的类型(qemu/clh/fc/...),默认为 `qemu`。 #### 3.2.4 案例:安装指定版本的 Linux 内核 运行: ``` ./metarget gadget install kernel --version 5.7.5 ``` 如果上述命令成功执行,将会安装 5.7.5 版本的内核。 注意: 目前,Metarget 通过以下 2 种方式安装内核: 1. apt 2. 如果 apt 包不可用,则从 Ubuntu 远程下载 \*.deb 并尝试安装 内核成功安装后,需要重启系统。Metarget 会自动提示重启。 #### 3.2.5 案例:安装指定版本的 containerd/runc 运行: ``` ./metarget gadget install containerd --version 1.7.14 ``` 如果上述命令成功执行,将会安装 1.7.14 版本的 containerd,并自动将其配置为 Kubernetes CRI 运行时(`SystemdCgroup = true`),以便与 `metarget gadget install k8s` 配合使用。 运行: ``` ./metarget gadget install runc --version 1.1.6 ``` 如果上述命令成功执行,将会安装 1.1.6 版本的 runc。 ### 3.3 管理与云原生组件相关的漏洞场景 ``` usage: metarget cnv [-h] subcommand ... positional arguments: subcommand description list list supported cloud native vulnerabilities install install cloud native vulnerabilities remove uninstall cloud native vulnerabilities optional arguments: -h, --help show this help message and exit ``` 运行 `./metarget cnv list` 查看当前支持的与云原生组件相关的漏洞场景。 #### 3.3.1 案例:CVE-2019-5736 运行: ``` ./metarget cnv install cve-2019-5736 ``` 如果上述命令成功执行,将会安装包含 CVE-2019-5736 漏洞的 Docker。 #### 3.3.2 案例:CVE-2018-1002105 运行: ``` ./metarget cnv install cve-2018-1002105 ``` 如果上述命令成功执行,将会安装包含 CVE-2018-1002105 漏洞的 Kubernetes。 #### 3.3.3 案例:Kata-containers 逃逸 运行: ``` ./metarget cnv install kata-escape-2020 ``` 如果上述命令成功执行,将会安装包含 CVE-2020-2023/2025/2026 漏洞的 Kata-containers。 #### 3.3.4 案例:CVE-2016-5195 运行: ``` ./metarget cnv install cve-2016-5195 ``` 如果上述命令成功执行,将会安装包含 CVE-2016-5195 漏洞的内核。 ### 3.4 管理与云原生应用相关的漏洞场景 ``` usage: metarget appv [-h] subcommand ... positional arguments: subcommand description list list supported application vulnerabilities install install application vulnerabilities remove uninstall application vulnerabilities optional arguments: -h, --help show this help message and exit ``` 运行 `./metarget appv list` 查看当前支持的与云原生应用相关的漏洞场景。 注意: 在部署应用漏洞场景之前,你应该先安装 Docker 和 Kubernetes。你可以使用 Metarget 来安装 Docker 和 Kubernetes。 #### 3.4.1 案例:DVWA 运行: ``` ./metarget appv install dvwa ``` 如果上述命令成功执行,[DVWA](https://github.com/digininja/DVWA) 将作为 *Deployment* 和 *Service* 资源部署到当前的 Kubernetes 中。 注意: - 你可以指定 `--external` 选项,这样服务将作为 `NodePort` 暴露,你可以通过宿主节点的 IP 访问它(默认情况下,服务的类型为 `ClusterIP`)。 - 你可以指定 `--host-net` 选项,这样 appv 将共享宿主机网络命名空间。 - 你可以指定 `--host-pid` 选项,这样 appv 将共享宿主机 pid 命名空间。 ### 3.5 漏洞环境镜像 根据用户的网络环境、Ubuntu 版本和 Docker 版本,通过自动化脚本一键安装漏洞环境偶尔仍会失败,因此我们首次提供了漏洞环境镜像。 运行以下命令构建目标漏洞环境镜像: ``` sudo docker build -t vuln-docker-24.0.7 -f vuln-docker-24.0.7 . ``` 运行以下命令运行目标漏洞环境镜像: ``` docker run vuln-XXX ``` ### 3.6 管理脆弱云原生靶机集群 正在开发中,目前不支持。 ## 4 场景列表 ### 4.1 与云原生组件相关的漏洞场景 如果某个漏洞场景名称后面带有星号 (\*),你需要阅读整个表格下方的相关说明以获取更多详细信息。 |名称|类别|类型|CVSS 3.x|Writeup|ATT&CK 映射| |:-:|:-:|:-:|:-:|:-:|:-:| |[cve-2018-15664](vulns_cn/docker/cve-2018-15664.yaml)|docker|container_escape|[7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-15664)||权限提升/逃逸到宿主机
权限维持/逃逸到宿主机
横向移动/逃逸到宿主机
防御绕过/在宿主机上构建镜像| |[cve-2019-13139](vulns_cn/docker/cve-2019-13139.yaml)|docker|command_execution|[8.4](https://nvd.nist.gov/vuln/detail/CVE-2019-13139)|[链接](writeups_cnv/docker-cve-2019-13139)| |[cve-2019-14271](vulns_cn/docker/cve-2019-14271.yaml)|docker|container_escape|[9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-14271)|[链接](writeups_cnv/docker-cve-2019-14271)| |[cve-2020-15257](vulns_cn/docker/cve-2020-15257.yaml)|docker/containerd|container_escape|[5.2](https://nvd.nist.gov/vuln/detail/CVE-2020-15257)|[链接](writeups_cnv/docker-containerd-cve-2020-15257)| |[cve-2019-5736](vulns_cn/docker/cve-2019-5736.yaml)|docker/runc|container_escape|[8.6](https://nvd.nist.gov/vuln/detail/CVE-2019-5736)|| |[cve-2019-16884](vulns_cn/docker/cve-2019-16884.yaml)|docker/runc|container_escape|[7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-16884)|| |[cve-2021-30465\*](vulns_cn/docker/cve-2021-30465.yaml)|docker/runc|container_escape|[7.6](https://nvd.nist.gov/vuln/detail/CVE-2021-30465)|[链接](writeups_cnv/docker-runc-cve-2021-30465)| |[cve-2024-21626](vulns_cn/docker/cve-2024-21626.yaml)|docker/runc|container_escape|[8.6](https://nvd.nist.gov/vuln/detail/CVE-2024-21626)|| |[cve-2017-1002101](vulns_cn/kubernetes/cve-2017-1002101.yaml)|k8s|container_escape|[9.6](https://nvd.nist.gov/vuln/detail/CVE-2017-1002101)|[链接](https://github.com/brant-ruan/cloud-native-security-book/blob/main/appendix/CVE-2017-1002101:突破隔离访问宿主机文件系统.pdf)| |[cve-2018-1002105](vulns_cn/kubernetes/cve-2018-1002105.yaml)|k8s|privilege_escalation|[9.8](https://nvd.nist.gov/vuln/detail/CVE-2018-1002105)|| |[cve-2018-1002100](vulns_cn/kubernetes/cve-2018-1002100.yaml)|k8s/kubectl|container_escape|[5.5](https://nvd.nist.gov/vuln/detail/CVE-2018-1002100)|| |[cve-2019-1002101](vulns_cn/kubernetes/cve-2019-1002101.yaml)|k8s/kubectl|container_escape|[5.5](https://nvd.nist.gov/vuln/detail/CVE-2019-1002101)|| |[cve-2019-11246](vulns_cn/kubernetes/cve-2019-11246.yaml)|k8s/kubectl|container_escape|[6.5](https://nvd.nist.gov/vuln/detail/CVE-2019-11246)|| |[cve-2019-11249](vulns_cn/kubernetes/cve-2019-11249.yaml)|k8s/kubectl|container_escape|[6.5](https://nvd.nist.gov/vuln/detail/CVE-2019-11249)|| |[cve-2019-11251](vulns_cn/kubernetes/cve-2019-11251.yaml)|k8s/kubectl|container_escape|[5.7](https://nvd.nist.gov/vuln/detail/CVE-2019-11251)|| |[cve-2019-11253](vulns_cn/kubernetes/cve-2019-11253.yaml)|k8s|denial_of_service|[7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-11253)|| |[cve-2019-9512](vulns_cn/kubernetes/cve-2019-9512.yaml)|k8s|denial_of_service|[7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9512)|| |[cve-2019-9514](vulns_cn/kubernetes/cve-2019-9514.yaml)|k8s|denial_of_service|[7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9514)|| |[cve-2019-9946](vulns_cn/kubernetes/cve-2019-9946.yaml)|k8s|traffic_interception|[7.](https://nvd.nist.gov/vuln/detail/CVE-2019-9946)|| |[cve-2020-8554](vulns_cn/kubernetes/cve-2020-8554.yaml)|k8s|man_in_the_middle|[5.0](https://nvd.nist.gov/vuln/detail/CVE-2020-8554)|| |[cve-2020-10749](vulns_cn/kubernetes/cve-2020-10749.yaml)|k8s/kubernetes-cni|man_in_the_middle|[6.0](https://nvd.nist.gov/vuln/detail/CVE-2020-10749)|| |[cve-2020-8555](vulns_cn/kubernetes/cve-2020-8555.yaml)|k8s|server_side_request_forgery|[6.3](https://nvd.nist.gov/vuln/detail/CVE-2020-8555)|| |[cve-2020-8557](vulns_cn/kubernetes/cve-2020-8557.yaml)|k8s|denial_of_service|[5.5](https://nvd.nist.gov/vuln/detail/CVE-2020-8557)|| |[cve-2020-8558](vulns_cn/kubernetes/cve-2020-8558.yaml)|k8s|exposure_of_service|[8.8](https://nvd.nist.gov/vuln/detail/CVE-2020-8558)|| |[cve-2020-8559](vulns_cn/kubernetes/cve-2020-8559.yaml)|k8s|privilege_escalation|[6.8](https://nvd.nist.gov/vuln/detail/CVE-2020-8559)|| |[cve-2021-25741](vulns_cn/kubernetes/cve-2021-25741.yaml)|k8s|container_escape|[8.1](https://nvd.nist.gov/vuln/detail/CVE-2021-25741)|| |[cve-2022-0811](vulns_cn/kubernetes/cve-2022-0811.yaml)|k8s|container_escape|[8.8](https://nvd.nist.gov/vuln/detail/CVE-2022-0811)|[链接](writeups_cnv/kubernetes-cve-2022-0811)| |[cve-2016-5195](vulns_cn/kernel/cve-2016-5195.yaml)|kernel|container_escape|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2016-5195)|| |[cve-2016-8655](vulns_cn/kernel/cve-2016-8655.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2016-8655)|| |[cve-2017-6074](vulns_cn/kernel/cve-2017-6074.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2017-6074)|| |[cve-2017-7308](vulns_cn/kernel/cve-2017-7308.yaml)|kernel|container_escape|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2017-7308)|[链接](writeups_cnv/kernel-cve-2017-7308)| |[cve-2017-16995](vulns_cn/kernel/cve-2017-16995.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2017-16995)|| |[cve-2017-1000112](vulns_cn/kernel/cve-2017-1000112.yaml)|kernel|container_escape|[7.0](https://nvd.nist.gov/vuln/detail/CVE-2017-1000112)|[链接](writeups_cnv/kernel-cve-2017-1000112)| |[cve-2018-18955](vulns_cn/kernel/cve-2018-18955.yaml)|kernel|privilege_escalation|[7.0](https://nvd.nist.gov/vuln/detail/CVE-2018-18955)|| |[cve-2020-14386](vulns_cn/kernel/cve-2020-14386.yaml)|kernel|container_escape|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2020-14386)|| |[cve-2021-3493](vulns_cn/kernel/cve-2021-3493.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2021-3493)|[链接](writeups_cnv/kernel-cve-2021-3493)| |[cve-2021-4204](vulns_cn/kernel/cve-2021-4204.yaml)|kernel|privilege_escalation|[-](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-4204)|| |[cve-2021-22555](vulns_cn/kernel/cve-2021-22555.yaml)|kernel|container_escape|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2021-22555)|| |[cve-2022-0185](vulns_cn/kernel/cve-2022-0185.yaml)|kernel|container_escape|[8.4](https://nvd.nist.gov/vuln/detail/CVE-2022-0185)|| |[cve-2022-0492](vulns_cn/kernel/cve-2022-0492.yaml)|kernel|container_escape|[7.8](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0492)|[链接](writeups_cnv/kernel-cve-2022-0492)| |[cve-2022-0847](vulns_cn/kernel/cve-2022-0847.yaml)|kernel|container_escape|[7.8](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0847)|[链接](writeups_cnv/kernel-cve-2022-0847)| |[cve-2022-0995\*](vulns_cn/kernel/cve-2022-0995.yaml)|kernel|privilege_escalation|[7.1](https://nvd.nist.gov/vuln/detail/CVE-2022-0995)||[链接](writeups_cnv/kernel-cve-2022-0995) |[cve-2022-25636\*](vulns_cn/kernel/cve-2022-25636.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2022-25636)|| |[cve-2022-23222](vulns_cn/kernel/cve-2022-23222.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2022-23222)|| |[cve-2022-27666\*](vulns_cn/kernel/cve-2022-27666.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2022-27666)|| |[cve-2023-3269\*](vulns_cn/kernel/cve-2023-3269.yaml)|kernel|privilege_escalation|[7.8](https://nvd.nist.gov/vuln/detail/CVE-2023-3269)|| |[kata-escape-2020](vulns_cn/kata-containers/kata-escape-2020.yaml)|kata-containers|container_escape|[6.3](https://nvd.nist.gov/vuln/detail/CVE-2020-2023)/[8.8](https://nvd.nist.gov/vuln/detail/CVE-2020-2025)/[8.8](https://nvd.nist.gov/vuln/detail/CVE-2020-2026)|| |[cve-2020-27151](vulns_cn/kata-containers/cve-2020-27151.yaml)|kata-containers|container_escape|[8.8](https://nvd.nist.gov/vuln/detail/CVE-2020-27151)|| |[cap_dac_read_search-container](vulns_cn/configs/cap_dac_read_search-container.yaml)|config|container_escape|-|[链接](writeups_cnv/config-cap_dac_read_search-container)| |[cap_sys_admin-container](vulns_cn/configs/cap_sys_admin-container.yaml)|config|container_escape|-|| |[cap_sys_ptrace-container](vulns_cn/configs/cap_sys_ptrace-container.yaml)|config|container_escape|-|| |[cap_sys_module-container](vulns_cn/configs/cap_sys_module-container.yaml)|config|container_escape|-|[链接](writeups_cnv/config-cap_sys_module-container)| |[privileged-container](vulns_cn/configs/privileged-container.yaml)|config|container_escape|-|[链接](writeups_cnv/config-privileged-container)| |[k8s_backdoor_daemonset](vulns_cn/configs/k8s_backdoor_daemonset.yaml)|config|persistence|-|[链接](writeups_cnv/config-k8s-backdoor-daemonset)| |[k8s_backdoor_cronjob](vulns_cn/configs/k8s_backdoor_cronjob.yaml)|config|persistence|-|[链接](writeups_cnv/config-k8s-backdoor-cronjob)| |[k8s_shadow_apiserver](vulns_cn/configs/k8s_shadow_apiserver.yaml)|config|persistence|-|[链接](writeups_cnv/config-k8s-shadow_apiserver)| |[k8s_node_proxy](vulns_cn/configs/k8s_node_proxy.yaml)|config|privilege_escalation|-|[链接](writeups_cnv/config-k8s-node-proxy)| |[mount-docker-sock](vulns_cn/mounts/mount-docker-sock.yaml)|mount|container_escape|-|[链接](writeups_cnv/mount-docker-sock)| |[mount-host-etc](vulns_cn/mounts/mount-host-etc.yaml)|mount|container_escape|-|| |[mount-host-procfs](vulns_cn/mounts/mount-host-procfs.yaml)|mount|container_escape|-|[链接](writeups_cnv/mount-host-procfs)| |[mount-var-log](vulns_cn/mounts/mount-var-log.yaml)|mount|container_escape|-|[链接](writeups_cnv/mount-var-log)| 注意: - 目前 writeup 为中文。 - 在调试时建议添加 `--verbose` 选项。 - 你可能会发现一些内核漏洞被标记为 `privilege_escalation`,而另一些则是 `container_escape`。本质的区别在于 payload(直接获取高权限 shell 还是先进行逃逸)。 - 由于容器中默认的安全机制(例如 Seccomp、Capabilities),某些内核漏洞可能很难或几乎无法利用。 - 因此,如果我们能用 Metarget 复现整个过程,则漏洞被标记为 `container_escape`,其他则暂时标记为 `privilege_escalation`。 - 对于 **cve-2021-30465**,在执行 `cnv install cve-2021-30465`(用于安装 Docker)之后, - 为了进行漏洞利用,你最好手动安装一个 K8s(例如使用 Metarget 运行 `cnv install cve-2018-1002105` 或 `gadget install k8s --version 1.16.5`)。 - 对于以下内核漏洞,运行 Metarget 需要 Ubuntu 21.10(已测试): - cve-2022-0995 - cve-2022-25636 - cve-2022-27666 ### 4.2 与云原生应用相关的漏洞场景 这些场景主要源自其他开源项目: - [Vulhub](https://github.com/vulhub/vulhub) - [DVWA](https://github.com/digininja/DVWA) 我们对上述项目表示诚挚的感谢! Metarget 将上述项目中的场景转换为 Kubernetes 中的 *Deployments* 和 *Services* 资源(感谢 [kompose](https://github.com/kubernetes/kompose))。 要列出 Metarget 支持的与云原生应用相关的漏洞场景,只需运行: ``` ./metarget appv list ``` 注意: - 关于 [Confluence 漏洞 CVE-2019-3396](vulns_app/confluence/CVE-2019-3396) 的部署,你可以参考 [Vulhub](https://github.com/vulhub/vulhub/blob/master/confluence/CVE-2019-3396/README.zh-cn.md),但 PostgreSQL 的地址应为 `cve-2019-3396-db`,而不是 Vulhub 中的 `db`。 ## 5 演示 [![asciicast](https://asciinema.org/a/407107.svg)](https://asciinema.org/a/407107) ## 6 开发计划 - [x] 基础云原生组件的部署(docker、k8s) - [x] 与云原生组件相关的漏洞场景集成 - [x] 容器内 RCE 场景的集成 - [x] 云原生漏洞镜像 - [x] 多节点云原生靶机集群的自动化构建 - [ ] 复杂云原生应用漏洞场景的集成 - 其他云原生漏洞场景的集成(长期计划) ## 7 维护者 - [@brant-ruan](https://github.com/brant-ruan) - [@ListenerMoya](https://github.com/ListenerMoya) - [@Lvzhizheng](https://github.com/Lvzhizheng) ## 8 贡献 Metarget 的目标之一是在发生漏洞时促进更快速地构建漏洞环境。同时,它也可以用来随时构建所有已集成的漏洞场景。 为了保持 Metarget 的时效性,我们将持续维护漏洞场景列表(包括 `cnv` 和 `appv`)。 Metarget 使用 *YAML* 来描述和集成漏洞场景。目前支持两层场景:`cnv`(位于 `vulns_cn/` 中)和 `appv`(位于 `vulns_app/` 中)。 目前,你可以通过两种方式为 Metarget 做出贡献: 1. 提交新云原生组件漏洞的 YAML 文件。 2. 提交新云原生应用漏洞的 YAML 文件。 ## 9 合作(通过 lvzhizheng@nsfocus.com 联系我们) 我们热忱欢迎与大学、科研机构和其他学术实体进行合作!Metarget 致力于成为云原生安全领域前沿研究的理想实验平台。我们相信,云原生安全将成为未来网络安全的前沿课题,而 Metarget 为此提供了理想的研究环境。 通过我们强大且灵活的框架,你可以深入研究云原生环境的安全挑战,发现和探索创新的解决方案,并将你的专业知识和发现贡献给整个行业的发展。 1. **多样化的实验场景:** 利用 Metarget 轻松构建各种脆弱的云原生靶机环境,涵盖从简单到复杂的各种实验场景,例如云原生电商平台和云原生在线课程系统。 2. **云原生漏洞镜像:** 无需任何脚本辅助,即可直接获取漏洞环境。 3. **支持多版本的 Kernel、Kubernetes 及其他云原生组件:** Metarget 不断更新以支持最新版本的组件,确保你在实验中能够使用最新技术。 4. **Ubuntu 版本定制:** 我们将根据你的实验需求量身定制 Ubuntu 版本,为你提供更加灵活的实验环境配置。 5. **多节点云原生集群的自动化生成:** Metarget 提供自动创建多节点云原生靶机集群的功能,增强了你研究的真实性和深度。 6. ... ## 10 关于 Logo 它不是 Kubernetes,而是一个带有三个无法正常运转的齿轮(脆弱)的基础设施 :) ## 10 开源许可 Metarget 采用 Apache License 2.0 进行授权。有关完整的许可证文本,请参阅 [LICENSE](LICENSE)。 ## 11 活动 ### KCon 2021 Arsenal - URL: http://kcon.knownsec.com/2021/#/arsenal ### OpenInfra Days Asia 2021 - 主题:Metarget:脆弱云原生基础设施的自动化构建 - 视频:https://www.youtube.com/watch?v=43UvCHjn8wA - PPT:[OID-Asia-2021-Metarget.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/OID-Asia-2021-Metarget.pdf) ### OpenInfra Days China 2021 - 主题:Metarget:构建云原生基础设施靶场 - PPT:[OID-China-2021-Metarget.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/OID-China-2021-Metarget.pdf) ### CCF BDTC 2021 - 主题:构建云原生基础设施靶场 ### 论文引用 (IEEE TPS-ISA 2021) - 论文:Security Challenges in the Container Cloud - PDF:[TPS21.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/TPS21.pdf) ### CSDN 云原生安全技术峰会 2022 - 主题:攻方视角:从开源靶场看云原生安全 -PT:[CSDN云原生安全技术峰会-2022-攻方视角:从开源靶场看云原生安全.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/CSDN%E4%BA%91%E5%8E%9F%E7%94%9F%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF%E5%B3%B0%E4%BC%9A-2022-%E6%94%BB%E6%96%B9%E8%A7%86%E8%A7%92%EF%BC%9A%E4%BB%8E%E5%BC%80%E6%BA%90%E9%9D%B6%E5%9C%BA%E7%9C%8B%E4%BA%91%E5%8E%9F%E7%94%9F%E5%AE%89%E5%85%A8.pdf) ### 论文引用 (IC2E 2022) - 论文:PACED: Provenance-based Automated Container Escape Detection - PDF:[IC2E-2022.PACED.pdf](http://www.csl.sri.com/users/gehani/papers/IC2E-2022.PACED.pdf) ### CIS 2022 - 主题:Metarget:云原生安全研究与自动化 - URL:https://cis.freebuf.com ### Metarget 加入 CNCF Landscape - URL:https://landscape.cncf.io/?selected=metarget ### KCD 上海 2024
标签:子域名突变, 安全渗透, 请求拦截, 逆向工具