跳到正文
Hacker News· gary23w·· 15 小时前AI 评分58

作者发现 Microsoft Defender 未经询问上传其未发布软件

I caught Microsoft Defender uploading my unreleased software without asking

AI 导读

作者用自建的 Windows 流量工具 Hodometer 排查网络卡顿时发现,Microsoft Defender 的 MpCmdRun.exe 在三个月内从其电脑上传了 217 个样本,其中 201 个是同一个 Go 测试程序的构建,多数是他尚未发布的程序,且未出现任何询问提示。

正文 · AI 翻译

// 目录

Microsoft Defender 上传了我编写但尚未发布的程序。它的事件日志记录了我的电脑在三个月内提交了 217 次样本。我没有看到过其中任何一次的提示。

我是在调查一个卡顿的网络连接时发现这些的,当时我用了 Hodometer,这是我开发的一个 Windows 托盘工具,用于按进程和目标地址跟踪流量。

在约 100 小时内,微软的程序占下载量的 4.7% 和上传量的 4.5%。大部分流量来自我的浏览器、开发工具和游戏补丁。当我查看各个进程时,Defender 的上传显得格外突出。

Defender 上传了什么

MpCmdRun.exe,即 Defender 的命令行工具,在一天内向 Azure 存储发送了 224 MB。上传以每分钟约 28 MB 的突发形式进行,回传的数据很少。

流量是加密的。为了识别文件,我查看了 Defender 的操作日志。事件 2050 记录了样本提交,包含文件名和 SHA-256 哈希值。我机器上的消息显示:

Microsoft Defender Antivirus 已上传一个文件以供进一步分析

在 217 条记录中,201 条是同一个 Go 测试程序的构建版本。其余 16 条大多是我构建但尚未发布的程序。这些提交中共有 216 个不同的哈希值;它们大多是新的二进制文件,而不是对未更改文件的重复上传。在最繁忙的一天,Defender 记录了 75 次提交。

Defender 的支持日志解释了它所涵盖的上传过程。测试二进制文件触发了低置信度签名,Defender 查询了云端,响应提供了一个位于 blob.core.windows.net 的上传地址。

Windows 的按应用数据使用记录显示,MpCmdRun.exe 在过去 30 天内上传了 2.8 GB,约占该电脑在此期间向微软上传总量的 80%。这是该进程的总流量。我没有每个提交文件的字节数。

微软所说的安全样本是什么意思

微软对此行为有文档说明。默认设置是“自动发送安全样本”。其示例包括 .bat、.scr、.dll 和 .exe 文件。在此语境下,安全意味着不太可能包含个人身份信息。被判定可能包含个人数据的文件本应需要提示。

我反对在该默认设置下上传我未发布的构建版本。没有个人信息并不能告诉微软我是否愿意分享该程序。

新的二进制文件是开发过程中的正常部分。在我的情况下,运行测试不断产生同一个程序的新构建版本,而这些构建版本几乎构成了所有提交。我是在检查流量和日志之后才知道这些的。

我禁用后样本提交又变回去了

10 月 28 日,我运行了 Set-MpPreference -SubmitSamplesConsent 2 来禁用样本提交。17:56,事件 5007 记录了从值 1(自动发送安全样本)到 2(从不发送)的更改。

当晚 19:53,另一条记录记录了相反的变化:2 变回 1。

我不知道是什么把它改了回去。我找不到任何我运行过的、会重置它的东西,而用来识别责任进程的日志已经被轮换掉了。在我账户下,变更发生九秒后启动了一次快速扫描,所以在 Windows 安全中心里的一次点击是一种可能的解释。

在它被禁用的近两个小时里,没有记录到任何样本上传,重新启用后 25 分钟内也没有。我此前已关闭提交功能,却没意识到该设置已被改了回去。

日志中的其他文件

这些提交还包括一个来自我回收站的 Python 脚本,于八月上传。

十一月,微软的云为一个属于本地开发数据库的 .tmp 数据文件提供了一个上传地址。那次尝试失败了;并不是一次完成的上传。这两个文件我都没有看到过同意提示。

微软文档中的扩展名只是示例,因此选中一个 Python 脚本本身并不违反该策略。审查日志时,除了编译后的程序,也要检查脚本和数据文件。

支持日志中的完整命令行

在四天时间里,Defender 的支持日志包含 85 条标记为“command line reported as lowfi”的条目。它们包括完整的 curl 和 PowerShell 命令行。其中 78 条包含我的用户文件夹和项目文件夹名称。一条较早的检测记录还包含一条命令行,其中有我输入到另一个程序里的文本。

微软的云保护文档称元数据不包含个人数据,且文件名经过哈希处理。我的本地日志包含完整路径。我无法确定这些字符串在传输前是否经过哈希或其他更改,因此这些记录并不能证明微软收到的命令行与我看到的完全一致。

在这四天里,Defender 还发起了 1,802 次云请求。这是请求计数,与三个月内的 217 次文件提交是分开的。

Copilot 及其他连接

Windows 连接审计显示,在 22 小时内的三次登录中,每次都有 Copilot 活动。每次它都与微软建立了 41 到 54 个连接。我没有打开过该应用,也找不到它已启用的启动项。我尚未确定是什么启动了它。

每月流量很小:下行 31 MB,上行 6 MB。我仍然想知道,为什么一个我并未使用的应用会在我登录时建立连接。

我已经在这台 PC 上禁用了主要的 Windows 遥测服务。其记录显示三个月内没有上传。其他组件继续连接:devicecensus.exe 在一个上午运行了两次,Defender 的核心服务在 22 小时内向 ecs.office.com 和 mobile.events.data.microsoft.com 发起了 104 个连接。Office 和 OneDrive 的辅助程序也连接到了后一个主机。排队的错误报告任务那天上午也运行了。

连接记录标识的是程序和目的地,而不是加密请求的内容。而且这并没有占用我带宽的很大一部分:在另一次 15 分钟的抓包中,微软目的地占 343 MB 中的 0.9 MB。禁用那一个遥测服务并没有阻止其他组件通信。

我如何使用 Hodometer

大部分挖掘工作由一个 AI 代理完成。我给了它访问 Hodometer 本地套接字的权限,客户端连接前需要我的批准。它利用进程历史识别出 Defender 的上传,然后读取 Windows 日志找出涉及的文件。

我构建那个界面是因为我想让代理直接调查流量。它可以检查连接和握手,捕获单个进程的数据包,并发出终止或防火墙阻止命令。同一仓库中的Sentinel 设计描述了使用该界面进行持续监控和调查。

检查你电脑上的日志

你可以在不安装 Hodometer 的情况下检查 Defender 的提交记录。这会显示过去 90 天内的 Event 2050 条目:

Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Windows Defender/Operational'
    Id = 2050
    StartTime = (Get-Date).AddDays(-90)
} | Select-Object TimeCreated, Message | Format-List

检查这些消息中的文件路径。要查找同一时期内样本提交的更改:

Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Windows Defender/Operational'
    Id = 5007
    StartTime = (Get-Date).AddDays(-90)
} | Where-Object Message -match 'SubmitSamplesConsent' |
    Select-Object TimeCreated, Message | Format-List

值 1 表示自动发送安全样本;2 表示从不发送。这些查询只能显示日志中仍保留的事件。

要监视流量,请从发布页面下载 Hodometer.exe 并以管理员身份运行。在进程表中找到 MpCmdRun.exe 并双击它以检查其连接。你可以将该进程的数据包导出为 pcapng 以供 Wireshark 使用。仅连接到 Azure 存储并不能识别样本上传;请对照 Defender 记录进行检查。

该设置是自动提交样本,位于Windows 安全中心 → 病毒和威胁防护 → 管理设置下。微软表示,禁用它也会禁用基于样本分析的首次看到时阻止。检测元数据仍会发送。在开发机器上,我希望控制哪些构建离开电脑,但更改此设置确实会放弃 Defender 的部分保护。

如果你在 Windows 上构建软件,请检查提交日志中的构建路径以及该设置的历史记录。

来源:Hacker News · garrettstimpson.ca