find-exposed-servers について
ShodanやCensysなどのインターネット全域スキャンサービスを検索する、パッシブ調査スキルです。セキュリティ研究者が公開サービスやインフラの関連を調べ、古いデータや帰属判断の不確かさも考慮できます。
主な機能
- 01ShodanとCensysのスキャン記録検索
- 02ネットワーク、証明書、ファビコン、ページ内容で検索
- 03CDN背後にある可能性のあるオリジンの発見
- 04スキャン日時と各サービスの結果の比較
- 05露出状況と帰属の確度評価
活用シーン
- 01組織の外部公開サービスの把握
- 02CDN背後にある候補オリジンの特定
- 03証明書やファビコンの一致による関連ホストの発見
- 04パッシブな攻撃対象領域調査の記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ useosint/ skills --skill find-exposed-serversインストール後、Claude Code で/find-exposed-serversを入力して読み込まれたか確認します。
同梱ファイルreference/banner-interpretation.mdreference/query-cookbook.md
詳細
公開されているサーバーを見つける
インターネット全体を対象としたスキャナーは、すでにターゲットをスキャンしています。その結果を検索するのはパッシブな行為です。ターゲットにパケットを送信することはないため、スキャナーのログに何も残らず、あなたに結び付けられることもありません。ただし、その代わりに、すべての結果は過去のある時点での状況を示す情報です。初心者がよく陥る間違いは、バナーを稼働中のホストの現在の状態として読むことです。
まず利用するプラットフォーム
| 手元にあるもの | 利用するもの | 理由 |
|---|---|---|
| IP アドレス | Shodan のホスト検索、または無料の InternetDB エンドポイント | 1 回のリクエストでポート、ホスト名、CPE がわかります |
| ネットブロックまたは ASN | Shodan の net:/asn: とポートのファセット | 個々のホストを見る前に、ネットワーク全体の構成を把握できます |
| CDN の背後にあるホスト名 | Censys の証明書とホストの関連付け | Censys は証明書を観測済みのホストに関連付けるため、オリジンサーバーを見つけるのに役立ちます |
| 証明書または特徴的なページ | ファビコンハッシュと証明書のサブジェクト/シリアル番号による検索 | DNS では関連付けられていない同系列のインフラを見つけられます |
| 組織名 | Shodan の org:、Censys の autonomous_system | どちらもネットワーク登録情報による帰属判定なので、その誤りも引き継ぎます |
| 網羅性に不安がある場合 | 異なるセンサーを使う別のプラットフォーム | プラットフォーム同士の不一致はよく起こります。不一致も手掛かりになります |
Shodan はデバイスやプロトコルの網羅性が最も高く、クエリ言語も使いやすいプラットフォームです。Censys はより構造化されたホストレコード、より優れた証明書の関連付け、より厳密なクエリ構文を備えています。FOFA、ZoomEye、Netlas、Onyphe、BinaryEdge、LeakIX はそれぞれインターネットの異なる範囲を観測しているため、最初の 2 つで何も見つからなかった場合は確認する価値があります。特に欧米以外のスキャナーは、大手 2 社が見逃すホストをインデックス化していることがあります。
Shodan
shodan init <api-key>
shodan host 203.0.113.10 # everything known about one IP
shodan search --fields ip_str,port,org,hostnames 'ssl.cert.subject.CN:example.com'
shodan count 'net:203.0.113.0/24' # cheap: no result credits
shodan stats --facets port,org 'net:203.0.113.0/24' # the shape of a netblock
shodan download results.json.gz 'asn:AS64500 port:3389'
shodan parse --fields ip_str,port,product results.json.gz
単一の IP アドレスを対象とする場合は、無料で認証なしで利用できます。
curl -s https://internetdb.shodan.io/203.0.113.10 | jq . # ports, hostnames, cpes, vulns
知っておくと便利なフィルター:net:、port:、hostname:、asn:、org:、isp:、country:、city:、product:、version:、os:、http.title:、http.html:、http.status:、http.favicon.hash:、ssl.cert.subject.CN:、ssl.cert.issuer.CN:、ssl.cert.expired:、ssl.jarm:、ssl:、tag:、vuln:、has_screenshot:、スキャン日を指定する before:/after:。vuln: など一部のフィルターには有料プランが必要です。
Censys は、ホストドキュメントに対して構造化されたフィールドパス構文を使用します。たとえば、services.port、services.service_name、services.http.response.html_title、services.tls.certificates.leaf_data.subject_dn、dns.names、autonomous_system.asn、location.country などを and/or/not と組み合わせます。API v2 では、API ID/シークレットによる基本認証を使って https://search.censys.io/api/v2/hosts/search?q=… および https://search.censys.io/api/v2/hosts/{ip} を利用できます。
各プラットフォームの同等のクエリを並べて比較したものは、 reference/query-cookbook.md を参照してください。
検索結果の読み方
結果はバナーとメタデータであり、断定的な判断ではありません。個々のサービスバナーの解釈(バージョン文字列が何を意味するか、どのフィールドが自己申告で、どれが観測されたものか)については、 reference/banner-interpretation.md を参照してください。一般的な心構えは次のとおりです。
- すべてのレコードでスキャン日時を確認してください。 Shodan のレコードにはタイムスタンプがあり、Censys のレコードには最終観測時刻があります。再スキャンの頻度はポートやアドレス空間によって異なるため、レコードが数日前、あるいは数か月以上前のものである場合もあります。調査結果は「 に観測」と記載し、「現在そうである」とは記載しないでください。
- 観測された情報と申告された情報を区別してください。 ポートが開いていることと TLS 証明書は、観測された事実です。製品名やバージョンは、ホストが送信することを選んだバナーから解析された情報であり、ホストが意図的に偽ることもあれば、バージョン文字列を変えずにディストリビューションがパッチをバックポートしたために実際と異なることもあります。
- CVE タグは推定情報です。 バージョン文字列を脆弱性データベースと照合して付与されます。報告の手掛かりにはなりますが、悪用可能であることの確認にはなりません。バックポートされた修正により、どちらの方向にも誤判定が頻繁に起こります。
- レコード内のホスト名は、逆引き DNS と証明書に由来します。 つまり、その IP アドレスを以前利用していたテナントのものである可能性があります。
重要なピボット
これが、スキャンプラットフォームを単なるポート一覧以上のものにしています。
ファビコンハッシュ。 Shodanはサイトのファビコンのハッシュ(base64エンコードされたアイコンのバイト列に対するMurmurHash3。FOFAのicon_hashも同じ方法で生成されます)をインデックス化します。ファビコンは通常、ホストごとに設定するのではなくアプリケーションに同梱されるため、このハッシュを検索すると、互いに無関係なIP、ASN、ドメインにまたがって、同じアプライアンス、フレームワーク、または対象組織独自のブランド付きポータルを実行するすべてのホストが見つかります。組織内に散在する、ある製品のインスタンスを見つける最善の方法です。
TLS証明書。 証明書のサブジェクトCN、サブジェクト組織、またはシリアル番号で検索すると、その証明書を提示するすべてのホストが見つかります。証明書のシリアル番号は発行者ごとに一意なので、一致すればほぼ正確な識別になります。Shodanは証明書のフィンガープリントフィルターも提供しています。推測せず、どのハッシュが必要かをドキュメントで確認してください。find-hidden-subdomainsと組み合わせると、CTから証明書を取得し、スキャンデータからその証明書を提示するすべてのホストを見つけられます。
JARMとTLSスタックのフィンガープリント。 JARMは、一連のTLSハンドシェイクに対するサーバーの応答をハッシュ化するため、証明書ではなくTLSスタックのフィンガープリントになります。アプライアンス、ロードバランサー、コマンドアンドコントロールフレームワークをまとめて分類できます。組織に固有のものではないため、識別子ではなく、検索範囲を絞り込むフィルターとして扱ってください。
レスポンスボディのフィンガープリント。 対象のページに含まれる固有の文字列(トラッキングID、珍しい著作権表示、カスタムヘッダー、ビルドハッシュなど)をhttp.html:で検索すると、ステージング環境のコピーやCDNの背後にあるオリジンサーバーを含め、同じアプリケーションを提供する他のホストが見つかります。
CDNの背後にあるオリジンサーバーの特定
ホスト名がCloudflareなどのプロキシに解決される場合でも、オリジンサーバーは存在し、多くの場合IPで到達可能です。信頼性の高い順に、受動的に特定する方法を示します。
- スキャンデータを検索し、CDNのASN以外のIPで対象のTLS証明書を探します。オリジンサーバーが実際の証明書を直接提示していることがよくあります。
- CDNのASNを除外して、HTTPボディ内の固有の文字列またはファビコンハッシュを検索します。
- CDNの導入前の過去のDNS情報を確認します(
who-owns-this-domain)。オリジンサーバーは、一般に考えられているほど頻繁には移動しません。 - 設計上プロキシを迂回するサービスを確認します。MXホスト、
ftp、cpanel、direct、origin、同じネットブロック上のHTTP以外のポートなどです。 - SPFの
ip4:メカニズムを確認します。組織は自らが使用する送信ホストを認可しており、それがWebのオリジンサーバーである場合もあります。
候補となるオリジンサーバーは仮説にすぎません。対象のHostヘッダーを指定してリクエストを送信し、確認する行為は対象への能動的な操作であり、許可が必要です。また、適切に設定されたオリジンサーバーはCDN以外からのトラフィックを拒否するため、確認できなくても候補が否定されたことにはなりません。
ここで問題が起きます
- 古さは両方向に影響します。 スキャン時には開いていたポートが閉じている場合もあれば、その後閉じられたポートが開いている場合もあります。結果がないからといって、サービスが存在しないとは限りません。スキャナーはすべてのアドレスのすべてのポートを調べるわけではありません。
- ハニーポットはあらゆる結果を汚染します。 意図的に公開されたデコイによって、興味深いサービスの検索結果が水増しされます。見分ける手掛かりは、1 台のホストに不自然なサービスの組み合わせがあること、非常に多数のポートが開いていること、無関係な多数の製品に対してデフォルトのバナーが表示されること、研究目的のネットブロックでホストされていることです。Shodan は
https://api.shodan.io/labs/honeyscore/{ip}?key=でハニースコアの推定値を公開しています。判定ではなく、手掛かりとして扱ってください。 - ターゲットはスキャナーを欺くことができます。 スキャナーの送信元アドレスは公開可能なので、防御側はそれらにだけ偽のバナーを返せます。価値の高いターゲットがこれを行うこともあります。
org:とisp:はネットワーク登録情報であり、所有権を示すものではありません。 クラウドのネットブロックではクラウドプロバイダーの名前が示され、再販された領域では再販業者の名前が示されます。org:だけで帰属を判断すると、隣接組織の公開データベースをターゲットのものとして報告することになります。- 共有ホスティングと共有 IP アドレス。 1 つの IP アドレスで、互いに無関係な何百ものサイトを提供している場合があります。そこで見つかったポートや脆弱性はホストに属し、必ずしもターゲットに属するとは限りません。
- スクリーンショットやバナーには個人データが含まれます。 公開されたダッシュボードやカメラには実在の人物が写っています。保存した時点で、データ保護上の問題になります。
- プラットフォームによって結果は異なり、各無料枠には表示件数の上限があります。 1 つのプラットフォームだけで検索して何も見つからなくても、1 つのセンサーネットワークで何も観測されなかったというだけです。
確度の評価
- 露出を確認済み — 同じ IP アドレスとポート上の同じサービスが、独立した 2 つのスキャンプラットフォームに表示されているか、1 つのプラットフォームで複数のスキャン日にわたって表示されており、さらに、ターゲットが管理していることを実証できる証明書、またはターゲットの名前で再割り当てされたネットブロックによって、その IP アドレスがターゲットに紐付いている場合です。
- 可能性が高い — ターゲットに関連する IP アドレスで、ファビコンハッシュ、本文文字列の一致、または逆引き DNS によって紐付けられた、最近の観測が 1 件ある場合です。または、所有権を個別に確認していない IP アドレスについて、プラットフォームをまたいで一致が確認された場合です。
- 未確認 —
org:/isp:だけに基づく帰属、共有ホスティングの IP アドレス、古い記録が 1 件だけの場合、他の証拠がない CVE タグ、またはハニーポットの特徴があるホストに基づく場合です。
サービスに接続して確度の評価を上げてはいけません。調査結果ごとに、プラットフォーム、クエリ、スキャン日時、記録識別子を記録してください。
実例
ターゲット:example-fintech.test。外部アタックサーフェスのレビューを承認済み。受動的な情報収集のみ。
頂点ドメインは Cloudflare に解決されるため、解決された IP アドレスをポートスキャンしても、Cloudflare の情報しか得られません。そこで、find-hidden-subdomains から証明書のサブジェクト CN を取得し、それを提供しているホストをスキャンデータで検索します。3 件が見つかりました。うち 2 件は Cloudflare のアドレスで、1 件は欧州のホスティングプロバイダーの ASN にあり、443 と 22 が開いています。この 3 件目が、おそらくオリジンサーバーです。
そのファビコンハッシュを逆方向に検索すると、さらに 6 件のホストが見つかります。4 件はターゲットの地域ポータルです。残り 2 件は無関係な企業です。ファビコンはターゲット独自のものではなく、フレームワークに同梱された汎用アイコンです。ここが行き止まりです。この例から得られる教訓は、ハッシュの一致を帰属の根拠として扱う前に、ファビコンが本当に固有のものか確認することです。
オリジンサーバーの /29 に対する net: 検索では、4 か月前にスキャンされた、3306 が開いていて MySQL バナーを返す 2 つ目のホストが見つかります。古い情報なので、現在は存在しない可能性がありますが、観測結果として報告できます。ネットブロックの RIR レコードには、ターゲットの法人名への再割り当てが記載されています。この情報があることで、「適切な証明書を持つ IP アドレス」がターゲットに帰属することを示せます。
ここで止めてください。3306 に接続せず、オリジンサーバーに Host ヘッダーを送信しないでください。日付とクエリを添えて両方を報告し、再割り当てされたネットブロックの情報を who-owns-this-domain に渡してください。
ピボット
| 新しいセレクター | 移動先 |
|---|---|
| 発見したホストの証明書のサブジェクトと SAN | find-hidden-subdomains |
| ネットブロック、ASN、逆引き DNS ホスト名 | who-owns-this-domain |
| 証明書のサブジェクトと RIR レコードから得られた組織名 | x-ray-a-company、who-really-owns-it |
| 公開されているリポジトリ、CI、レジストリのサービス | secrets-in-git-history |
| 発見したホストの過去のコンテンツ | read-deleted-pages |
| 発見したサービスでインデックス登録されているパス | google-like-a-spy |
| 整理するホスト/証明書/ASN のクラスター | graph-the-network |
法的事項と利用規約に関する注意
スキャンプラットフォームへのクエリは、合法的な受動的調査です。境界線となるのは、その結果を受けて行動する場合です。公開されているデータベースへの接続、管理パネルを開くこと、公開されているカメラ映像の閲覧、オープンな共有フォルダーからのファイル取得は、多くの法域でコンピューター不正利用に関する法律上、無許可アクセスに該当する可能性があります。また、パスワードが設定されていないことは抗弁になりません。発見した情報によって認められるのは、ネットブロックの RIR レコードに記載された不正利用窓口または該当する CERT への報告のみであり、それ以外は認められません。スキャンプラットフォームの利用規約ではデータの再配布も制限されているため、データセットを再公開するのではなく、報告書内で調査結果を引用してください。個人データを含むスクリーンショットやバナーには、../../ETHICS.md の最小化ルールが適用されます。