作者:b1ngzz
预估稿费:300RMB
投稿办法:发送邮件至linwei#360.cn,或上岸网页版在线投稿
0x01 简介
对付企业来说,构建自动化黑盒扫描平台是企业安全培植中的一个主要环节,自动化扫描能够有效提升效率,在一定程度上减少常规安全问题的发生。
对付大型互联网和土豪公司来说,都会选择招人自研扫描器或直接购买付费产品,但是对付安全资源有限的公司来说,自研或购买付费产品都是不太现实的,那么性价比较高的办法便是选择基于开源扫描器构建自动化扫描平台。
那么问题来了,目前开源的扫描器有好几种,如何选择一个适宜的呢?
首先大略说一说我司情形,紧张为APP接口和H5页面,扫描的前端展示自己写,然后调用引擎的API进行扫描,获取结果存储在数据库。
扫描需求包括:
主动扫描: 用户可以在界面上手工填写配置(url,cookie,自动登录等),提交扫描任务
被动扫描: 通过设置代理的办法,网络测试和预发环境下的要求信息,然后定时扫描
公司之前利用 W3AF 作为黑盒扫描的引擎,总体利用起来效果不是太好,首先其 API 不完备是 REST 风格的,且不支持单接口 POST 扫描(给定要求参数进行扫描)等,以是决定改换一个扫描引擎。
对市情上的开源扫描器大略研究了下,紧张从以下几个方面评估:
扫描准确率
性能
支持的扫描漏洞类型
爬取页面时,能够仿照用户交互,即是否支持DOM,AJAX等技能
支持指定要求参数进行 GET / POST 扫描
是否供应 API,且易于利用
是否支持登录扫描(带 Cookie 或 自动登录)
支配是否方便,文档是否完善,扫描报告内容是否易于判断误报
社区是否生动,技能支持是否有担保
...
列的哀求比较多,评估的时候尽可能知足就好...
这里根据试用结果和网上资料,对照哀求给出结论:
准确率:由于韶光有限,没有逐一测试,参考的的是 sectool的报告,按照表中的结果,Arachni 排在前几位
性能:韶光缘故原由,没有逐一测试
漏洞类型: Arachni 对付常见的漏洞类型基本都覆盖到了,完全的类型可以参考 checks
仿照用户交互: Arachni 内置 PhantomJS
带参数扫描:Arachni 能够通过 vector feed plugin 来支持,支持 GET 和 POST
API: Arachni 基于 ruby 措辞编写,供应了完全的 REST API
登录扫描:支持设置 cookie 参数,并支持 autologin plugin 来实现自动登录
Arachni 供应自包含 package,无需安装依赖;wiki 写的比较详细;报告内容总体还算比较详细,支持多种格式,如 html, json 等
Arachni 代码目前还在更新中,之前在 github 上提 issue,作者都会积极回答,回答速率也比较快,技能支持比较有保障
...
以是,末了就决定利用 Arachni 了。
在利用 Arachni 的过程中,碰着过一些坑,这里给大家分享一下这段韶光利用的一些履历,比如常用场景的配置、把稳事变、二次开拓等等,希望对大家有帮助~
0x02 支配
在支配方面,Arachni 供应了 self-contained 的 package,以是只须要下载后解压就可以运行了,非常方便,下载地址 稳定版,开拓版本,推举先利用稳定版本
平台支持 Linux, MacOS, Windows,以 linux 为例,下载解压后,运行 rest api server
0x03 配置
这里先大致先容一下 Arachni Rest API 创建扫描任务的配置项,完全的参数息争释可以对照命令行参数解释:
接下来以 DVWA 1.9 为测试目标,先容一些常见场景的扫描配置,DVWA 1.9 的安装和利用大家可以网上搜一下,这里就不做先容了。
由于 DVWA 1.9 默认登录后返回的 security 级别为 impossible,会导致利用自动登录插件后无法扫出漏洞,这里修正了代码,让它默认返回 low
修正 config/config.inc.php
场景: 带cookie扫描
配置如下:
扫描解释:
checks:仅扫描 csrf
audit:扫描 form 表单,但不扫描 cookie 和 header
scope:限定爬取页面数为 4,不扫描 logout 等会导致 cookie 失落效的页面
http: 设置要求的 cookie,这里须要把稳的是,每个 cookie 项后都有一个 path 属性,指定浸染域。由于如果不指定,cookie 的浸染域便是 url 中的 path,比如这里为 /dvwa/vulnerabilities/csrf/,这个时候如果在爬取过程中,爬取到其父路径,要求就不会带上 cookie,导致 server 返回 set-cookie 相应头,覆盖原有 cookie,导致会话失落效,以是这里最好设置成根目录 /。
场景: 自动登录扫描
配置如下:
扫描解释:
checks:仅扫描 sql_injection
audit:扫描 form 表单,但不扫描 cookie 和 header
scope:限定爬取页面数为 5,不扫描 logout 等会导致 cookie 失落效的页面
plugins & session:利用自动登录插件,url 为登录入口,parameters 为登录须要的参数,格式为 query_sting,通过相应中是否包含 check 的内容来来判断是否登录成功,由于 DVWA 登录成功后返回的是302跳转,相应body为空,导致check失落败,此时可以通过配置 session 下的 check_url 和 check_pattern 来实现(引擎会优先利用 session 下的配置),这里检讨 index 页面为是否包含 PHPIDS 来判断是否登录成功
场景:指定要求参数对接口进行扫描
当通过设置代理的办法网络到要求信息后, 须要根据要求中的参数来扫描,要求分为 GET 和 POST
POST
Arachni 供应了 vector feed plugin,比如在 DVWA 中,Command Injection 的要求方法是 POST
配置如下:
扫描解释:
checks:仅扫描 os_cmd_injection
audit:扫描 form 表单,但不扫描 cookie 和 header
http: 设置要求的 cookie_string
scope:这里 page_limit 须要设置为 0,如果设置为 1 ,则不会进行扫描
plugins :利用 vector_feed 插件,参数为 yaml_string ,即符合 YAML 语法的字符串。这里阐明一下如何天生这个值
首先把字符串在 python 命令中打印出来
对应字段如下:
action: 要求的url
method: 要求方法为 post
type: 要求body的类型,这里为表单所以为 form,如果body是 json 的话,这里须要设置为 json
inputs: 要求的参数,这里有两个参数 ip 和 Submit
在 YAML 缩进是很主要的,对付 type 为 json 时,由于 值可能会为一个object,比如
GET
对付 GET 的要求,要求参数是在 url 的 query string 中的,可以直接设置 url 属性,此时 page_limit 须要设置成 1。
由于 page_limit 的值在利用和不适用插件时的含义有所不同,这里为了避免这个问题,对付 GET 也推举利用 vector_feed 来配置
这里以 DVWA 的 sql注入为例
配置如下:
扫描解释:
checks:仅扫描 sql_injection
audit:由于是 GET ,以是这里设置扫描 links ,但不扫描 cookie 和 header
http: 设置要求的 cookie
scope:这里 page_limit 须要设置为 0,如果设置为 1 ,则不会进行扫描
plugins :利用 vector_feed 插件,参数为 yaml_string ,即符合 YAML 语法的字符串。GET 的情形须要的参数少一些
只须要设置 action 和 inputs 即可
扫描报告
对付查看扫描进度,停息,删除扫描的 API 都比较大略,这里就不详细先容了。
扫描完成后,可以通过如下 API 来获取指定格式的报告,支持多种格式
扫出的问题在相应的 issues 部分
0x04 二次开拓 & 打包
如果在利用过程中碰着bug和误报,想进行调试或修正,可以自己搭建开拓环境进行调试和修正
开拓环境设置
参考 wiki 的 Installation#Source based
须要装以下依赖
Ruby 2.2.0 up to 2.3.3.
libcurl with OpenSSL support.
C/C++ compilers and GNU make in order to build the necessary extensions.
PhantomJS 2.1.1
然后实行
直接修正代码,然后创建扫描任务就可以进行测试,日志在 logs 目录下
打包
参考 [Development-environment][10] ,这里说下我的步骤
把以下三个依赖的项目拉到公司的 gitlab
arachni
arachni-ui-web
build-scripts
须要修正的地方有以下几个地方
修正 arachni-ui-web 的Gemfile,将以下部分
如果下载依赖过程中,碰着网速问题,可以合营 proxychains 。这里说一下,脚本实行过程中中断,再次运行会早年次中断的地方开始,由于打包过程须要从内网 gitlab 拉代码,以是记得下载依赖包后,停滞,去掉 proxychains,然后再运行
0x05 总结
由于 Arachni 供应的参数较多,文中只针对常见和比较主要的部分进行了剖析和先容,希望能在构建自动化黑盒扫描平台时,给大家供应一些参考。
其余,如果哪里有写的不对或者不准确的地方,也欢迎大家指出。
0x06 参考
Arachni Scanner
Arachni Github