Python
セキュリティ
censys

Censysで調べる時のコツ

censysっていうタグ作ったのにcensys(1)(´;ω;`)
というのは置いておいてcensysとは?前回のを参照

censysは「field:value」の形式で調べることができる.
前回は「80.http.get.title:Start AND 80.http.get.status_code:200 AND japan」で調べましたね.
実は使えるタグの一覧がある.
ここからData Definitionsへ
Cut2016_0907_1616_01.jpg
こんな感じで多くある.

IoTを探せ!!

metaデータで取得できる値に「metadata.device_type」や「metadata.os_version」がある.

Raspberry Piの場合

metadata.os:Raspbian

でラズパイが検索できる.ただし,Apacheなどの設定によりシグネチャなどを隠している場合,これでは検索できず「metadata.os:Linux」となる.

プリンター他

プリンター
metadata.device_type:printer

NAS
metadata.device_type: NAS
metadata.product: NAS

ルーター
metadata.device_type: router

カメラ
metadata.device_type: camera

テレビ(失敗)
metadata.device_type: Television

etc...

metadata.device_type:の可能性が無限大!
コントロールシステムなどで検索すると...

metadata.device_type: industrial control system
metadata.device_type: control system
metadata.device_type: control panel

APIを使うとき

前回はプログラムが適当だったので少し解説
インストールしてないひとは何も考えずに

sudo pip install censys
version 0.0.6になったっぽい(2016/9/4)
なので過去に入れた方は
sudo pip install censys --upgrade

APIの取得

censysここからアカウントを作成できる.
Cut2016_0908_0443_40.jpg
適宜必要な情報を入力して登録
次にトップページから「Login」を選び先ほどの入力した名前とパスワードを入れログインする.
アカウントから「API ID」と「Secret」をメモる.
Cut2016_0908_0448_22.jpg
これで準備は完了.

検索

import censys
from censys import *
UID = ""#適宜
SECRET = ""#適宜

#検索方法はいろいろあるみたい

#ipv4
api = censys.ipv4.CensysIPv4(api_id=UID, api_secret=SECRET)
#api.search(query, fields, page, max_records)
#metadata.device_type:camera AND location.country: Japan
#fields=["field1", "field2", ...]
#fieldsの一覧はhttps://www.censys.io/ipv4/helpここを参照
#何も指定がない場合IPとプロトコルのみ返ってくる
#max_records=任意 指定がないとAPI Limitの限界まで結果を返す

#websites
api = censys.websites.CensysWebsites(api_id=UID, api_secret=SECRET)
#api.search(query, fields, page, max_records)
#alexa_rank: [1 TO 100]アレクサのランキング1位から100位を返す
#Qiitaのアレクサの順位は1850(2016/09/08 05:57)

Cut2016_0908_0558_58.jpg
こんな情報が返ってくる.

#Certificates
api = censys.certificates.CensysCertificates(api_id=UID, api_secret=SECRET)
#api.search(query, fields, page, max_records)
#証明書関係?で検索出来るっぽい
#qiita.com and current_valid_nss: true

Cut2016_0908_0607_43.jpg
こんな情報が返ってくる.

#SQLでも検索出来るらしい
api = censys.query.CensysQuery(api_id=UID, api_secret=SECRET)
res = api.new_job("SELECT location.country, count(ip) FROM ipv4.20151020 GROUP BY location.country;")
#一般アカウントは403 (unauthorized): Unauthorized. You do not have access to this service.と返るはず

SQL access is restricted to verified researchers and academic accounts
とあるように,SQLを使えるのは承認された研究者や学術関係者のみ.

間違いがありませんように