云化分布式自动化渗透测试平台 - 架构笔记

- 2 mins

0x01. 简介

在 2020 年 12 月,我写了公众号的第一篇文章 — “自动化安全工具平台 - 架构笔记”,文章介绍了前几年我在写个人自动化安全工具平台的过程中,关于架构方面的一些尝试和总结。也因这篇文章,在 2021 年 5 月,我有幸加入了长亭,负责红队自动化渗透测试平台项目。这篇笔记是近半年多来,我和团队师父们在平台架构方面的一些思考、尝试和总结,主要内容包括:



原文链接 云化分布式自动化渗透测试平台 - 架构笔记

欢迎关注

mp-weixin

0x02. 平台介绍

关于平台,这里结合文章标题中包含的关键词来进行介绍。

关键词一:渗透测试平台

渗透测试平台相比于之前个人开发使用的安全工具平台,它主要的不同点在于:

关键词二:分布式

为了具备良好的扩展性,平台采用了分布式架构,利用消息队列解耦任务的发送和执行,通过增加消费者的数量,实现更高的扫描速度和并发支持。

关键词三:自动化

主要指渗透过程自动化,即如何减少渗透过程中的重复劳动,提高效率,让安全人员更专注于挖洞本身。广义上说,也包含研发、运维自动化,后续会在平台架构部分进行介绍。

关键词四:云化

即平台所有服务全部运行在云上。在上一篇架构笔记中,为了追求高可用,我曾自己搭建过 RabbitMQ 和 Postgresql 集群,机器成本相对于直接使用云厂商服务确实更低,但如服务升级、扩容、稳定性都需要自己来操作和保障,后期的运维成本更高。而全面上云后,大部分运维工作只需在页面上进行操作即可。通过借助云厂商更专业的服务,能够在提供高可用保障的同时,大幅减少运维成本。

0x03. 平台架构

目前平台架构如下图:

图片

平台同样采用前后端分离,开发语言和框架为:

平台使用到的服务和组件信息如下:

序号 服务 说明
1 Gitlab 代码托管,CI/CD 自动化构建
2 Image Registry Docker 镜像仓库
3 Postgresql 关系型数据库,存储平台数据
4 Redis 缓存服务
5 ELK Stack 存储/查询 Http 请求响应数据、业务日志
6 Object Storage 存储用户上传、导出数据、页面截图等
7 Sentry 代码错误监控和追踪
8 Frontend Nginx 反向代理、静态资源访问
9 Backend 后端 API Server,使用 DRF 框架
10 Prometheus 指标统计监控、告警
11 RabbitMQ 分布式消息代理
12 Dramatiq Python 异步任务框架
13 Kubernates 容器化部署管理

从列表信息看,核心组件与个人版基本相同,此外还增加了多个新服务来完善平台的各项能力,如自动化构建、错误追踪、监控告警等。

从架构图右侧,可以明显看到前一章节提到的 “云化” 特点。对于基础服务,如 Postgresql、Redis、ELK、对象存储等,都直接使用了云厂商提供的高可用集群版本,来保障平台的稳定性。

另一个改进点是,平台使用了 kubernates 来进行服务的容器化部署和管理,相比于个人版基于 docker、docker-compose 的方案,k8s 的功能更加强大。简单理解,你只需要通过 YAML 定义来声明需要的资源,如服务实例数量、机器资源、环境变量、启动命令等配置,k8s 会负责服务的启动、健康检查、故障迁移等剩余的工作。在 k8s 中,Pod 是最基础的运行单元,此外还提供了多种内置的应用类型(workload)来满足常用的业务场景,以下为平台中的一些应用例子:

在平台开发的过程中,也遇到过某些复杂功能,如实现为某个任务分配独享计算资源,需要能够自行控制节点(Pod)的创建过程,但内置的应用类型(workload)无法满足需求。此时,可通过 k8s 强大的扩展能力 Custom Resources 和 Operator pattern,来定义自己的资源类型,编写 controller 来进行管理。此外,k8s 还有如使用 Persistent Volumes 实现多个服务挂载和访问同一个存储磁盘、通过 kubectl scale 命令实现资源快速伸缩等功能,能极大的提升平台部署效率和扩展能力。

下一个不同点是,个人版在后端开发时主要使用 Python 语言,利用协程 gevent、asyncio 来缓解 GIL 带来的并发性能问题。而在新平台,我们对后端功能进行了拆分,使用 Golang 来进行安全引擎的开发,而业务层仍使用 Python,这样做的考虑主要有:

对于异步任务框架 Dramatiq,之前在个人版中遇到了一些问题:

聊完开发语言 和 Dramatiq,接下来再介绍一下其他研发流程相关的改进。在个人版的容器镜像主要依靠手工构建,在新平台则基于 Gitlab CI/CD,能够在每次代码变更和合并时自动进行构建打包,并推送至容器镜像仓库。为了方便功能测试和验证,平台拥有两套配置相同的环境 stg 和 prod,功能需在测试环境上验证通过后才会部署到线上环境。

此外,在功能上线后,不可避免的会遇到 bug,那么如何知道服务出现了问题?这里需要考虑两种场景:

关于平台架构部分,在探索过程中还遇到过其他很多问题,因篇幅关系,此次就先介绍到这里。

0x04. 想法和计划

要想设计出一个好的平台架构,需要不断的尝试和改进,以及大量的时间去打磨优化细节。经过半年多的努力,虽然平台当前架构已经基本成型,但仍然还有很多的不足和优化之处,例如:

对于一个自动化渗透测试平台,良好的架构设计是基础,安全能力则是核心竞争力。在过去的半年多,平台的功能基本保持在每周更新上线,目前已经完成近两个大版本的开发,并投入使用。对于安全能力,在 2022 年,也将持续投入更多的精力进一步优化和提升效果。

不论是提升安全能力还是架构优化,都需要更多的人力投入。因此,下一章节是团队岗位招聘环节,感兴趣的师父可以看看

0x05. 岗位招聘

团队介绍

我们是长亭安全服务中心的协同创新团队,团队职责为将一线安全攻防经验,以平台和工具等形式赋能公司各业务,并通过安服业务的实践,快速获取反馈,不断改进和提升安全能力,构筑公司核心竞争力。

团队成员包含专业的产品经理、前后端研发、安全开发、攻防专家、运维。技术氛围好,不卷,老板重视。

目前团队负责项目包括但不限于:

关于岗位

目前招聘的岗位包括:安全研发、后端研发、红队攻防


如果你偏好安全,并具备一定的研发能力,可选择 安全研发 岗位,工作地点:北京

加入我们,你可以:

同时,我们希望你:


如果你偏好研发,可选择 后端研发 岗位,工作地点:北京

加入我们,你可以:

同时,我们希望你:


如果你偏好攻防实战,可以选择 红队攻防 岗位,工作地点:北京/上海/深圳/广州/成都

加入我们,你可以:

同时,我们希望你:


简历投递

有岗位问题咨询、技术交流,也可以通过以上方式联系

0x06. 总结

在这篇笔记完成时,2021 年已经过去了,在看完远在异国我佳和朋友圈各位师父的年终总结后,觉得自己也该做一个“总结”,因此就有了这篇笔记。文中介绍了我和团队在过去半年多在架构方面的尝试和总结。同第一篇笔记,文字较多,再次感谢大家耐心看完。希望能够为大家提供一些帮助,也希望能够借此机会帮助团队招到更多优秀的小伙伴。

最后,因个人能力和水平有限,文中可能会有描述错误或理解不到位的地方,欢迎各位指出和交流。

最最后,如果各位觉得文章对你有帮助,欢迎关注、点赞收藏和转发。

0x07. 参考

b1ngz
rss facebook twitter github weibo youtube mail spotify instagram linkedin google pinterest medium vimeo