Mid Station

Centaur

0x01 What

Centaur 是一个基于代理转发的分布式扫描系统

0x02 Why

为什么需要这样的软件?

互联网时代,企业需要确保自己网络的安全来保障业务的正常运作。渗透测试就是其中一种通过发现漏洞来确保网络安全的测试方式,而专业完整的渗透测试对于测试人员来说往往费时费力,单一地用扫描器发现漏洞误报率高,效率低,流量大容易拖慢网络。所以一个灵活快捷的辅助型扫描系统将大大降低测试人员的工作量,提高测试的效率。

为什么采用这种架构?

之前也有写过基于scarpy的爬虫式扫描脚本,效果不是很理想,原因如下:

  • 精准度。大多数情况下扫描系统都是对某一固定的目标进行检测,而基于爬虫的扫描系统发散性较强,往往几个链接就爬到了其他无关站点导致偏离目标。
  • 灵活度。由于scarpy的架构,一旦开始了抓取就容易失去控制,即使通过输出看见偏移了目标站点也无法即使改变方式。另外对url的识别也不够成熟。
  • 效率。其实一切问题都是效率的问题,爬虫适合大规模抓取url,但是实际可能存在漏洞的url少之又少,还要写比较精密的过滤器来去重和识别。
    一般Web检测都是针对目标站点的,基于代理转发的办法就相对与通过人工控制输入流,用半自动的方法提高针对性和精确度。浏览器挂上代理,代理部分处理接收的HTTP(S)数据包转发到服务器端,服务器端通过异步的方法把扫描的任务分发到各个子节点,子节点完成任务后把结果重新传回服务端并存入数据库。在渗透测试中测试人员的经验起到决定性的作用,Centaur可以把测试人员的经验和机器扫描的速度结合起来,测试人员只需正常地浏览页面,点击可能出现漏洞的链接,后台就自动开始对链接进行检测。Centaur是希腊神话中的半人马,取其为名因为系统结合了人的智慧和机器的速度,恰是战场所向披靡的半人马。

0x03 How

上面提到系统的三个部分,接下来详细谈谈实现方式。
首先根据经验,Web安全中最容易直接获取系统权限危害系统数据的漏洞一般有三类:

1. 上传漏洞
2. SQL注入
3. 弱口令

在测试过程中寻找这三类漏洞的时间占的时间比重很大,因为一旦发现攻陷系统就是分分钟的事情了,而Centaur目前主要也是往这三个方向挖掘漏洞。
架构:
imgimg

  • Cilent(客户端):基于mitmproxy实现,mitmproxy所提供的libmproxy库提供灵活的方式来处理代理方式接收到的HTTP包,通过filter(过滤器)来进行去重,去掉不适用的url,去掉不相关站点链接等操作,然后通过handler把数据包按GET,POST,PATH三个分类转发到Server(服务端),其中GET对应的是SQL注入漏洞,POST对应的是POST类型的SQL注入漏洞和弱口令,PATH主要对应上传漏洞和列目录漏洞。
  • Server(服务端):通过restful api的方式接收到数据包以后通过异步的方法调用celery任务分发系统,celery能自动检测在线的Worker(子节点),并把任务分发到Worker上。Server还负责把子节点的扫描结果储存到数据库里。
  • Worker(子节点):对应三种不同的任务,调用不同的测试工具来检测,PATH类型对应的是dirs3arch,GET类型对应的是sqlmap,POST对应的是sqlmap和弱口令检测脚本。调用工具完成扫描后,通过sqlAlchemy用ORM方式把结果回传到服务端的数据库中。