Edited at

Censysを用いて非公開のWEBカメラを見つける

More than 1 year has passed since last update.



2017/12/24

ご指摘を受けデフォルトパスワードに関する記述を削除いたしました。

削除する前の文章が知りたい場合、編集履歴から分かります。


Censysとは...?

インターネット上で検索する場合、検索エンジンを用いるのが一般的だと思います

以下は有名な検索エンジンです

・Google

・Yahoo

・Bing

・百度

etc...

上に挙げたのは一般的な検索エンジンですが、ネットワーク接続機器の検知・検索のために「SHODAN」という検索エンジンがあります

今回はShodanと類似した検索エンジンである「Censys」という検索エンジンを利用します

分かりやすく言うと


街中を歩きながら目に入った家のドアを一軒一軒ノックして回るセールスマンに例えることができます。違いは、Shodanがドアの代わりにIPv4アドレスを1つ1つ「ノック」することと、その辺の街どころか世界中を回っていることです。(kasperskyのブログから引用)


また、


家のドアをノックすること自体に問題はありません。(kasperskyのブログから引用)



監視カメラを集めたサイト

今年の1月頃「Insecam」というサイトが有名になり、ちょっとしたニュースになりました

このサイトは世界中の監視カメラを集めたサイトでもちろん日本のもあります

さて、このサイトはどのようにして集めたのでしょうか?

おそらくShodanのような検索エンジンまたは、それに類似した機能を持つツールなどを利用して収集しているのだと思います


Censysを利用して非公開のネットワーク監視カメラのページを見つける

ここからが本題ですCensysのチュートリアルに検索のやり方が書いてあります

例)

・ip:192.168.0.0/24 AND metadata.manufacturer:"Dell"

・80.http.get.status_code:[200 TO 300]

・443.https.tls.validation.browser_trusted: true AND 80.http.get.headers.server: Apache

・80.http.get.title: Google AND ip:[192.94.0.0 TO 192.94.255.255]

・etc...


監視カメラのページの見つけ方


Step1

Insecamのページから実際のページへ行き、ソースコードからサイトの特徴を見つける

キャプチャ.JPG

今回は適当に

<title>Network Camera</title>

これを検索のキーワードととして扱う


Step2

検索する

80.http.get.title:Network Camera AND 80.http.get.status_code:200 AND japan

こんな感じで検索してみよう

すると、ずらずら検索結果が出てくると思う

いくつか適当にアクセスしてみよう(Goボタンからそのアドレスへ飛べます)

Pananonicネットワークカメラのページへ飛べたら成功!

検索のキーワードを変えると、より効率的に集められるかもしれません


Pythonを利用して定期的に集める

CensysはAPIを利用して検索することが出来ます

pip install censys

or
python -m pip install censys

それとSign In してアカウントを作成して

MyアカウントからAPI ID、Secretをコピーします

Rate Limit



query
0.0
tokens/second (0.0 per 5 minute bucket)


search
0.2
tokens/second (60.0 per 5 minute bucket)


api
0.4
tokens/second (120.0 per 5 minute bucket)


import censys

from censys import *

UID = ""
SECRET = ""

api = censys.ipv4.CensysIPv4(api_id=UID, api_secret=SECRET)
search_result = api.search("80.http.get.title:Network Camera AND 80.http.get.status_code:200 AND japan")
for dic in search_result:
ipaddr = dic["ip"]
protocols = " ".join(list(dic["protocols"]))
print ipaddr, protocols

たぶんこんな感じ?(動かしてない)


注意

不正アクセス禁止法について(正確には不正アクセス行為の禁止等に関する法律

・他人の識別符号を不正に取得する行為の禁止、処罰

・不正アクセス行為を助長する行為の禁止、処罰

・他人の識別符号を不正に保管する行為の禁止、処罰

・識別符号の入力を不正に要求する行為の禁止、処罰

今回のことはいずれも上記のことには当たりません


一般公開されていないページを表示する行為は不正アクセスとなるのか


たとえば,あるウェブサイトにおいて一般公開されていないページがあったとします。

このページのURLを管理者から知らされているのは特定の人だけで,管理者は他の人にはURLを教えないようにと指示されており,一般にURLは公開されていないとします。

これは,条文からは明らかではないので解釈問題となりますが,不正アクセス行為となる可能性はあるがかなり微妙なところだとおもいます。...略