世界のインターネット利用をより深く理解するには、Cloudflare の URL Scanner を使います。URL Scanner では、ドメイン、IP、URL、ASN の詳細を調査できます。Cloudflare の URL Scanner は、Cloudflare ダッシュボードの Security Center、Cloudflare Radar ↗、Cloudflare API で利用できます。
API で初めて URL スキャンを行うには、URL Scanner 専用の API トークン が必要です。Permissions グループで Account > URL Scanner を指定した Custom Token を作成し、アクセスレベルに Edit を選びます。
トークンを取得し、account_id が分かれば、https://api.cloudflare.com/client/v4/accounts/{account_id}/urlscanner/ への最初のリクエストを送れます。
スキャンする URL を送信するには、POST リクエストボディにスキャン対象の URL だけが必要です。
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/urlscanner/v2/scan" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"url": "https://www.example.com"
}'デフォルトでは、レポートの可視性は Public です。最近のスキャン ↗ の一覧と検索結果に表示されます。デスクトップ解像度のスクリーンショットも 1 枚含まれます。
成功時のレスポンスはステータスコード 200 で、次のようになります。
{
"uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
"api": "https://api.cloudflare.com/client/v4/accounts/<accountId>/urlscanner/v2/result/095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
"visibility": "public",
"url": "https://www.example.com",
"message": "Submission successful"
}API ↗ 経由で、最大 100 件の URL を同時に送信できます。
上記レスポンスの uuid プロパティがスキャンを識別し、スキャンレポートを取得するときに必要です。
カスタム設定オプションを含むリクエストボディの例です。
{
"url": "https://example.com",
"screenshotsResolutions": [
"desktop", "mobile", "tablet"
],
"customagent": "XXX-my-user-agent",
"referer": "example",
"customHeaders": {
"Authorization": "xxx-token"
},
"visibility": "Unlisted"
}上では可視性を Unlisted に設定しています。スキャンレポートは 最近のスキャン ↗ の一覧にも検索結果にも含まれません。実質的に、スキャン ID を知っているユーザーだけがアクセスできます。
ウェブページのスクリーンショットは、対象デバイスの種類ごとに 3 枚撮影されます。User-Agent ↗ は "XXX-my-user-agent" に設定されます。任意のカスタム HTTP ヘッダーを設定でき、Authorization ↗ も含められます。
URL スキャンを送信したあと、進捗は https://api.cloudflare.com/client/v4/accounts/{account_id}/urlscanner/v2/result/{scan_id} を呼び出して確認できます。scan_id は、前のレスポンスで返った uuid の値です。
スキャン進行中の HTTP ステータスコードは 404 で、完了すると 200 になります。10〜30 秒ごとにポーリングすることを推奨します。
レスポンスには、ほかにも次のトップレベルプロパティが含まれます。
task- スキャン送信に関する情報。page- プライマリレスポンスに関する情報。たとえば IP アドレス、ASN、サーバー、ページのリダイレクト履歴です。data.requests- ページ読み込みに関与したリクエストチェーン。data.cookies- ページが設定した Cookie。data.globals- 標準以外の JavaScript グローバル変数。data.console- コンソールログ。data.performance-PerformanceNavigationTiming↗ インターフェースが返すタイミング。meta- 検出された技術、ドメインと URL のカテゴリ、ランク、地理位置情報などを含むメタプロセッサーの出力。lists.ips- 接続した IP。lists.asns- 接続した AS 番号。lists.domains- 接続したホスト名(dnsレコード情報を含む)。lists.hashes- レスポンスボディ、メインページの HTML 構造、スクリーンショット、ファビコンのハッシュ。lists.certificates- HTTP レスポンスの TLS 証明書。verdicts- 悪意のあるコンテンツに関する判定。
より具体的なプロパティの例は次のとおりです。
task.uuid- スキャンの ID。task.url- 送信されたスキャン対象 URL。HTTP リダイレクトがある場合、最終 URL(page.url)と異なることがあります。task.success- スキャンが成功したかどうか。スキャンは DNS エラーなど、さまざまな理由で失敗することがあります。task.status- 現在のスキャン状態。たとえばQueued、InProgress、Finishedです。meta.processors.domainCategories- 接続したメインホスト名の Cloudflare カテゴリ。meta.processors.phishing- 検出されたフィッシングの種類(ある場合)。meta.processors.radarRank- 接続したメインホスト名の Cloudflare Radar Rank ↗。meta.processors.wappa- Wappalyzer ↗ の助けを借りて検出された、ウェブサイトで使われている技術の種類。page.url- すべての HTTP リダイレクト後の、プライマリリクエストの URL。page.country- 接続したメイン IP アドレスに関連する地理位置データからの国名。page.history- メインページの履歴(HTTP リダイレクトを含む)。page.screenshot- メインスクリーンショットの各種ハッシュ。似たスクリーンショットのサイトを検索するために使えます。page.domStructHash- HTML 構造のハッシュ。似た構造のサイトを検索するために使います。page.favicon.hash- ファビコンの MD5 ハッシュ。verdicts.overall.malicious- スキャン時点で ウェブサイトが悪意のあるものと判断されたかどうか。検出された具体的な脅威は、各サブシステムの残りのプロパティを確認してください。
完全なレスポンススキーマは Get URL Scan API エンドポイントのドキュメントにあります。
スキャンの スクリーンショット または完全な ネットワークログ を取得するには、対応するエンドポイントのドキュメントを参照してください。
ElasticSearch Query 構文のサブセットでスキャンを絞り込みます。検索結果には Public のスキャンと、自分の Unlisted スキャンが含まれます。
ホスト名 google.com へのスキャンを検索するには、クエリパラメーター q=page.domain:"google.com" を使います。
curl 'https://api.cloudflare.com/client/v4/accounts/{account_id}/urlscanner/v2/search?q=page.domain:google.com' \
--header "Authorization: Bearer <API_TOKEN>"代わりに、ホスト名 cdnjs.cloudflare.com へ少なくとも 1 回リクエストしたスキャンを検索したい場合(たとえば cdnjs.cloudflare.com でホストされている JavaScript ライブラリを使うサイト)、クエリパラメーター hostname=cdnjs.cloudflare.com を使います。
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/urlscanner/v2/search?q=domain:cdnjs.cloudflare.com" \
--header "Authorization: Bearer <API_TOKEN>"その他のクエリ例です。
task.url:"https://google.com" OR task.url:"https://www.google.com": 送信 URL がgoogle.comまたはwww.google.comだったスキャンを検索します。URL は引用符で囲む必要があります。page.url:"https://google.com" AND NOT task.url:"https://google.com":google.comへのスキャンのうち、送信 URL がgoogle.comではなかったもの(つまり google.com へリダイレクトしたサイト)を検索します。page.domain:microsoft AND verdicts.malicious:true AND NOT page.domain:microsoft.com: ホスト名がmicrosoftで始まる悪意のあるスキャン。microsoft.phish.comのようなドメインに一致します。apikey:me AND date:[2024-01 TO 2024-10]: 2024 年 1 月から 2024 年 10 月までの自分のスキャン。page.domain:(blogspot OR www.blogspot): メインドメインがblogspotまたはwww.blogspotで始まるスキャンを検索します。date:>now-7d AND path:okta-sign-in.min.js: 過去 7 日間のスキャンのうち、いずれかのリクエストパスがokta-sign-in.min.jsで終わるもの。page.asn:AS24940 AND hash:-557369673: AS24940 でホストされ、指定したハッシュのリソースが取得されたウェブサイト。hash:8f662c2ce9472ba8d03bfeb8cdae112dbc0426f99da01c5d70c7eb4afd5893ca:page.domStructHashのハッシュを使い、同じ HTML 構造ハッシュを持つ他のスキャンを検索します。
利用可能なオプションの一覧は、API ドキュメントの Search URL scans を参照してください。
代わりに、Security Center で検索できます。
-
Cloudflare ダッシュボードで Investigate ページを開きます。
Investigate を開く ↗ -
クエリを入力し、Search を選びます。
URL をロケーション別にスキャンできます。ロケーション別スキャンでは、所在地によってウェブサイトが異なるコンテンツを表示するかを分析できます。特定地域向けの悪意のある活動を洗い出し、調べるのに役立ちます。
地理的な所在地に基づいて URL をスキャンするには、次の手順で行います。
- URL を入力します。
- Location を開き、URL をスキャンする国を選びます。
- Scan now を選びます。
API ↗ を使って、特定のロケーションから URL をスキャンすることもできます。
Security Center では、次の条件であらかじめ絞り込んだ情報を取得できます。
- 似たスクリーンショット
- 同一のファビコン
- 似たファビコン
- 似た HTML 構造
- 同一の ASN
- 同一の IP
- 同一のドメイン
- 同一の最終 URL(すべてのリダイレクト後)