Censysの使用方法をわかりやすく解説

解析

インターネット上のすべてのサーバ・デバイス・証明書を常時スキャンし、 誰でも無料で検索できる──それが Censys です。 セキュリティ研究者・SOCアナリスト・ペネトレーションテスターなど、 世界中の約50万人のユーザーに使われているこのツールを、 初心者でもすぐ実践できるようにゼロから解説します。


  1. 🌐 Censys とは何か? ── 「インターネットの地図」を作るサービス
    1. Shodan との違い
  2. 🔑 アカウント作成と無料プランでできること
    1. プランの種類
  3. 🗺️ Censys の3つの主要データベース
    1. ① Hosts(ホスト)インデックス
    2. ② Certificates(証明書)インデックス
    3. ③ Web Properties(Webプロパティ)インデックス
  4. 🔍 CenQL ── Censys のクエリ言語をマスターする
    1. 基本構文
    2. 主要フィールド一覧
    3. CensysGPT ── 自然言語でクエリを作る
  5. 🔬 実践クエリ集 ── ケース別に使いこなす
    1. ケース1:特定ドメインの全サーバを把握する
    2. ケース2:脆弱なソフトウェアを使っているサーバを探す
    3. ケース3:C2サーバ・悪意のあるインフラを追跡する
    4. ケース4:フィッシング・なりすましサイトの発見
    5. ケース5:開放されているべきでないサービスを発見する(自組織のASM)
  6. 🖥️ Censys API を使ってみる ── Python で自動化
    1. セットアップ
    2. 基本的なホスト検索
    3. 特定IPの詳細情報を取得
    4. 証明書の追跡:同じ鍵を持つ全ホストを発見
    5. フィッシング証明書の継続監視スクリプト
  7. 🗂️ Censys の「ラベル」機能を活用する
  8. 📜 Certificate Transparency との連携 ── 証明書の「誕生」をリアルタイムで監視
  9. 🔗 実践フロー ── インシデントレスポンスでの使い方
  10. 📱 Censys の新機能 ── 2024〜2025年のアップデート
  11. 📚 まとめ ── 初心者が最初にやること3ステップ

🌐 Censys とは何か? ── 「インターネットの地図」を作るサービス

Censys(センシス)は、2015年にミシガン大学の研究チームが立ち上げた インターネット・インテリジェンスプラットフォームです。 現在は同名企業(Censys, Inc.、本社:ミシガン州アナーバー)が運営しており、 インターネット全体を継続的にスキャンして得た膨大なデータを検索・分析できるサービスを提供しています。

一言で言えば、「インターネットの地図」です。 IPv4・IPv6全アドレス空間に対して定期スキャンを行い、 どのIPアドレスのどのポートに何のサービスが動いているか、 どんなSSL証明書を使っているか、などを丸ごとデータベース化しています。

 💡 Censys の規模感(2024〜2025年時点)
・世界中の約50万人のユーザーが利用
・スキャン対象:IPv4全アドレス(約43億)+ IPv6
・SSL/TLS証明書データベース:数十億件規模(Certificate Transparency ログ由来)
・米国政府機関の利用:2023年10月比で約43%増(2025年時点)
・グローバルパートナーネットワーク:2024年に200%超拡大

Shodan との違い

「Censysって Shodan と似てるんじゃないの?」と思う方も多いでしょう。 どちらもインターネットスキャンエンジンですが、以下の点で異なります。

比較項目CensysShodan
起源学術研究(ミシガン大学)商業サービス(2009年〜)
証明書データベース◎ 非常に充実(CTログ連携)○ あり
クエリ言語CenQL(構造化・厳密)独自構文(直感的)
無料プランの制限基本検索+APIアクセス1ページのみ・API制限あり
AI検索(自然言語)◎ CensysGPT あり△ 限定的
履歴データ○ プラン依存○ プラン依存
主な用途脅威ハンティング・証明書追跡IoT探索・バナー情報

CensysとShodanの比較(2025年3月現在)


🔑 アカウント作成と無料プランでできること

Censys は search.censys.io から 無料アカウントを作成するだけで、すぐに使い始めることができます。

プランの種類

プラン月額検索クエリ数/月主な用途
Community(無料)$0制限あり学習・個人調査
Search Solo有料500クエリ/月+API無制限個人セキュリティ研究者
Search Teams有料数千クエリ/月小規模セキュリティチーム(最大5名)
Enterprise要問い合わせ無制限大企業・政府機関

Censys のプラン概要(2025年3月現在、詳細は公式サイト参照)

 ✅ 無料プランでできること
・IPアドレス・ドメイン・証明書の基本検索
・ホスト詳細ページの閲覧(開放ポート・サービス・SSL証明書情報)
・CenQL(クエリ言語)の基本利用
・CensysGPT(AI自然言語クエリ)の試用
・APIキーの取得(レート制限あり)


🗺️ Censys の3つの主要データベース

Censys には主に3種類のデータセットがあり、それぞれ異なる切り口でインターネットを探索できます。

① Hosts(ホスト)インデックス

IPv4・IPv6アドレスをキーとして、そのIPで動作しているサービス情報をまとめたデータセットです。 開放ポート・プロトコル・バナー情報・TLS情報・位置情報・ASN・既知CVEなどが含まれます。

② Certificates(証明書)インデックス

インターネット上に存在するX.509証明書のデータベースです。 Certificate Transparency(CT)ログと実際のスキャンの両方からデータを収集しており、 SHA-256フィンガープリント・Subject/Issuer・SANドメイン名・有効期間などで検索できます。

③ Web Properties(Webプロパティ)インデックス

ドメイン名・Webサイトのタイトル・HTTPヘッダー・JavaScript・CSSなどの Webアプリケーション情報をまとめたデータセットです。 フィッシングサイトの検出やWebフレームワークの特定などに使われます。


🔍 CenQL ── Censys のクエリ言語をマスターする

Censys の検索は CenQL(Censys Query Language)という専用クエリ言語を使います。 Elasticsearch に似た構文で、フィールド名 演算子 値 の形式が基本です。

基本構文

# フィールド指定検索
services.port: 8080

# 文字列(完全一致)
services.tls.certificate.parsed.subject.common_name: "example.com"

# ワイルドカード
services.tls.certificate.parsed.names: "*.example.com"

# AND / OR / NOT
services.port: 443 and services.service_name: "HTTP"
services.port: 22 or services.port: 3389
not services.service_name: "UNKNOWN"

# 括弧でグループ化(ネスト検索)
services: (port: 443 and tls.certificate.parsed.subject.organization: "Cobalt")

# 範囲指定(日付・数値)
services.tls.certificate.parsed.validity.start: [now-7d to now]

主要フィールド一覧

フィールド名説明
services.port開放ポート番号services.port: 4444
services.service_nameサービス種別services.service_name: "SSH"
services.software.productソフトウェア名services.software.product: "nginx"
services.software.versionバージョンservices.software.version: "1.18.0"
host.location.country国コードhost.location.country: "JP"
host.location.city都市名host.location.city: "Tokyo"
autonomous_system.nameAS名(プロバイダ等)autonomous_system.name: "SAKURA"
autonomous_system.asnAS番号autonomous_system.asn: 7506
services.jarm.fingerprintJARMフィンガープリント(後述)
services.tls.ja3sJA3Sハッシュ(後述)
labelsCensysによる自動ラベルlabels: "c2"

Hostsインデックスの主要フィールド

CensysGPT ── 自然言語でクエリを作る

CenQL の構文を覚えるのが大変という方には CensysGPT が便利です。 日本語や英語の自然な文章を入力するだけで、CenQL クエリに自動変換してくれます。

 CensysGPT の入力例
「日本にある、443ポートが開いていてnginxを使っているサーバを探して」
↓ 自動変換
services.port: 443 and services.software.product: "nginx" and host.location.country: "JP" 


🔬 実践クエリ集 ── ケース別に使いこなす

ケース1:特定ドメインの全サーバを把握する

自組織や調査対象のドメインに紐付くサーバを全て洗い出すのは、 アタックサーフェス管理(ASM)の基本です。

# example.com のサブドメインを含む全ホストを検索
dns.names: "*.example.com"

# 証明書インデックスでSANに含まれるドメインを検索
cert.parsed.names: "*.example.com"

# ドメインに関連する全証明書(期限切れ含む)
cert.parsed.subject.common_name: "example.com"

# 特定ドメインの証明書が現在使われているホストを検索
services.tls.certificate.parsed.names: "example.com"

ケース2:脆弱なソフトウェアを使っているサーバを探す

特定の脆弱バージョンのソフトウェアが動いているサーバを全世界から特定できます。 パッチ適用の優先度判断や、脆弱なシステムの自組織内把握に役立ちます。

# 脆弱なOpenSSHバージョンを探す
services.software.product: "OpenSSH" and services.software.version: "7.4"

# 古いApache HTTP Serverを探す
services.software.product: "Apache httpd" and services.software.version: {1 TO 2.4.50}

# ログイン画面が露出しているホスト(Censys自動ラベル活用)
labels: "login-page" and host.location.country: "JP"

# 特定CVEに脆弱なホスト(Censys CVEデータ)
services.truncated_banner: "Outlook" and services.port: 443

# Webカメラ・IoTデバイスを探す
labels: "camera" and host.location.country: "JP"

ケース3:C2サーバ・悪意のあるインフラを追跡する

前回の記事で解説した JARM・JA3S・証明書ハッシュと Censys を組み合わせることで、 攻撃インフラを効率的に検索できます。

# Cobalt Strike のデフォルト証明書で検索
services.tls.certificate.parsed.subject.common_name: "Major Cobalt Strike"

# Cobalt Strike のデフォルト発行組織で検索
services.tls.certificate.parsed.subject.organization: "cobaltstrike"

# JARM フィンガープリントで同種のC2を検索
services.jarm.fingerprint: "07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1b"

# 自己署名証明書 + 非標準ポートの組み合わせ(C2によく見られるパターン)
services.tls.certificate.parsed.signature.self_signed: true and services.port: {4443 TO 8443}

# Censys の C2 ラベルで絞り込む
labels: "c2"

# Sliver C2 を特定する
services.jarm.fingerprint: "3fd3fd15d3fd3fd21c3fd3fd3fd3fd9e5f3fd3fd3fd3fd44e3fd3fd3fd3fd"

ケース4:フィッシング・なりすましサイトの発見

攻撃者はフィッシングサイトに正規企業名に似たドメインの証明書を取得することがあります。 Censys の証明書インデックスを使えば、発行直後の証明書も追跡できます。

# 「amazon」を含む証明書を最近発行された順で検索
cert.parsed.names: "amazon*" and cert.parsed.validity.start: [now-7d to now]

# タイポスクワッティングドメインの例(amaZon, arnazon など)
(cert.parsed.names: "amaz0n*" or cert.parsed.names: "arnazon*")

# ログインページがあり直近6時間以内に証明書が発行されたホスト
services: ((tls.certificate.ct.entries.value.added_to_ct_at: [now-6h to *]) and (labels: "login-page"))

# 自社ドメイン名を含む不審な証明書の監視
cert.parsed.names: "*自社名*" and not cert.parsed.subject.organization: "自社の正式組織名"

ケース5:開放されているべきでないサービスを発見する(自組織のASM)

# 自組織のASNで管理しているホストで、RDPが開放されているもの
autonomous_system.asn: 99999 and services.port: 3389

# 管理画面が開放されているホスト(タイトル "dashboard" 含む)
services.http.response.html_title: "dashboard" and host.location.country: "JP"

# Kubernetes API サーバが誤って公開されているホスト
services.port: 6443 and services.software.product: "kube-apiserver"

# Elasticsearch が認証なしで公開されている(国内)
services.service_name: "ELASTICSEARCH" and host.location.country: "JP"

# CIDRブロックで自組織を絞り込む
host.ip: "192.0.2.0/24" and services.port: {3306, 5432, 1433}


🖥️ Censys API を使ってみる ── Python で自動化

Web UIでの検索だけでなく、Censys Python ライブラリを使えば 定期的な監視やバルクデータ取得を自動化できます。

セットアップ

# インストール
pip install censys

# APIキーの設定(search.censys.io のアカウントページから取得)
export CENSYS_API_ID="your_api_id_here"
export CENSYS_API_SECRET="your_api_secret_here"

# または censys 設定コマンドで対話的に設定
censys config

基本的なホスト検索

from censys.search import CensysHosts

h = CensysHosts()

# 日本にあるCobalt Strikeのデフォルト証明書を持つホストを検索
query = '''
  services.tls.certificate.parsed.subject.common_name: "Major Cobalt Strike"
  and host.location.country: "JP"
'''

for page in h.search(query, per_page=25):
    for host in page:
        print(f"IP: {host['ip']}")
        for svc in host.get('services', []):
            print(f"  Port: {svc.get('port')} / {svc.get('service_name')}")

特定IPの詳細情報を取得

from censys.search import CensysHosts
import json

h = CensysHosts()

# IPアドレスを指定して詳細情報を取得
host = h.view("203.0.113.10")

print(json.dumps(host, indent=2, default=str))

# サービス情報だけを取り出す
for service in host.get('services', []):
    port   = service.get('port')
    proto  = service.get('service_name')
    banner = service.get('banner', '')[:100]
    print(f"  [{port}/{proto}] {banner}")

証明書の追跡:同じ鍵を持つ全ホストを発見

from censys.search import CensysCerts

c = CensysCerts()

# SHA-256 フィンガープリントからそのIPを持つ全ホストを列挙
fp = "fb444eb8e68437bae06232b9f5091bccff62a768ca09e92eb5c9c2cf9d17c426"
hosts, _ = c.get_hosts_by_cert(fp)

print(f"この証明書を使っているホスト:")
for h in hosts:
    print(f"  {h['ip']}  (最初の観測: {h['first_observed_at']})")

フィッシング証明書の継続監視スクリプト

from censys.search import CensysCerts
import datetime, json

c = CensysCerts()
TARGET_BRAND = "example"   # 監視したいブランド名
LOOKBACK     = "now-24h"   # 過去24時間

query = (
    f'cert.parsed.names: "*{TARGET_BRAND}*" '
    f'and cert.parsed.validity.start: [{LOOKBACK} to now]'
)

print(f"[{datetime.datetime.now()}] 監視開始: {TARGET_BRAND}")
alerts = []

for page in c.search(query, per_page=100):
    for cert in page:
        names = cert.get('parsed', {}).get('names', [])
        fp    = cert.get('fingerprint_sha256', '')
        print(f"  ⚠️  新規証明書: {names}  SHA256: {fp[:16]}...")
        alerts.append({"names": names, "fingerprint": fp})

# 結果をJSONで保存(SIEMへのインポート等に活用)
with open("cert_alerts.json", "w") as f:
    json.dump(alerts, f, indent=2)
print(f"計 {len(alerts)} 件の疑わしい証明書を検出")


🗂️ Censys の「ラベル」機能を活用する

Censys は各ホストに対して、スキャン結果を自動分析して ラベル(Labels)を付与します。 これを使うことで、複雑なクエリを書かなくても目的のホストを素早く発見できます。

ラベル名意味活用例
c2C2サーバの可能性が高いホスト脅威ハンティング
login-pageログイン画面が露出フィッシング検出・ASM
cameraWebカメラIoTセキュリティ調査
tor-exit-nodeTor出口ノード匿名通信の追跡
vpnVPNサーバインフラ識別
honeypotハニーポットの可能性誤検知の除外
scannerスキャンサーバ攻撃者インフラの追跡
httpHTTP サービスありWeb資産の把握
smtpメールサーバメールインフラの調査

Censys の主要ラベル一覧

# C2ラベルが付いたホストを日本から探す
labels: "c2" and host.location.country: "JP"

# スキャンサーバとして識別されたホストを追跡
labels: "scanner" and autonomous_system.name: "DIGITALOCEAN"

# Tor出口ノードを検索
labels: "tor-exit-node"

# ハニーポットを除外して本物のC2を探す
labels: "c2" and not labels: "honeypot"


📜 Certificate Transparency との連携 ── 証明書の「誕生」をリアルタイムで監視

Certificate Transparency(CT)とは、認証局(CA)が発行した全SSL証明書を 公開ログに記録する仕組みです(RFC 6962)。 Censys はこのCTログを常時取り込んでいるため、 証明書が発行された直後(数分〜数時間以内)に Censys で検索できます。

攻撃者はフィッシングサイトを立ち上げる際、Let’s Encrypt などで無料のSSL証明書を取得します。 CTログ監視を組み合わせることで、フィッシングサイトが公開される前に検知できる場合があります。

# 過去24時間以内に発行された「自社ブランド名」を含む証明書
cert.parsed.names: "*自社名*" and cert.parsed.validity.start: [now-24h to now]

# Let's Encrypt が発行した、特定キーワードを含む証明書
cert.parsed.issuer.organization: "Let's Encrypt" 
  and cert.parsed.names: "*paypal*" 
  and cert.parsed.validity.start: [now-1w to now]

# 有効期間が異常に長い自己署名証明書(C2に多い)
cert.parsed.signature.self_signed: true 
  and cert.parsed.validity.length: [315360000 TO *]


🔗 実践フロー ── インシデントレスポンスでの使い方

実際のインシデント対応で Censys をどう使うか、典型的なフローを紹介します。

  1. 不審なIPが社内ログに出現 → Censys で即座にプロファイリング
    ブラウザで https://search.censys.io/hosts/[IPアドレス] を直接開くと、 そのIPの開放ポート・サービス・証明書・地理情報・ASN・CVE情報を一覧確認できます。
  2. 証明書フィンガープリントを取得 → 同一証明書の全IPを検索
    詳細ページに表示された証明書のSHA-256を使い、 services.tls.certificates.leaf_data.fingerprint: "SHA256値" で 同じ証明書を使う別IPを列挙します。
  3. JARMフィンガープリントで同一C2フレームワークのサーバを列挙
    services.jarm.fingerprint: "JARM値" で同じC2ソフトウェアを使う 関連インフラを大規模に発見できます。
  4. ASN・組織情報でインフラの背景を確認
    多くのC2サーバは VPS プロバイダ(DigitalOcean・Vultr・Linode など)に立てられます。 autonomous_system.name: "DIGITALOCEAN" などで絞り込み、 インフラの傾向を把握します。
  5. 発見したIOCをSIEM・EDRに展開してブロック
    APIで全IPリストを取得し、ファイアウォールルールや EDR の IOC リストに自動追加します。

 ⚠️ 法的・倫理的注意事項
Censys は公開情報のデータベースを提供しているため、 Censys の Web UI・API を使った検索自体は合法的な調査手段です。 ただし、Censys で発見したサーバに対して直接スキャンや不正アクセスを行うことは 不正アクセス禁止法等に抵触する可能性があります。 自組織管理外のサーバへのアクセスは慎重に判断してください。


📱 Censys の新機能 ── 2024〜2025年のアップデート

  • Threat Hunting Module(2025年4月リリース):脅威ハンティングに特化したモジュール。既存のSIEM・SOARツールと直接統合でき、検出パイプラインを強化できます。
  • Integrations Marketplace(2024年5月):15分以内に任意のセキュリティツールとの統合を設定できるマーケットプレイスが登場。
  • CensysGPT(AI検索):自然言語でクエリを生成。競合ツール(Shodan等)のクエリをCenQLに変換する機能も搭載。
  • IPv6 カバレッジ拡大:IPv6アドレス空間のスキャンカバレッジを継続的に拡大中。
  • 履歴データ(Host History):過去のスキャン結果と現在を比較し、いつ何が変わったかを追跡できます(プラン依存)。

📚 まとめ ── 初心者が最初にやること3ステップ

Censys は機能が豊富すぎて最初は戸惑うかもしれませんが、 以下の3ステップから始めるのがおすすめです。

  1. 自分のパブリックIPをCensysで調べる
    https://search.censys.io/hosts/[自分のIP] を開き、 外から自分のサーバがどう見えるかを確認しましょう。 思わぬポートが開いていることが発覚することもあります。
  2. 自組織ドメインの証明書を全て洗い出す
    cert.parsed.names: "*.自社ドメイン.com" を実行し、 知らない間に発行されている証明書がないかチェックします。
  3. CensysGPT で気になるクエリを試す
    「日本にあるRDPが開放されたWindowsサーバを探して」などと日本語で入力し、 生成されたクエリを実行してみましょう。 CenQL の書き方が自然と身についていきます。
目的使うデータセット代表的なクエリ
自組織ASMHosts / Certificatesdns.names: "*.example.com"
C2追跡Hostslabels: "c2" / services.jarm.fingerprint: "..."
フィッシング監視Certificatescert.parsed.names: "*brand*" and added_at:[now-24h to *]
脆弱性把握Hostsservices.software.product: "X" and services.software.version: "Y"
脅威ハンティングHosts / CertificatesJARM・JA3S・証明書ハッシュの組み合わせ

目的別 Censys 活用チートシート

 📖 参考・公式リソース
Censys Search(無料アカウント作成)
Censys 公式ドキュメント
CenQL クエリリファレンス
Censys Academy(無料学習コース)
Censys Community(クエリ共有フォーラム)
Censys Python SDK ドキュメント 

コメント