马程
[摘要]伴随着大数据的广泛应用,网络安全已不再是一个信息孤岛。从第一个莫里斯病毒的传播,到今天互联网随处可见的APT攻击,网络攻击与防御的博弈已经从单边的代码漏洞发展到了大数据对抗阶段。为此,论文以国外著名的Shodan搜索引擎为例,通过结合日常攻防实践、传统搜索引擎原理和Shodan搜索引擎的特征,深度剖析以Shodan为代表的网络空间搜索引擎的工作原理,并提出其在网络攻防方面的实战应用。进而为网络安全从业和研究人员,在网络安全研究及该类平台的建设中,提供有价值的参考和建议。
[关键词]网络空间搜索引擎;Shodan;原理研究;网络攻防实战
1 引言
传统搜索引擎对我们来说并不陌生,像Google、百度、Bing等,只要我们打开网页几乎就会用到。对于传统搜索引擎的理论研究,从上世纪末就已经开始。虽然到目前为止,Google和百度等搜索引擎厂商,仍未公布其核心算法,但是学界已经有一定的研究成果,并且形成了相对成熟的理论体系。
相比于传统搜索引擎,网络空间搜索引擎作为一个新颖的概念,它的诞生和研究则要滞后很多。以Shodan搜索引擎为例,Shodan是在2009年由著名安全专家JohnMatherly所创建的,是全球第一个全网设备搜索引擎。而不同于传统搜索引擎的以网页内容索引为主,Shodan的搜索目标集中在全球的IP地址上。即搜索范围在1.1.1.1-255.255.255.255的所有设备及服务上。这样的搜索结果对于普通网民来说可能没有意义,但对于网络安全研究人员来说,这就是一个“聚宝盆”。相比国外来说,“网络空间搜索引擎”这个概念,据考证,是知道创宇安全公司于2013年首次在国内提出的,从定义的角度来说,还是比较合理地描述了Shodan等的功能特性。因此,本文在做分析时,采用了这个概念。据此,知道创宇也在国内建立了第一个网络空间搜索引擎——ZoomEye,ZoomEye与Shodan在扫描原理上大同小异,在指纹识别的重点上略有差异。本文在重点分析Shodan搜索引擎原理的同时,也会结合分析部分ZoomEye的优点和特性。
客观来说。不管作为理论研究还是应用研究,目前学界对网络空间搜索引擎的研究非常少,还没有形成一个清晰的定义和完善的理论体系。部分文章中也只是提到对Shodan等搜索引擎的简单使用,未涉及到深层次的原理分析。本文通过结合攻防实践、传统搜索引擎原理以及Shodan搜索引擎的特诊,深度剖析以Shodan为代表的网络空间搜索引擎的原理模型和功能模块,并提出相应的实战应用方法,以期为网络安全从业及研究人员。在之后的网络空间搜索引擎平台建设和攻防实战中,提供相应的参考和依据。
2 网络空间搜索引擎原理及功能分析
根据Shodan官网描述,Shodan能不间断地对全球40亿IP地址进行扫描及指纹识别,并提供快速、准确的结果搜索,每个月至少更新4亿的装置数据。本文对Shodan原理及功能的分析方法,主要是依据传统搜索引擎的原理,结合Shodan搜索引擎的特征,尽可能在理论上还原Shodan的工作模式,并在此基础上提出本文对搭建一个网络空间搜索引擎的几点可能的方案,以供安全人员参考和借鉴。图1是Shodan的应用截图。
2.1 框架模型分析
网络空间搜索引擎来源于传统搜索引擎,因此在对前者框架模型进行分析时,我们可以借用相对比较成熟的传统搜索引擎模型,这样更符合实际。
传统搜索引擎的基础技术主要包括四个重要环节:网络爬虫、建立索引、内容检索和链接分析。网络空间搜索引擎因处理的对象不同,故模块的重点也与传统搜索引擎有所不同,相比而言,前者技术上更容易实现。据此,本文根据传统搜索引擎及Shodan的功能特性,绘制出了简单的Shodan框架模型图,如图2所示。
在图2中。我们将Shodan的框架模型分为五个部分:扫描和指纹识别、分布存储、索引、UI界面以及调度程序,其中数据在前三个部分之间的传输都是双向的,调度程序则保证整个流程的运行。这个模型不难理解,是一个比较通用的搜索引擎框架,遵循了数据输入——数据处理——数据输出的基本原则。
2.2 功能模块分析
在上文中,分析了Shodan框架包含的五个构成部分,其中Web UI、调度程序和索引都是我们日常比较熟悉的。所以本节中将重点分析扫描和指纹识别、存储这两个网络空间搜索引擎的核心功能模块。
2.2.1 扫描模块
在对Shodan进行分析时,有一个疑问:究竟Shodan是怎么进行快速扫描的?全球从1.1.1.1到255.255.255.255,一共42亿个IP地址,除去局域网IP地址,大概还有约40亿个IP地址。Shodan又是怎么保证快速更新IP扫描结果的?这个问题对于传统搜索引擎来说,它是不会考虑的,因为蜘蛛的工作方式是爬行网页链接,没有就不爬了,但是IP的扫描不同。对IP进行扫描时,既要扫描存活又要识别服务。
对于上述的疑问,基于现有的扫描知识,本文提出了几点可能的方法:(1)使用分布式的Nmap进行扫描:服务识别准确度高,扫描速度慢;(2)使用自己开发的分布式扫描脚本:准确度有待确定,速度可控;(3)使用分布式Zmap扫描开放端口,Nmap做服务识别:速度快,准确度也有保证。
经过对比,以上第三种方法无疑是比较理想的,用Zmap扫描端口,用Nmap做服务识别。Nmap应该是网络安全研究人员的老朋友了,因为它优秀的扫描功能,所以一直是网络扫描的首选。Zmap是2015年由美国密歇根大学研究人员组成的一个团队开发的,因为它使用“无状态”方式扫描,所以扫描速度非常快。图3是Zmap扫描2万个主机873端口开放情况的扫描结果,仅用8s时间。因此,使用Zmap可以完美解答之前提出的疑问:使用分布式Zmap对全球IP进行不间断的循环扫描,发现IP信息变化,则在数据库将原IP信息进行更新。
2.2.2 指纹识别模块
在图1的Shodan使用截图中,我们不难发现Shodan强大的功能。当我们搜索873端口时(Port:873),Shodan不但列出了所有开放873端口的主机,同时还对其进行了安全测试。因为873端口的开放服务是Sync(Linux下的数据镜像备份服务),Sync的默认配置是不需要密码就能访问的,这样带来的安全隐患是不仅有可能造成源代码等敏感信息泄露。同时攻击者可直接通过此通道修改源代码。图4是我们对Shodan搜索出来的IP地址103.27.208.227的验证情况,结果证明Shodan确实利用了sync的漏洞对该IP地址进行了安全测试。
通过搜索结果继续分析。Shodan内部的指纹识别应该使用了多重识别机制,按照不同的端口采取了不同的的识别办法,主要包含三个部分。
(1)常规端口识别。Shodan内置了常规端口的识别库,比如21(FTP服务)、22(Ssh服务)、873(Sync服务)、6379(Redis服务)、11211(Memcached服务)等端口。同时,Shodan还为这些端口提供了相应的漏洞库,一经识别该端口开放,便可直接调用相应漏洞进行安全测试。
(2)非常规端口识别。首先使用Nmap内置的脚本进行非常规端口识别,比如“nmap-sV”命令即可:如果仍无法识别,使用返回Banner进行云识别。
(3)Web指纹识别。目前Shodan在Web服务识别上面,使用的是HTTP响应头识别的方式,一般主要看响应头的“X-Powered-By”标签。当然这种方式的识别结果,不是特别完整,这与Shodan主要做网络设备有关系。相比之下,在Web服务识别方面,国内的ZoomEye提供的识别服务是比较准确的,它的识别方式很多,包括各种CMS系统的标签、特征值、特殊文件等等。
2.2.3 数据存储模块
从图1的搜索结果中可以看出,Shodan采集的条目主要包含几个数据:(1)IP、端口信息;(2)地理位置信息,包括国家、城市;(3)操作系统、组件信息;(4)Web服务信息,包括Title、HTTP响应信息;(5)更新时间信息。
不同于传统搜索引擎的页面缓存,Shodan需要存储的数据量并不是非常大,因此可能采用分布式性能较好的Mongodb数据库,或直接采用ElasticSearch做存储加索引,这样的搭配方式不仅解决了分布式的困扰,也降低了数据存储的运营难度。
3 网络攻防方面的应用
本文在上一节以Shodan为例,分析了网络空间搜索引擎的框架和功能模块,旨在帮助安全研究人员更深刻地理解其工作原理。网络安全的研究离不开网络攻防实战,只有在攻击与防御的博弈中,才能发现更多的安全问题和提出更适合的修补措施,才能将网络安全的研究推向新的高度。作为一个安全搜索引擎,网络空间搜索引擎的建设初衷就是为网络攻防提供服务,其在攻防实战中优秀的表现也让安全研究人员更重视、更青睐。因此,学会在实践中熟练地使用网络空间搜索引擎,不仅能大大减少工作量,还能为研究人员带来想象不到的收获和乐趣。
目前网络上存在的空间搜索引擎,在原理和工作模式上大同小异,故本文在做实战应用示例时,还是以Shodan平台为主,其他搜索引擎平台方法基本通用。
3.1 基础用法
基础用法主要提供常用的几种网络空间搜索引擎的检索方法和语句,以下用法并不涵盖所有,具体可参考Shodan官网提供的说明。
(1)多关键词检索:“keyword1 keyword2”。
(2)指定国家或城市检索:“keyword”“country:”cn”或“keywords”city:“beijing”。
(3)指定开放端口检索:“port:873”。
(4)指定IP地址或IP范围检索:“1.2.3.4”或“net:1.2.3.0/24”。
(5)指定操作系统或域名检索:“keyword”os:”linux”或“keyword”hosmame:”.org”。
(6)指定日期范围检索:“keyword”before[after]:01/01/2016。
3.2 API接口的使用
当前主流的网络空间搜索引擎为了方便安全人员开展工作,都提供了相应的API接口,使用这些API接口,我们可以在自己的脚本代码里轻松的获取和利用搜索结果。尤其是在进行批量安全测试时,API接口能发挥事半功倍的作用。以下是利用Python编写的一段简单的Shodan API利用代码,代码的作用是打印API接口的所有属性和方法,并利用该API接口搜索“NetScreen”,最后将搜索结果总数打印出来。
图5是上述代码的执行结果,从图中我们可以发现,Shodan API接口提供了20多个属性和方法供我们使用,上述代码中我们使用的就是其中的一个方法:search()。搜索结果共包含两个键值:Matches和Total,其中Matches是搜索结果的明细,Total是搜索结果的总数。从图中我们看到,Shodan对“NetScreen”的搜索结果一共是24828个。因为搜索结果太多,在这里我们就不展示详细搜索信息了。
下面我们从搜索结果中选出一个IP地址:1.36.17.49(美国)进行验证。“NetScreen”是Juniper的一款高端防火墙和VPN产品,2013年被曝出存在Root权限的后门漏洞,默认后门登录密码:<<<%s un='%s')=%u。我们将简单测试一下该IP是否开了NetScreen服务,并且是否存在后门密码。
在图6中我们使用了NetScreen后门密码,成功登录了1.36.17.49。图中显示NetScreen的版本是6.3.or18.0,这个版本也是明确存在后门漏洞的。
3.3 其他利用方法
像Shodan这样的网络空间搜索引擎,不仅提供上述两种使用方法,它还提供了其他更方便、快捷的方法。比如在Metasploit(一种渗透测试框架)中。我们可以利用Shodan模块“auxiliary/gather/Shodansearch”进行搜索。
同时,互联网上也有以命令行版本的,支持Python、Ruby.Perl、.Net等多种编程语言比如Shodan-Python等,支持不同的执行环境,用起来非常方便,在Github等公开的互联网上就可以下载到。
4 结束语
网络空间搜索引擎是一个较新的研究领域,目前安全人员对其研究较少。本文通过以Shodan为例,全面分析了网络空间搜索引擎的框架模型和工作原理,并就该原理提出了可能的平台搭建方案。同时,通过结合作者日常攻防实战案例,为网络安全从业及研究人员,提供了三种不同的网络空间搜索引擎使用方法。