首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Metarget:云原生攻防靶场开源啦!

Metarget:云原生攻防靶场开源啦!

作者头像
绿盟科技研究通讯
发布2021-06-10 00:58:33
1.7K0
发布2021-06-10 00:58:33
举报

一、项目缘起

搭环境一时爽,一直搭环境一直爽。

对于研究人员和攻防实战人员来说,免不了在漏洞曝出后搭环境测试;对于安全开发同学来说,免不了在脆弱环境内一边运行防御检测系统,一边运行PoC或ExP,测试功能有效性。

然而,由于各种各样的原因(相关文档缺乏、背景知识不足、网络环境差等),我们经常会发现“环境搭建”这个步骤本身就会占用大量的时间。与之相比,真正测试PoC、ExP的时间可能非常短。由于许多官方镜像在国内的网络环境下并不方便获得,加上云原生组件自身的复杂性,在云原生安全领域,前述问题尤为明显。

与此同时,我们也能看到,开源社区涌现出一些优秀的安全项目,如Vulhub、VulApps等,将漏洞场景打包成镜像,方便研究人员开箱即用。

这些项目主要针对应用程序漏洞。那么,如果我们需要研究的是Docker、Kubernetes、操作系统内核等底层基础设施自身的漏洞呢?这又回到了前面的环境搭建问题。

单就Kubernetes来讲,即使有了kubeadm等工具,对于不太熟悉的朋友们来说,安装部署也不是一件容易的事——整个过程可能涉及多次失败后重新开始、修改系统配置、预先拉取镜像等不那么令人愉悦的事情。对于安全研究来说,ROI就更低了——这一次为了研究漏洞A,部署了版本为m的某基础设施组件X,下一次为了研究漏洞B,又需要走同样一个流程,去部署版本为n的组件X。

万籁俱寂,漫长的等待。

有没有可能,只执行一行命令,就能部署一个底层基础设施的脆弱(漏洞)场景?

有没有可能,只执行几行命令,就能部署一个包含多层次脆弱(漏洞)场景的靶场?

有没有可能,像Metasploit一样,把每一个漏洞都收集起来,需要时即部即用?

不要讲那么多,不要RTFM,我只想一键搞定环境泡杯咖啡,然后开始安全研究。

基于以上诉求,我们开发并开源了Metarget项目,希望为云原生安全领域“搭环境”问题给出一个“部分通解”。

Metarget的名称来源于meta-(元)加target(目标,靶机),是一个脆弱基础设施自动化构建框架,主要用于快速、自动化搭建从简单到复杂的脆弱云原生靶机环境。

项目地址:https://github.com/brant-ruan/metarget,欢迎各位看官一键三连(watch/star/fork),如果能contribute就更棒了!

二、设计理念

Metarget项目的预期目标很清晰,也很好理解:

1. 实现云原生组件脆弱场景的自动化构建(特定环境)。

2. 在1的基础上,对接容器化应用脆弱场景,实现云原生多层次脆弱场景的自动化构建(靶机)。

3. 在1、2的基础上,实现多节点+多层次脆弱云原生集群的自动化构建(靶场)。

其中,目标1主要面向安全研究人员,方便进行漏洞学习、调试,特定PoC、ExP的编写和测试;目标2和3主要面向想要磨练云原生安全攻防实战技能的红蓝对抗、渗透测试人员。

除此之外,云原生安全产品开发的同学也可以借助Metarget项目部署脆弱环境,测试防御系统的威胁检测能力和响应能力。

请注意,虽然在英文中,脆弱性和漏洞是同一个词(Vulnerability),但是结合安全领域的实际情况来看,有的脆弱场景被分配了CVE编号;有的虽然没有CVE编号,但是分配了厂商自己的编号;有的脆弱场景却由于各种原因并没有统一的命名。这些情况都很常见。Metarget不仅关注狭义上的漏洞,而是希望在适用场景范围内,实现对上述各种情况的脆弱场景的自动化构建。

接下来,我们会谈一谈Metarget项目的两个核心理念,然后向大家介绍Metarget的基本使用方法和目前支持的脆弱场景。

1“安装漏洞”

在Metarget项目中,我们提出“安装漏洞”、“安装脆弱场景”的概念。漏洞为什么不能像软件一样直接安装呢?程序为实,漏洞为虚;软件为满,漏洞为缺。那么只需换一种视角,视虚为实,以缺为满,我们完全可以像安装软件一样安装漏洞——以安全研究、攻防实战为目的。

具体来说,我们希望执行类似metarget cnv install cve-2019-5736的命令,直接将带有CVE-2019-5736漏洞的Docker安装在服务器上。

有安装,就有卸载。举例来说,我们希望通过执行类似metarget cnv remove cve-2019-5736的命令将漏洞组件从系统移除。

2复杂漏洞场景

仅仅做单个脆弱场景的自动化构建,像滚雪球一样,随着云原生技术的发展、安全研究的推进,不断收集脆弱场景,亦无不可。然而,Metarget还应该能做的更多,尤其是在云原生技术的加持下,我们希望它能够实现多节点、多层次的复杂脆弱场景构建。

如下图所示,从攻击者的视角来看,边界突破、扩大战果、访问持久化,每一个步骤都涉及许多不同的技术手段、漏洞利用手法。如果能够以云原生集群为依托,将这些技艺的应用场景组合起来,就能够呈现更有意思的攻防场景,磨练出更加强大的攻防本领。攻防相砺,故从防守者视角来看也是如此。

也正是从这一点(基于云原生技术制作复杂场景)出发,我们将Metarget定位在云原生攻防靶场。这是它的独特意义所在。

三、使用示例

前面讲了这么多需求和理念,现在来谈谈实践。目前,单节点的多层次脆弱场景构建已经基本实现,多节点脆弱集群的构建还在开发过程中。因此,我们仅对已经实现的单节点多层次脆弱场景构建进行介绍。

由于Metarget的操作对象均为底层基础设施,请您注意以下三点:

1. 请勿在重要机器和生产环境使用。

2. 在使用前,请对当前环境的重要信息做好备份。

3. 如果执行失败,可添加--verbose选项并再次执行,查看是哪里出错,欢迎提交issue。底层环境部署复杂度较高,部署失败是难免的,希望能够得到您的支持,一起改进Metarget!

Metarget目前仅支持在Ubuntu 16.04和18.04安装运行,在20.04上可能会遇到依赖项问题。安装步骤十分简单:

git clone https://github.com/brant-ruan/metarget.git
cd metarget/
pip install -r requirements.txt

安装完成后,即可开始使用。正如前文反复强调的,我们希望将底层复杂性封装起来,为研究人员提供一个简洁的交互接口。因此,我们假设这样一个情形——为了进行安全研究,您刚刚装好一台新的Ubuntu 18.04。接下来,Metarget就可以接管操作了:

执行以下命令,为系统安装带有CVE-2019-5736容器逃逸漏洞的Docker:

./metarget cnv install cve-2019-5736

接着执行以下命令,为系统安装带有CVE-2018-1002105权限提升漏洞的Kubernetes:

./metarget cnv install cve-2018-1002105 --domestic

集群部署成功后,最后执行以下命令,在当前集群上部署一个容器化DVWA:

./metarget appv install dvwa --external

整个交互过程如下:

root@metarget-test:/home/nsfocus/metarget# ./metarget cnv install cve-2019-5736
cve-2019-5736 is going to be installed
uninstalling current docker if applicable
installing prerequisites
adding apt repository deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
installing docker-ce with 18.03.1~ce~3-0~ubuntu version
cve-2019-5736 successfully installed

root@metarget-test:/home/nsfocus/metarget# ./metarget cnv install cve-2018-1002105 --domestic
docker already installed
cve-2018-1002105 is going to be installed
uninstalling current kubernetes if applicable
pre-configuring
pre-installing
adding apt repository deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
installing kubernetes-cni with 0.7.5-00 version
installing kubectl with 1.11.10-00 version
installing kubelet with 1.11.10-00 version
installing kubeadm with 1.11.10-00 version
pulling registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.11.1
pulling registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.11.1
pulling registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.11.1
pulling registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.11.1
pulling registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
pulling registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.2.18
pulling registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.1.3
running kubeadm
installing cni plugin
installing flannel
pulling quay.mirrors.ustc.edu.cn/coreos/flannel:v0.10.0-amd64
generating kubernetes worker script
kubernetes worker script generated at tools/install_k8s_worker.sh
cve-2018-1002105 successfully installed

root@metarget-test:/home/nsfocus/metarget# ./metarget appv install dvwa --external
docker already installed
kubernetes already installed
dvwa is going to be installed
node port 30000 is allocated for service in vulns_app/dvwa/dvwa//dvwa-service.yaml
applying yamls/k8s_metarget_namespace.yaml
applying vulns_app/dvwa/dvwa//dvwa-deployment.yaml
applying data//dvwa-service.yaml
dvwa successfully installed

根据命令行输出的内容,我们可以直接在浏览器中访问到容器内的DVWA服务:

可以看到,只需要三行命令,我们就完成了一个多层次靶机环境的构建。

环境的清理也十分简单,只需依次执行以下命令即可:

./metarget appv remove dvwa
./metarget cnv remove cve-2018-1002105
./metarget cnv remove cve-2019-5736

这里不再展开描述针对脆弱场景的渗透过程,感兴趣的朋友可以参考「绿盟科技研究通讯」之前发布的一篇文章:k0otkit: Hack K8s in a K8s Way

除此之外,Metarget还支持许多其他场景。更多玩法,欢迎大家一起来探索。

四、场景支持

Metarget目前支持两类脆弱场景的自动化构建:

1. 云原生组件脆弱场景:由云原生基础设施各个组件的安全问题构成的脆弱场景。

2. 云原生应用脆弱场景:由容器化脆弱应用构成的脆弱场景。

1云原生组件脆弱场景

云原生组件脆弱场景的自动化构建是Metarget的核心功能,也是这个项目的缘起。与CNCF基金会中的云原生项目不太一样的是,我们这里提到的“云原生组件”,指的是所有参与到云原生生态基础设施构成的组件,举例来说——也包括Linux内核。

目前,Metarget支持四个组件相关脆弱场景的自动化构建:Docker、Kubernetes、Linux内核和Kata-containers。前三者是容器和云原生的起源和基石。未来,Metarget将陆续覆盖其他云原生组件相关的脆弱场景,如Istio、Kong等。

以下是云原生组件层次主要的脆弱场景列表:

欲了解最新的场景支持情况,请关注Metarget项目仓库。

2云原生应用脆弱场景

开源社区已经有不少优秀的安全项目,如Vulhub、VulApps等,将漏洞场景打包成镜像;也有诸如DVWA等成熟的脆弱Web应用。Metarget通过将上述脆弱应用转变成Kubernetes中Deployment资源的方式,集成安全社区优质资源,构成复杂脆弱场景,供大家进行实践。

真诚感谢以上开源项目为安全社区做出的贡献!

可执行以下命令查看Metarget支持构建的应用脆弱场景:

./metarget appv list

五、开发计划

如前所述,Metarget目前已经基本完成单节点多层次脆弱场景的自动化构建(前文预期目标2)。项目未来主要有三个开发方向:

1. 实现多节点+多层次脆弱云原生集群的自动化构建(靶场)。

2. 继续实现其他云原生组件相关的脆弱场景(长期更新)。

3. 继续集成其他容器化应用相关的脆弱场景(长期更新)。

欢迎感兴趣的同学加入进来,一起构建“漏洞基础设施”!

六、关于Logo

Metarget logo的灵感来源于Kubernetes的logo,我们将Kubernetes的舵作为齿轮,三个齿轮组成一个正在运转的基础设施系统。然而,如果仔细观察,会发现齿轮的方向是矛盾的,系统无法正常运转(vulnerable)。

关于星云实验室

星云实验室专注于云计算安全、解决方案研究与虚拟化网络安全问题研究。基于IaaS环境的安全防护,利用SDN/NFV等新技术和新理念,提出了软件定义安全的云安全防护体系。承担并完成多个国家、省、市以及行业重点单位创新研究课题,已成功孵化落地绿盟科技云安全解决方案。

内容编辑:星云实验室 阮博男 责任编辑:王星凯

本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

关于我们

绿盟科技研究通讯由绿盟科技创新中心负责运营,绿盟科技创新中心是绿盟科技的前沿技术研究部门。包括云安全实验室、安全大数据分析实验室和物联网安全实验室。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。

绿盟科技创新中心作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。

我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 绿盟科技研究通讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档