インターネット上に公開されているサーバーやIoT機器の状態を把握することは、現代のセキュリティ管理において欠かせないプロセスとなっています。
多くのエンジニアやセキュリティ担当者が、自社の資産が意図せず外部からアクセス可能になっていないかを確認するために活用しているのが「Shodan」です。
Shodanは「インターネットに接続されたデバイスの検索エンジン」として知られ、公開されているバナー情報を網羅的に収集しています。
この記事では、セキュリティ検証の第一歩として、Shodanのアカウント作成手順から、実務で役立つ基本的な検索クエリの使い方までを詳しく紹介します。
適切にツールを使いこなすことで、潜在的なリスクを早期に発見し、防御を固めるための知識を身につけましょう。
Shodanとは何か:セキュリティ検証における役割
Shodanは、一般的な検索エンジンがWebサイトのコンテンツをインデックスするのとは異なり、デバイスのポートから得られる「バナー情報」を収集します。
バナー情報には、ソフトウェアの名称、バージョン、サポートしているプロトコル、設置されている国や組織名などが含まれます。
セキュリティエンジニアにとって、Shodanはインターネット上の露出状況を俯瞰するための強力なデータベースとなります。
例えば、意図せず公開されている管理画面や、脆弱性が報告されている古いバージョンのサービスを迅速に特定することが可能です。
自社のIPアドレス範囲をShodanで検索することで、管理外のシャドウITが存在しないかを検証する用途にも使われます。
また、ペネトレーションテストの初期段階である情報収集(偵察)フェーズにおいて、ターゲットの攻撃対象領域(アタックサーフェス)を確認するためにも利用されます。
このように、Shodanは攻撃者視点でのリスクを可視化するために、非常に重要な役割を果たしているツールと言えるでしょう。
Shodanアカウントの作成手順
Shodanの機能を十分に活用するためには、まずアカウントを作成する必要があります。
ゲストユーザーのままでも検索は可能ですが、フィルタ機能の一部制限や検索結果の表示件数に制約があるため、登録を推奨します。
アカウント登録の流れ
まずは、Shodanの公式サイト(https://www.shodan.io/)にアクセスしてください。
画面右上にある「Login / Register」ボタンをクリックします。
登録には、メールアドレスによる直接登録のほか、GoogleやGitHubなどの外部アカウント連携も利用可能です。
メールアドレスで登録する場合は、ユーザー名、メールアドレス、パスワードを入力して「Register」をクリックしてください。
入力したメールアドレス宛に確認メールが届くため、本文内のリンクをクリックして有効化を完了させます。
これで基本的なアカウント作成は完了し、ログインした状態で検索機能を利用できるようになります。
有料プランとAPIキーの確認
Shodanには無料プランのほかに、さらに高度な機能を利用できる有料プランが存在します。
セキュリティ検証を自動化したり、大量のデータを取得したりする場合は、有料プラン(Membership)の検討が必要です。
アカウント設定画面(Account)にアクセスすると、自分の「API Key」を確認できます。
このAPIキーは、コマンドラインツール(CLI)やPythonプログラムからShodanのデータにアクセスする際に必須となります。
APIキーは個人に紐づく重要な情報であるため、第三者に漏洩しないよう厳重に管理してください。
Shodanの基本的な検索方法
Shodanの検索窓にキーワードを入力するだけで、関連するデバイスを表示することができます。
しかし、単にキーワードを入れるだけでは膨大な結果が表示され、目的の情報に辿り着くのが困難です。
そこで、特定の条件で結果を絞り込むための「検索フィルタ」を活用することが効率化の鍵となります。
キーワードによる単純検索
例えば、「apache」と入力すれば、Apache HTTP Serverを使用しているデバイスが一覧表示されます。
また、「webcam」と入力すれば、インターネットに公開されているWebカメラのバナー情報が表示されます。
ただし、これらは世界中の結果を含むため、セキュリティ検証としては範囲が広すぎることがほとんどです。
より精度の高い情報を得るためには、フィルタを組み合わせて「どこに」「どのような」機器があるかを指定する必要があります。
主要な検索フィルタ一覧
Shodanで頻繁に使用される基本的なフィルタを以下の表にまとめました。
| フィルタ名 | 用途 | 記述例 |
|---|---|---|
country: | 国コード(2文字)で絞り込む | country:"JP" |
city: | 都市名で絞り込む | city:"Tokyo" |
port: | 特定のポート番号で絞り込む | port:22 |
org: | 組織名(ISPや企業名)で絞り込む | org:"Amazon.com" |
net: | IPアドレスの範囲(CIDR形式)で絞り込む | net:192.168.0.0/24 |
os: | OS名で絞り込む | os:"Windows" |
product: | 製品名(ソフトウェア名)で絞り込む | product:"nginx" |
これらのフィルタは、半角スペースで区切ることで複数組み合わせて使用することが可能です。
フィルタ名の後のコロン(:)の直後にはスペースを入れないように注意してください。
実践的な検索クエリの例
ここでは、セキュリティ検証の現場でよく使われる具体的な検索クエリのパターンを紹介します。
日本国内の特定のポートを確認する
日本国内で、リモートデスクトップ(RDP)が公開されているサーバーを探したい場合は、以下のクエリを使用します。
port:3389 country:"JP"
RDPは攻撃対象になりやすいため、意図せず外部公開されている場合は重大なセキュリティリスクとなります。
特定の組織が所有するサーバーを特定する
自社や調査対象の組織がどのような資産を公開しているかを確認するには、orgフィルタが便利です。
org:"Organization Name"
この検索により、その組織が管理するIPアドレス帯から検出されたバナー情報が一列に並びます。
ドメイン名から検索したい場合は、hostnameフィルタを使用することも有効です。
hostname:".example.com"
脆弱なバージョンのサービスを特定する
特定の脆弱性が存在する可能性があるソフトウェアバージョンを絞り込むことも可能です。
例えば、古いOpenSSHを実行しているサーバーを確認したい場合は以下のように記述します。
product:"OpenSSH" version:"4.3"
これにより、パッチが適用されていない古いシステムがどこにあるかを特定する手がかりが得られます。
ただし、これらの検索はあくまで「バナー情報」に基づいているため、実際の設定とは異なる場合がある点に留意してください。
Shodanを使用する際の注意点とエチケット
Shodanは非常に強力なツールであるため、その利用には高い倫理観が求められます。
まず、Shodanで検索して見つかった機器に対して、許可なくログインを試みたり、脆弱性を突く攻撃を行ったりすることは厳禁です。
Shodanは公開情報を閲覧しているに過ぎませんが、そこから一歩踏み込んでアクセスを試みる行為は不正アクセス禁止法などに抵触する恐れがあります。
セキュリティ検証の目的は、あくまで自組織の防御を固めること、あるいは許可を得た範囲での脆弱性評価に限定されるべきです。
また、検索クエリを頻繁に投げすぎると、Shodanのサーバーに負荷をかけるだけでなく、アカウントが制限される可能性もあります。
自動化ツールを使用する際は、適切なレートリミット(実行間隔の制御)を設けるのがマナーです。
Shodan CLIを活用した効率化
Webブラウザでの検索に慣れてきたら、コマンドラインインターフェース(CLI)ツールの活用をお勧めします。
Shodan CLIを使用すると、検索結果をテキストファイルやJSON形式で保存し、他のツールと連携させやすくなります。
インストールと初期設定
Shodan CLIは、Python環境があればpipコマンドで簡単にインストールできます。
# Shodan CLIのインストール
pip install shodan
インストールが完了したら、先ほど確認したAPIキーを使用して初期設定を行います。
# APIキーの初期化
shodan init YOUR_API_KEY
正常に初期化されると、自身のプラン情報などが表示されます。
CLIでの検索実行
CLIから検索を行うには、shodan searchコマンドを使用します。
例えば、特定のIPアドレスに関する情報を取得する場合は以下のように入力します。
# 特定のホスト情報を取得
shodan host 8.8.8.8
検索クエリの結果を件数だけ知りたい場合は、shodan countコマンドが便利です。
# クエリに合致する件数を表示
shodan count apache country:"JP"
CLIを活用することで、ルーチンワークとしての資産チェックをスクリプト化し、運用の効率を飛躍的に向上させることができます。
検索結果の読み解き方
Shodanの検索結果には、多くの専門用語が含まれています。
もっとも重要なのは「Banner」セクションです。
ここには、HTTPヘッダー情報や、サービスの応答メッセージが生データとして表示されています。
例えば、HTTP 200 OKが返っているかどうか、Serverヘッダーに詳細なバージョンが含まれているかなどを確認します。
また、SSL/TLS証明書の情報も非常に有用です。
証明書の「Common Name」や「Subject Alternative Names」を見ることで、そのIPアドレスがどのドメインに関連付けられているかを裏付けることができます。
さらに、タグ情報(Tags)にも注目してください。
Shodan側で「honeypot」や「cloud」といったタグを付与している場合があり、対象がどのような環境にあるかを推測する助けになります。
まとめ
Shodanは、インターネットの「現状」を映し出す鏡のようなツールです。
アカウントを作成し、基本的な検索クエリをマスターするだけで、情報収集の効率は劇的に向上します。
port:やorg:といったフィルタを組み合わせることで、ノイズを除去し、真に確認すべき資産を浮き彫りにすることが可能です。
一方で、その強力さゆえに、常に法的および倫理的な境界線を意識して利用しなければなりません。
自組織の公開資産を攻撃者の視点から定期的にチェックすることは、予防安全の観点で非常に大きな意味を持ちます。
今回学んだ基礎知識を活かして、まずは自分の管理下にあるネットワークがどのようにShodanに映っているかを確認することから始めてみてはいかがでしょうか。
ツールの特性を正しく理解し、効率的なセキュリティ検証を実践していきましょう。
