インターネットに接続されるデバイスの数は年々増加しており、私たちの生活やビジネスにおいてIoT機器は欠かせない存在となっています。

しかし、利便性の向上とともに、適切なセキュリティ設定が行われないままグローバルネットワークに公開されてしまうデバイスも少なくありません。

こうした状況を把握し、自社の資産やインフラを保護するためには、検索エンジン「Shodan」を活用した現状把握が極めて重要です。

本記事では、Shodanを用いてインターネット上に公開されたIoT機器を特定する方法と、その情報を活用したセキュリティ検証の手法について詳しく解説します。

Shodanの概要と従来の検索エンジンとの違い

Shodanは、一般的な検索エンジンとは異なり、「インターネットに接続されたあらゆるデバイス」をインデックスする検索エンジンです。

GoogleやBingがWebページ上のテキストやコンテンツをクロールするのに対し、ShodanはサーバーやIoT機器が応答する「バナー情報」を収集します。

バナー情報には、OSの種類やバージョン、サービスの種類、使用しているプロトコルなどの詳細なメタデータが含まれています。

この特性により、管理者が意図せず公開してしまった監視カメラやルーター、制御システム(ICS)などを容易に特定することが可能です。

セキュリティエンジニアにとって、Shodanは外部からどのように自組織の資産が見えているかを確認するための強力なツールとなります。

IoT機器の露出がもたらすセキュリティリスク

なぜインターネットに公開されたIoT機器を検索する必要があるのか、その背景には深刻なセキュリティリスクが存在します。

多くのIoT機器は、出荷時のデフォルトパスワードが設定されたまま運用されており、これが攻撃者の格好の標的となります。

また、古いファームウェアを使用し続けているデバイスには、既知の脆弱性が未修正のまま残っているケースが非常に多いのが現状です。

これらの機器が特定されると、ボットネットの一部として組み込まれたり、組織ネットワークへの侵入の足がかりとして悪用されたりする危険性があります。

したがって、自社で管理しているIPアドレス帯域内に、意図しないポートが開放されているデバイスがないかを定期的に確認することが推奨されます。

ShodanでIoT機器を探索するための基本検索構文

Shodanの機能を最大限に活用するためには、特定のフィルタを用いた検索構文を理解する必要があります。

単一のキーワード検索だけでなく、複数のフィルタを組み合わせることで、精度の高い結果を得ることが可能です。

以下に、IoT機器の探索で頻繁に使用される主要なフィルタをまとめました。

フィルタ名説明使用例
product製品名やソフトウェア名で絞り込みます。product:"Apache"
port特定の開放ポートを指定します。port:8080
country国コード(2文字)で地域を限定します。country:"JP"
city都市名で絞り込みます。city:"Tokyo"
org特定の組織やISPが所有するIPアドレスを指定します。org:"Amazon.com"
osOSの種類を指定します。os:"Linux"

例えば、日本国内で公開されている特定のWebカメラを探したい場合は、"webcam" country:"JP"といったクエリを入力します。

また、特定のプロトコル(例:RTSPなど)が動作している機器を探す場合は、port:554を組み合わせることで対象を絞り込めます。

より高度な検索テクニック

さらに詳細な調査を行う場合、バナー情報に含まれる特定の文字列(ハッシュ値やヘッダー情報)を指定することが効果的です。

例えば、特定のメーカーが使用する共通のHTMLタイトルを指定する http.title:"Dashboard" などの検索も有効です。

これにより、製品名がバナーに明記されていない場合でも、共通のインターフェースから機器を特定できるようになります。

Pythonを用いたShodan APIの活用例

大量のデータを効率的に収集・分析する場合、WebインターフェースではなくAPIを利用するのが一般的です。

Shodanは公式のPythonライブラリを提供しており、これを利用することでスクリプトによる自動検索が可能になります。

以下は、特定のキーワードで検索を行い、検出されたIPアドレスとホスト名を出力する簡単なサンプルプログラムです。

Python
import shodan

# APIキーを設定します
SHODAN_API_KEY = "YOUR_API_KEY"
api = shodan.Shodan(SHODAN_API_KEY)

try:
    # 'product:Apache' という条件で検索を実行します
    results = api.search('product:Apache')

    # 検索結果を表示します
    print(f"Total results found: {results['total']}")
    for result in results['matches']:
        print(f"IP: {result['ip_str']}")
        print(f"Data: {result['data']}")
        print("-" * 20)
except shodan.APIError as e:
    print(f"Error: {e}")

このプログラムを実行すると、指定した条件に合致するデバイスの情報が構造化されたデータとして出力されます。

実行結果
Total results found: 154203
IP: 192.168.1.100
Data: HTTP/1.1 200 OK
Server: Apache/2.4.41 (Ubuntu)
...
--------------------

このように、プログラムを介して情報を取得することで、自社資産の定期的な死活監視や脆弱性スキャンとの連携が容易になります。

セキュリティ検証における実践的ステップ

Shodanで見つかった情報をどのようにセキュリティ向上に役立てるべきか、その具体的なステップを解説します。

1. 組織外に露出している資産の特定

まず、orgフィルタや net(ネットワーク範囲)フィルタを使用し、自社が保有するIPアドレス帯域内の状況を調査します。

意図しない管理画面(ルーター、プリンター、NASなど)が公開されていないかを確認してください。

2. 脆弱なバージョンの特定

取得したバナー情報から、動作しているソフトウェアのバージョンを特定します。

Shodanには has_vuln:true というフィルタも存在し、既知の脆弱性(CVE番号)に関連付けられたデバイスを直接検索することも可能です。

3. ポートとプロトコルの精査

SSH(22番)やTelnet(23番)、RDP(3389番)などの管理用ポートが、インターネット全体に対して開かれたままになっていないかを確認します。

不要なポートが開放されている場合は、ファイアウォール設定でアクセス制限をかける、あるいはVPN経由のアクセスに限定するなどの対策を講じます。

継続的なモニタリングの重要性

一度調査して終わりではなく、Shodanの「Alerts」機能を活用して、新しいデバイスが公開された際に即座に通知を受ける仕組みを構築することが推奨されます。

利用時の法的遵守と倫理的ガイドライン

Shodanを利用した調査には、法的なリスクと倫理的な責任が伴うことを十分に理解しなければなりません。

Shodanで公開されている情報を「閲覧」すること自体は、多くの場合合法的な情報収集活動とみなされます。

しかし、発見したデバイスに対して許可なくログインを試みたり、脆弱性を突く攻撃コードを送信したりする行為は犯罪です。

日本では不正アクセス禁止法に抵触する可能性があるため、検証は必ず自社が所有する資産、または明示的に許可を得た範囲内に限定してください。

また、他者の脆弱性を発見した際も、責任ある開示(Responsible Disclosure)の原則に基づき、適切に報告することが求められます。

まとめ

Shodanは、インターネット上に公開されたIoT機器の実態を把握し、潜在的な脅威を特定するために欠かせないツールです。

適切なフィルタを駆使することで、自社の資産が外部からどのように見えているかを客観的に評価できます。

まずは自社のネットワーク範囲を対象に基本的な検索を行い、意図しない露出がないかを確認することから始めてみてください。

ツールを活用した効率的な資産管理とセキュリティ検証が、巧妙化するサイバー攻撃から組織を守る第一歩となります。