# sec-admin **Repository Path**: jstarseven/sec-admin ## Basic Information - **Project Name**: sec-admin - **Description**: 分布式资产安全扫描核心管理系统(弱口令扫描,漏洞扫描) - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-14 - **Last Updated**: 2024-04-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SEC-分布式资产安全扫描(弱口令、系统漏洞、WEB漏洞扫描) ---------- **SEC (SEC Is Elastic Controller)** 可用于企业对服务器资源安全进行扫描排查,可控性强、可停止运行中的扫描任务、支持分布式多节点部署,更快的扫描进度 + 节点执行信息动态反馈,快速定位漏洞。 作者开源此应用的目的是为了方便企业管理自身的服务器资产,提高安全性,以避免不必要的损失;同时也能与大家一起探讨学习,请使用者不要用于非法目的,自觉遵守 [**《中华人民共和国网络安全法》**](http://www.cac.gov.cn/2016-11/07/c_1119867116.htm) ,一起为祖国的网络安全做贡献。 ---------- ## 流程演示视频 [![](https://smallcham.github.io/static/img/sec-demo.png)](https://smallcham.github.io/static/video/sec-demo.mp4) ---------- ## 版本更新 #### 最初版: * 目标端口服务发现 * 目标系统识别 * 漏洞扫描 * 用户管理 * 自定义扫描插件 * 字典 #### 2.0: * 子域名识别自动添加扫描任务 * DNS获取、CDN厂商识别(可在字典追加特征记录) * 对暴露Web服务目标进行网页标题以及关键字抓取 * 支持对任务的批量处理操作、对结果集操作 * 支持对资产的批量处理操作、对结果集操作 * 优化删除任务速度 ---------- ## 系统组成介绍 SEC共分为三个项目 * [前端WEB项目](https://github.com/smallcham/sec-admin-web.git) * [中央控制系统](https://github.com/smallcham/sec-admin.git) * [任务执行系统](https://github.com/wanzywang/sec-scannode.git) > **前端WEB系统** 使用动静分离的方式部署, WEB页面部分使用 Vue + ElementUI 编写,所有的UI都在这个项目中。 > **中央控制系统** 使用Python3 + Flask编写,负责录入资产的端口服务发现、任务执行统计、资产管理、数据字典、漏洞插件管理、用户管理、扫描任务下发以及同步等后台实现,添加的IP会立即进行端口服务以及系统探测。 > **任务执行系统** 使用Python3编写,负责处理执行下发的扫描任务,并回馈处理结果。 执行系统以进程为执行单位,可在同一台机器部署多个进程服务,**支持多节点分布式部署**。 ## 部署方式(共有三种部署方式) ### 一、 一键部署 一键部署已经将所有服务以及启动脚本打包成docker镜像, 可以直接运行,数据库以及相关公用服务直接打包在容器内部,不支持分布式节点扩展,可作为体验测试,**不建议直接作为生产环境使用**。 1. 首先需要安装Docker服务,Ubuntu可使用以下指令直接安装(**已经安装Docker服务并启动的直接调到第 3 步**) Ubuntu: ``` sudo apt-get -y install docker.io ``` CentOS: > [请根据docker官方文档步骤进行安装] (https://docs.docker.com/engine/install/centos/) 2. 启动Docker服务(**已经安装Docker服务并启动的直接调到第 3 步**) ``` sudo service docker start ``` 3. 启动SEC服务(**指令中8000是后台访问端口, 可根据需求修改为其他端口,NODE_COUNT 为执行节点启动的进程数,默认为3**) ``` docker run -d -p 8000:80 --name sec --env NODE_COUNT=3 smallcham/sec:all-in-0.3 && docker logs -f sec --tail 10 ``` 4. 服务启动后初始用户为:root, 初始密码将会打印在控制台,可在登录后修改。 ### 二、使用容器分布式部署(推荐) 1. 首先需要安装Docker服务,Ubuntu可使用以下指令直接安装(**已经安装Docker服务并启动的直接调到第 3 步**) Ubuntu: ``` sudo apt-get -y install docker.io ``` CentOS: ``` sudo yum -y install docker.io ``` 2. 启动Docker服务(**已经安装Docker服务并启动的直接调到第 3 步**) ``` sudo service docker start ``` 3. 使用容器启动并初始化MySQL数据库 ``` docker run --name sec-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secpassword -d mysql:5.7 ``` ``` wget https://raw.githubusercontent.com/smallcham/sec-admin/master/pack/create_db.sql ``` 等待半分钟,mysql启动完毕后执行 > 注意:如果你从老版本SEC升级安装到新版,也请务必再次执行SQL ``` docker exec -i sec-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /你下载的目录/create_db.sql ``` > 如果你要使用自己现有的数据库可以直接将[create_db.sql](https://github.com/smallcham/sec-admin/blob/master/pack/create_db.sql)中的SQL执行进行初始化,注意:如果你从老版本SEC升级安装到新版,也请务必再次执行SQL 4. 使用容器启动Redis ``` docker run -p 6379:6379 --name sec-redis -d redis ``` > 你也可以使用自己现有的Redis 5. 使用容器启动SEC控制系统 ``` docker run -d -p 启动端口:80 --name sec --env HOST=http://部署机器的IP:启动端口(启动后用这个URL在浏览器访问) --env DB_URL=MySQL用户名:MySQL密码@MySQLIP:数据库端口(一默认是3306)/sec --RDS_URL=Redis库号(默认写0):Redis密码(没有密码可以不写)@RedisIP:Redis端口(默认是6379) -v ~/sec-script:/var/www/html/sec-admin/static/plugin/usr smallcham/sec:core-0.1 && docker logs -f sec --tail 10 ``` > 例如 ``` docker run -d -p 8793:80 --name sec --env HOST=http://192.168.0.107:8793 --env DB_URL=root:abcd1234@192.168.0.107:3306/sec --env RDS_URL=0:abcd1234@192.168.0.107:6379 -v ~/sec-script:/var/www/html/sec-admin/static/plugin/usr smallcham/sec:core-0.2 && docker logs -f sec --tail 10 ``` 6. 登录SEC管理系统 使用节点添加功能生成并拷贝到终端执行节点安装指令,节点支持分布式,只要保证部署服务器与控制系统以及Redis之间互通即可,当然也可以直接在同一台服务器部署,详细操作请查看[演示视频](https://smallcham.github.io/static/video/sec-demo.mp4) ### 三、不使用容器本地部署(以下示例基于Ubuntu) 1. 安装MySQL、Redis、Nodejs、npm、Nginx、Python3、pip3 各种类的系统内的安装方法都大同小异, 这里就不作详细介绍。 2. 编译Web页面项目 ``` * git clone https://github.com/smallcham/sec-admin-web.git * cd 你的项目路径/sec-admin-web/ * npm install * npm run build * ln -s 你的项目路径/sec-admin-web/dist 你的Nginx网站目录/ ``` 编译好的静态文件在项目的 dist 目录 3. 运行SEC核心控制系统 ``` * git clone https://github.com/smallcham/sec-admin.git * cd 你的项目路径/sec-admin/ * pip install -r requirements.txt // 找不到pip的尝试 pip3 install -r requirements.txt * git clone https://github.com/aboul3la/Sublist3r * python setup.py install //进入Sublist3r目录执行 * 打开项目路径下的 src/model/enum.py 修改Env类 默认LOCAL判断内的数据库以及Redis配置为你安装的配置 * nohup gunicorn -w 10 app:flask_app ``` 4. 配置Nginx访问 > 以下配置模板供参考,端口或者目录不一样请自行修改。 ``` server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm; server_name _; location / { root /var/www/html/dist; try_files $uri $uri/ 404; } location /api/ { proxy_pass http://localhost:8000/; } location /static/plugin/usr/ { proxy_pass http://localhost:8000; } } ``` 配置好后记得重启nginx服务 5. 启动执行节点 ``` * git clone https://github.com/wanzywang/sec-scannode.git * cd 你的项目路径/sec-scannode/ * pip install -r requirements.txt // 找不到pip的尝试 pip3 install -r requirements.txt * 打开项目根目录的 config.py 修改redis配置为你安装的ip以及密码 * python -u scan.py ``` ## 功能介绍 ### 插件说明 SEC支持添加自定义扫描插件脚本,目前仅支持Python语言,格式如下。 ``` //target参数为扫描目标, 可以是IP也可以是域名,具体取决于资产录入的是ip还是域名 def do(target): if 发现漏洞: return True, '发现漏洞,原因***' else: return False, '' ``` 可参考以下FTP弱口令扫描脚本 其中 SEC_USER_NAME、SEC_PASSWORD 为字典功能中录入的Key值,扫描节点会自动将数据字典中添加的内容以设置的分隔符或JSON格式转化为数组或字典,可以通过字典Key值直接引入使用。 ``` from ftplib import FTP def do(target): port = 21 time_out_flag = 0 for user in SEC_USER_NAME: print(user) for pwd in SEC_PASSWORD: print(pwd) try: ftp = FTP(target, timeout=3) ftp.connect(target, port, 5) if ftp.login(user, pwd).startswith('2'): return True, '用户: ' + user + ' 存在弱口令: ' + pwd except Exception as e: if not str(e).startswith('530'): print(e) if e.args[0] == 113 or e.args[0] == 111 or 'timed out' in str(e): time_out_flag += 1 if time_out_flag > 2: print('connection timeout , break the loop .') return False, '' else: print(e) return False, '' ```