コピーしたテキストのクリーニング
ウェブサイト、PDF、Word 文書から貼り付けたテキストには、検索やマッチングを壊すゼロ幅スペースやソフトハイフンがよく含まれます。ここに貼り付けて除去し、きれいなテキストをコピーし直してください。
テキストツール
テキストを貼り付ければ、ディテクタが見つけた不可視 Unicode 文字をすべてハイライトします。ゼロ幅スペース、結合文字、方向制御マーク、ソフトハイフンをそれぞれコードポイント付きで表示します。
不可視 Unicode 文字には正当な目的があります。改行制御、筆記体の結合、双方向テキスト、任意ハイフネーションなどです。しかし、何も描画しないという性質ゆえに、悪用の道具にもなります。Trojan Source 論文(CVE-2021-42574、2021 年 10 月公開)は、双方向オーバーライド文字を使えば、ソースコードが画面で読むのとは異なる挙動でコンパイルされることを示しました。併せて公開された CVE-2021-42694 は、関数名のラテン文字 a(U+0061)をキリル文字 а(U+0430)で差し替えるホモグリフ攻撃を扱いました。日常に近いところでは、ゼロ幅文字がユーザー名や識別子に仕込まれ、同じに見える 2 つの文字列が異なるものとして比較されるケースがあります。コードポイント単位でこれらの文字を浮き彫りにするディテクタが、最も早く見つける方法です。肉眼では見えないからです。
ウェブサイト、PDF、Word 文書から貼り付けたテキストには、検索やマッチングを壊すゼロ幅スペースやソフトハイフンがよく含まれます。ここに貼り付けて除去し、きれいなテキストをコピーし直してください。
どちらも「admin」と読めるユーザー名でも、片方に U+200B が含まれていれば別の文字列です。疑わしい識別子は、比較を信じる前にディテクタに通してください。
双方向オーバーライド文字(U+202A 〜 U+202E)は、正しく見えるコードの中にロジックを隠せます。信用できないソースからのコード片は、読む前にここに貼ってください。
IDN ホモグラフ攻撃は紛らわしい文字を使ってそっくりのドメインを登録します。ディテクタはドメインを解決しませんが、URL テキストに隠れた不可視文字は浮き彫りにします。
上に挙げた 6 文字が最も一般的ですが、全体像ではありません。徹底したスイープは複数の範囲をカバーします。ゼロ幅フォーマット文字の U+200B 〜 U+200F は、改行候補、結合文字、方向制御マークを含みます。U+2060(word joiner)や U+FEFF(バイトオーダーマーク、ストリーム途中に出現した場合)もゼロ幅です。双方向オーバーライドブロック、すなわち U+202A 〜 U+202E と U+2066 〜 U+2069 が、Trojan Source が悪用する対象です。U+00AD(ソフトハイフン)は折り返しまで不可視です。ハングルフィラー U+115F と U+3164、点字ブランク U+2800 は何も描画しないながらセルを占有するため、平然と内容を隠すのに使われます。紛らわしい文字(confusables)の検出は関連しつつも別の問題です。キリル文字 а とラテン文字 a はどちらも可視なため、文字ディテクタには引っかかりません。これを扱うには、Unicode の confusables データに対するチェックが必要で、見た目が同じ文字を正規化されたスケルトンに写像します。
ディテクタは JavaScript としてブラウザ内で完全に動作します。テキストはデバイスから一切外に出ません。これは、機密性の高い識別子やソースコードを貼り付ける場合に重要です。Chrome、Firefox、Safari、Edge、およびデスクトップ・モバイルのモダンブラウザすべてで動作します。スキャン対象は、U+200B 〜 U+200F 範囲のゼロ幅文字、U+202A 〜 U+202E と U+2066 〜 U+2069 の双方向オーバーライド、word joiner の U+2060、ソフトハイフンの U+00AD、そしてファイル先頭以外の位置に現れた U+FEFF(バイトオーダーマーク)です。このツールはコードポイント単位で不可視文字をフラグ立てし、ホモグリフ(他の文字に見える可視文字)は検出しない点に注意してください。
可視グリフを持たない Unicode 文字全般を指します。一般的なのは、ゼロ幅スペース(U+200B)、ゼロ幅結合文字(U+200D)、ゼロ幅非結合文字(U+200C)、left-to-right / right-to-left マーク(U+200E・U+200F)、そしてソフトハイフン(U+00AD)です。ディテクタはそれぞれをコードポイント単位でフラグ立てします。
主な経路は 3 つです。ウェブページや PDF からコピーすると、ソースに含まれていた不可視文字がそのまま持ち込まれます。エディタや CMS が改行制御のために挿入します。あるいは誰かが意図的に仕込みます。ウォーターマーク、フォーマット、識別子を異なる比較結果にさせるためなどが動機です。
単独では危険ではありません。しかしコード、ユーザー名、URL の中では、テキストのパース方法を変えられます。Trojan Source 攻撃(CVE-2021-42574)は双方向オーバーライドを利用し、レビュアーが見るものとは異なるロジックをコンパイラに読ませました。ユーザー名では、隠れた U+200B が同じに見える文字列を異なるものとして比較させます。
テキストを貼り、「テキストを解析」をクリックし、次に「不可視文字を削除」をクリックします。ツールは検出した不可視文字をすべて取り除き、可視テキストはそのまま残します。結果は「クリーンなテキストをコピー」で取得できます。
いいえ。ディテクタは JavaScript としてブラウザ内で完全に動作します。サーバーには何もアップロードされないため、ソースコード、資格情報、共有できないテキストにも安全に使えます。
いいえ。ホモグリフは可視文字です。キリル文字 а(U+0430)はラテン文字 a(U+0061)と同じに見えますが、どちらも通常通り描画されます。このツールが対象とするのは不可視文字です。confusables の検出には、見た目が同じ文字を正規化スケルトンに写像する Unicode の confusables データに対するチェックが必要です。