Vulfocus 竞赛背后的技术
1.比赛概况
近年来,国内外网络安全形势日益严峻,各种网络攻击事件频频发生,加强网络安全行业建设已是迫在眉睫。网络安全行业的发展必然离不开大批的网络安全人才,网络靶场作为网络安全的知识学习中心和技能实践中心,为网络安全人才的培养提供了规范化,体系化的流程。Vulfocus 正是众多网络安全靶场中的一款优秀产品。
传统的网络安全知识的学习多是基于自我探索的一种方式,缺乏对所学知识的检验和应用,为了提供一次对自我网络安全知识检验的机会和聚集更多网络安全人才,我们于 2021 年 12 月 25 日举办了首届 Vulfocus 靶场挑战赛,本次比赛报名队伍有 402 支队伍,最终参与比赛并且拿到分数的队伍共有 236 支,最高在线人数为 286 人。总计启动漏洞环境 6225 个,最大并发数 450,总计调用 13 台服务器用于比赛环境的支撑。
报名队伍 | 最高在线人数 | 启动环境数 | 并发容器数 | 服务器数量 |
---|---|---|---|---|
402 | 286 | 6225 | 450 | 13 |
2.系统设计
考虑到漏洞环境的启动需要消耗服务器的内存和 CPU 资源,同时为了扩展系统的 服务能力和避免单点故障,此次比赛环境采用了分布式的系统架构,本次比赛总共采用 了 13 台服务器,统一配置为 32GB 内存,16 核 CPU 和 10Mbps/s 带宽,内存超配比为 1.8。同时为了保证服务的可用性,系统的 Redis,Mysql 等关键性服务我们都放置在主节点,同时主节点只提供对外的 Web 服务,同时作为调度环境启动的控制中心。从节点作为真正的环境工作节点,其接收主节点的调度并负责运行漏洞环境。其架构如图所示。
3.技术方案
(1)漏洞环境添加
在系统运行过程中倘若现有 Worker 节点不满足工作需求,需要动态地加入节点。而节点的加入需要保持各机器的 docker 镜像的同步,即新加入的 Worker 节点必须同步地下载其他 Worker 节点上的 docker 镜像,由于官方的 Docker Hub 在国外,拉取镜像速率较慢,不满足系统的工作需求,为此我们在 Worker 工作集群所在局域网内搭建了一个 Docker Registry,所有的漏洞环境的上传和下载都是在自建的 Docker Registry 上进行。
为了保证系统的平稳运行和漏洞启动的负载调度,我们设计了一种基于内存的资源调度算法。我们在数据库中保存各个 Worker 节点的配置信息,例如内存大小,CPU 个数,内存和 CPU 最大使用比例。同时我们根据每个镜像漏洞环境的类型以及大小给每个环境分配启动这个环境的最大使用内存,每当系统接收到启动漏洞环境的后台任务时都会选择一个内存资源最为充足的节点,当选中的节点的剩余内存资源大于这个环境启动所需的内存资源系统便会在这个节点上启动该漏洞环境,同时考虑到并发性,需要对节点进行加锁控制。
由于集群采用了负载均衡方式来替代原来的单机部署,而用户选择上传后者更新头像,其请求将被随机负载到一台机器上。同时漏洞环境的构建支持了 docker-compose,而docker-compose 也涉及到了文件挂载,为此我们采用了 NFS 技术来构建集群共享存储。
为了及时了解集群各节点的运行情况和资源使用率,我们采用了Prometheus+Grafana 来作为集群资源监控的方案。为了方便监控系统的搭建,我们使用了prom/node-exporter,prom/prometheus, grafana/grafanas 三个 docker 镜像来构建监控服务。prom/node-exporter 作为 Linux 服务器系统级采集数据的工具,负责监控当前机器自身的状态,包括硬盘,CPU,系统流量等信息,prom/prometheus 负责定时去抓取指标数据,这里的被抓取的目标是通过 prom/node-exporter 暴露的接口,最后grafana/grafanas 负责将 prometheus 采集的数据进行可视化的展示。
ip 地址 | 主机名 | 服务 | 角色 |
---|---|---|---|
内网地址 1 | master1 | Prometheus,node_exporter,Grafanna | 服务端,被监控 端 |
内网地址 2 | master2 | node_exporter | 被监控端 |
内网地址 3 | worker1 | node_exporter | 被监控端 |
内网地址 4 | worker2 | node_exporter | 被监控端 |
内网地址 5 | worker3 | node_exporter | 被监控端 |
完成基本系统的构建后我们在 prometheus 的配置文件中加入要监控的各个节点的信息,并且导入 Grafanna 官方面板,最终各节点的资源使用情况都以可视化的界面展现。
4.总结
本次 vulfocus 靶场挑战赛以聚集更多网络安全人才,提升白帽子实践能力以及增强大家对网络安全知识学习兴趣为目的。此次比赛获得了 Hacking Club、安全客、SecIN 等社区的大力支持,共邀请 402 只队伍,同时在线做题人数最高达 286 人,总共启动漏洞环境 6225 个,向本次参赛的白帽子交出了满意的答卷。
本系统采用了完全自主研发的 docker 分布式调度技术,以更轻量级的方式实现了 docker 镜像的分布式调度,同时通过负载均衡等技术提升了系统整体性能,为系统的高并发性提供了保证。同时通过构建 docker registry 和系统资源监控保证了系统搭建的简易性和系统的稳定性。同时本系统实现镜像的后台自动检测,避免了 swarm 以及 k8s 等技术启动镜像时镜像不存在的情况,另外本系统内置了 docker-compose 镜像的一键构建和一键启动,丰富了漏洞环境的构建方式。
5.展望
当然本次比赛也存在很多的不足,仍有很多技术和细节需要我们去攻克以带来更好的用户参赛体验,例如如何实现集群的分布式数据库,如何改进比赛的报名机制等,这些都需要我们一一解决。当然从另外的角度讲,这次的比赛的举办吸引了大量的白帽子用户并且得到了安全社区的大力支持,同时也为我们下次比赛的举办打下了坚实的基础,相信下一次的比赛必将更加完美。
最新评论