BONAN RUAN / 开源项目

CLOUD NATIVE SECURITY

Meta-(ta)rget

像安装软件一样,构建漏洞环境

把指定版本的 Docker、Kubernetes、Linux 内核与应用靶场装进同一套构建流程。Metarget 是我在绿盟科技星云实验室工作期间创建的开源项目,让云原生安全实践从环境准备开始。

工业界开源项目 · 原创环境示意 · OID Asia 2021

用配方构建多层云原生环境 左侧 YAML 场景配方连接右侧的四个环境层:容器化应用、Kubernetes、容器运行时和 Linux 内核。橙色圆点表示可设置的测试条件。 容器化应用DVWA / Web / DatabaseKUBERNETES编排与控制面CONTAINER RUNTIMEDocker / containerd / runCLINUX KERNEL宿主机与共享内核 SCENARIO.YAMLname: targetdependencies: version: ... 配方 → 组件与资源 → 可测试环境
01 / 基础设施也能成为靶场环境构建示意
工业界 · 开源

绿盟科技 / 星云实验室

YAML

可复用的场景定义

Apache 2.0

代码开放,共同积累场景

OID Asia 2021

OpenInfra Days Asia 项目演讲

测试之前,先把环境搭起来

验证一次漏洞可能很快,准备合适的系统却要反复找版本、装组件、改配置。云原生环境把这些工作分散到了多个层次。

01 / 基础设施

一个应用镜像,覆盖不了整个栈

应用可以装进镜像,宿主机运行的 Docker、Kubernetes 与共享内核仍需单独准备。Metarget 将这些层也纳入场景构建。

02 / 测试条件

漏洞版本,也有危险配置

特定组件版本、特权 Pod、敏感路径挂载都能成为测试条件。场景定义用类别和依赖表达它们,再分发给对应的安装或部署逻辑。

03 / 组合与复用

让每次准备,成为下次的配方

在准备好的基础设施上叠加应用靶场,形成多层测试环境。命名场景可以重复调用,用于漏洞复现、攻防训练与防御验证。

选一份配方,看它落在哪一层

切换内核、运行时、Kubernetes 或特权 Pod 场景,观察配方、依赖与环境层的对应关系。点击构建步骤查看说明,或点击环境层了解它的作用。

METARGET / 场景 → 依赖 → 环境配方流程示意 / 不执行安装

选择一个真实场景

CVE-2022-0847配方源码 ↗
name: cve-2022-0847
class: kernel
type: container_escape
dependencies:
  - name: kernel
    version: "5.8"

从场景目录读取 CVE-2022-0847 的 YAML。名称、类别与 dependencies 把场景转换成可解析的配方。

对应 CLI 命令 / 仅展示

./metarget cnv install cve-2022-0847

Linux 宿主机内核

容器共享宿主机内核。内核场景需要安装相应内核包,并在重启后进入目标版本。

安装前提
适配的 Ubuntu 版本;root;安装后重启

配方目标
指定内核包与启动配置

选择配方,查看构建计划继续查看源码场景 ↘

依据仓库 YAML 与安装、部署代码原创制作。浏览器只展示配方与流程,不安装组件、不执行 PoC;环境准备与漏洞触发是后续不同步骤。 cnv.py ↗ · kernel_installer.py ↗

三类入口,两条落地路径

场景名是入口,组件版本和资源清单是执行依据。版本类任务交给安装器;配置和应用交给 Kubernetes 资源部署器。

gadget

直接指定组件与版本

当你已知需要的基础组件,直接指定版本。为场景准备底座,也可以单独管理 Docker、Kubernetes 或内核。

docker --version 18.03.1组件安装器 → 宿主机
cnv

按场景定义准备基础设施

加载 vulns_cn 中的 YAML,按 class 分流。既能安装指定版本的组件,也能部署带有危险配置或挂载的 Pod。

name + class + dependencies安装器 / Pod 资源部署
appv

把应用叠加到已有集群

读取应用 desc.yaml 所列的资源,在已有集群中应用清单。服务访问方式可选,--external 会生成 NodePort 配置。

Deployment + Service资源部署器 → Kubernetes

场景定义使用 YAML SafeLoader 读取,资源部署前创建 metarget 命名空间。相关实现: vuln_loader.py ↗ · internal.py ↗

从组件漏洞,到应用与配置

选择一个场景,查看仓库实际声明的依赖与前提。这里展示 8 个精选配方,不以数量或演示动画代替现场验证。

显示 8 个精选配方 / 共 8 个示例;并非仓库完整目录

场景配方 / 源码快照

CVE-2019-5736

配方通过安装 Docker 18.03.1,准备研究 runC 容器逃逸的运行时环境。它没有把独立的 runc 包列为依赖。

class
docker/runc
依赖 / 资源
docker-ce: 18.03.1
安装前提
Ubuntu; root 权限; 可用的软件包来源
打开对应的配方文件 ↗vulns_cn/docker/cve-2019-5736.yaml

配方与代码核对于 2026-10-10,固定源码快照 3cd1d62 ↗。声明版本不等于在任意系统都能安装成功;具体场景还受发行版、软件源、镜像与重启条件影响。

让准备好的环境,服务真实的安全实践

Metarget: Auto-Construction of Vulnerable Cloud Native Infrastructure。OpenInfra Days Asia 2021 的工业界演讲介绍项目、实践案例及其防御价值。项目介绍与仓库记录设计和使用方式。

Bonan Ruan · 绿盟科技 / 星云实验室 · 工业界开源项目

实际部署会修改系统组件,需要 root 权限。请使用独立测试环境,遵循仓库中针对系统版本和隔离环境的说明。

查看多层组合的命令示例
./metarget cnv install cve-2019-5736
./metarget cnv install cve-2018-1002105
./metarget cnv install privileged-container
./metarget appv install dvwa --external

从 README 的多层场景示例选取四条命令:依次准备运行时、编排层、配置 Pod 和应用。真实部署仍需核对系统及各步骤前提;它们不自动执行漏洞利用。