それ通

スキャン手法

S/A/B/C 分類

分類 パターン 意味
Class S 外部通信なし 外部への通信先が検出されなかった。ローカル動作のみ
Class A 通信先あり + READMEで開示済み 外部通信はあるが、READMEでプライバシー/テレメトリに言及。透明性あり
Class B 通信先あり + README開示なし 外部通信があるが、READMEで開示していない
Class C 通信先あり + 未開示 + テレメトリSDK検出 テレメトリ/AnalyticsのSDKを使用しながらREADMEで開示していない。最も注意が必要

解析パイプライン

GitHub URL
  │
  ├─ 1. git clone (--depth=1, hooks無効化)
  │
  ├─ 2. tree-sitter AST解析
  │     ソースコードを構文木に変換し、
  │     文字列ノードのみからURLを抽出。
  │     コメント内URLを確実に除外。
  │
  ├─ 3. HTTP呼出し検出
  │     fetch, axios, requests等の
  │     HTTPクライアント呼出しパターン
  │
  ├─ 4. 環境変数検出
  │     URL/SERVER/HOST/ENDPOINT系
  │
  ├─ 5. 依存パッケージ照合
  │     telemetry-sdks.yaml と突合
  │
  ├─ 6. README開示チェック
  │     privacy/telemetry等のキーワード
  │
  ├─ 7. S/A/B/C 自動分類
  │
  └─ 8. 人間キュレーション
        偽陽性の除外 + 分析メモ追加
        ↓
    評価ページとして公開

偽陽性対策

URLの静的検出は偽陽性(実際には通信していないURLの誤検出)を伴います。AI SOCでは多層の対策を施しています。

対策 手法 効果
AST解析 tree-sitterでコメントノードを識別し、コメント内URLを除外 JSDoc参照、ブロックコメント内リンクを根絶
除外ドメイン 90+のドキュメント・プレースホルダー・CDNドメインを自動除外 stackoverflow, wikipedia, fonts.googleapis.com等
テンプレート除外 f-string / テンプレートリテラルのアーティファクトを除外 {host}, {region}等の展開前変数を除去
型定義除外 .d.tsファイルを解析対象外に Cloudflare worker型定義の大量参照URLを除去
自社ドメイン検出 package.jsonのhomepageからパッケージ自身のドメインを自動除外 自己参照URLの誤検出を防止
人間キュレーション 自動検出後に人間が偽陽性を最終確認・除外 自動対策で除去しきれないケースを補完

対象言語

スキャナー (v0.8.0) は以下の言語をtree-sitter AST解析で対応しています:

.ts .tsx .js .jsx .mjs .cjs .py .go .rs .java .kt .rb .swift

制限事項

テレメトリSDKデータベース

A/B分類の判定に使用する既知テレメトリSDKのリスト。オープンソースで公開しています。

Error tracking: Sentry, Bugsnag
APM: Datadog, New Relic, App Insights, OTEL
Analytics: Segment, Mixpanel, Amplitude, PostHog, GA
Feature flags: LaunchDarkly