Skip to content

DailyテストDLLがWindows DefenderでClickFixとして誤検出される問題を調査・回避する #71

Description

@PenguinDOOM

概要

PureBase.Tests.Daily.dll をプロジェクトフォルダ外へ出力した際、Windows Defender により Trojan:Win32/ClickFix.IIN!MTB として検出された。

プロジェクトフォルダ自体は Defender の除外対象だったため、ソースファイルの段階では検出されず、Daily テストを DLL にコンパイルして除外対象外へ出力した時点で検出された。

Issue #14 の PR を作成する前に、本件を調査して必要な回避を行う。

現時点の見立て

実際の ClickFix ペイロードが含まれている兆候は確認できておらず、生成 DLL に対するヒューリスティック / ML ベースの誤検出である可能性が高い。

最有力候補は Tests/Daily/Editor/DailyProtectedStateFixture.csRunGit() 周辺。

このコードは Daily テスト DLL 内で以下の処理を持つ。

  • ProcessStartInfo による外部プロセス起動
  • FileName = "git"
  • UseShellExecute = false
  • stdout / stderr のリダイレクト
  • CreateNoWindow = true
  • 独自の Windows コマンドライン引数クォート処理
  • Git 管理対象ファイルの列挙・読み取り
  • SHA-256 による状態ハッシュ生成

これらはテスト保護用途として正当だが、DLL 全体の静的特徴として Defender の分類モデルに影響している可能性がある。

DailyProtectedStateFixture.cs 自体は Issue #14 の作業以前から存在しているため、Issue #14 で追加された大量の Daily 数値テストコードによって DLL 全体の特徴量が変化し、既存コードとの組み合わせで検出閾値を超えた可能性も考えられる。

最小確認実験

  1. DailyProtectedStateFixture.cs を一時的に Daily アセンブリから外して DLL を再生成する。
  2. PBR / Issue PBRに多重散乱補償を追加する #14 側のテストコードは変更しない。
  3. 生成 DLL を Defender 除外対象外へ配置して再スキャンする。
  4. 検出が消える場合、RunGit()ProcessStartInfo / Process.Start 周辺をさらに最小化して原因を切り分ける。
  5. 必要であれば、保護状態検証の意味を維持したまま Defender の誤検出を避ける実装へ変更する。

完了条件

  • 誤検出を再現可能な最小条件が特定されている。
  • 原因となるコードパターン、または十分に狭い候補範囲が確認されている。
  • Daily の保護状態検証を弱めずに回避できる場合は修正する。
  • 修正後に生成した PureBase.Tests.Daily.dll が Defender で同じ検出を受けないことを確認する。
  • Issue PBRに多重散乱補償を追加する #14 の PR 作成前に本件を完了する。

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions