スキャン手法
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
制限事項
- 静的解析のみ(実行時の動的通信は検出不可)
- 偽陰性(見落とし)の可能性あり — 難読化・暗号化・動的生成されたURLは検出不可
- 依存パッケージ(node_modules等)の内部コードは未解析
- C/C++等の未対応言語ではスキャン結果が不完全
テレメトリSDKデータベース
A/B分類の判定に使用する既知テレメトリSDKのリスト。オープンソースで公開しています。
Error tracking: Sentry, Bugsnag
APM: Datadog, New Relic, App Insights, OTEL
Analytics: Segment, Mixpanel, Amplitude, PostHog, GA
Feature flags: LaunchDarkly