16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-30

#はじめに
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バナーのサンプル
省略
#練習問題の解答
省略
16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?