概要
PureBase.Tests.Daily.dll をプロジェクトフォルダ外へ出力した際、Windows Defender により Trojan:Win32/ClickFix.IIN!MTB として検出された。
プロジェクトフォルダ自体は Defender の除外対象だったため、ソースファイルの段階では検出されず、Daily テストを DLL にコンパイルして除外対象外へ出力した時点で検出された。
Issue #14 の PR を作成する前に、本件を調査して必要な回避を行う。
現時点の見立て
実際の ClickFix ペイロードが含まれている兆候は確認できておらず、生成 DLL に対するヒューリスティック / ML ベースの誤検出である可能性が高い。
最有力候補は Tests/Daily/Editor/DailyProtectedStateFixture.cs の RunGit() 周辺。
このコードは 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 全体の特徴量が変化し、既存コードとの組み合わせで検出閾値を超えた可能性も考えられる。
最小確認実験
DailyProtectedStateFixture.cs を一時的に Daily アセンブリから外して DLL を再生成する。
PBR / Issue PBRに多重散乱補償を追加する #14 側のテストコードは変更しない。
生成 DLL を Defender 除外対象外へ配置して再スキャンする。
検出が消える場合、RunGit() の ProcessStartInfo / Process.Start 周辺をさらに最小化して原因を切り分ける。
必要であれば、保護状態検証の意味を維持したまま Defender の誤検出を避ける実装へ変更する。
完了条件
誤検出を再現可能な最小条件が特定されている。
原因となるコードパターン、または十分に狭い候補範囲が確認されている。
Daily の保護状態検証を弱めずに回避できる場合は修正する。
修正後に生成した PureBase.Tests.Daily.dll が Defender で同じ検出を受けないことを確認する。
Issue PBRに多重散乱補償を追加する #14 の PR 作成前に本件を完了する。
概要
PureBase.Tests.Daily.dllをプロジェクトフォルダ外へ出力した際、Windows Defender によりTrojan:Win32/ClickFix.IIN!MTBとして検出された。プロジェクトフォルダ自体は Defender の除外対象だったため、ソースファイルの段階では検出されず、Daily テストを DLL にコンパイルして除外対象外へ出力した時点で検出された。
Issue #14 の PR を作成する前に、本件を調査して必要な回避を行う。
現時点の見立て
実際の ClickFix ペイロードが含まれている兆候は確認できておらず、生成 DLL に対するヒューリスティック / ML ベースの誤検出である可能性が高い。
最有力候補は
Tests/Daily/Editor/DailyProtectedStateFixture.csのRunGit()周辺。このコードは Daily テスト DLL 内で以下の処理を持つ。
ProcessStartInfoによる外部プロセス起動FileName = "git"UseShellExecute = falseCreateNoWindow = trueこれらはテスト保護用途として正当だが、DLL 全体の静的特徴として Defender の分類モデルに影響している可能性がある。
DailyProtectedStateFixture.cs自体は Issue #14 の作業以前から存在しているため、Issue #14 で追加された大量の Daily 数値テストコードによって DLL 全体の特徴量が変化し、既存コードとの組み合わせで検出閾値を超えた可能性も考えられる。最小確認実験
DailyProtectedStateFixture.csを一時的に Daily アセンブリから外して DLL を再生成する。RunGit()のProcessStartInfo/Process.Start周辺をさらに最小化して原因を切り分ける。完了条件
PureBase.Tests.Daily.dllが Defender で同じ検出を受けないことを確認する。