世界上最可怕的搜索引擎
全球网络监控的突破口
Shodan现状
关于Shodan已经写了几篇文章了
这几篇文章中设计的知识主要来自于我的老师了,之前我介绍过。
其实国内的论坛或者网站上几乎也就是上面这些内容,
wooyun上看到一篇shodan作者在2009年在DEFCON上发布的文章
Freebuf有一篇文章我认为可以参考
在知乎上大概有几十篇文章吧,遗憾的是很多都是仅仅是通过shodan搜索,之后使用其他的已知漏洞进行攻击。其中也有几篇是比较好的
我买的那么多安全的书中也仅仅有两本介绍了shodan,也没有特别深入的说。
Shodan官方手册
原来官方给出了使用手册,下载需要花至少0.99$,谷歌搜索了很长时间才得到完整版,不过并不是最新版本,因为Shodan在2017年8月23日更新过这本书,而下载到的是2016年的版本,不过修改应该不会太大。
这本书是全英文,没有任何中文版本,所以英语好的小伙伴可以翻译一下,一共92页,我昨天用了一下午翻译完了,不过没有写下来。
书籍购买地址:https://leanpub.com/shodan
我下载到的也提供一下:链接:https://pan.baidu.com/s/1eR21IYA 密码: uc6q
这本书在国内基本找不到,竟然连伟大的淘宝都没有
Shodan计划
Shodan这么伟大的作品不应该仅仅这样介绍就结束。
接下来的几篇文章我会以官方文档为主,其他资料(如上面提到的或者Youtobe上的资料)为辅,全面详细认真的介绍Shodan。
我希望它们会是国内介绍shodan最专业的文章(号角响一点自己才有动力,其实我知道大佬们只是不愿意出来写而已!)
PS: 其实国内在空间搜索上做的也很出色,知道创宇的钟馗之眼等,余弦大大的产品最近好像API又重新使用了
Search
Engine
Shodan介绍
Shodan的工作原理
Shodan是如何工作的呢?
很多人问过的问题,其实很简单,其实并不难
Shodan其实也是一个爬虫。它无差别的去访问各种IP ,之后根据返回的Banner信息 来进行判断目标的基本信息。
Banner
Banner信息可以认为是由目标返回的各种信息,对于Web Server来说,返回的 HTTP的各种头信息,
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Sat, 03 Oct 2015 06:09:24 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 6466
Connection: keep-alive
对于RDP应用,那可能就是远程桌面的截图
对于工控设备,它们大多数由自己的协议,所以Banner也是千差万别
例如:Siemens S7industrial control system protocol:
Device Metadata
根据抓取的Banner信息,Shodan 还会抓取一些设备的元信息(metadata),例如地理位置(经纬度),具体方位,主机名,操作系统类型等等很多信息
IPv6
Shodan还会抓取IPv6的设备的信息。
Shodan 数据采集
频率问题
shodan的爬虫是每天24小时不停歇的爬去数据的,所以说我们查询的数据都是实时的,也就是说明天搜索的结果可能就和今天不一样了
分布式爬虫
Shodan的爬虫是分布式的,分布在世界各地的,其实这个也很正常,Shodan官方都在文档里面说了,很多美国管理员直接就禁止中国的IP地址!分布式爬虫可以突破地域限制。这些爬虫主要分布在下面这些地区:
域名解析追踪
• USA (East andWest Coast)
• China
• Iceland
• France
• Taiwan(台湾永远是中国不可分割的一部分)
• Vietnam
• Romania
• Czech Republic
无差别扫描
这些爬虫的算法实现是这样的
- 随机生成一个的IP地址
- 从Shodan预定义好的端口列表中随机选择一个
- 检查这个随机IP的这个端口是否开放,之后获取Banner信息
- 不断重复
SSL
Shodan的爬虫会爬所有采用SSL功能的服务,比如HTTPS,爬取的不仅仅是SSL 的认证信息,包括SSL的各种属性信息!
Shodan 究竟是如何在内部进行记录搜索结果的呢?
使用的其实就是Json来进行存储,
说到SSL漏洞,最先想到的可能就是Heartbleed(心脏滴血)漏洞了,下面我就来以这个漏洞来介绍一下这个漏洞是如何搜索并且Shodan是如何存储的。
可以看到除了中国,至少还有54155台设备遭受着这个漏洞的影响
此时内部存储是这样的
{"opts": {
"heartbleed": "... 174.142.92.126:8443 -VULNERABLEn",
"vulns": ["CVE-2014-0160"]
}
}
如果支持导出密钥,爬虫会添加opts.vulns 的属性:
"opts": {
"vulns": ["CVE-2015-0204"]
}
在爬虫尝试去连接SSL的服务时使用ephemeralDiffie-Hellman ciphers,并且连接成功后,就会记录下面这段信息
Hi
Hi
关于版本信息
正常我们使用浏览器连接SSL 服务的时候,浏览器会与SSL服务器协商两件事
- SSL 版本(比如 TLSv1.2)
- 使用的密钥
协商归协商,不过Shodan怎么会那么乖乖地去遵守呢?
协商结束后Shodan会发送一个正常协商后的请求,不过在这之后Shodan的爬虫们会尝试各个版本的SSL请求,以确定该服务器到底支持哪些版本的SSL,比如 SSLv2、SSLv3、TLSv1.0、TLSv1.1、TLSv1.2,之后会做如下存储
{"ssl": {
"versions": ["TLSv1", "SSLv3","-SSLv2", "-TLSv1.1", "-TLSv1.2"]
}
}
其中带有 – 号的表示服务器并不支持这个版本
如果我们想要搜索版本为 SSLv2版本的服务器(HTTPS,POP3 with SSL等),我们可以这样进行搜索 ssl.version:sslv2
证书链
SSL 服务中包含一个 ssl.chain属性,这个属性包含证书链上的所有的SSL 证书,证书链是一个证书列表,从 root 到 end-user ,关于证书链我了解的也不多,大家可以参考下面这个地址中的文章进行学习!
http://blog.csdn.net/win15135173776/article/details/61193997
高端一些的信息
之前我们的文章中就介绍过Shodan可以分析网站建设采用的技术,如脚本,框架,数据库,服务器,操作系统等
Shodan采用下面两种方法进行判断
Web Components
对于HTTP 和 HTTPS 来说,Shodan像下面这样存储数据
将网站使用的技术作为Key,之后用另一个字典作为Value。Categories的属性值是网站采用的技术。
Shodan 会将这些都存储在 http.components属性中,上面的信息表明该网站正在运行Drupal内容管理系统,它本身使用jQuery和PHP。
Shodan 的 REST API通过http. Component过滤器来给这些数据赋予了可搜索性,并且可以从http.component,http.component_category两方面进行检索,Shodan的API 接口我会在后面的文章中进行讲述。
当然这两个方面我们也可以用在Web 接口上,比如我们查询一下使用php的服务器吧!
http.component:php
可以看到有1189125 个
那么我们查询一下使用java的吧
那ASP.NET的呢
最近几年Python 增长很快,那就看看有多少Python的网站吧
这回谁多一些就知道了吧!
我们还可以查询一下有多少网站使用了CMS
http.component_category:cms
这里有一点我也比较疑惑,为什么搜索出来的网站似乎都使用了Wordpress,前两页都是这样,难道在Shodan看来wordpress才算是CMS吗???
Cascading
及联
就是说一个设备的Banner信息中显示另一个IP地址运行着某种服务,那么爬虫们就会去确认这个IP及其服务的Banner信息。
比如 mainline DHT 返回的Banner信息是这样的
(Bittorrent 用来追踪客户端的方法,具体查看
https://en.wikipedia.org/wiki/Mainline_DHT)
DHT Nodes
97.94.250.250 58431
150.77.37.22 34149
113.181.97.227 63579
...
之前,Shodan会使用一个爬虫去及联的爬取,直到DHT出现后,Shodan的爬虫遇到及联的情况的时候会启动更多的爬虫去抓取Banner信息
这样同时也带来了管理问题,父爬虫和自爬虫之间如何区别和管理呢?
_shodan.id: Banner的唯一ID,如果一个及联的情况出现,这个ID可以确定子爬虫启动成功了,但是具体发送请求获取Banner信息是否成功就不得而知了!
_shodan.options.referrer: 这个还不太解释,首先这个是Banner的一个ID,我们称这个Banner为Banner A,由Banner A 产生了Banner B ,Banner B 是现在正在产生的Banner,那么这个属性就是用来标记 使Banner B 产生的原因 Bannner A 的,同时就是说 Banner A 是 Banner B 它爹
-END-