拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Orca 在 Windows 上被 Microsoft Defender for Endpoint 行为告警:理解进程树行为与处置方法

Orca 在 Windows 上被 Microsoft Defender for Endpoint 行为告警理解进程树行为与处置方法【免费下载链接】orcaOrca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.项目地址: https://gitcode.com/GitHub_Trending/orca48/orca在 Windows 11 / Intune 企业租户中Orca 1.4.192 曾在 8 天内产生 6 起 Microsoft Defender for EndpointMDE活动事件全部以活动事件active incidents形式持续存在其中只有 3 起是人工在门户中逐条定性后才关闭的Defender 从未自行降级或关闭任何一起。没有任何一起是签名命中全部是行为式进程树评分behavioural process-tree scoring其中 2 起升级为带 ATTCK 战术映射Execution、Collection的多阶段事件。如果你正在被监控的 Windows 终端上部署 Orca或者需要在 SOC 里定性这类告警这篇文章对照仓库文档拆解每一类告警背后真实的进程树行为并给出租户侧能阻止新事件被创建的具体处置路径。Orca 文档的定调值得先记下Defender 没有误报它在准确描述代码行为。Orca 确实把自己的签名镜像复制了一份换名运行、确实曾按定时器读取每个进程、确实运行过 base64 编码并绕过执行策略的 PowerShell、也确实截屏并向其他应用合成输入。问题在于这些行为的行为特征与攻击技术重叠按行为评分的 EDR 无法区分意图。告警里的四类证据6 起事件归为四个相互独立的证据簇摘自 windows-edr-posture.md证据簇涉及事件证据UpdateA、B、Corca-windows-setup.exe→old-uninstaller.exe、Uninstall Orca.exeelectron-builder 生成仓库中不存在这两个文件Spawn全部 6 起Orca.exe→orca-terminal-daemon.exe→powershell.exe/pwsh.exe/cmd.exe/reg.exe→claude.exe、gh.exe、codex.cmdProcess tableDsuspicious memory activity——对每个进程做OpenProcess加 PEB 读取按周期重复Computer useE、Fruntime.ps1、computer-sidecar.js、大量operation.json、约 10 个短生命周期powershell.exe的爆发事件 E 是最值得细看的一起5 条告警、37 项证据、ATTCK Execution Collection 映射描述写着在该设备上意外截取了屏幕……在 powershell.exe 启动的脚本中发现了屏幕采集代码。事件 F 额外带有suspicious MSIL code来自每次操作都重新编译内联 C# P/Invoke 的Add-Type -TypeDefinition。在 Update 簇中uninstaller 是真实的NotSigned而Orca.exe与orca-terminal-daemon.exe报告为Valid CNSignPath Foundation。这些行为分别对应 Orca 的哪些进程树动作Daemon 从自身镜像的副本运行src/main/daemon/daemon-host-relocation.ts 会把 Electron 运行时复制到%LOCALAPPDATA%\Orca\daemon-host\version\再从那里 fork 终端守护进程。原因是 NSIS 安装器在更新时会删除旧安装目录并强杀所有镜像位于该目录下的进程——没有这次搬迁自动更新会连终端守护进程和所有活动终端一起杀掉。事件发生时的版本还把副本改名为orca-terminal-daemon.exe即上表中每个事件报告的镜像名DAEMON_HOST_EXE_NAME的注释直白地写明理由让安装器的taskkill /IM Orca.exe匹配不到它。EDR 如何读这个行为MITRE T1036Masquerading剩余形态对应T1036.005——一个签名可执行文件被复制到用户可写的%LOCALAPPDATA%下运行并派生 shell行为引擎很难给它打低分。该改名现已移除副本现在以应用 exe 自身的文件名逐字节复制运行详见 windows-daemon-host-relocation.md因为这换掉的是教科书级的防御规避特征代价只是在罕见的无 PowerShell 回退分支上守护进程随应用一起被杀、终端走 cold-restore。注意去掉改名只移除了字面指标从非标准用户可写位置执行这一形态本身仍会被单独评分。定时读取进程表事件 D 的suspicious memory activity对应早期的进程表读取方式七个独立读取方各自 forkpowershell.exe跑Get-CimInstance Win32_Process。现在的实现是 src/main/windows/windows-process-table.ts 包装的 Toolhelp32 原生快照分两种标志集identityNone | CreationTime只取 pid、ppid、名字快照本身即可得出不打开任何句柄detailed CommandLine每个进程一次OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION)——与任务管理器使用的权限相同——然后通过NtQueryInformationProcess的ProcessCommandLineInformationclass 60Windows 8.1Electron 的最低支持是 Windows 10取命令串不打开也不读取任何目标地址空间。上游版本曾以PROCESS_QUERY_INFORMATION | PROCESS_VM_READ打开每个进程、用三次ReadProcessMemory走 PEB 取命令行——这正是凭据转储式遥测的读半边MDE 因此给出suspicious memory activity。补丁config/patches/vscode__windows-process-tree0.8.0.patch移除后文档给出的实测对比约 540 个进程、每次 detailed 扫描计数方式是用计数桩替换 addon 导入表项ReadProcessMemory1128 →0期望访问权限0x0410→0x1000两个读取方恢复到的所有进程命令行逐字节一致。耗时方面492 进程主机上 p50identity 6.3 ms、detailed 12.3 ms而 PowerShellGet-CimInstance为 706 mswindows-process-enumeration.md。这些是文档记录的测量值用于说明改动方向不是你必须复现的固定数字。两点边界文档讲得很清楚补丁后没有 PEB 回退这是故意的。若保留回退任何单个目标返回STATUS_INVALID_INFO_CLASS例如 EDR 挂钩的ntdll都会触发进程级、不可逆地切回PROCESS_VM_READ——恰恰在这个补丁要覆盖的机器上恢复它要移除的原语。向管理员可以声明的内容收敛为detailed 快照每进程一个PROCESS_QUERY_LIMITED_INFORMATION句柄、完全无远程内存访问identity 快照不打开任何东西。没有被收窄的是问哪些进程——detailed 扫描仍会查询每个 pid包括lsass.exe。把命令行遍历限制到 Orca 自己的子树需要 job-object 成员关系作为事实来源文档明确标注这是尚未认领的工作。这个属性可以直接在产物上检查而不只是看源码inspectWindowsProcessTreeAddon()位于 config/scripts/windows-process-tree-gyp-rebuild.mjs回答clean/unpatched/missingconfig/scripts/ensure-native-runtime.mjs、relay 构建与loadWindowsProcessTree()都以它为准。之所以是加载级检查是因为发布的 tarball 里带了一个从未打补丁的源码构建、但可以正常加载的预编译二进制require 成功了不构成证据。编码 PowerShell 与执行策略事件分析点名了三处使用-NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand的位置src/relay/windows-port-scan.ts用Get-NetTCPConnection -State Listen找 dev-server 端口。枚举监听端口是MITRE T1049网络服务发现通过编码的策略绕过 shell 执行是加重情节而非发现本身。现在普通扫描不再启动任何 PowerShell——改为netstat.exe -ano进程名从共享原生进程表投影编码 payload 只作为最后兜底保留且降为无策略覆盖的-Command。src/main/daemon/shell-ready.tsOSC 133 引导用-EncodedCommand。src/main/agent-hooks/windows-powershell-hook-launcher.ts托管 hook 的包装。-ExecutionPolicy Bypass在各处已系统性移除多处是实测的 no-op执行策略只对脚本文件生效从不拦-EncodedCommand在真正起作用的场景改为 payload 内、进程范围的Set-ExecutionPolicysrc/shared/setup-agent-sequencing.ts。文档同时给出诚实的残留清单唯一仍在命令行上写明-ExecutionPolicy Bypass的位置是 src/main/cli/wsl-cli-scripts.ts-File运行真实脚本文件所以那里的开关并非 no-opcomputer use 则请求-ExecutionPolicy RemoteSignedsrc/main/computer/windows-powershell-execution-policy.ts仅在策略阻止启动后回退一次Bypass。文档建议用rg -- -EncodedCommand|-ExecutionPolicy src/自行重新核对并提醒裸 grep 会少报hook 位置通过wrapWindowsPowerShellEncodedCommand间接到达-EncodedCommand自己不拼写该参数。为什么编码不是多余的它保护路径和参数不被cmd.exe与 MSYS 改写#6078、#14815 是真实的损坏类问题。但-EncodedCommand本身是一等 Defender 告警标题Suspicious PowerShell command linebase64 只会抬高评分而非降低——它把 payload 从分析器眼前藏起来了。另有一个值得知道的先例#16003 在上报 Kaspersky 的主机上实测到-WindowStyle Hidden加-EncodedCommand组合在CreateProcess处被拒exit 126与 payload 无关——修复方式是不再拼写这些标志。文档同时保留了 caveat去掉-WindowStyle Hidden后告警抑制是否变化从未被测量任何关于某个被删标志具体作用的具体说法在有人实测之前应视为未证明。cmd.exe /c 携带转义的自由文本src/shared/child-process/windows-command-line.ts 的buildWindowsCmdShimCommandLine为只能通过cmd.exe启动的.cmd/.bat目标codex.cmd是重要的那个构造/d /v:off /s /c …。由于 cmd 在引号内也会展开%VAR%每个%要写成^%。这个转义不是装饰文档在 Windows 11 上对真实.cmdshim 的实测是[a b, cd, e%F%g, hi, j^k]回来变成[a b, cd, e^%F^%g, h]——截断了参数并把剩余部分当命令执行。EDR 如何读它caret 转义是cmd.exe命令行中的典型混淆标记而这里被转义的自由文本是 agent 提示词整行又长、高熵、形态上像攻击者输入恰好落在混淆命令行检测器的调优点上。Orca 对可识别的 cmd-shim 会解析其内容并直接 spawnnode.exe script args…树里不留 cmd.exe、也没有 caret 转义见 windows-cmd-shim-resolution.md若怀疑错误解析可在子进程环境中设置ORCA_DISABLE_CMD_SHIM_RESOLUTION为任意非空值让所有.cmd回退cmd.exe /c路径对比两次行为是否一致来判断解析是否元凶。生成树本身缩短解释器链Orca.exe→ 重定位的守护主机事件覆盖的构建里是orca-terminal-daemon.exe之后恢复为Orca.exe→ shell → agent CLI这就是coding agent 终端复用器本身是什么。reg.exe来自 src/main/win32-utils.ts 等位置读取 OpenSSH 的DefaultShell。这些在原则上不可回避可控的是深度与广度Orca 和最终目标之间每一跳解释器都是一条被评分的边。#15520 与 #15595 的成型原则是缩短解释器链而不是藏窗口。#18875 是该原则的完整案例Claude Code 生命周期 hook 原先注册为powershell.exe -NoProfile -EncodedCommand …解码后的全部 payload 只是一次Test-Path加一次对~/.orca/agent-hooks/claude-hook.cmd的调用现在直接注册脚本路径path || echo {}树从bash - powershell - cmd - curl变为bash - cmd - curl每个 hook 事件少一次powershell.exe -EncodedCommand。实测按 Claude Code 的调用方式空闲中位延迟 471 ms → 213 ms10 路并发下 656 ms → 296 msp95 696 ms → 337 ms。文档明确强调两种树都没有测量 EDR 判定所以可以声称的是移除了-EncodedCommand拼写、缩短了链而不是分数下降。cmd.exe仍留在树中由 MSYS 自己的.cmdspawn 拼出这是文档认定的cmd.exe对.cmd/.bat不可避免的唯一情况绝对路径、两个字面 token无 caret 转义、无编码、无自由文本。编码启动器仍是 profile 路径带空格、%、^、、非 ASCII 或 UNC 路径时的形态——文档同时点明一个未实测的假设||在 Git Bash、cmd.exe、pwsh 可解析在 Windows PowerShell 5.1 不可解析实测 parse error、exit 1把直接形态扩展到另一个 agent 之前先实测其宿主。Computer use截屏、合成输入、运行时编译的 MSILnative/computer-use-windows/runtime.ps1 以powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -File runtime.ps1 operation.json启动仅在策略阻止启动时以Bypass重试一次——每次操作一次每次启动写入全新的operation.json到新的临时目录。每次启动脚本都对内联 C# 执行Add-Type -TypeDefinitionP/InvokeSendInput与窗口 API再通过Graphics.CopyFromScreen截屏。四个高信号行为叠在一个进程里行为如何被评分Graphics.CopyFromScreenMITRE T1113屏幕采集——Collection 战术SendInput合成键鼠对其他应用合成输入每次操作Add-Type -TypeDefinition运行时编译的 MSIL——事件 F 的suspicious MSIL code每次操作一个powershell.exe同一父进程下一簇短生命周期解释器后两行是事件文本直接点名的也是持久运行时宿主会消除的长生命周期 helper 只编译一次 P/Invoke 桩、通过通道应答操作。文档注明该改动在写此文档时仍在途、未合并已发布的构建做什么请查代码而不是查这段话。截屏与SendInput是功能固有行为任何重构都不会移除它们。签名不是门为什么已签名的构建仍被反复告警事件集里最有用的校准来自上报者自己的机器Antigravity IDE 的主可执行文件是NotSigned没被标记Orca 的已签名被标记了六次。结论是signing is not the gate here — behaviour is.机制是 Defender 信誉等于签名者加流行度而流行度按文件哈希计键。一个广泛安装的无签名二进制可以仅靠安装量过线Orca 的签名是 SignPath Foundation 的免费 OV 证书config/electron-builder.config.cjs 设置win.signtoolOptions.publisherNameconfig/scripts/verify-windows-inner-signature.mjs 钉住CNSignPath Foundation, OSignPath Foundation, LLewes, SDelaware, CUS被众多 OSS 项目共用没有独立的 SmartScreen 或 MAPS 信誉。每个 release 都带新哈希所以构建积累的流行度在下一次更新时清零dev 频道按设计无签名因为 SignPath 的审批等待装不下开发节奏config/scripts/verify-dev-channel-packaging.mjs。给 uninstaller 签名值得做——签名安装器下跑无签名的old-uninstaller.exe是给 Update 簇添的无谓证据——但不要指望它改变行为判定三个非 Update 簇里根本没有无签名二进制。管理端处置让新事件不再被创建路径排除替代不了告警抑制规则这是文档中最重要也最常被做错的运维要点这 6 起是MDE EDR 行为告警。Defender 杀毒的路径排除抑制的是扫描类检测不会以同样方式抑制 EDR 行为告警。把%LOCALAPPDATA%\Programs\orca\加进 AV 排除列表然后指望事件消失行不通。配置 MDE 告警抑制规则alert suppression rule在 Microsoft 365 Defender 中建立Settings → Endpoints → Alert suppression作用范围限定到进程树条件告警标题——A suspicious file was observed与Suspicious PowerShell command line加上你的租户实际产生的其他标题。标题要取自你自己的事件不要取自上面这份清单。文件路径——Orca.exe与orca-terminal-daemon.exe位于%LOCALAPPDATA%\Programs\orca\与%LOCALAPPDATA%\Orca\daemon-host\下。规则范围尽量收窄并在 Orca 更新时复审daemon-host路径带version段钉死单一版本的规则会静默失配。该路径上有两个具体陷阱物化阶段先写入version.staging-hex兄弟目录再改名就位精确版本规则会在更新途中漏掉整棵树——那恰是 Update 簇事件触发的时刻且当LOCALAPPDATA未设置时根目录回退到 ElectronuserData路径所以%LOCALAPPDATA%\Orca\daemon-host\是常规位置而非保证位置。文档建议对…\Orca\daemon-host\用前缀匹配而不是钉一条完整路径。同时给这两个目录加 AV 路径排除——它们能降低每次更新都重写整棵树带来的扫描成本——但要分清分工排除降低扫描抑制规则才是阻止事件被创建的东西。检查 ASR 规则检查租户是否启用了攻击面缩减规则Block executable files from running unless they meet a prevalence, age, or trusted list criterion。若已启用这单独就能解释刚签名的 Orca 构建每次更新后立即被命中每个 release 都是新哈希无论怎么签名都从零流行度、零年龄起步。要么把 Orca 安装路径加入该规则的允许列表要么接受每次更新都会命中一次。更新后告警会复发这是预期流行度按文件哈希计键。更新替换哈希信誉从头开始抑制规则是唯一能跨更新存活的东西。Computer use在部署前做决定而不是告警后在受监控终端启用 computer use 之前读完这一节。文档的原话基调受监控终端上在该设备上意外截取了屏幕这类告警不是 SOC 一眼就能放行的发现。事件 E 就是预期形态5 条告警、37 项证据、映射 ATTCK Execution Collection 的多阶段事件描述点名powershell.exe启动脚本中的屏幕采集事件 F 在同一棵树上加上运行时编译的 MSIL。其中每一部分都是该功能的准确描述——任何按 Collection 战术监控的组织以及任何按默认事件创建运行 MDE 的组织都会看到它并会把它当 Collection 读。因此预先、有意识地二选一允许它建抑制规则覆盖 computer use 树powershell.exe带-File …\runtime.ps1以及基础 Orca 路径并在第一起事件发生之前告诉 SOC 这是什么而不是在事件进行中或者在受监控终端上保持禁用。行不通的第三条路是无 triage 地部署、事件开了再被动处理等 Collection 战术事件打开时分析员正在读用户在不知情的情况下屏幕被截的描述举证责任已经转移到你这边。修改 Orca Windows 端行为时的检查清单如果你是在 Orca 代码侧工作windows-edr-posture.md 给出的Windows 上不要伸手去用清单不要改用命令行上的-ExecutionPolicy Bypass像windows-powershell-hook-launcher.ts那样在 payload 内按进程范围设置策略或干脆不跑.ps1-EncodedCommand带参数的临时.ps1或消除 PowerShell 一跳优先原生 API 或已有 Node 路径携带转义自由文本的cmd.exe /c直接 spawn 真实目标cmd.exe只对.cmd/.bat不可避免自由文本尽量不上命令行forkpowershell.exe读系统状态原生读取方——windows-process-enumeration.md 是进程表的既定规则循环里每次操作一个进程一个带请求通道的长生命周期 helper同一父进程下爆发式短解释器本身就是信号运行时Add-Type -TypeDefinition预编译、签名的程序集或原生 helper换名复制自身镜像逐字节复制windows-daemon-host-relocation.md从 UI 偏好推导脚本解释器windows-setup-shell.md——脚本自己声明解释器两条比表格更持久的原则缩短解释器链#15520、#15595 的成型原则每跳都是被评分的边和 AV 拒绝CreateProcess的位置能不拼写的标志就不要拼写#16003 实测到与 payload 无关、纯按命令行开关组合的拒绝——行上写着什么本身就是检测面。文档明确的未知项没有 Hermes 的数据文档没有描述 Hermes 在同一租户策略下的表现但 src/shared/hermes-startup-query.ts 确实拼写-EncodedCommand缺口是遥测而非攻击面。Antigravity 未被标记是证据缺失不是证明那是单台机器上单个上报者的回忆足以反驳问题是我们签名得不够好不足以支撑对 Defender 如何评分该产品的正面论断。这是一租户、一种策略配置下的观测。同一构建在别处是否同样评分未测量。多处行为修复在途persistent runtime host、daemon 重命名移除等文档反复要求依赖某个位置已经改变之前查代码而不是查文档。【免费下载链接】orcaOrca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.项目地址: https://gitcode.com/GitHub_Trending/orca48/orca创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门