1. 前言

在互联网中,充斥着各种各样的网络设备,shodan等搜索引擎提供给了我们一个接口,让我们可以在输入一些过滤条件就可以检索出网络中相关的设备。

WX20171201-003340.png

对于我们的一些可能有脆弱性或者比较隐私的服务,为了抵御hacker通过shodan对其进行快速渗透,我们必然有这样的想法:能否让类似shodan这些搜索引擎没法扫描到我,让我这个设备在shodan的搜索结果中不出现,但同时不影响正常用户的访问?

2. 需求分析

出于这样的需求,我们最容易想到的方案就是黑名单,即把shodan的扫描服务器ip添加到我们的防火墙黑名单,这样这些ip在和我们进行连接的时候,防火墙就能直接拦截。但是,如何能获取到shodan扫描器的ip呢?很显然,shodan不可能傻到在网络上公布他们扫描服务器的ip地址,这样大家就可以轻而易举地对它进行屏蔽,那我们是否能利用一些别的手段获取到shodan的扫描服务器呢?

3. 谈shodan的banner抓取

使用过shodan进行搜索的朋友都知道,shodan搜索出来的数据中,一个很重要的数据就是banner信息,banner是shodan使用扫描器和目标服务器端口进行协议交互,目标服务器返回的标语信息。像下面这样的一条http服务的banner信息,通过banner信息我们能获取到相关协议使用的组件、版本等。

WX20171201-003454.png

4. 巧妙利用Shodan的banner信息获取扫描服务器IP

shodan可以抓取目标服务器特定服务返回给我们的banner信息,这些banner信息可以分为两类,一类是静态banner,即无论何时何地谁和目标进行交互,目标都返回相同的banner,像下面这样的打印机设备,总是返回打印机的型号及状态:

WX20171201-094213.png

另一类是动态banner,这也是我们需要深入研究的。如果朋友们有一些CTF的经验,肯定很熟悉错误回显这个词,错误回显即我们输入错误后,目标返回和输入相关的错误回显信息,比如:

我们在一个网页的输入框输入:1′ or 1#

服务器给我们返回:String “1 ‘ or 1#” is illegal 

那么,shodan是否在抓取banner信息时候,是否也会抓到和扫描服务器ip相关的回显信息呢?比如,暴露在网络中的mysql服务,虽然shodan可以在网络中扫描到,但是却无法访问数据库【可能原因是ip不合法,用户名账户不匹配等】,mysql就会给扫描服务器返回一条

xxx.xxx.xxx.xxx is not allowed

这样的拒绝访问回显,xxx.xxx.xxx.xxx就是尝试和mysql建立连接但是无权访问的ip。我们在shodan中验证我们的想法,输入关键词【mysql】看到下面的搜索结果:

WX20171201-095326.png

搜索结果验证了我们的猜想,我们利用api直接在命令行中进行查询:

WX20171201-095743.png

下载搜索结果并经过处理后可以得到这样一批IP地址【部分】:

WX20171201-095915.png

以上就是shodan扫描器的ip地址。

5. 深入研究Shodan的扫描器

通过对上述ip的地理信息研究,我们发现这些ip来源于全球各地:

WX20171201-100932.pngWX20171201-101010.pngWX20171201-101413.pngWX20171201-101356.pngWX20171201-101309.png

其实,类似shodan这种扫描行为现在在国家政策层面已经开始被限制了,通过流量监控一旦发现有类似扫描行为,就会报警断网,但是shodan为什么可以规避这些限制,保证官网结果准确且更新快速呢?总结起来主要有两点:

1. 分布式扫描

如上文我们分析其ip地址来源,我们发现了其扫描服务器位于全球各地,就算某些国家禁止另外某个国家的ip访问,shodan也可以用其他国家的ip对其进行扫描,这样可以保证结果的真实完整性。

2. 随机化

如果大家有研究过防火墙或者IDS的检测策略,就会知道防火墙或IDS对于同一源地址向不同目标的地址的同一端口、同一源地址对同一目标的不同端口的连接访问统计是很容易的,一旦这些连接数超过了某一阈值,那么你的isp或者云服务提供商就会对你警告,如果你忽略这种警告,你面对的将是断网。

shodan面对这些策略时候,采用随机化目标ip和端口的方法进行随机探测,扫描流程如下:

step 1: 随机生成一个ipv4地址

step 2: 随机生成一个shodan要扫描的端口

step 3: 根据step1的ip和step2的端口,进行一次端口banner的抓取

step 4: 回到step1

通过上述的策略,shodan的扫描器看起来就像一个“正常”的主机。

6. 结束语

通过本文讲述的方法,可以获取到shodan的扫描服务器ip地址,把这些ip地址添加到防火墙的黑名单中,我们就可以防止shodan的扫描。当然,攻守永远是一个博弈的过程,shodan也可能经常变化他们的ip地址,但是只要我们通过这种方式不断更新我们的黑名单库,也可以一定程度上防止shodan的扫描。

* 本文作者:MasonQAQ