「Shodan」の用途と統合

この記事では、**「Shodan」**について、その仕組み、ツールやスクリプトへの組み込み方法についてお話します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/shodan-and-python-api_594919)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#Shodanは何ができるのか
Shodanは、任意の時点でインターネットに接続されているデバイス、それらのデバイスの位置、および現在のユーザーを検出します。そのようなデバイスは、ビジネスネットワーク、監視カメラ、産業用制御システム（ICS）、スマートホームなど、ほぼすべてのタイプのシステムに存在する可能性があります。Shodanは、システムのバナーを直接取得しようとすると、脆弱性のあるシステムを特定するのに役立つため、侵入テストの最初の重要なステップとなる。彼はさらに、ブール演算子をサポートすることによって、より多くのことを行うことができ、検索の効率を向上させるためにフィルタを提供しています。検索エンジンは、無料で50の結果を提供し、より広範な結果のために有料のサブスクリプションを提供しています。

#どのように機能するか
Shodanの使い方は3つあります。

- ウェブインターフェース
- CLI
- ツールやスクリプトで
今回は、この3つの方法をすべて使ってShodanを利用する方法を見ていきます。

今回のチュートリアルでは、Alibaba Cloud [Elastic Compute Service](https://www.alibabacloud.com/ja/product/ecs) (ECS)を使用します。インスタンスをセキュアにするために、それに応じた設定を行う必要があります。

- セキュリティグループでトラフィックの出入りを受け入れるルールを作成する
- ペンテストの承認を作成する
ここではサーバの設定については触れませんが、詳細は [ECS のドキュメント](https://www.alibabacloud.com/help/ja/product/25365.htm)を参照してください。

上記の2つのセットアップを行った後、ECSにApacheをインストールし、Webブラウザでアクセスしてテストすることができます。

#Shodanウェブインタフェース
Shodanは、他のほとんどの検索エンジンと同様に、ウェブブラウザで[shodan.io](https://www.shodan.io/?spm=a2c65.11461447.0.0.772433c3UlUdSw)にアクセスすることでアクセスすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/400ba4c1-2f09-ac63-770d-579f16376d98.png)

世界中でApacheを使用しているサーバの数を知りたいと思います。キーワード "apache "を入力するだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9f6fc335-c2cb-7b28-f222-9a8d3059987e.png)

画像のように、結果を見ると、25,544,783台のサーバーがインターネット上で稼働していることがわかります。

Shodanには他にも多くの機能がありますが、それらを利用するには登録する必要があります。以下に示すように、アカウントなしで深堀り分析をしようとするとエラーが発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b307dcb4-78e0-c3df-8492-6d1100c7dec1.png)

それでは、無事にアカウントを作成してログインできたとしましょう。Shodanの機能の一つにフィルターがありますが、これを使って何ができるのか見てみましょう。

フィルターとは、Shodanがサービスやデバイスのメタデータをもとに検索結果を絞り込むために使う特殊なキーワードです。フィルターを入力する形式は

```
filtername:value
```

例えば

- product : "apache tomcat"
- country : 特定の国にフィルターをかける
- city : 特定の都市にフィルターをかける
- geo : 座標でフィルタリング
- hostname : 一致するホスト名を探す
- net : IPに制限
- os : オペレーティングシステムに基づくフィルタ
- port : 開いているポートのフィルタベース

例えば、Tomcatを搭載したすべてのApacheサーバを検索することで、正確な検索を行いたいとします。

キーワードは「product: "apache tomcat"」とします。結果は以下のスクリーンショットの中にあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/eaa612f8-37d5-40f4-7e66-42084b9211e8.png)

その結果、世界にはApache Tomcatが稼働しているサーバが1,445,150台あることがわかりました。

中国にあるすべてのApache Tomcatサーバを探すことで、さらに研究を絞り込むことができます。

Product:"apache tomcat" country:cn

何をしたかというと、中国のTomcatでApacheサーバを検索するために、Shodanにお願いしたということです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2c643533-d55a-ef11-9c92-9606f25bc8b0.png)

結果は、中国にはTomcatを搭載した409,609台のApacheサーバがあることを示しています。

今、ECSの1つでサービスを実行していて、何が起こっているのかを確認したいとします。私の場合、前述のように、例としてAlibaba ECSを使用します。

タスクを行うには、ネットフィルタを使用する必要があり、値は私たちのIP_アドレスになります。

ネット：ＩＰアドレス

まだセキュリティグループでトラフィックの出入りを許可するルールを作っていないことを考慮し、Apacheをインストールしたとします。ナビゲーターの中に自分のIPアドレスを入力してアクセスしようとすると、Alibaba Cloudがデフォルトでトラフィックを制限しているため、何も見ることができません。これは、セキュリティグループにルールを作っていなくても、ECSサーバのセキュリティを確保するためです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/84bcf41a-ade6-58e3-69a1-59dc19a2fd31.png)

この画像を見るとわかるように、サーバーはAlibaba上で動作しており、IPSはAliyun Computingです。2つのポート(80,443)を使用しているため、サーバー上では2つのサービスが動作しており、また使用されているウェブ技術はjQueryです。これは、SSLのバージョンなどの脆弱性があるかどうかを確認するために、ハッカーがサーバーについて収集する情報の一部になります。。

では、コマンドラインインターフェイス（CLI）を使って、Shodanを利用する方法を見てみましょう。

#Shodanコマンドラインインターフェース
Shodanのコマンドラインインターフェイス(CLI)は、Shodan用の公式Pythonライブラリと一緒にパッケージ化されています。新しいツールをインストールするには、単に実行するだけです。

```
$ easy_install shodan
```
ツールをインストールしたら、APIキーで初期化する必要があります。

```
$ shodan init YOUR_API_KEY
```

[https://account.shodan.io](https://account.shodan.io/login?continue=https%3A%2F%2Faccount.shodan.io%2F%3Fspm%3Da2c65.11461447.0.0.772433c3UlUdSw) にアクセスして、アカウントの API キーを取得します。マイアカウントボタンの右上に表示されます。API_KEYが初期化されたら、これでShodanのコマンドを使い始めることができます。

アカウントの情報を確認することができます。

今、あなたはECSのインスタンスにいると想像して、あなたのパブリックIPアドレスが何であるかを知りたいと思います。ifconfigを使うと、Alibaba Cloudがデフォルトでサービスを保護しているので、プライベートIPアドレスしかわかりません。あなたのパブリックIPアドレスを知りたい場合は、コマンドShodan myipを入力するだけです。

```
$ shodan myip
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/72ce3761-4f67-4683-60ea-fd44cd3b4982.png)

結果は、私の公開IP 47.89.249.0を表示しています。

ホストに関する情報を持ちたい場合は、そのようなホストがどこにあるか、どのポートが開いているか、どの組織がIPを所有しているかなど、今、私たちはShodanを使用することができます。42.120.226.13が私たちのサーバーであり、それをテストして何が実行されているかを確認したいとしましょう。

```
$ shodan host 42.120.226.13
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1b3cb3ff-865c-1580-3a05-142fe3b71227.png)

私たちのサーバーは中国にあり、最終更新は2019-01-21で、2つのポートが動作しています（80, 443）、結果は複数のバージョンを与えてくれたので、SSLのバージョンを確認する必要があります。

CLIには他にもネットワーク解析やmaltegoアドオン、ブラウザプラグインなどの機能がありますが、それらを利用するにはプランアカウントをアップグレードする必要があります。

#スクリプトのShodan
Shodanは、収集した情報にプログラムでアクセスするための開発者向けAPIを提供しています。Shodanのメインサイトを含むすべてのWebサイトやツールは、このAPIを利用しています。Webサイト経由でできることはすべて、独自のコードから実現することができます。

APIは2つの部分に分かれています。「REST API」と「Streaming API」です。REST APIは、Shodanを検索したり、ホストを調べたり、クエリの概要情報を取得したり、開発を容易にするための様々なユーティリティーメソッドを提供しています。Streaming APIは、現在Shodanが収集しているデータの生のリアルタイムフィードを提供します。購読できるフィードはいくつかありますが、データを検索したり、それ以外の方法で対話することはできません。

#####使用制限

APIプランによって制限されるAPIの方法は3つあります。

1、**Searching** : 1ヶ月に実行できる検索数を制限するために、Shodanはクエリクレジットを使用します。1クエリークレジットは、フィルタを含む検索を行った場合や1ページ目を通過した場合に使用されます。例えば、"apache "と検索した場合、クエリークレジットは使用されません。また、"apache country:US "と検索した場合は、1クエリークレジットが使用されます。同様に、"apache "で2ページ目の検索結果を検索した場合は、1クエリークレジットを使用します。最後に、"apache country:US "の2ページ目の検索クエリも、1クエリクレジットを使用します。

2、**Scanning** : オンデマンドスキャニングAPIは、スキャンクレジットを使用して、毎月Shodanにスキャンを依頼できるホストの数を制限します。あなたがShodanのスキャンを要求するすべてのホストのために1スキャンクレジットを控除します。

3、**Network Alerts** : アラートを使用して監視できるIPの数は、APIサブスクリプションに基づいて制限されています。有料のお客様のみがこの機能にアクセスできます。また、アカウントに100以上のアラートを作成することはできません。

**注**: クエリとスキャンのクレジットは毎月の開始時にリセットされます。

Python用のShodanライブラリをインストールするには、以下のコマンドを実行します。

```
$ easy_install shodan
```
すでにインストールされていて、最新版にアップグレードしたい場合。

```
$ easy_install -U shodan
```
まず最初に必ずやらなければならないことは、Shodan APIオブジェクトの初期化です。

```
import shodan
api = shodan.Shodan('YOUR API KEY')
```
ここで、あなたのAPIキーは、あなたのアカウントのAPIキーで、以下から取得することができます。
[https://account.shodan.io](https://account.shodan.io/login?continue=https%3A%2F%2Faccount.shodan.io%2F%3Fspm%3Da2c65.11461447.0.0.772433c3UlUdSw)

これですべてのAPIが揃ったので、小さなスクリプトで検索を行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8f056890-c9bf-2e47-7536-43fb07ff0058.png)

この画像を見ることができるように、私たちはインターネットをスキャンしてサーバーやクエリを検索しようとしている小さなスクリプトを書いています。コードはpython3で書かれています。

Apacheというパラメータを指定してスクリプトを実行すると、ShodanはインターネットをスキャンしてApacheサーバの情報をすべて提供してくれます。

スクリプトを実行してみて、動作しているかどうか、結果はどうなるかを確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e12251c4-c371-d4a2-5682-1effc6d43d69.png)

スクリプトの結果は上のようになります。ご覧のように、IPアドレスでApacheサーバが動作していることがわかります。

#結論
テクノロジーの進化は、私たちのセキュリティを危険にさらさないために、常に最新の情報を入手しておく必要があります。特に複数のデバイスがWebに露出しているIoTアプリケーションでは、資産の適切な機能を確保するためだけでなく、プライバシーを保護するためにもセキュリティが重要となる。そのために利用できる最も強力なツールの1つがShodanだ。しかし、すべての良いツールのように、Shodanは両刃の剣にもなります。それは簡単にハッカーによって悪用されることができますが、また、あなたのネットワークをよりよく理解するのにも役立ちます。危険なのはツール自体ではなく、むしろそれを使用する人である。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*