企业安全实践(基础建设)之被动扫描自动化(下)

前言

       常规WEB安全扫描一般分为主动扫描和被动扫描,本章主要讲解其中的被动扫描。

背景

       在上一篇中(企业安全实践之被动扫描自动化 上、中)中已经介绍了通过流量镜像和日志的方式获取数据源,并进行数据源处理的过程,本章主要讲下任务发布和漏洞严重的流程。

架构

      任务发布和漏洞验证的架构如图:

333.png

        通常数据源处理阶段都保持在企业内部,而为了保持测试独立和防止被封出口IP,漏洞验证系统部署在外网中。

任务发布

         任务发布的功能比较简单,通过存储有数据源的数据库中读取数据,把相关数据发布到漏洞引擎的消息队列中,等到安全验证消费。

漏洞验证

       漏洞验证引擎从消息队列中读取去重处理后的数据,使用多种不同的方法去进行安全测试。从队列中获取的数据为json格式,具有五个元素唯一性,五元素分别为:方法、协议、域名、接口、参数串。

如:

{'domain': 'www.test.com', 'protocol': 'http://', 'method': 'POST', 'ng_request_url_short': '/learn/article/ad', 'arg': 'recommend=1'}

       自动化测试中有几个最基本的安全需求:

1、量比较大或者追求测试速度时,需要分布式扫描
2、支持自定义规则进行安全扫描,支持SQL、XSS、用户信息泄露等安全风险
3、相关的url接口需要用户登录才有访问权限,需要维持一个分用户身份目标对照表。
4、部分参数字串中可能会含有用户身份的参数如session,可能会对用户进行干扰,需要去除或修改
5、需要记录风险点的请求信息

开源项目

项目地址

https://github.com/grayddq/PassiveSecCheck

项目介绍

       自动化被动扫描系统共分为数据源、数据处理、任务分发、漏洞验证四个字系统,本系统属于任务发布、漏洞验证部分,读取数据源信息,进行分布式安全验证,确定是否包含相关严重漏洞。

作者

       咚咚呛,如有其他建议,可联系微信280495355

满足安全需求

1、对提供的http协议的五个元素进行安全测试(协议、方法、host、接口、参数)
2、可提供host和session对照表,用于登录后测试
3、提供自定义规则扫描,用于测试越权漏洞和常见漏洞等

技术细节

1、接受数据源为json格式,以含五元素为主
2、分布式采用Celery + Redis结构
3、提供SQL注入、SSRF、XSS等检测,
4、SSRF的检测,原理是把相关参数替换为指定的链接信息,然后读取此web日志,确定漏洞
5、SQL注入使用sqlmapapi的接口验证漏洞
6、提供参数替换接口、防止参数中出现session等值
7、提供host和session对照接口,可事实进行测试替换
8、提供白名单接口,可无条件放过测试
9、提供自定义规则接口,进行自定义漏洞检测,主要用于越权和常见漏洞检测
10、扫描结果以KV数据存储到Redis中
11、各个模块的配置信息和规则均存储在redis中,可实时修改。

测试环境

WIN7 /Centos 7  +  python 2.7.5

目录介绍

PublicSecScan
----lib                #模块库文件
----log                #日志目录
----tasks.py   		   #分布式调度任务
----run.py   		   #任务分发主程序,用于测试
----nginxlog.py		   #SSRF漏洞验证,用于读取nginx访问日志

部署

部署分为三块,一个任务分发、一个扫描任务执行Worker、一个是ssrf漏洞验证Worker
因为各个模块用的配置为一个配置文件,故建议先性配置完毕./lib/config.py后,在部署各个模块。

1、任意机子安装redis,用于分布式漏洞验证消息队列
$ yum install redis
$ vim /etc/redis.conf
# 更改bind 127.0.0.1 改成了 bind 0.0.0.0
# 添加一行requirepass xxxxx密码
# 修改daemonize yes
$ redis-server /etc/redis.conf

2、任务发布
$ pip install -r requirements.txt
# 配置./lib/config.py 文件,填入数据源redis信息和漏洞验证消息队列redis
# 配置定时任务cron.d,按照自身的要求,定时扫一遍所有接口的安全隐患
$ python run.py 可手动任务发布一次

3、Worker部署(建议以centos为主)
1) pip install -r requirements.txt
2) 下载sqlmap,并执行 nohup python sqlmapapi.py -s &
2) 配置./lib/config.py 文件,填入Redis和其他等相关信息
3) cmd代码目录执行,-c 1代表多一个worker进程,可增加,执行如下:
	celery -A tasks worker -c 1 --loglevel=info -Ofair

4、找一台机子部署ssrf验证worker
1) yum install nginx
2) 配置/etc/nginx 文件,修改如下:log_format  main '$request';
3) 启动nginx
4) 配置./lib/config.py 文件,填入Redis和其他等相关信息
5) 写文件cron.d定时执行python nginxlog.py

配置

配置目录:./lib/config.py

# 此处为数据源存储的redis信息
DATA_REDIS_HOST = '127.0.0.1'
DATA_REDIS_PORT = 6379
DATA_REDIS_PASSWORD = '122112121212'
DATA_REDIS_DB = 5

# 此处为分布式漏洞验证消息队列redis
REDIS_HOST = '182.61.11.11'
REDIS_PORT = 6379
REDIS_PASSWORD = '11112222'
REDIS_DB = 5

# ------------------------------------------------------------------
# ------任务发布 可不需要配置下列信息----------------------------------
# ------------------------------------------------------------------

# 配置参数中的替换字符,防止参数中出现session权限判断等,在get或post方法中出现如下参数名称则替换为响应的参数值
conf_parameter_json = {
    'session': '12234234234'
}
# 维持一个sesson访问列表
conf_cookies = [
    {'domain': '*.test.com', 'cookie': 'aaaaa=bbbbb'},
    {'domain': 'www.test.com', 'cookie': 'session=aaaa'},
    {'domain': 'aaa.testbbb.com', 'cookie': 'NL=1234'}
]
# 白名单路径,路径中出现如/admin不进行任何安全检测
conf_white_path = ['/admin', '/administra']
# 自定义漏洞匹配规则,遍历每个参数名称,当设定parameter时,值替换为设定的value字串,并在response中匹配正则rule
# 不设定parameter时,代表挨个替换
# 可以测试一些越权操作和一些常见漏洞
# 比如设定参数名为phone,替换其参数值为手机号,并匹配response的body内,是否出现此人的个人信息。
conf_scan_rule = [
    {'value': '17600296111', 'rule': '111111111', 'name': 'Exceed Permissions', 'parameter': 'phone'},
    {'value': '17600296112', 'rule': '22222222', 'name': 'Exceed Permissions', 'parameter': 'iphone'}
]
# server sqlmap远程ip链接
sqlmap_server = 'http://127.0.0.1:8775/'
# SQL检测最大运行时间(S)
sqlmap_max_time = 600
# db_type数据库检测类型
sqlmap_db_type = ''
# sqlmap扫描等级和风险
sqlmap_level = 1
sqlmap_risk = 1
# ssrf_server远程ip或domain
# ssrf实质是服务端访问了客户端传递的地址
# 预先搭建一台web,收集分析日志可以判断ssrf触发点。
ssrf_server = '10.1.1.3'
# ssrf web日志路径
ssrf_logpath = '/usr/local/openresty/nginx/logs/access.log'

运行截图

       运行如图:

111.png

       风险结果存储在redis的passive_scan_risk中,记录如下:

222.png

原始链接: http://www.freebuf.com/column/157996.html
侵权请联系站方: [email protected]

相关推荐

换一批