URLを分解して読む
本システムは,入力されたリソース識別文字列(URL)をブラウザ内部のJavaScriptを用いて,WHATWG URL仕様に基づき厳密に解剖し,各コンポーネントへと分離する機能を提供します.URLの解析処理そのものはローカル環境で完結しており,スキャンボタンを押した直後の構造解析段階では対象のサーバーに対するHTTP通信は発生しません.
まず,文字列の先頭部分を走査し,通信の基盤となるプロトコルスキームを特定します.本ツールは「http://」および「https://」で始まるURLに対応しており,スキームが省略された文字列が入力された場合は,自動的に「https://」を補完して解析を試みます.
プロトコルの次に続く部分はネットワーク上の宛先を示すホスト名(ドメイン)として抽出され,ポート番号が明示されている場合はそれも分離します.ポート番号の指定がない場合は,プロトコルに応じて80番または443番として解釈結果に表示します.
続いて,ホスト名以降のリクエストパス,および疑問符(?)に続くクエリパラメータ,ハッシュ記号(#)に続くフラグメント識別子を個別の要素として切り出します.これにより,一見して単一の複雑な文字列に見えるURLが,どのような要素の組み合わせで構成されているかを「URL デシリアライズ・パース結果」の表として可視化します.
各コンポーネントは独立したセルに表示されるため,攻撃者が視覚的な錯覚を狙って長大なパスや複雑なパラメータを付与していた場合でも,本来のドメイン名と付加情報を明確に区別して確認することが可能になります.パーセントエンコーディングが含まれる場合は,構造解析に失敗しない範囲でそのままの形式で表示を試みます.
入力欄の横には「スキャン」ボタンが配置され,実行中は「解析中...」のスピナーに切り替わる視覚的なフィードバックにより,解析の進行状態を即座に把握できます.
実際のホストと認証部分
フィッシング詐欺において最も頻繁に用いられる手法の一つが,URLのホスト名部分の偽装です.本ツールは分離したホスト名に対して独自の固定ルールに基づく検証を行い,不審な兆候を検出して脅威度スコアに加点します.ホスト名(ドメイン)の確認は,利用者が誤って偽のサイトに誘導されていないかを判断する上で極めて重要な指標となります.
特徴的な検証項目として,認証情報を悪用した偽装の検出があります.URLの仕様上,「http://ユーザー名:パスワード@ドメイン名/」という形式で認証情報を埋め込むことが可能です.攻撃者はこの仕様を悪用し,「http://www.google.com:login@evil.example.com/」のように,アットマーク(@)の前に正規のブランド名を配置して利用者を騙し,実際にはアットマーク以降の悪意あるドメインへ接続させようとします.
本ツールは解析過程でユーザー名やパスワードのコンポーネントが検出された場合,独自ルールで加点して認証部分の存在を警告します.正当な用途でも使われるため,これだけでフィッシングと判定するものではありません.
また,IPアドレスの直接指定も重要な確認項目です.通常のウェブサイトはドメイン名を使用してアクセスされますが,一時的に構築された不正サイトやマルウェアの通信先として,IPv4(例:192.168.1.1)やIPv6アドレスが直接指定されることがあります.本ツールは正規表現パターンを用いてホスト名がIPアドレス形式であるかを判定し,警告の対象とします.
ただし,企業の社内システムやネットワーク機器の管理画面など,正当な目的でIPアドレス直打ちが使用されるケースも多々存在します.したがって,IPアドレスの検出そのものは独自ルールによる加点事由にはなりますが,それ単体で即座に不正サイトであるという証拠にはならない点に留意して解析結果を読む必要があります.
独自チェックに該当する項目は「脅威検知・ルール合否判定」のパネルに一覧表示され,独自ルール上の警告レベル(赤色・黄色・緑色)のアイコンと共に,それぞれの理由が詳細なテキストとして付記されます.
エンコードと入れ子URL
サイバー攻撃者はセキュリティフィルターを回避し,利用者の目をごまかすために,URLのクエリパラメータ内に別のURLを入れ子(ネスト)にして隠蔽する手法を頻繁に用います.本ツールは,抽出されたクエリパラメータ群に対して詳細な分析を実行し,パラメータの値として別のURLが含まれていないかを個別にチェックする「クエリパラメータ分析」機能を備えています.
URLのパース結果から得られたすべてのクエリパラメータについて,キーと値のペアを抽出し,その値が「http://」や「https://」で始まるか,あるいは一般的なドメイン名の形式(www.から始まる等)に合致するかを正規表現を用いて判定します.もし値の内部に別のURLの構造が検出された場合,システムはこれを「URL転送の疑い」としてマークし,パラメータごとに警告ラベルを表示します.
この機能により,オープンリダイレクト脆弱性を狙った攻撃や,複雑な追跡用パラメータに隠された真の遷移先URLを容易に発見することが可能になります.
入れ子になったURLが発見された場合,利用者はそのパラメータの横に表示される「このURLを再スキャン」ボタンを利用することができます.このボタンを押下すると,対象のパラメータ値が新たな分析対象URLとして入力欄に自動設定され,再度パース処理が実行されます.これにより,手動でURLの一部をコピーして貼り直す手間を省きながら,多段にネストされた不審なリンクの構造を段階的に解き明かしていくことが可能です.
なお,本ツールは入力された文字列の構造をそのまま解析するため,多重にパーセントエンコーディングが施されている場合は,手動でデコードツールを併用して元の文字列に戻してから解析を行う必要があります.特に悪意のあるリンクでは意図的にエンコードが繰り返されるケースが多いため注意が必要です.
独自加点の限界
本ツールが提供する「脅威解析スコア(0〜100)」および「脅威検知・ルール合否判定」は,あくまで入力された文字列が事前に定義された固定ルールに合致するかどうかを機械的に評価した結果に過ぎません.このスコアはツール独自の加点方式によるヒューリスティックな判定であり,対象サイトが実際にマルウェアを配布しているか,またはフィッシングサイトであるかを決定づける安全性の保証や完全な証明を提供するものではありません.
例えば,Punycode(「xn--」から始まる文字列)の検出機能は,国際化ドメイン名を悪用したホモグラフ攻撃(同形文字による偽装)の可能性を示唆して加点を行います.しかし,本ツールの実装では「xn--」というプレフィックスの有無を検出するのみであり,Unicodeへの完全な復号処理や,類似文字の視覚的な比較計算までは実行していません.
そのため,日本国内で正当に運用されている日本語ドメインのサイトを入力した場合でも,Punycodeの警告が表示されスコアが加算されます.
同様に,特定のTLD(トップレベルドメイン)やサブドメインの過剰なネスト,固定キーワード(login, secure, updateなど)の検出も,単なる文字列の一致に基づいています.TLDへの加点は登録価格や被害統計を調べた結果ではなく,固定リストへの一致だけです.
適法な用途でも同じTLDが使われます.ホスト名の区切り数もPublic Suffix Listを使用しない簡易判定です.正規の企業サイトが「login」というキーワードをパスに含めることも一般的です.スコアが高く表示された場合でも,各ルールの詳細な理由(「正規サイトでも使われる語の独自加点であり,不正の確率ではありません」等の記述)を読み解き,構成要素全体の文脈から総合的に判断することが求められます.
不審な点が見受けられる場合には,決して安易にアクセスせず,他の情報源もあわせて安全性を多角的に確認する習慣をつけることが推奨されます.
任意のリダイレクト確認
短縮URLサービス(bit.lyやt.coなど)を利用したリンクは,最終的な到達先のドメイン名やパスが隠蔽されているため,文字列の構造解析だけでは実際の脅威を評価することができません.本ツールでは,利用者の明示的な許可に基づき,リダイレクト先のURLを追跡する「リダイレクト追跡レポート」機能を提供しています.
この機能は自動的には実行されません.リダイレクトの追跡を開始するには,利用者が「送信先と送信内容を確認し,外部への通信を許可する」というチェックボックスを手動で有効化し,専用の確認ボタンを押下する必要があります.ボタンが押されると,ブラウザから対象URLに対してHEADリクエストが送信されます.
この際,フェッチAPIのmode: "cors",credentials: "omit",referrerPolicy: "no-referrer"オプションが指定され,このfetchではCookie等の認証情報と参照元を除外します.ただし,対象URLのパスやクエリ,接続元IP等は対象や転送先へ伝わり得ます.
また,3秒のタイムアウトが設定されています.
リダイレクト追跡において重要なのは,CORS(Cross-Origin Resource Sharing)の制限です.ブラウザからのリクエストに対して,対象サーバーがCORSポリシーでアクセスを許可していない場合,本ツールは応答のステータスコードやリダイレクト先のLocationヘッダを読み取ることができず,結果はエラーとなります.
ここで理解すべきは,CORS制限はあくまで「応答の読み取り」を制限するものであり,「リクエストの送信」自体をブロックするものではないという事実です.したがって,「応答を確認できませんでした」というエラーが表示された場合でも,要求自体は対象サーバーに届いている可能性があります.
未確認であることは安全の証拠にはなりません.そのため,リダイレクト結果が表示されない場合でも決して安全とはみなさず,あくまで外部の診断サービスなどと併用するための参考情報のひとつとして扱うべきです.
確認先と秘密情報の扱い
本ツールを使用する際,特に入力対象が社内の非公開システムや,個人的な秘密情報(ワンタイムトークン,セッションIDなど)を含むURLである場合,利用者はその扱いについて慎重な判断を下す必要があります.構造解析および独自ルールの合否判定のみを行うスキャン機能は完全にブラウザ内で処理されるため,この段階では外部ネットワークへURLが送信されることはありません.
しかし,その後の追加操作によって状況は変化します.
前章で説明したリダイレクト追跡機能を使用する場合,対象と転送先にはリクエストのURLパス・クエリ等が伝わります.DNSの通常の名前解決に送られるのはホスト名であり,URL全体ではありません.HTTPSで経路上の全機器にクエリが平文公開されるという意味でもありません.
さらに,本ツールにはVirusTotalやURLVoid,Googleセーフブラウジングといった「外部脅威診断ツール連携」のリンク群が用意されています.これらのリンクをクリックすると,ユーザーは別タブで各診断サービスのウェブサイトへと移動し,入力したURLまたはホスト名が当該サービスのURLパラメータとして直接引き渡されます.
外部サービスへ情報を送信する場合,そのデータは該当サービスのプライバシーポリシーに従って処理され,場合によっては世界中のセキュリティ研究者間で共有されるデータベースに記録される可能性があります.本ツールは,ユーザー名やパスワードを含むURLや,「localhost」,プライベートIPアドレス(192.168.x.xなど)のローカル環境向けホストに対するリダイレクト追跡リクエストを内部ロジックで拒否しますが,これは最低限のフェイルセーフであり,あらゆる機密情報の送信を防ぐものではありません.
秘密情報を含むURLを処理する場合は,リダイレクト追跡や外部連携機能を使用せず,構造解析の確認のみに留める運用を徹底してください.どのようなデータが送信されるかを事前に正確に把握し,個人のプライバシーや組織の機密情報を適切に保護しながら,安全にツールを活用してください.