自动化安全工具平台 - 架构笔记

- 2 mins

0x01. 简介

这篇笔记是这几年我在写自动化安全工具平台过程中,在架构方面的一些想法、思考、尝试和总结,主要内容包括:



原文链接 自动化安全工具平台 - 架构笔记

欢迎关注

mp-weixin

0x02. Why

在安全测试和挖洞的过程中,我们会用到许多的安全工具,个人在使用时,遇到了如下一些问题:

因为以上列出和没列出的种种原因,我决定写一个自用的安全工具平台,它需要满足以下条件:

为了能够实现预期目标,需要有一套良好的架构来支撑,来看一下平台的 1.0 架构

0x03. 1.0 版本架构

1.0 版本的架构图如下:

图片

使用到的技术栈和组件信息:

对于写过分布式工具的师父来说,整体架构应该还是相对比较简单的。

接着来一起了解一下我是如何选择技术框架和组件的

了解完技术选型的过程,再来一起看看 1.0 版本在实现和使用过程中,我所遇到的一些问题

为了解决上述 1.0 版本所面临的问题,实现稳定、高可用、高度自动化的目标,我走上了 2.0 版本的重构和改造之路

0x04. 2.0 版本架构

2.0 版本的架构图如下

图片

使用到的技术栈和组件信息,这里仅列出与 1.0 版本不同的地方

相比 1.0,新版本改进和优化的地方主要有:

除了以上的点外,还有一个关于多任务同时运行,资源分配和抢占的问题,想和大家聊一下

前面提到,任务会通过定时模块周期性的运行,即队列中时时刻刻都有任务在运行或等待运行。假如某天我们发现了一个新漏洞,POC 已写好,扫描任务也已创建,但此时资源都已经被其他已运行的任务占用,只能等待其他任务完成或手动停止释放资源。为了能够更好的解决这个问题,需要有机制能够让新任务具备抢占其他正在运行任务的资源的能力,那么如何实现呢?以下是我的思路和做法:

说了这么多,那么实际效果怎么样呢?以下是 2.0 架构今年的一些使用情况

0x05. 想法和计划

虽然 2.0 版本优化和解决了 1.0 版本中的很多问题,但它仍然有很多不足和待改进的地方,例如数据库使用集群模式后,存在多个节点,目前 worker 端连接时,是随机选择其一,一旦某个节点宕机,就会导致部分请求失败,再加上数据库配置是通过 docker env-file 传入,无法实现动态摘除节点,需要重新部署。另外,随机选择也带了另一个问题,不同节点之间的负载存在不均衡的情况。因此,为了能够让平台更加稳定,实现高度自动化目标,还需要对架构进行进一步的优化。以下是目前的一些 ToDo,因为只是初步的想法,有可能不一定会实际去实现,大家可以简单参考一下:

0x06. 总结

这篇笔记介绍了我在写自动化安全工具平台过程中,在构架方面的一些个人思考和总结,文字比较多,感谢大家耐心看完,希望能够给同样在写自动化工具的人提供一些帮助。另外,因个人能力和水平有限,文中可能会有描述错误或理解不到位的地方,欢迎各位指正和交流。

最后是下篇笔记的预告时间,我会介绍平台上的一些功能和自己的想法,感兴趣的老板可以关注一下

0x07. 参考

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