インターネット上に公開されている資産の把握は、現代のサイバーセキュリティにおいて最も重要な課題の一つとなっています。
攻撃者は常に公開された脆弱なホストや不適切な設定のサーバーを探しており、防御側もそれらと同じ視点で自組織の資産を監視しなければなりません。
こうしたニーズに応える強力なツールとして、インターネット全体のスキャンデータを蓄積する検索エンジン「Censys」が広く活用されています。
Censysは、SSL/TLS証明書やホストの詳細な構成情報を検索可能にすることで、高度なアセットインベントリ(資産管理)や脅威ハンティングを可能にします。
本記事では、Censysを使用したSSL証明書の調査方法やホスト情報の探索手法について、実務に役立つ具体的なテクニックを交えて紹介します。
Censysの基礎知識と他の検索エンジンとの違い
Censysは、ミシガン大学の研究プロジェクトから派生した検索プラットフォームであり、インターネット上のすべてのIPアドレスを継続的にスキャンしています。
同様のサービスとしてShodanが有名ですが、Censysは特に証明書の解析精度やホストの構成情報の詳細さにおいて高い評価を得ています。
Censysの最大の特徴は、単にオープンなポートを見つけるだけでなく、そこで動作しているプロトコルの深い階層まで解析を行う点にあります。
例えば、HTTPSプロトコルが動作している場合、Censysはその背後にあるSSL/TLS証明書のチェーンを完全に解析し、独自のデータベースに格納します。
このデータ構造により、ユーザーは特定の組織名が含まれる証明書を使用しているすべてのホストを、IPアドレスの範囲に関わらず瞬時に特定できます。
また、Censysはスキャンデータを構造化データとして提供しているため、APIを介した自動化や大規模な分析が容易であることも大きな利点です。
インターネット全体を可視化するスキャンエンジン「ZMap」
Censysのバックエンドでは、高速なネットワークスキャナーである「ZMap」が稼働しています。
ZMapは、ギガビットイーサネット環境であれば、理論上45分以内にIPv4アドレス空間全体のスキャンを完了させる能力を持っています。
この高速なスキャンにより、インターネット上の資産の変化をほぼリアルタイムに近い頻度でインデックス化することが可能となっています。
Censysはこのスキャン結果に基づき、各ホストで動作しているアプリケーション層のプロトコルを詳細に調査します。
検索対象となるデータの種類
Censysで検索できる主なデータは、大きく分けて「ホスト(Hosts)」と「証明書(Certificates)」の2つに分類されます。
ホストデータには、IPアドレス、地理的ロケーション、オープンポート、バナー情報、プロトコル仕様などが含まれます。
証明書データには、Certificate Transparency(CT)ログから取得された情報や、直接ホストから収集されたSSL/TLS証明書の全フィールドが含まれます。
これら2つのデータを組み合わせることで、ドメイン名からIPアドレスを特定したり、逆にIPアドレスから関連する組織を特定したりする双方向の探索が可能になります。
SSL証明書を起点とした実践的な探索手法
SSL/TLS証明書は、そのホストを所有する組織を特定するための極めて重要な手がかりとなります。
Censysを使用すると、特定の組織名やドメイン名が含まれる証明書を網羅的にリストアップできます。
これは、シャドーIT(情報システム部門が把握していないクラウド資産やサーバー)を発見する際に非常に有効な手法です。
例えば、開発チームがテスト目的で一時的に構築したサーバーであっても、正式なドメインの証明書を適用していれば、Censysの検索にヒットします。
証明書のサブジェクト情報による検索
最も基本的な検索方法は、証明書の「Subject」フィールドに含まれる組織名(Organization)やコモンネーム(Common Name)を指定することです。
以下のクエリを使用することで、特定の企業に関連する証明書を持つホストを絞り込むことができます。
services.tls.certificates.leaf_data.subject_dn: "O=Example Corp"
このクエリは、組織名が「Example Corp」として登録されている有効な証明書を保持しているすべてのホストを返します。
多くの場合、企業はワイルドカード証明書やマルチドメイン証明書を使用しており、これらを調査することでサブドメインの網羅的なリストを作成することも可能です。
フィンガープリントによる特定の証明書の追跡
特定のサーバーが使用している証明書のSHA-256フィンガープリントを知っている場合、その証明書が他にどこで使用されているかを調査できます。
これは、フィッシングサイトやC2サーバー(コマンド&コントロールサーバー)が本物のサイトの証明書をコピーして使用しているケースを特定するのに役立ちます。
また、自己署名証明書(オレオレ証明書)を使用している場合でも、その固有のハッシュ値をキーにして、インターネット上に点在する同一管理者のホストを特定できます。
Certificate Transparency (CT) ログの活用
Censysは、公開されているCTログも収集しているため、現在有効な証明書だけでなく、過去に発行された証明書の履歴も参照できます。
これにより、現在はDNSレコードが削除されているものの、過去に特定のドメインで運用されていたサーバーのIPアドレスを特定できる場合があります。
攻撃者は、過去に脆弱性が放置されていた古いサーバーのIPをこのようにして特定し、攻撃の足がかりにすることがあります。
ホスト情報の探索とサービス解析
Censysの強力な点は、IPアドレスの詳細な「ふるまい」を検索できることにあります。
特定のソフトウェアのバージョンや、特定の応答パターンを持つホストを検索することで、脆弱なシステムの露出状況を確認できます。
セキュリティ担当者は、自組織のIPレンジにおいて、予期しないポートが開放されていないかを定期的に監視する必要があります。
ポートとプロトコルによるフィルタリング
特定のポートが開いているホストを探すのは基本ですが、Censysではそのポートで動作しているサービスの詳細まで指定できます。
例えば、デフォルトの3306番ポート以外で動作しているMySQLサーバーを探すといった高度な検索が可能です。
services.service_name: MYSQL AND NOT services.port: 3306
このようなクエリを実行することで、セキュリティ対策としてポート番号を変更しているものの、認証設定が不十分なデータベースを特定できます。
HTTPレスポンスボディとヘッダーの解析
CensysはHTTPサーバーからのレスポンスボディやヘッダー情報もインデックス化しています。
特定のWebアプリケーションフレームワークやCMS(WordPressなど)の特定のバージョンを使用しているサーバーを特定することが可能です。
脆弱性が公表された直後に、自組織の資産の中で該当するバージョンを使用しているサーバーがないかを迅速に調査する際に極めて有用です。
以下の表は、Censysでよく使用されるホスト検索のフィールドをまとめたものです。
| フィールド名 | 説明 | 活用例 |
|---|---|---|
| services.http.response.headers.server | HTTPサーバーヘッダーの内容 | Apacheやnginxのバージョン特定 |
| services.software.vendor | 検出されたソフトウェアのベンダー名 | MicrosoftやCisco製品の抽出 |
| location.country | ホストが所在する国 | 特定の国に設置された資産の限定 |
| autonomous_system.name | AS(自律システム)名 | AWSやAzureなどのクラウド利用状況の把握 |
高度な調査シナリオ:脆弱な資産の特定
具体的な調査シナリオとして、最近公開された重大な脆弱性(CVE)の影響を受ける可能性があるサーバーを探索する手法を考えます。
脆弱なバージョンのソフトウェアを特定するためには、バナー情報に含まれるバージョン文字列を検索条件に指定します。
特定の製品特有のfavicon(ファビコン)のハッシュ値を用いた検索も、ログイン画面を隠蔽しているサーバーを見つけ出すための非常に有効なテクニックです。
CensysはfaviconのMD5ハッシュ値を計算してデータベースに保存しているため、同じアイコンを持つ管理画面を芋づる式に発見できます。
意図しない管理インターフェースの露出確認
多くの企業において、リモートデスクトップ(RDP)やSSH、VNCなどの管理用ポートがインターネットに公開されているケースが見受けられます。
これらはブルートフォース攻撃の直接的な標的となるため、Censysを用いて自組織のIP帯域をスキャンし、意図しない露出がないかを確認することが推奨されます。
また、パブリッククラウド(AWS S3バケットやAzure Storageなど)の公開設定ミスを特定するためのキーワード検索も、データ漏洩防止の観点から重要です。
Censys APIを利用した自動化
手動での検索だけでなく、Censysが提供するAPIを活用することで、継続的な資産モニタリングを自動化できます。
Pythonなどの言語からAPIを呼び出し、特定のクエリに合致するホストが増えた場合にアラートを飛ばす仕組みを構築できます。
ここでは、Pythonを使用してCensys APIから特定のドメインに関連するIPアドレス一覧を取得する簡単なサンプルコードを紹介します。
import requests
# APIの認証情報を設定
API_URL = "https://search.censys.io/api/v2/hosts/search"
API_ID = "YOUR_API_ID"
API_SECRET = "YOUR_API_SECRET"
# 検索クエリ(特定のドメインを含む証明書を持つホストを検索)
query = {
"q": "services.tls.certificates.leaf_data.names: example.com",
"per_page": 5
}
# APIリクエストの実行
response = requests.get(API_URL, params=query, auth=(API_ID, API_SECRET))
if response.status_code == 200:
data = response.json()
for result in data['result']['hits']:
print(f"IP Address: {result['ip']}")
else:
print(f"Error: {response.status_code}")
IP Address: 93.184.216.34
IP Address: 192.0.2.1
IP Address: 203.0.113.10
このようにAPIを活用することで、最新のスキャンデータを既存のセキュリティダッシュボードに統合することが可能となります。
定期的なスクリプトの実行により、資産の増減をログとして記録し、変化があった際に迅速に対応する体制を整えることができます。
検証プロセスにおける注意点
Censysのような外部スキャンデータを利用する際は、そのデータが必ずしも「今この瞬間」の状態を反映しているとは限らない点に注意が必要です。
スキャンのタイミングによっては、すでに修正済みの脆弱性が検出されたり、逆に新しく公開された資産がまだインデックスされていなかったりすることがあります。
したがって、Censysで得られた情報はあくまで「手がかり」として扱い、最終的な確認は直接的な通信確認や社内の資産管理台帳との突き合わせによって行うべきです。
また、他者の資産に対して無差別なディープスキャンを直接行うことは倫理的・法的に問題となる可能性がありますが、Censysのキャッシュデータを閲覧することは、一般的に合法的なOSINT(オープン・ソース・インテリジェンス)活動とみなされます。
まとめ
Censysは、インターネット全体を俯瞰する視点を提供し、複雑化したITインフラの現状を正確に把握するための不可欠なツールです。
SSL/TLS証明書の解析や詳細なホスト探索機能を駆使することで、従来の手法では見落とされがちだった資産の露出や構成ミスを効率的に特定できます。
特に、証明書情報を起点としたドメインとIPアドレスの紐付けは、組織のデジタルフットプリントを可視化する上で極めて強力な手段となります。
セキュリティエンジニアやIT管理者は、Censysを活用した定期的な資産調査を業務プロセスに組み込むことで、攻撃者よりも先に自組織の弱点を発見し、リスクを最小限に抑えることが可能です。
今回紹介したクエリやAPI活用術を参考に、より実践的で高度なセキュリティ検証に取り組んでみてください。
