网络空间搜索引擎

 

 

随着互联网、物联网、传感网、社交网络等信息系统所构成的泛在网络不断 发展,网络终端设备数量呈指数级上升。这为企业进行终端设备资产清点和统一 管控带来了巨大挑战,同时也引发了一系列安全问题,网络攻击与防御的博弈从 单边代码漏洞发展到了大数据对抗阶段,网络空间搜索引擎应运而生。

搜索引擎是指从互联网搜集信息,经过一定整理以后,提供给用户进行查询 的系统。传统搜索引擎对我们来说并不陌生,像Google 、百度等,每天我们几乎 都会用它们来搜索消息。与传统搜索引擎相比,网络空间搜索引擎有很大不同, 其搜索目标为全球的IP地址,实时扫描互联网和解析各种设备,对网络中的设备 进行探测识别和指纹分析,并将其扫描的目标信息进行分布式存储,供需求者检 索使用。传统的网络空间搜索模型框架一般由五部分组成:扫描和指纹识别、分 布存储、索引、UI界面以及调度程序,如图4-6所示。

网络空间搜索引擎_第1张图片

图4-6    网络空间搜索模型框架

网络空间搜索引擎的用途有很多。对于安全研究者来说,能够帮助安全研究 人员针对APT组织、攻击方式等情况进行分析;对于公司安全管理人员,能够帮 助他们进行网络资产匹配、安全评估等;对于安全白帽子,能够帮助渗透测试人 员在与目标非交互的情况下搜集信息,例如,搜索资产、系统类型,开放端口

等。

 

 

 

 

 

 

4.3.1    常见搜索引擎平台

 

目前的网络空间搜索引擎平台比较多,各具特色,均可通过用户指定的关键 词来搜索网络中的设备或者设备信息。常见的网络空间搜索引擎有Shodan、

Censys 、ZoomEye 、Fofa 、Punk SPIDER 、IVRE(Drunk)和傻蛋等,接下来将详 细介绍ZoomEye和Shodan两款搜索引擎。

ZoomEye ,又称为“钟馗之眼” ,是国内安全厂商知道创宇倾力打造的知名空 间搜索引擎,它可以识别网络中的站点组件指纹和主机设备指纹。相较于

Shodan ,它更侧重于Web资产发现,而Shodan偏向于主机层面。该搜索引擎可以 搜索出三十多万条吻合度较高的数据,与此同时,ZoomEye具备全球4100万个网 站的网站组件指纹库,极大地提高了搜集效率和准确度。ZoomEye的搜索界面简 约,易上手,高级搜索功能非常实用,用户体验不错,“海盗榜计划”可以区分出 不用权限的用户,提高用户的互动性。 目前的ZoomEye针对普通用户是免费,但 是某些模块和数据需要收费,如图4-7所示为ZoomEye搜索引擎界面。

Shodan是全球开放最早的网络空间搜索引擎,也是目前全球最为知名的搜索 引擎。Shodan每月中会在全球5亿左右的设备上进行信息搜集,主要针对服务

器、网络设备、摄像设备、工控设备等基础设备进行扫描。Shodan为用户提供了 11种代码库,便于使用API接口,其中部分浏览器中集成了带有Shodan搜索功能  的插件。使用Shodan需要注册账号,同时可以缴费注册成会员,企业版和高级企 业版是收费的。Shodan还提供了Scanhub 、Images 、3D效果展示、CLI 、蜜罐判断 等实用性较强的功能,如图4-8所示为Shodan搜索引擎界面。

 

 

 

 

 

网络空间搜索引擎_第2张图片

图4-7    ZoomEye搜索引擎

网络空间搜索引擎_第3张图片

图4-8    Shodan搜索引擎

 

 

 

 

 

 

4.3.2    搜索引擎语法

下面就以ZoomEye和Shodan两大网络空间搜索引擎为例,对搜索引擎的使用 进行简单介绍。

ZoomEye支持公网设备指纹检索和Web指纹检索。Web指纹识别包括应用

名、版本、前端框架、后端框架、服务端语言、服务器操作系统、网站容器、内 容管理系统和数据库等。设备指纹识别包括应用名、版本、开放端口、操作系

统、服务名、地理位置等,直接输入关键词即可开始检索。下面列举了ZoomEye 的常见搜索语法,表4-8所示为设备指纹检索语法,表4-9所示为Web指纹检索语 法。

表4-8    设备指纹检索语法

网络空间搜索引擎_第4张图片

表4-9    Web指纹检索语法

网络空间搜索引擎_第5张图片

 

 

 

 

 

网络空间搜索引擎_第6张图片

为了能够更好地解释ZoomEye设备指纹搜索语法,下面列举了搜索设备指纹  的使用示例,比如想查询在美国纽约市的Linux系统,且系统中运行组件为Apache 的服务器,我们可以构造如下的搜索语法:

 

app:"Apache httpd" +os:"linux" +country:US +city:"New York City"

搜索结果如图4-9所示。

网络空间搜索引擎_第7张图片

图4-9    ZoomEye搜索结果

接下来列举了Web指纹检索的使用示例,比如想查询美国纽约地区使用Linux 系统的网站,可以构造如下的搜索语法:

网络空间搜索引擎_第8张图片

site:google .com +os:linux +country:US +city:"New York City"

 

 

 

 

 

图4-10    Web指纹检索示例

网络空间搜索引擎_第9张图片

Shodan主要获取互联网中设备中的服务、位置、端口、版本等信息, 目前比 较受欢迎的内容有webcam 、linksys 、cisco 、netgear 、SCADA等。通过不同的搜  索语法可以做到批量搜索漏洞主机、统计中病毒主机、进行弱口令爆破、获取

shell等功能。表4-10中整理了常用的搜索语法。

表4-10    Shodan常用语法

表4-10中整理的Shodan语法只是其中一部分,这些语法可以结合在一起使用

 

 

 

 

 

 

 

 

 

 

 

4.3.3    搜索引擎API的使用

 

1.ZoomEye

ZoomEye除了以上介绍的智能检索功能以外,还提供了强大的Restful API功  能,用户通过它能够更好地与平台连接,调用平台提供的各类资源。接下来将带 领大家通过Python程序调用ZoomEye的API接口实现自动化信息搜集。ZoomEye平 台主要使用的是Json Web Token的登录验证方式,用户进行登录,并获取

access_token就可以直接调用API功能。方法如下:

方法1    通过curl命令直接获取access_token 。在Linux系统终端执行如下命 令,其中username为注册的邮箱或手机号,password为登录密码:

 

curl -X POST https://api.zoomeye .org/user/login -d '{ "username" :"20***** 989@qq .com", "password" :"123*******wxz"} '

运行结果如下所示:

{"access_token" : "eyJhbGciOiJIUzI1Ni IsInR5cCI6IkpXVCJ9 .eyJpZGVudGl0eSI6IjIw NzI2MjI5ODlAcXEuY29t*********************TM1OTE2NzgsImV4cCI6MTU5MzYzNDg 3OH0 .3Ync_i7QBTVgtAOMkkZSGWz5Y__zps_1s3fVM-eMm6Y"}

方法2    通过Python脚本获取access_token 。通过构造post请求的方式,将用户 名和密码以json的格式发送到ZoomEye的后端,打印出响应数据包,代码如下所  示:

 

#!/usr/bin/python

#coding:utf-8

import requests

import json

def main() :

username = input("username:")

password = input("password :")

url = "https://api.zoomeye .org/user/login"

data = json .dumps({ 'username ' : username, 'password ' : password})

access_key = requests .post(url=url,data=data,verify=False)

print(access_key .text)

if __name__ == "__main__" :

main()

执行效果如图4-11所示。

 

网络空间搜索引擎_第10张图片

 

 

 

网络空间搜索引擎_第11张图片

图4-11    打印响应数据包

接下来,可以利用获取到的access_token检索我们需要的信息,这里将通过案 例进行演示说明,关于ZoomEye API详细的字段说明,大家可参考官方指导手册  (ZoomEye - Cyberspace Search Engine)。

案例1    使用host方法,查询开放6379端口的服务器IP地址,并打印出检索到 的IP地址和端口号,详细代码如下所示:

网络空间搜索引擎_第12张图片

U

#coding:utf-8

import requests

from bs4 import BeautifulSoup

import json

import re

def main() :

headers = {

"Authorization" : "eyJhbGciOiJIUzI1Ni IsInR5cCI6IkpXVCJ9 .eyJpZGVudGl0eSI6

IjIwNzI2MjI5ODlAcXEuY***********************************0MzYsImV4cCI6MT U5MzYzNTYzNn0 .4EkTH3vh3JSjBJ_wEfnaMhQWuPSaIzQypBAKpfUSuZ0"

}

url = "https://api.zoomeye .org/host/search?query=port :6379&page=1&facet= app,os"

info = requests .get(url=url,headers=headers)

r_decoded = json .loads(info .text)

for line in r_decoded[ 'matches '] :

print(line[ 'ip ']+ ' : '+str(line[ 'portinfo '][ 'port ']))

if __name__ == "__main__" :

try:

main()

except Keyboard Interrupt :

print("interrupted by user, killing all threads . . .")

输出结果如下:

 

 

 

 

 

网络空间搜索引擎_第13张图片

2.Shodan

使用Python去调用Shodan的API接口可以实现自动化信息搜集,首先需要注册 用户,在My Account中可以看到API Key。

初始化API:

 

网络空间搜索引擎_第14张图片

网络空间搜索引擎_第15张图片

import shodan

SHODAN_API_KEY= 'Hg4t6PpPMvz4mgQhS**********KkCZLXh '

shodan_api=shodan .Shodan(SHODAN_API_KEY)

网络空间搜索引擎_第16张图片

网络空间搜索引擎_第17张图片

 

初始化API之后就可以使用Shodan的库函数,下面整理一些函数。可以参考 Shodan官方给出的API文档(Shodan Developer)。

·shodan_api.count(query ,facets=None):查询结果数量。

·shodan_api.host(ip ,history=False):获取一个IP的详细信息。

·shodan_api.ports() :获取Shodan可查询的端口号。

·shodan_api.protocols() :获取Shodan可查询的协议。

·shodan_api.services() :获取Shodan可查询的服务。

·shodan_api.scan(ips ,force=False):使用Shodan进行扫描,ips可以为字符 或字典类型。

案例2    使用host方法获取指定IP的相关信息,代码如下:

 

 

 

 

 

import shodan

import json

SHODAN_API_KEY= 'Hg4t6P###########4U9zKkCZLXh '

shodan_api=shodan .Shodan(SHODAN_API_KEY)

ip=shodan_api.host('8.8.8.8 ')

print(json .dumps(ip))

运行结果如下所示:

 

{"region_code" : null, "ip" : 134744072, "postal_code" : null, "country_code" : "US", …… "ip_str" : "8 .8 .8 .8", "os" : null, "ports" : [53]}

案例3    搜索JAWS摄像头,将IP和端口打印出来,代码如下:

import shodan

import json

SHODAN_API_KEY= 'Hg4t6PpP##########4U9zKkCZLXh '

shodan_api=shodan .Shodan(SHODAN_API_KEY)

results=shodan_api.search( 'JAWS/1 .0 ')

print("Results found :%s"%results[ 'total '])

for result in results[ 'matches '] :

print(result[ 'ip_str ']+" :"+str(result[ 'port ']))

运行结果如下:

网络空间搜索引擎_第18张图片

以上内容主要介绍了网络空间搜索引擎的基本概念,对Zoomeye和Shodan两 款搜索引擎的特点和常用语法进行详细的说明,让读者在对国内外的搜索引擎有 一定了解的同时可以熟悉Zoomeye和Shodan的搜索语法。最后结合Python和搜索 引擎API进行自动化信息搜集,笔者通过简单的示例介绍了Zoomeye和Shodan的  API使用方法,希望读者多去实践,能够在工作中运用搜索引擎提高信息搜集的 效率和质量。

 

 

你可能感兴趣的:(笔记)