Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
confusable-vision — Unicode TR39に欠けている793の紛らわしいペア、世界初のクロススクリプトデータセット、230フォント・22,000以上の文字を対象としたフォント対応SSIMスコアリング | Kitploit
ツール/GitHubGitHub/paultendo/confusable-vision
OSINT (オープンソースインテリジェンス)偵察ウェブセキュリティ脅威インテリジェンスサプライチェーンセキュリティ論文と研究学習と教育厳選リソース
GitHubpaultendo/confusable-vision

confusable-vision

Unicode TR39に欠けている793の紛らわしいペア、世界初のクロススクリプトデータセット、230フォント・22,000以上の文字を対象としたフォント対応SSIMスコアリング

リポジトリを見る
1156ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

confusable-vision

ベクトルアウトラインレイキャスティングを用いた経験的なグリフ類似度スコアリング。245のシステムフォントにわたってUnicodeの紛らわしい文字ペアをレンダリングし、フォントアウトラインから直接構造的類似性を測定(ラスタライズなし)、フォントごとの連続距離スコアを持つスコア付きJSONアーティファクトを生成します。

22,581文字、12の書記体系にわたる5260万の単一文字比較と1億9000万の複数文字比較からの主な結果:

  • 249,976のユニークな単一文字紛らわしいペア(245フォント、12スクリプト、66のクロススクリプトペア)。合計764,395のフォントレベルの発見。
  • 2,524,275のユニークな複数文字(バイグラム)紛らわしいペア(95フォントにわたるrn/m(距離0.40未満33)、16フォントにわたるoy/キリル文字ukを含む)。
  • バイナリリストではなく、フォントごとの連続距離スコア。各ペアにはフォントごとに測定されたレイ距離があり、下流のセキュリティツールにフォント対応の信頼性を提供。
  • SDFより305%多くの発見、29%高速。強化された5層レイシグネチャはSDFの発見の厳密なスーパーセットであり、SDF専用のペアは手動レビューでは再現されませんでした。

出力は直接namespace-guardに供給され、パッケージ名、ドメイン名、識別子のランタイム紛らわしい検出に使用されます。

動作原理

RaySpaceは36角度でフォントアウトラインを通して平行光線を投射し、グリフごとに5層の情報を取得します:交差カウント、交差位置、交差角度、ping距離(各交差でのストローク幅)、ping最大値(交差間のカウンター幅)。これにより、フォントごとの文字ごとにコンパクトなシグネチャが生成されます。2つのシグネチャは、5層すべてにわたる重み付きL1距離で比較されます。

3段階のフィルターカスケードにより、網羅的な比較が実用的になります:

  1. 進行幅フィルター(15%許容差)は異なる文字幅のペアを排除。候補の63%を除去。
  2. レイ比較(閾値2.0、大きなスクリプトペアでは1.0に厳格化)。さらに33%を除去。
  3. 候補のわずか3.3%だけが発見として残る。

シグネチャバンク(245フォントにわたる294,646以上のエントリ;--include-uppercaseでさらに増加)は一度事前計算されます。その後、発見はバンク上でシングルスレッド演算として実行され、ワーカースレッドやGPUなしで31分で5260万のペア比較を完了します。

クイックスタート

root@kitploit:~
npm install

# 1. Build the ray signature bank (prerequisite, ~24 min)
npx tsx scripts/build-signature-bank.ts

# 1b. Include uppercase Latin A-Z (optional)
#     By default the bank only includes IDNA PVALID codepoints (lowercase,
#     digits, symbols). Use --include-uppercase to add uppercase A-Z, useful
#     for font identification and trademark visual comparison where uppercase
#     glyph shapes matter. The builder is resumable, so this only computes
#     the additional codepoints.
npx tsx scripts/build-signature-bank.ts --include-uppercase

# 1c. Include arbitrary codepoint ranges (optional)
npx tsx scripts/build-signature-bank.ts --extra-range=0041-005A

# 2. Single-char discovery (22,581 chars, 12 scripts, ~36 min)
npx tsx scripts/discover-singlechar-sdf.ts --scorer=ray

# 3. Multi-char (bigram) discovery (676 bigrams, ~63 min)
npx tsx scripts/discover-multichar-sdf.ts --scorer=ray

# 4. Score known TR39 multi-char confusables (~5 min)
npx tsx scripts/score-multichar-sdf.ts --scorer=ray
レガシーSSIMパイプライン

元のSSIMベースのパイプラインは230フォントにわたって2650万の比較をスコアリングしました。現在も機能しますが、すべての発見およびスコアリングタスクでRaySpaceに置き換えられました。

root@kitploit:~
# TR39 confusable pair scoring
npx tsx scripts/build-index.ts          # Render index (~160s, 11,370 PNGs)
npx tsx scripts/score-all-pairs.ts      # Score all pairs (~65s, 235K comparisons)

# Novel confusable discovery
npx tsx scripts/build-candidates.ts          # Candidate set (~23K chars)
npx tsx scripts/build-index.ts --candidates  # Render candidates (~40min, 89K PNGs)
npx tsx scripts/score-candidates.ts          # Score against Latin targets (~15min, 2.9M comparisons)

# Extract high-scoring discoveries from both pipelines
npx tsx scripts/extract-discoveries.ts

発見内容

上位の紛らわしいペア(単一文字、平均距離 < 0.10)

"ゼロ" = アウトラインがビット同一のレイシグネチャ(距離0.000)を生成するフォント。ラテン文字wとキリル文字ԝは、両方のグリフを含む19フォントすべてで同一です。

クロススクリプトの突破口(単一文字)

ジョージア文字コーダ(U+10FF)はラテン文字o、キリル文字o、ギリシャ文字オミクロンと、すべて距離0.08未満で4方向の紛らわしいリングを形成します。

複数文字の主な結果

oy/キリル文字ukの発見は際立った新規発見です。ラテンバイグラム"oy"はキリル文字の合字uk(ѹ)と、Helveticaで距離0.000、Arial Unicode MSで0.0005で視覚的に同一です。

閾値のキャリブレーション

平均閾値単一文字ユニークペア

3つの推奨動作レベル:

  • 厳格(< 0.50): 138の単一文字ペア、誤検出ほぼゼロ。誤検出に実際のコストがかかる自動ブロック(IDN登録、パッケージ名検証)に適しています。
  • 標準(< 1.00): 4,174の単一文字ペア、カバレッジと精度のバランスが良好。セキュリティツールでのフラグ付けや手動レビューに適しています。
  • 探索(< 2.00): 完全な発見セット。上位にノイズが含まれますが、研究、フォント監査、トレーニングセットの構築に有用です。

フォントクエリ

特定のフォントに存在する紛らわしいペアをクエリします。新しいタイプフェイスを出荷するフォントデザイナー、システムフォントの変更を評価するブラウザベンダー、またはIDNドメインのようなセキュリティに敏感なコンテキストで表示フォントを選択する人に役立ちます。

root@kitploit:~
npx tsx scripts/query-font.ts --list-fonts                    # 218 fonts in discovery data
npx tsx scripts/query-font.ts "Arial"                         # All pairs for Arial (SSIM >= 0.7)
npx tsx scripts/query-font.ts "Arial" --threshold 0.8         # High-confidence only
npx tsx scripts/query-font.ts "Arial" --compare "Georgia"     # Diff two fonts by SSIM delta
npx tsx scripts/query-font.ts "Arial" --json                  # JSON for downstream processing

フォント名のマッチングは大文字小文字を区別しない部分文字列なので、"arial"はArial、Arial Black、Arial Unicode MSにマッチします。比較モードは最大のSSIM差で最初にソートし、フォントを切り替えたときにどのペアが良くなるか悪くなるかを正確に表示します。

スコアリングパイプラインからの発見ファイルが必要です(gitignoreされ、ローカルで再生成)。

出力

コミット済み(CC-BY-4.0)

生成済み(gitignore、パイプラインを実行して再生成)

ファイル説明
data/output/render-index/レンダリングPNG + インデックス(SSIMパイプライン)
data/output/singlechar-sdf-scores.jsonl

進捗

  • TR39検証(1,418ペア、230フォント、SSIMパイプライン)
  • 新規紛らわしい発見(23,317候補から793の高スコアペア、SSIM)
  • クロススクリプト紛らわしいスキャン(12のICANNスクリプト、2360万ペア、563発見、SSIM)
  • フォントごとのクエリとフォント比較
  • RaySpace5層ベクトルアウトラインスコアラー(発見においてSDFとSSIMを置き換え)
  • 単一文字RaySpace発見(249,976ユニークペア、245フォント、12スクリプト)
  • 複数文字RaySpace発見(2,524,275ユニークバイグラムペア、245フォント)
  • RaySpaceによるクロススクリプト発見(SDFより305%多いペア、厳密なスーパーセット)
  • ペアごとの分布記録(平均、p50、p90、フォント数、ゼロ距離数、ゼロ割合、推奨レベル(厳格/標準/探索))を含むconfusable-weights-v2.jsonを生成。RaySpace距離がSSIMを置き換え。標準閾値で4,174ペア。
  • バイナリシグネチャバンク形式(273秒の読み込み時間を数秒に短縮)
  • フルパイプラインを再実行せずにパスで任意のフォントをスコアリング

関連

  • namespace-guard(v0.16.0+)は、confusableDistance({ weights })を介して測定された視覚的リスクスコアリングのためにconfusable-weights.jsonを消費します。
  • REPORT.md:SSIMパイプラインの完全な技術レポート(12セクション、フォントごとの分析、付録)

ブログ記事

paultendo.github.ioに掲載された、このプロジェクトの成果と方法論に関する記事:

RaySpaceの方法論と発見:

  • RaySpace:ベクトルアウトラインレイキャスティングによるグリフ類似度の測定
  • CTスキャナから紛らわしい文字まで:RaySpaceの先行技術
  • 複数文字の紛らわしい文字:rnがmになるとき
  • 250,000の紛らわしいペア。ドメイン名に重要なのは102個。

SSIMパイプラインの発見:

  • 1,418のUnicode紛らわしいペアを230フォントにわたってレンダリングしました。ほとんどは視覚的に紛らわしくありません。
  • 793のUnicode文字がラテン文字のように見えるが、confusables.txtには(まだ)ありません。
  • 28のCJKおよびハングル文字がラテン文字のように見える
  • どの標準もカバーしていない248のクロススクリプト紛らわしいペア
  • 148倍高速化:クロススクリプト規模のためのUnicodeスキャンパイプラインの再構築
  • 形状類似性が嘘をつくとき:紛らわしい検出におけるサイズ比アーティファクト
  • 新しいDDoS:Unicodeの紛らわしい文字はLLMを騙せないが、API請求額を5倍にする可能性がある

背景

このプロジェクトの動機となったより広い問題領域をカバーする記事:

  • Unicode識別子スプーフィングの脅威モデル
  • Unicodeリスクを測定可能にする
  • あなたのLLMはUnicodeコードポイントを読み取る、グリフではない。それが攻撃面です。
  • 紛らわしい検出は実際に誰を守るのか?
  • Unicodeは1つの紛らわしいマップを提供する。2つ必要です。
  • confusables.txtとNFKCが31文字で一致しない

ライセンス

  • コード(src/、scripts/):MIT
  • 生成データ(data/output/):CC-BY-4.0。帰属表示を条件に、商用を含むあらゆる目的での使用、共有、改変が自由です。
  • 帰属:Paul Wood FRSA(@paultendo)、confusable-vision
ツールをダウンロード
元対象スクリプト平均フォント数ゼロ
w U+0077ԝ U+051DLatin-Cyrillic0.0001919
j U+006Aϳ U+03F3Latin-Greek0.0132118
i U+0069і U+0456Latin-Cyrillic0.0186250
s U+0073ѕ U+0455Latin-Cyrillic0.0186246
c U+0063с U+0441Latin-Cyrillic0.0196145
o U+006Fо U+043ELatin-Cyrillic0.0206144
j U+006Aј U+0458Latin-Cyrillic0.0216048
x U+0078х U+0445Latin-Cyrillic0.0235950
p U+0070р U+0440Latin-Cyrillic0.0246146
e U+0065е U+0435Latin-Cyrillic0.0326144
a U+0061а U+0430Latin-Cyrillic0.0426145
元対象スクリプト平均フォント数
ο U+03BFჿ U+10FFGreek-Georgian0.0572
ヘ U+30D8へ U+3078Katakana-Hiragana0.12211
丶 U+4E36ヽ U+30FDHan-Katakana0.1259
二 U+4E8Cニ U+30CBHan-Katakana0.24911
口 U+53E3ロ U+30EDHan-Katakana0.26811
バイグラム対象平均フォント数注
ll॥ U+0965 (Devanagari double danda)0.1768クロススクリプト
oyѹ U+0479 (Cyrillic uk)0.32216新規クロススクリプトバイグラム紛らわしい
rnm U+006D0.5319533フォントが0.40未満
blы U+044B (Cyrillic yeru)0.79749クロススクリプト
複数文字ユニークペア
< 0.5013813
< 1.004,1741,631
< 1.5059,700(ノイズ)
< 2.00249,9762,524,275
ファイル説明
data/output/confusable-discoveries.json高いSSIM(>= 0.7)またはピクセル同一の110のTR39ペア
data/output/candidate-discoveries.jsonTR39に含まれない793の新規ペア、平均SSIM >= 0.7
data/output/confusable-weights.jsonnamespace-guard統合用の1,397の重み付きエッジ
data/output/cross-script-discoveries.json563のクロススクリプト紛らわしいペア
data/output/cross-script-summary.jsonスクリプトペアごとのクロススクリプト要約
data/output/multichar-discoveries.json複数文字紛らわしい発見
単一文字RaySpaceスコア
data/output/multichar-rayspace-scores.jsonl複数文字RaySpaceスコア
data/output/signature-bank/レイシグネチャバンク(294,646エントリ、7.9GB圧縮)