网络空间测绘技术

https://www.shodan.io/

https://censys.io/

https://www.zoomeye.org/

https://quake.360.cn/quake/#/index

https://fofa.so/

https://gobies.org/ 是软件

技术pk点:

目前功能指标:

  1. 端口扫描
  2. 元数据采集

目前性能指标:

  1. 端口数
  2. 协议数
  3. ip数
  4. 指纹规则数

问题:

都只是很粗浅的实现了一小部分,点到为止,大量的新的技术并没有能够很好的融入进去。

目标

网络空间测绘就是绘制“网络攻防地图”,说白了也就是一个情报系统,情报系统最重要的目标就是为决策提供详细且准确的依据。

  1. 能否针对一个IP开放的端口进行完整的协议识别,尽可能不要有遗漏。

因为很多情况下目标系统可能只开放了很少的业务必须的最小化端口,一个准确的协议识别能够作为非常有效的目标动作的决策依据,比如,那是一个工业互联网的协议。所以,能够识别的协议越多越好,“是否某种协议”是一种简单且有效的初步情报。80不一定是http协议,有可能是ssh协议,这种情况在fofa平台能够看到大量的案例,所以传统简单通过端口号的方法极其不准确。这里牵涉到一个很大的问题:到底有多少种网络协议? 2. 能否针对一个协议提取更多的数据内容,为上层的指纹规则提供高价值。

用更技术化的语言就是:能否提供更多属性字段(fields)。属性字段有哪些?比如操作系统,软件信息,版本信息,元数据描述信息,硬件架构,中间件信息,网络信息等一系列的深入内容。拿http举例,一个uri对应一个head一个body,head可以分解成server,x-powered-by等属性字段,可以提取各种中间件信息,body字段可以提取title等信息,如果是https还可以提取证书cert信息(内含common name等高价值信息)。但是有一种情况是非常常见的,就是默认的首页uri返回一个404错误信息或者价值信息特别少,但是当你切换到一个预置包含大量价值信息的uri接口时,比如axis的系统信息页,你就知道我在说什么,全是宝库。类似的,一个二进制协议,你发一个\x01代表hello,通过返回的解析确实能够准确的判断协议种类,但是没有更多的信息,如果你改成\x02它可能就是对应info,吐出来大量信息。

  1. 能否用最少量的数据发包,完成跨版本兼容性,将误报率和漏报率都控制在一个很小的比例。

通常一个协议都会有不同的版本,之间可能存在着不兼容,v1和v2的数据格式截然不同。这时候你发了一种版本的request包,那么其他版本的包就没有响应,导致了大批量的漏报。另外你如果只是通过简单的关键字来识别,必然会存在大批量的误报。如果漏报率误报率高于10%,我觉得这个协议识别就没有太大价值了,因为后续还要提供给指纹库来做上层的业务分析,极大地影响真实的使用场景。