在这篇文章中,我们将研究互联网中的宏错误配置问题,并学习如何使用Netz来帮助我们了解相关问题。Netz是一款开源工具,正好适合我们的研究。
扫描的常用方式
检测公开暴露在互联网上的网络资产的最快方法是使用搜索引擎服务,如Shodan、Censys或Zoomeye,并使用查询语言查看广泛的互联网组件。如果您想手动执行,而不是使用在线服务,或者如果您想在内部网络上执行扫描,同样有多种方法可以执行。不同类型的扫描是在小型网络和大型网络之间进行的,而大型网络可以扩展到整个互联网。
对于小规模的扫描,可以使用流行的命令nmap(在最高级的渗透测试发行版OS-Kali Linux中提供)。对于更大规模的网络,最流行的是使用ZMap和masscan。
我该如何做呢?
假设我们现在要进行一项研究,比如说你想扫描整个互联网(或者其中的一些),你打算如何使用这些工具?好问题!
如果你想用ZMap或masscan从自己的电脑上扫描整个互联网,你对结果很好奇,而且不能离开电脑,那你应该准备好一些吃的并做好长时间战斗的准备,因为这可能需要好几个礼拜,而且你的带宽资源估计也够呛。为什么呢?因为这些工具的设计是很有攻击性和侵略性的,能够在最短的时间内扫描整个互联网,你可以控制那些工具使用的带宽容量,并减少它的攻击性,但是你需要更多的食物…
减少等待时间
如果你不想等那么久的话,你可以使用一个开放云设备,但即使是这样,基础设备的网络接口控制器(NIC)也会对每秒处理的数据包数量(PPS)进行一个限制。
那你能做什么呢?你可以使用一个更强大的机器,一个更强大的网卡和更多的PPS,然后它会更快。能快多少?这取决于机器类型和网卡类型-时间越短越好,但即使这样也可能需要数小时到数天。问题是,如果你想在最短的时间内做很多测试,即使是最强大的机器和最好的网卡类型也是有限的,那么现在呢?我们可以使用两种不同的方法来分配工作负载:
- 将扫描任务分发到多台机器,每台机器扫描一个专用的CIDR子网,因此我们可以将0.0.0/0拆分为4个子网,这样每台机器将扫描自己的子网,然后合并结果。
- 使用一台具有多个NIC的强大计算机,并让该计算机使用整个子网。
到目前为止,我们一直在讨论网络扫描,但正如我前面提到的,如果您想做的不仅仅是知道有哪些开放端口和元数据,并且希望在扫描时对这些端口执行应用程序操作,那么您需要一个应用程序扫描工具,其中最流行的就是ZGrab2。
计划执行
下面是我们计划想要实现的工作流:
- 尽可能快地扫描某个子网;
- 将这些IP/端口元组通过管道传输到应用程序扫描工具,以测试这些端口中的各种安全问题;
- 无尽地等待…
下面给出的是应用程序安全扫描的几个例子:
- 你想要测试一个Elasticsearch服务器是否没有配置管理员访问,我们可以通过向`/_cat/indices`发送一个HTTP调用请求,如果返回的是200 OK,则说明存在问题。
- 你想要测试一台Web服务器中的‘.git’目录是否存在错误配置,我们可以向`/.git`发送一个HTTP调用,如果返回的是200 OK,则说明存在问题。
- 你想要测试Redis / Memcached / PostgreSQL / MySQL是否被配置为不需要凭证即可访问,我们同样可以使用ZGrab2进行测试。
在任何需要添加的协议或技术堆栈缺失的情况下,ZGrab2都是可扩展的,因此您只需在Golang中编写一个小函数,就可以轻松地扩展工具功能。