Edited at

翻訳:Perfect Guide to Shodan(Shodan公式レファレンス)

More than 1 year has passed since last update.


はじめに

Shodanのレファレンスの抄訳です。

ちょうどいい感じのまとめ具合を心掛けます。

(レファレンスの最終更新2016年12月26日)


導入

Shodanはインターネットに繋がった機器を対象にした検索エンジンです。


Shodanが返すデータ

Shodanが返す検索結果の単位はバナー情報で、あるIPが複数のサービスを持っていればそれらは別々の検索結果として扱われます。

バナーの他に、位置情報やホスト名、OSなどのメタ情報も表示します。詳しくは付録Aを参照してください。

IPv6にも対応しています。


SSL

SSLは重要なので、SSLが利用可能なサービスについてはSSL証明以外の情報も含めて収集しています。

あるサービスが、Heartbleed、FREAK、Lgojamのような脆弱性の影響を受けるかどうかも判ります。影響を受ける場合、opts.vulnの値が"CVE-2014-0160"のようになり、受けない場合"!CVE-2014-0160"のようになります。

クローラーはSSLv2、SSLv3、TLSv1.0、TLSv1.1、TLSv1.2で接続を試行し、対応しているバージョンを特定します。非対応のバージョンには"-"記号が付きます。

ssl.chainプロパティには証明チェーンの情報が含まれます。


データ収集

クローラーは常時情報を収集しており、地理的な偏りを避けるためにアメリカ、中国、アイスランド、フランス、台湾、ベトナム、ルーマニア、チェコに分散しています。

ある時点の偏りを避けるためにクローラーは以下のアルゴリズムに従って情報を収集します。


  1. 無作為なIPv4アドレスを生成

  2. リストの中から無作為にポート番号を選択

  3. バナー情報を収集

  4. 1に戻る


Webインターフェース

WebからShodanの情報を検索できます。


検索クエリ

後述のフィルタ機能を使わない場合、クエリはバナー情報を対象に検索を実行し、メタ情報は参照しません。検索語をスペースで区切るとAND検索として扱われます。

フィルタ機能を用いてメタデータを検索できます。


フィルタ機能

下の記法でメタデータを検索できます。

フィルタ名:値 ※コロンの後にはスペース不要

スペースを含む文字列は、"San Diego"のようにして検索します。port: 23,1023のようにカンマ区切りで複数の値を取れるフィルタもあります。

-city:"San Diego"のようにすれば検索結果から除外することができます。

下記はよく使うフィルタの例です:

フィルタ名
説明

category
ics, malwareなど

city
都市

country

net
指定されたIP範囲、CIDR記法
net: 190.30.40.0/

org
IPを所有する組織
org:” Verizon Wireless”

全てのフィルタは付録Bを参照してください。


Shodan検索エンジン

Shodan検索はhttps:// www.shodan.ioで利用可能です。

デフォルトでは過去30日間に収集したデータが検索対象です。

JSON、CSV、XML形式で検索結果をダウンロードできます。

JSONにはメタデータも含めてShodanが集めた情報がすべて含まれます。CSVには基本的な情報のみ含まれます。XMLの利用はお薦めしません。

検索結果のダウンロードには購入したポイントを消費する必要があります。

表や図で概要をまとめたレポートは無料で作成できます。このレポートはその時点でのスナップショットで、新たな情報が加わっても変更されません。定期的にレポートを作成し、あとから閲覧することが可能です。

他のユーザとの間でクエリを共有できます。公開したくないクエリは共有しないように注意してください。


Shodan Maps

最大1,000件の検索結果を地図に表示することができます。全ての検索フィルタは地図上で利用可能です。


Shodan Exploits

Shodan Exploitsでは脆弱性を検索できます。脆弱性情報はCVE、Exploit DB、Metasploit元にしています。

Shodanとは異なり、デフォルトでメタデータも対象にした検索を行います。

下記フィルタが利用可能です。

フィルタ名
説明

author
脆弱性の著者

description
説明

platform
標的のプラットフォーム(OS、プログラミング言語、等)

type
脆弱性攻撃のタイプ(遠隔操作、DoS、等)


Shodan Images

Shodan Imagesは、Shodanが収集したスクリーンショットを閲覧することができます。

スクリーンショットは下記の4パターンで収集します。


  • VNC

  • RTSP

  • Webcam

  • X Windows

それぞれのポートからスクリーンショットを収集しているため、例えばWebcamの情報を見たい場合HTTPで、VNCならauthentication disabledで、RTSPならそのままRTSPで検索してください。

スクリーンショットはメインのShodan検索でhas_screenshot:trueフィルタを用いて検索することもできます。


練習問題: Website

省略


外部ツール


Shodan Command-Line Interface

Shodanコマンドラインインターフェース(CLI)はShodanのためのPythonライブラリです。

easy_install shodanでインストール

shodan init YOUR_API_KEYで初期化


alert

APIを使って作成したアラートを一覧表示、クリア、削除するコマンド


convert

Shodanが作成したJSON形式のデータを様々な形式に変換するコマンド


count

検索結果のレコード数を返すコマンド

例:shodan count microsoft iis


download

検索結果をJSON形式で返すコマンド、デフォルトでは1,000件、それ以上必要な場合は--limit flagを使用。


host

ホストの位置情報、開放しているポート、IPを保有している組織などの情報を取得するコマンド

例:shodan host 189.201.128.250


info

クレジットの残りなど、APIアカウントの情報を取得するコマンド

例:shodan info


myip

自分のIPを返すコマンド

例:shodan myip


parse

downloadコマンドでダウンロードしたファイルをパースし、必要な情報をフィルタリングするコマンド

下の例は以前ダウンロードしたMicrosoft-IISのデータからIP、ポート、組織を抽出してCSV形式で出力するコマンド。

例:shodan parse --fields ip_str,posr,org --separator ,microsoft-data.json.gz


scan

Shodanを使ってネットワークスキャンを実行するコマンド

例:shodan scan submit 202.69.165.20


search

Shodan検索を実行し、結果を表示するコマンド

例:shodan search --fields ip_str,port,org,hostnames microsoft iis 6.0


stats

フィルタ条件について上位10の値とレコード数を表示するコマンド

例:shodan stats --facets country apache


stream

Shodanのクローラーが収集する情報をリアルタイムで返すコマンド。多くのフラグがあるが、-datadirと-limitが主。

-datadirはストリームデータを保存するディレクトリ。

例:shodan stream --datadir /var/lib/shodan/

-limitはダウンロードするレコード数。

例:shodan stream --limit 100

-portsはカンマ区切りで収集対象のポートを指定。

例:shodan stream --ports 80,8080


Maltegoアドオン

Maltegoはオープンソースの情報分析アプリケーションです。様々な情報の関連を可視化することができます。

ShodanのMaltegoアドオンには2つのエンティティ(ServiceとExploit)と5つのトランスフォームがあります。


  • searchShodan

  • searchShodanByDomain

  • searchShodanByNetblock

  • toShodanHost

  • searchExploits


ブラウザプラグイン

ChromeとFirefoxにプラグインが提供されています。


練習問題

省略


開発者向けAPI

Shodanは開発者向けにAPI(https://developer.shodan.io/api )を提供しています。

APIはREST APIとStreaming APIに分かれています。

REST APIはShodan検索、ホストの検索、サマリ情報取得および様々なユティリティメソッドを提供します。

Streaming APIはShodanが収集しているリアルタイムの生データを提供します。ストリーミングデータにはいくつかの購読可能なフィードがありますが、検索はできません。


使用制限

プランによってAPIが制限を受けるパターンが3通りあります。

1. 検索クレジット制限/月

2. オンデマンドのスキャンクレジットの制限/月

3. APIのプランに応じたネットワークアラートのIP数の制限

検索クレジットおよびスキャンクレジットは毎月リセットされます。


ファセット

ファセット機能はバナー情報の特定のフィールドのファセット情報を提供します。

利用可能なファセットは付録Cを参照してください。


利用開始

ここで紹介する例はPythonコードですが、ほかの言語でも利用可能です。

Shodanライブラリをインストールするには下記コマンドを実行してください。

easy_install shodan

既にインストールしてあり、アップデートしたい場合は、

easy_install -U shodan


初期化

まずはShodanオブジェクトを初期化する必要があります。

import shodan

api = shodan.Shodan('YOUR API KEY')


検索

まずapiオブジェクトでShodan.search()を呼びます。

results = api.search('apache')

以下省略


Hostの検索

shodan.host()関数を使って特定のIPで利用可能なShodanのデータを見ることができます。

host = api.host('217.140.75.46')

以下省略


スキャン

Shodanは少なくとも月1回インターネットをクロールしますが、すぐにクロールさせたい場合オンデマンドでクロールさせることができます。

scan = api.scan('198.20.69.0/24')


リアルタイムストリーム

Streaming APIはリアルタイムでShodanが収集した情報を返すHTTPベースのサービスです。

以下省略


ネットワークアラート

ネットワークアラートはShodanが収集したデータのリアルタイムフィードです。ネットワークアラートは2つのステップで実行できます。

ネットワークアラートの作成

alert = api.create_alert('Production network', '198.20.69.0/24')

サブスクライブ

以下省略


例:パブリックなMongoDBの情報

省略


産業制御システム(Industrial Control System、ICS)

産業制御システムはオフィスの冷房や発電所のタービン、劇場の電灯、工場のロボットなどを制御するシステムです。


略語

ICS関連の略語を知っておくと便利でしょう。

略語
説明

BMS
ビル管理システム

DCS
分散制御システム

HMI
ヒューマンマシンインターフェイス

ICS
産業制御システム

PLC
プログラマブルロジックコントローラ

RTU
リモートターミナルユニット

SCADA
監視制御システム

VNC
ヴァーチャルネットワークコンピューティング


プロトコル

インターネット上でICSを検索するには2つの方法があります。

1つはICS環境で使用される非ICSプロトコルです。Shodanに含まれるICSの情報の大部分は、ウェブサーバやその他の一般的なプロトコルから収集された、直接ICSとは関連していないけれどICSネットワークで確認される情報です。例えば、HMI上で実行されるウェブサーバや、ICSへの接続中に非認証のリモートデスクトップを実行するWindowsマシンです。

もう1つはICSのプロトコルです。これは制御システムが使用する生のプロトコルです。固有のバナー以外に認証不要という共通点があります。


ネットに接続したICSのセキュリティ

大多数のICSのバナーには位置情報や所有者の情報は含まれず、それ故セキュアに保つのが困難で、何年もインターネットに露出したままになっています。もし危険な制御システムを見つけたらICS-CERTに報告してください。


ユースケース

アメリカのICSにアクセスしてみましょう。

以下のクエリはインターネット上でICSプロトコルを実行している機器を返します。

https:// www.shodan.io/ search? query = category% 3Aics +-http +-html +-ssh +-ident + country% 3Aus

以下省略


付録 A: バナー情報の仕様


一般的なプロパティ

名称
説明

asn
自律システム番号
AS4837

data
メインのバナー情報
HTTP/1.1 200..

ip
IP(整数)
493427495

ip_str
IP(文字列)
199.30.15.20

ipv6
IPv6(文字列)
2001:4860:486

port
サービスのポート番号
80

timestamp
情報収集した日付
2014-01-15T05: 49: 56.283713

hostnames
IPのホスト一覧
[“ shodan.io”, “www.shodan.io”]

domains
IPのドメイン一覧
["shodan.io"]

link
ネットワークリンクタイプ
Ethernet or modem

location
機器の位置情報

opts
メインのバナー情報に含まれない補足情報

org
IPを保有する組織
Google Inc.

isp
IPを管理するISP
Verison Wireless

os
OS
Linux

uptime
アップタイム(分)
50

transport
バナー情報収集に使用したプロトコル(udp/tcp)
tcp


HTTP(S)プロパティ

名称
説明

html
ウェブサイトのHTMLコンテンツ

title
ウェブサイトのtitle


位置情報のプロパティ

以下はlocationプロパティのサブプロパティ

名称
説明

area_code
機器の位置のエリアコード

city
都市の名称

country_code
2文字の国コード

country_code3
3文字の国コード

country_name
国名

dma_code
Designated market area code(アメリカのみ)

latitude
緯度

longitude
経度

postal_code
郵便番号

region_code
リージョンコード


SSLプロパティ

サービスがSSLを利用している場合、Shodanは下記プロパティの情報を収集します。

名称
説明

ssl.cert
パースしたSSL証明書

ssl.cipher
SSL接続の暗号スイート

ssl.chain
ユーザ証明書からルート証明書までの一連の証明書

ssl.dhparams
ディフィーヘルマンパラメータ

ssl.versions
サポートしているバージョン


特別なプロパティ

_shodanプロパティにはどのように情報が収集されたのかという情報が含まれています。


省略


付録 B: 検索フィルタ一覧


一般的なフィルタ

名称
説明

after
dd/mm/yyyyより後の結果を返す
string

asn
自律システム番号
string

before
dd/mm/yyyyより前の結果を返す
string

category
ics, malware
string

city
都市の名前
string

country
2文字の国コード
string

geo
2~4個のパラメータを取る、2:緯度、経度 3:緯度、経度、範囲 4:左上の緯度、左上の経度、右下の緯度、右下の経度
string

has_ipv6
True/False
boolean

has_screenshot
True/False
boolean

hostname
機器のホスト名
string

html
ウェブバナーのHTML
string

ip
netのエイリアス
string

isp
ネットブロックを管理するISP
string

net
CIDR記法のネットワーク範囲
string

org
ネットブロックを保有する組織
string

os
OS
string

port
ポート番号
string

postal
郵便番号(アメリカのみ)
string

product
製品名
string

region
地域/州の名前
string

state
regionのエイリアス
string

title
ウェブバナーのtitle
string

version
製品のバージョン
string

vuln
脆弱性のCVE ID
string


NTPフィルタ

名称
説明

ntp.ip
monlistが返すIP
string

ntp.ip_count
monlistが返すIPの数
string

ntp.more
True/False、monlistで収集するIPが更にあるかどうか
string

ntp.port
monlistのIPが使用しているポート
string


SSLフィルタ

名称
説明

has_ssl
True/False
boolean

ssl
全てのSSLデータ
string

ssl.alpn
HTTP/2のようなプロトコル
string

ssl.chain_count
チェーンに含まれる証明書の数
integer

ssl.version
SSLv2/SSLv3/TLSv1.1/TLSv1.2
string

ssl.cert.alg
証明書のアルゴリズム
string

ssl.cert.expired
True/False
boolean

ssl.cert.extension
証明書の拡張子
string

ssl.cert.serial
整数/16新数のシリアル番号
integer/string

ssl.cert.pubkey.bits
パブリックキーのビット数
integer

ssl.cert.pubkey.type
パブリックキーのタイプ
string

ssl.cipher.version
暗号スイートのSSLバージョン
string

ssl.cipher.bits
暗号スイートのビット数
integer

ssl.cipher.name
暗号スイートの名称
string


Telnetフィルタ

名称
説明

telnet.option
全てのオプションを検索
string

telnet.do
クライアントにサポートを要求するオプション
string

telnet.dont
クライアントに非サポートを要求するオプション
string

telnet.will
サーバがサポートするオプション
string

telnet.wont
サーバがサポートしないオプション
string


付録 C: 検索ファセット

説明は検索フィルタと一緒なので省略


一般的なファセット

名称
説明

asn

city

country

domain

as_screenshot

isp

link

org

os

port

postal

product

region

state

uptime

version

vuln


NTPファセット

名称
説明

ntp.ip

ntp.ip_count

ntp.more

ntp.port


SSHファセット

名称
説明

ssh.cipher

ssh.fingerprint
機器のフィンガープリント

ssh.mac
MACアルゴリズムの名称

ssh.type
認証キーのタイプ


SSLファセット

名称
説明

ssl.version

ssl.alpn

ssl.chain_count

ssl.cert.alg

ssl.cert.expired

ssl.cert.serial

ssl.cert.extension

ssl.cert.pubkey.bits

ssl.cert.pubkey

ssl.cipher.bits

ssl.cipher.name

ssl.cipher.version


Telnetファセット

名称
説明

telnet.option

telnet.do

telnet.dont

telnet.will

te.net.wont


付録 D: ポート一覧

ポート
サービス

7
Echo

11
Systat

13
Daytime

15
Netstat

17
今日の一言

19
文字列生成(CHARGEN)

21
FTP

22
SSH

23
Telnet

25
SMTP

26
SSH

37
rdate

49
TACAS+

53
DNS

67
DHCP

69
TFTP, BitTorrent

79
Finger

80
HTTP, マルウェア

81
HTTP, マルウェア

82
HTTP, マルウェア

83
HTTP

84
HTTP

88
Kerberos

102
Siemens S7

110
POP3

111
Portmapper

119
NNTP

123
NTP

129
Password generator protocol

137
NetBIOS

143
IMAP

161
SNMP

175
IBM Network Job Entry

179
BGP

195
TA14-353a

311
OS X Server Manager

389
LDAP

443
HTTPS

444
TA14-353a, Dell SonicWALL

445
SMB

465
SMTPS

500
IKE (VPN)

502
Modbus

503
Modbus

515
Line Printer Daemon

520
RIP

523
IBM DB2

554
RTSP

587
SMTP mail submission

623
IPMI

626
OS X serialnumbered

666
Telnet

771
Realport

789
Redlion Crimson3

873
rsync

902
VMWare authentication

992
Telnet (secure)

993
IMAP with SSL

995
POP3 with SSL

1010
malware

1023
Telnet

1025
Kamstrup

1099
Java RMI

1177
malware

1200
Codesys

1234
udpxy

1434
MS-SQL monitor

1604
Citrix, malware

1723
PPTP

1833
MQTT

1900
UPnP

1911
Niagara Fox

1962
PCworx

1991
malware

2000
iKettle, MikroTik bandwidth test

2082
cPanel

2083
cPanel

2086
WHM

2087
WHM

2123
GTPv1

2152
GTPv1

2181
Apache Zookeeper

2222
SSH, PLC5, EtherNet/ IP

2323
Telnet

2332
Sierra wireless (Telnet)

2375
Docker

2376
Docker

2404
IEC-104

2455
CoDeSys

2480
OrientDB

2628
Dictionary

3000
ntop

3306
MySQL

3386
GTPv1

3388
RDP

3389
RDP

3460
malware

3541
PBX GUI

3542
PBX GUI

3689
DACP

3780
Metasploit

3787
Ventrilo

4000
malware

4022
udpxy

4040
Deprecated Chef web interface

4063
ZeroC Glacier2

4064
ZeroC Glacier2 with SSL

4369
EPMD

4443
Symantec Data Center Security

4444
malware

4500
IKE NAT-T (VPN)

4567
Modem web interface

4911
Niagara Fox with SSL

4949
Munin

5006
MELSEC-Q

5007
MELSEC-Q

5008
NetMobility

5009
Apple Airport Administration

5060
SIP

5094
HART-IP

5222
XMPP

5269
XMPP Server-to-Server

5353
mDNS

5357
Microsoft-HTTPAPI/2.0

5432
PostgreSQL

5577
Flux LED

5632
PCAnywhere

5672
RabbitMQ

5900
VNC

5901
VNC

5984
CouchDB

6000
X11

6379
Redis

6666
Voldemort database, malware

6667
IRC

6881
BitTorrent DHT

6969
TFTP, BitTorrent

7218
Sierra wireless (Telnet)

7474
Neo4j database

7548
CWMP (HTTPS)

7777
Oracle

7779
Dell Service Tag API

8010
Intelbras DVR

8060
Roku web interface

8069
OpenERP

8087
Riak

8090
Insteon HUB

8099
Yahoo SmartTV

8112
Deluge (HTTP)

8139
Puppet agent

8140
Puppet master

8181
GlassFish Server (HTTPS)

8333
Bitcoin

8334
Bitcoin node

8334
Bitcoin node dashboard (HTTP)

8443
HTTPS

8554
RTSP

8880
Websphere SOAP

8888
HTTP, Andromouse

8889
SmartThings Remote Access

9001
Tor OR

9002
Tor OR

9051
Tor Control

9100
Printer Job Language

9151
Tor Control

9160
Apache Cassandra

9191
Sierra wireless (HTTP)

9443
Sierra wireless (HTTPS)

9595
LANDesk Management Agent

9600
OMRON

10001
Automated Tank Gauge

10243
Microsoft-HTTPAPI/2.0

11211
Memcache

17185
VxWorks WDBRPC

12345
Sierra wireless (Telnet)

13579
Media player classic web interface

14147
Filezilla FTP

16010
Apache Hbase

18245
General Electric SRTP

20000
DNP3

20547
ProconOS

21025
Starbound

21379
Matrikon OPC

23023
Telnet

23424
Serviio

25105
Insteon Hub

25565
Minecraft

27015
Steam A2S server query, Steam RCon

27017
MongoDB

28017
MongoDB (HTTP)

30718
Lantronix Setup

32400
Plex

37777
Dahuva DVR

44818
EtherNet/ IP

47808
Bacnet

49152
Supermicro (HTTP)

49153
WeMo Link

50070
HDFS Namenode

51106
Deluge (HTTP)

54138
Toshiba PoS

55553
Metasploit

55554
Metasploit

62078
Apple iDevice

64738
Mumble


付録 E: SSLバナーのサンプル

省略


練習問題の解答

省略