[TOC]
0x00前言
在校最后一年,也到了做毕设的时间,趁有空的时间写记录一下设计,也是对这段时间一个学习软件工程和网络安全的回顾。做的系统是攻击面管理(ASM),设计的过程中经历了磕磕绊绊,还是勉强做了出来。
0x01发展背景
谈起攻击面暴露都不陌生,顾名思义就是将易受攻击的主机或系统所产生的漏洞暴露出来,给安全运维人员进行查看。随着底层架构的数字化转型深化,企业业务一定是跨网络、跨云以及跨IT、OT等各种各样设备的,这时再立一道门,已经很难完全覆盖要保护的数字化资产。站在攻击者视角发现系统脆弱性成为一种全新的思路,正所谓“不知攻焉知防”,先于攻击者发现风险才能最大化抵御风险。攻击面管理的价值之处在于它以攻击者视角验证网络安全防御机制、安全设备以及有效性,收敛攻击面,进而达到降低风险的目的。
在2021年,Gartner首次清晰定义出“攻击面管理”概念,并将其涉及的EASM(外部攻击面管理)和CAASM(网络资产攻击面管理)两项能力,列为“安全运营的关键新兴技术”。Gartner指出到2026年,60%以上的企业安全威胁检测、调查与响应能力将通过风险暴露面管理来实现,目前这个比例不到5%。
我国攻击面管理的热度不断提升,2022受疫情影响,相关项目的采购数量与上年基本持平,但项目的采购平均规模明显提升,专项项目的比重也从2021年的10.3%增长至2022年的12.7%,用户对攻击面管理的重视程度在不断提升。
0x02架构设计
该系统由于存在漏洞扫描、爆破的服务,还存在一些主机探测服务,采用的是微服务架构,整个系统高内聚低耦合,尽量保证每个服务相互独立,互相配合又不互相干扰。
0x03关键技术介绍
3.1、Go-micro 框架
Go-micro 是一个专门用于分布式的开发框架。它把微服务的总体完整流程
抽象为各个模块的细节。
包括特点有:
1.微服务化: Go-micro 是一个面向微服务架构的框架,它提供了一系列工具
和库,帮助开发者快速构建、部署和管理微服务。这使得开发人员可以更容易地
将复杂的应用程序拆分成小的、自治的服务单元。
2.服务发现与注册: Go-micro 提供了服务发现和注册的功能,允许微服务在
部署时自动注册,并能够动态地发现其他服务的位置和状态。这使得微服务之间
的通信变得更加简单和可靠。
3.负载均衡: Go-micro 支持负载均衡机制,可以在多个服务实例之间分配客
户端请求,以确保各个服务实例的负载均衡,提高系统的性能和可用性。
4.分布式通信: Go-micro 使用了分布式通信的模式,支持多种通信协议,包
括 HTTP、gRPC 等。这使得微服务之间的通信更加灵活,可以根据实际需求选
择合适的通信方式。
5.插件化设计: Go-micro 的设计是高度可扩展的,它采用了插件化的架构,
允许开发者根据需求自定义各种组件和功能,以满足不同场景下的需求。
6.服务监控与追踪: Go-micro 提供了服务监控和追踪的功能,可以监控服务
的运行状态、性能指标等,并提供了追踪功能,方便开发者定位和解决问题。
7.多语言支持: Go-micro 不仅仅支持 Go 语言开发的微服务,还提供了对其
他语言的支持,包括 Java、Python 等。这使得开发者可以选择自己熟悉的语言
来构建微服务。
从流程上可以容易看出所有开启的微服务模块向 consul 注册中心发起心跳
请求,consul 会进行服务发现。随后主程序通过各种接口发起 tcp/udp 请求到
consul 后(部分程序可能会发起 http 请求),调用 gRPC,随后 RPC 使用 protobuf
编码调用远程服务,如漏洞扫描模块会调用通过 python 启动的服务和扫描器进
行扫描。期间在负载均衡中采用哈希轮询方式。
3.2、RPC框架
RPC全称是Remote Procedure Call,翻译过来就是远程过程调用。即通过配置中心调用远程主机服务并返回服务执行的结果,满足分布式架构中不同系统之间的通信和服务调用。
RPC特点有:
1.跨语言通信: RPC 框架允许不同编程语言之间的通信,使得分布式系统中的各个组件可以使用不同的语言编写,同时能够进行有效的通信。
2.简化远程调用: RPC 框架使得远程调用过程变得更加简单,开发者可以像调用本地函数一样调用远程函数或方法,而无需关注底层网络通信细节。
3.自动生成代码: RPC 框架通常提供了代码生成工具,可以根据接口定义自动生成客户端和服务端的代码,简化了开发流程并提高了开发效率。
4.支持多种序列化协议: RPC 框架通常支持多种序列化协议,如 Protocol Buffers、Thrift 等,可以根据实际需求选择合适的序列化方式,提高数据传输效率。
5.可扩展性: RPC 框架通常具有良好的可扩展性,支持自定义协议、中间件等,可以根据实际需求进行定制和扩展。
3.3、负载均衡
直白来说负载均衡就像是一名交通警察,他的任务是在繁忙的十字路口或者交叉路口,根据车流量的情况,合理地分配交通流量,让每辆车都能顺畅通过,避免拥堵。在计算机领域,负载均衡的作用类似于交通警察,但是它是用于分配网络请求给多台服务器处理。当许多用户向一个网站或者应用程序发送请求时,负载均衡器会根据服务器的负载情况,将请求分发到不同的服务器上,确保每台服务器都能保持在一个合理的负载水平上,避免某台服务器负载过高而导致性能下降,同时提高系统的稳定性和可靠性。在这项目中使用负载均衡是为了将多个任务尽可能分到更多的节点上可以减少大量等待的时间。其中常见的算法有轮询、随机、最小活跃数、源地址哈希、一致性哈希。
3.4、Websocket
WebSocket允许客户端和服务器之间建立一种持久性的双向通信通道。与传统的 HTTP 请求-响应模式不同,WebSocket 在客户端和服务器之间建立了一种长连接,使得它们可以实时地交换数据,而不需要每次通信都建立新的连接。这种实时通信的能力使得 WebSocket 特别适用于需要实时更新的应用程序。与 HTTP 相比,WebSocket 的通信开销更小,延迟更低,而且能够支持更多的并发连接。
3.5、Pocsuite3框架
Pocsuite3 是由知道创宇 404 实验室打造的一款基于 GPLv2 许可证开源的远程漏洞测试框架。它是知道创宇安全研究团队发展的基石,是团队发展至今一直维护的一个项目,自 2015 年开源以来,不断更新迭代。
功能包含了漏洞测试的框架,Exp的开发包,里面集合了nmap、metasploit交互的SDK,集合了许多网络搜索引擎,包括不限于Ceye、Seebug、ZoomEye。
0x04功能设计
4.1资产收集
设备类型 |
识别Dell、VMware等 |
操心系统 |
识别Linux、Windows等 |
IP信息 |
运营商、GPS、区域位置信息等 |
域名信息 |
子域及关联域名、域名注册商、注册日期、DNS解析地址、域名解析器、域名状态等 |
资产信息 |
服务、端口、协议及其状态 |
4.2WebScan
登录页面 |
支持爬取、爆破的方式收录登录页面(login、register) |
上传页面 |
支持爬取、爆破的方式收录上传页面(upload) |
子域名 |
支持爬取、爆破的方式收录子域名 |
主域链接 |
支持爬取、爆破的方式收录主域链接 |
资源链接 |
支持爬取、爆破的方式收录资源链接(前端资源) |
Web服务器 |
如: nginx、openresty、apache |
主域标题 |
如: 502 Bad Gateway |
网页内容类型 |
如: text/html; charset=utf-8 |
4.3攻击暴露和利用
漏洞验证 |
支持基于漏洞原理检测并验证漏洞 |
漏洞利用 |
支持对已验证漏洞进行攻击利用 |
服务代理 |
支持对目标服务进行代理。下次仅需访问代理即可,无需直接访问目标 |
后渗透 |
对漏洞进行植入木马,建立c/s通信 |
Session会话 |
支持对取得控制权的主机进行本地攻击 |
插件扩展 |
支持用户自定义Poc插件进行扩展(Web提交即可,无需重启服务) |
4.4用户字典爆破
资产服务 |
支持ssh、ftp、vnc、mysql、redis、mongodb等开放的服务扫描爆破 |
用户字典 |
支持用户自定义用户字典 |
密码字典 |
支持用户自定义密码字典 |
4.5蜜罐识别
开源蜜罐 |
支持Dionaea、conpot、Amun、Nependthes、Cowrie等蜜罐识别 |
蜜罐服务 |
支持SSH、FTP、S7、IMAP、Telnet等十余种蜜罐服务识别 |
插件扩展 |
支持用户自定义脚本插件进行扩展(Web提交即可,无需重启服务) |
0x05数据库设计
概述
对于这个系统,数据库类型采用的是关系型数据库而不是非关系型数据库,数据库选用的是mysql。我认为有几点:1、系统读写并不是高速地、大量地,所以无需使用极高读写性能的非关系型数据库。2、系统内部存在复杂的关系数据,比如蜜罐存在多个类型,一个网站可能对应多个漏洞,一台主机扫描出了多个服务。3、系统使用者可能为内部人员而不是开放所有人,所以没有太大访问量,无需添加更多的服务节点拓展性能。
表设计
5.1、用户管理
1 2 3 4 5 6 7 8 9
| CREATE TABLE `Hawkeye_admin` ( `id` bigint(20) NOT NULL COMMENT '自增id', `user_name` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名', `salt` varchar(50) NOT NULL DEFAULT '' COMMENT '盐', `password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', `update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理员表';
|
5.2、Poc插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| CREATE TABLE `poc_plugin` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `vul_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'ssvid', `vul_name` varchar(255) NOT NULL DEFAULT '' COMMENT '漏洞名', `vul_type` varchar(255) NOT NULL DEFAULT '' COMMENT '漏洞类型', `vul_date` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '漏洞发布日期', `version` varchar(255) NOT NULL DEFAULT '1.0' COMMENT '插件版本', `author` varchar(255) NOT NULL DEFAULT '' COMMENT '编写者', `app_powerLink` varchar(255) NOT NULL DEFAULT '' COMMENT '产商链接', `app_name` varchar(255) NOT NULL DEFAULT '' COMMENT '应用名', `app_version` varchar(255) NOT NULL DEFAULT '' COMMENT '应用版本', `desc` varchar(255) NOT NULL DEFAULT '' COMMENT '漏洞描述', `cnnvd` varchar(255) NOT NULL DEFAULT '' COMMENT 'cnnvd', `cve_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'cve_id', `rank` tinyint(4) NOT NULL DEFAULT '5' COMMENT '危险等级', `default_ports` varchar(255) NOT NULL DEFAULT '' COMMENT '默认端口', `default_service` varchar(255) NOT NULL DEFAULT '' COMMENT '默认服务', `content` text COMMENT '脚本内容', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', `update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Poc插件表';
|
5.3、蜜罐插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CREATE TABLE `trap_plugin` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `trap_id` varchar(255) NOT NULL DEFAULT '0000' COMMENT '蜜罐ID', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '插件名', `author` varchar(255) NOT NULL DEFAULT '' COMMENT '编写者', `protocol` varchar(255) NOT NULL DEFAULT 'TCP' COMMENT '协议', `app_name` varchar(255) NOT NULL DEFAULT '' COMMENT '应用名', `honeypot` varchar(255) NOT NULL DEFAULT '' COMMENT '蜜罐名', `desc` varchar(1024) NOT NULL DEFAULT '' COMMENT '描述', `content` text COMMENT '脚本内容', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', `update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='trap插件表';
|
5.4、Poc任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CREATE TABLE `poc_task` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `asset_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资产id', `portinfo_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '端口id', `status` varchar(255) NOT NULL DEFAULT 'New' COMMENT '任务状态', `target_list` varchar(255) NOT NULL DEFAULT '' COMMENT '目标列表', `task_name` varchar(255) NOT NULL DEFAULT '' COMMENT '任务名', `recursion` tinyint(4) NOT NULL DEFAULT '0' COMMENT '周期', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', `update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间', `plugin_list` varchar(255) NOT NULL DEFAULT '' COMMENT '插件列表', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Poc任务表';
|
5.5、普通任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| CREATE TABLE `Hawkeye_task` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '任务名', `target_list` varchar(255) NOT NULL DEFAULT '' COMMENT '目标列表', `web_scan` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'web扫描', `poc_scan` tinyint(4) NOT NULL DEFAULT '0' COMMENT '漏洞渗透', `auth_scan` tinyint(4) NOT NULL DEFAULT '0' COMMENT '权限爆破', `trap_scan` tinyint(4) NOT NULL DEFAULT '0' COMMENT '蜜罐识别', `recursion` tinyint(4) NOT NULL DEFAULT '0' COMMENT '周期', `progress` varchar(255) NOT NULL DEFAULT '' COMMENT '进程', `percent` tinyint(4) NOT NULL DEFAULT '0' COMMENT '百分比', `status` varchar(255) NOT NULL DEFAULT 'New' COMMENT '任务状态(New,Stop,Failed,Successfully)', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', `update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='任务表';
|
5.6、主机资产
1 2 3 4 5 6 7 8 9 10 11 12 13
| CREATE TABLE `Hawkeye_asset` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `task_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '任务id', `ip` varchar(255) NOT NULL DEFAULT '' COMMENT 'ip地址', `gps` varchar(255) NOT NULL DEFAULT '' COMMENT 'GPS', `area` varchar(255) NOT NULL DEFAULT '' COMMENT '区域', `isp` varchar(255) NOT NULL DEFAULT '' COMMENT '运营商', `os` varchar(255) NOT NULL DEFAULT '' COMMENT '操作系统', `vendor` varchar(255) NOT NULL DEFAULT '' COMMENT '设备', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='资产表';
|
5.7、域名
1 2 3 4 5 6 7 8 9 10 11 12
| CREATE TABLE `Hawkeye_domain` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `asset_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资产id', `domain` varchar(255) NOT NULL DEFAULT '' COMMENT '域名', `subdomain_list` varchar(255) NOT NULL DEFAULT '' COMMENT '子域列表', `registrar` varchar(255) NOT NULL DEFAULT '' COMMENT '注册商', `register_date` varchar(255) NOT NULL DEFAULT '' COMMENT '注册日期', `name_server` varchar(255) NOT NULL DEFAULT '' COMMENT 'DNS解析地址', `domain_server` varchar(255) NOT NULL DEFAULT '' COMMENT '域名解析器', `status` varchar(255) NOT NULL DEFAULT '' COMMENT '状态', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='域名表';
|
5.8、主机服务
1 2 3 4 5 6 7 8 9 10 11 12 13
| CREATE TABLE `Hawkeye_portinfo` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `asset_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资产id', `port` varchar(255) NOT NULL DEFAULT '' COMMENT '端口', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '服务(ssh,mysql,http)', `state` varchar(255) NOT NULL DEFAULT '' COMMENT '状态', `product` varchar(255) NOT NULL DEFAULT '' COMMENT '应用(OpenSSH,nginx)', `version` varchar(255) NOT NULL DEFAULT '' COMMENT '版本(7.4,syn-ack)', `extrainfo` varchar(255) NOT NULL DEFAULT '' COMMENT 'protocol 2.0,Servlet 2.5', `conf` varchar(255) NOT NULL DEFAULT '' COMMENT '10', `cpe` varchar(255) NOT NULL DEFAULT '' COMMENT '指纹cpe:/a:openbsd:openssh:7.4,10', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='服务表';
|
5.9、web信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CREATE TABLE `Hawkeye_webinfo` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `port_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '端口id', `start_url` varchar(255) NOT NULL DEFAULT '' COMMENT '起始URL', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '站点标题', `server` varchar(255) NOT NULL DEFAULT '' COMMENT 'Web服务器', `content_type` varchar(255) NOT NULL DEFAULT '' COMMENT '内容类型', `login_list` varchar(1024) NOT NULL DEFAULT '' COMMENT '登录页列表', `upload_list` varchar(1024) NOT NULL DEFAULT '' COMMENT '上传页面列表', `sub_domain` varchar(1024) NOT NULL DEFAULT '' COMMENT '子域名列表', `route_list` text COMMENT 'URL列表', `resource_list` text COMMENT '资源列表', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Web信息表';
|
5.10、漏洞管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| CREATE TABLE `Hawkeye_vulinfo` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `asset_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资产id', `port_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '端口id', `plugin_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '插件ID', `verify_url` varchar(1024) NOT NULL DEFAULT '' COMMENT '漏洞验证URL', `verify_payload` text COMMENT '漏洞验证Payload', `verify_result` varchar(1024) NOT NULL DEFAULT '' COMMENT '漏洞验证Result', `exploit_url` varchar(1024) NOT NULL DEFAULT '' COMMENT '漏洞利用URL', `exploit_payload` text COMMENT '漏洞利用Payload', `exploit_result` varchar(1024) NOT NULL DEFAULT '' COMMENT '漏洞利用Result', `webshell_url` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Webshell URL', `webshell_payload` text COMMENT 'Webshell Payload', `webshell_result` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Webshell Result', `trojan_url` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Trojan URL', `trojan_payload` text COMMENT 'Trojan Payload', `trojan_result` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Trojan Result', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='漏洞表';
|
5.11、蜜罐识别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CREATE TABLE `Hawkeye_trap` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `asset_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资产id', `port_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '端口id', `plugin_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '插件id', `verify` varchar(1024) NOT NULL DEFAULT '' COMMENT '验证项', `trap_id` varchar(255) NOT NULL DEFAULT '0000' COMMENT '蜜罐ID', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '插件名', `protocol` varchar(255) NOT NULL DEFAULT 'TCP' COMMENT '协议', `app_name` varchar(255) NOT NULL DEFAULT '' COMMENT '应用名', `honeypot` varchar(255) NOT NULL DEFAULT '' COMMENT '蜜罐名', `desc` varchar(1024) NOT NULL DEFAULT '' COMMENT '描述', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='蜜罐识别表';
|
5.12、服务权限(用户是否正确,当前用户权限)
1 2 3 4 5 6 7 8 9 10 11
| CREATE TABLE `Hawkeye_auth` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `asset_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资产id', `port_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '端口id', `target` varchar(255) NOT NULL DEFAULT '' COMMENT '目标', `service` varchar(255) NOT NULL DEFAULT '' COMMENT '服务', `username` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名', `password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码', `command` varchar(255) NOT NULL DEFAULT '' COMMENT '验证命令', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='服务权限表';
|
5.13、任务规则
1 2 3 4 5 6 7 8 9 10
| CREATE TABLE `task_rule` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `trojan_cmd` varchar(255) NOT NULL DEFAULT '' COMMENT '木马注入payload的命令', `port_list` varchar(255) NOT NULL DEFAULT '' COMMENT '端口列表', `domain_dict` varchar(255) NOT NULL DEFAULT '' COMMENT '域名字典', `user_dict` varchar(255) NOT NULL DEFAULT '' COMMENT '用户字典', `passwd_dict` varchar(255) NOT NULL DEFAULT '' COMMENT '密码字典', `create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间', primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='任务规则表';
|
0x06部署设计
部署总体为分布式部署,而部分的服务使用单机部署或集群部署,可通过文件配置选择其中一种方式
分布式部署:把一个业务,拆分成多个业务,然后部署到不同的服务器上
单机部署:所有的业务全部写在一个项目中,部署服务到一台服务器上
集群部署:集群就是单机的“复制”,同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事。如果一台死机,另一台可以起作用,不影响整个程序的运行)
单机部署
一台服务器作为主节点运行Web服务
一台服务器作为子节点运行漏洞扫描等需要调用rpc服务脚本
一台服务器作为子节点运行Redis和mysql
一台服务器作为consul服务
集群部署
N台服务器作为子节点部署集群Redis
N台服务器作为子节点部署集群Mysql,其中分为主从数据库
N台服务器作为子节点部署集群consul服务
N台服务器作为子节点运行漏洞扫描等需要调用rpc服务脚本
一台服务器作为主节点Web服务
0x07技术栈
总体采用Go-micro微服务架构
前端基于Vue框架进行开发,UI风格参考element-ui
后端Web端采用Go语言,基于Gin框架进行开发。系统所需脚本如漏洞扫描、服务探测等子节点运行所需脚本采用Python语言
注册中心采用的是Consul,Consul可进行服务发现、配置中心、健康检查等
使用RPC远程过程调用技术,采取的是google研发的gRPC框架。其中RPC调用采取双R轮询模式的负载均衡,保证多个节点公平且合理地使用ß
数据存储采用的是Mysql数据库,持久化数据库和消息队列使用的是Redis
0x08总结
系统使用的技术栈对于目前来说还是比较新颖。本来打算使用FastAPI作为后端框架,但是开发过程受阻,奈何知识储备不太够,时间周期太慢,如果不赶时间,倒也是个不错的选择,速度能和Go比肩。微服务架构将会是未来项目开发中常见的架构。对于一些资源消耗高,主机利用率高的项目来说,微服务架构是相较于单体架构来说利用率最高。尽管如此,也不能每个项目都要使用微服务的架构,万物皆有利弊,当主机消耗资源未能达到一定数量的时候,性能会下降,因为每台主机资源都是独立的,交互起来没有单体架构交互流畅。并且在预算不充足的情况下,多台主机会消耗大量资金,若考虑到成本花费,当营收不及成本时也是非常吃亏。