スタートアップ・ビジネス

不可視Unicodeを一括遮断すると誤検知、旗絵文字を除く検知法

|著者: QUASA編集チーム|2 分で読めます
不可視Unicodeを一括遮断すると誤検知、旗絵文字を除く検知法

不可視Unicodeの検知では、U+E0000〜U+E007Fへの一致だけで一括遮断してはいけない。この範囲はASCII smugglingの有力な手掛かりだが、イングランド、スコットランド、ウェールズの正規な旗絵文字にも使われるため、単純な範囲判定は誤検知を起こす。

実装の要点は、タグ文字をコードポイント単位で抽出し、三地域の完全な旗シーケンスだけを許可済み範囲として除外することだ。残った文字について、挿入位置、出現頻度、除去前後の差、送信ドメイン、メール認証、URL、依頼内容を組み合わせ、記録、警告、隔離、遮断の順に判断を強める。

タグ文字をコードポイント単位で抽出する

最初の検査対象はUnicode TagsブロックのU+E0000〜U+E007Fである。これらは多くの表示環境で見えないため、画面上の文章だけでは存在を確認できない。UTF-16のコード単位で一文字ずつ処理すると補助平面のコードポイントを分割するので、JavaScriptではUnicodeモード付きの/[\u{E0000}-\u{E007F}]/guなどを使う。

一致の有無だけでなく、コードポイント、位置、前後の文字、入力全体での出現数を記録する。ログには不可視文字をそのまま残さず、「U+E0020」のように可視化する。原文はアクセス権と保存期間を制限した証跡として保持し、検査や既存ルールへの再入力には別の解析用コピーを使う。

Microsoft Security Researchの観測 では、U+E0020 TAG SPACEが「funding」の途中へ挿入され、見た目をほぼ変えずにリテラルなキーワード照合を分断していた。同じ調査では、U+E0000〜U+E007Fを一律に拾う初期ルールが、三地域の正規な旗絵文字を検知したことも確認されている。

三地域の旗は完全な並びだけを除外する

完全な三地域の旗シーケンスを許可し、基底・終端の欠落や余分なタグ文字を検出する比較

タグ文字を個別に許可すると、通常の文章に同じ文字を挿入した不正な入力まで通してしまう。許可するのは、U+1F3F4 BLACK FLAGから始まり、決められた地域コードのタグ文字が続き、U+E007F CANCEL TAGで終わる完全なシーケンスである。

  • イングランド: U+1F3F4、タグ文字列「gbeng」、U+E007F
  • スコットランド: U+1F3F4、タグ文字列「gbsct」、U+E007F
  • ウェールズ: U+1F3F4、タグ文字列「gbwls」、U+E007F

Unicode Emoji仕様のタグシーケンス定義 は、旗の基底をU+1F3F4、地域指定部分を数字または小文字のタグ文字、終端をU+E007Fとし、上記三地域を一般交換向けのRGIシーケンスとして示している。Unicode上はほかにも有効になり得る地域指定があるため、非RGIのシーケンスを受け入れる製品では、実際の対応範囲に合わせて許可リストを管理する必要がある。

除外処理では、入力中の開始位置から終端までを読み取り、許可リストとの完全一致を確認してから、その範囲だけを正常としてマークする。黒旗がない、終端がない、地域コードが違う、余分なタグ文字が付く、正規旗の直後に別のタグ列が続く場合は自動許可しない。非対応だが正しい可能性のある列は即時遮断ではなく、要確認に回す設計が安全である。

正規化とタグ文字の除去を分ける

NFCやNFKCを適用しただけでタグ文字が消えるとは想定しない。Unicode正規化形式の定義 は、標準等価または互換等価な表現を一定の形へ変換するもので、任意の不可視文字を削除するサニタイズ規則ではない。正規化後にも対象範囲を明示的に検査する必要がある。

解析用コピーでは、許可済みの旗シーケンスを保護し、それ以外のタグ文字を除去した版を作る。除去前後を比較すると、分断されていた単語、URL、命令を既存のフィッシング検知やプロンプトインジェクション検査へ再入力できる。ただし原文まで上書きすると挿入位置を追えなくなるため、原文、コードポイント可視化版、除去済みコピーを分ける。

メールでは件名と本文だけでなく、HTMLの復号結果、表示名、URL、添付文書から抽出した文字列も検査対象になる。AIシステムでは、利用者の直接入力に加え、モデルへ渡すメール、Webページ、文書などの取得コンテンツにも同じ処理を適用する。

複数のシグナルで処理の優先度を決める

不可視タグ文字の位置、頻度、送信元、認証、文脈を組み合わせて隔離優先度を決める工程

許可済みの旗を除いたタグ文字は強い異常シグナルになるが、それだけで攻撃とは断定しない。セキュリティ製品や研究者が転送した検体などにも含まれ得るため、文字列の特徴と送信経路、内容を組み合わせる。

  • 位置: 英数字、URL、金額、認証語、金融語、指示文の途中にあり、除去すると意味のある文字列が復元される。
  • 頻度: 同じ本文や抽出文書で繰り返される、または組織内の正常データで得た基準線を大きく外れる。
  • 構造: 基底や終端を欠く、許可済み旗の外側にタグ文字がある、完全な旗へ余分なタグ列が連結されている。
  • 送信経路: 普段と異なる送信ドメイン、表示名との不一致、認証失敗、急な送信量の変化が重なる。
  • 文脈: 認証情報の入力、送金、ファイル実行、外部URLへの移動、規則の無視やデータ送信を要求する内容が復元される。

実際のしきい値は組織の正常データで調整する。タグ文字だけなら記録または要確認、語中への挿入や不正な構造があれば警告、さらに送信元やURL、依頼内容の異常が重なれば隔離または遮断へ進める。共有メール基盤のIPやドメインは正規利用者も使う可能性があるため、単独の遮断条件にはしない。

検知処理を再利用可能な手順にする

  1. 入力形式に応じてHTMLエンティティやエスケープ表現を復号し、原文を変更せず保存する。
  2. コードポイント単位でU+E0000〜U+E007Fを列挙し、位置、前後の文字、出現数を記録する。
  3. 各タグ列の前後を調べ、許可済みの旗シーケンスと完全一致する範囲だけを正常として除外する。
  4. 残ったタグ文字を可視化し、解析用コピーから除去して、除去前後の差分を取る。
  5. 復元された語、URL、命令に、送信ドメイン、認証結果、出現頻度などを加えて優先度を決める。
  6. 優先度に応じて記録、警告、隔離、遮断を選び、正常データと検体でしきい値を調整する。

テストには三つのRGI旗、通常文中の単独U+E0020、語中への挿入、終端のない旗、正規旗の後ろへ余分なタグ文字を付けた列を含める。件名にはなくHTML本文だけにある場合や、添付文書の抽出後に現れる場合も分けて確認する。「対象範囲に一致したか」と「許可された完全な用途か」を別々に判定することで、旗絵文字を壊さずに不審な不可視文字を絞り込める。

共有:

ニュースレターを購読

Web3、AI、暗号資産の最新ニュースを受信箱にお届けします。

0