返回博客
macOS security system tools

Mac 上这个进程是病毒吗?如何判断 macOS 进程是否安全

在活动监视器中发现陌生的 Mac 进程?检查路径、代码签名、父进程和行为,判断它是正常程序还是可疑进程。

本文目录

Mac 变慢时,你打开活动监视器,发现列表前几项是 nsurlsessiond、photoanalysisd 或 trustd,却不记得安装过这些程序。搜索结果里的解释又各不相同。本指南通过路径、代码签名、父进程和运行行为四项检查,帮助你判断它们是正常的系统服务,还是需要进一步调查的可疑进程。

快速解答

Mac 上许多名称陌生的进程都是正常系统服务,但仅凭名称无法判断安全性。首先检查可执行文件的位置,以及代码签名是否有效、是否与声称的开发者身份一致。如果进程名称看起来像系统服务,却从用户可写目录或临时目录运行,或者签名无效、签名者与软件身份不符,就值得进一步调查。这些是排查线索,不能单独证明恶意行为;还应检查父进程、自动启动方式和实际行为。活动监视器不显示代码签名详情,ProcXray 可以在进程信息中同时展示签名和完整的可执行文件路径。

为什么光看名字并不能告诉你什么

即使处于空闲状态,macOS 也会运行许多后台进程。bird、secd、distnoted、rapportd、hidd 等名称面向系统内部使用,不容易直接看出用途。搜索到的解释应结合当前 macOS 版本、文件路径和开发者资料核实。

恶意软件也可以使用 WindowServer 或 mdworker 这样的名称,并以此出现在活动监视器中。因此,名称只能作为搜索线索,不能作为可信身份的证明。

下面的四项检查按照解决问题的速度排列。

检查 1:二进制文件位于何处?

路径可以帮助判断进程来源,但需要与签名和行为一起核对。

macOS 将自己的可执行文件保存在少数受保护的位置。 macOS Catalina 引入了专用的只读系统卷,macOS Big Sur 添加了签名系统卷的加密保护。在正常安全配置完好无损的情况下,运行软件不能简单地将二进制文件添加到/System/。系统完整性保护还限制对其他受保护系统位置的更改。

合法系统软件的常见位置:

值得仔细观察的地点:

要从 PID 中快速查看进程名称和父进程:

ps -o pid,ppid,user,comm -p <pid>

要检查它报告的命令行:

ps -ww -o pid,ppid,user,args -p <pid>

comm,尤其是 args,应作为排查线索使用:进程可能修改 ps 显示的参数,而且输出不一定包含实际的可执行文件路径。在活动监视器中,双击进程并查看“打开的文件和端口”,有时可以在列表中找到可执行文件,但需要从其他条目中辨认。更多方法见如何在 Mac 上检查正在运行的进程。

检查 2:谁签署的?

路径告诉您文件所在的位置。代码签名工具可以单独验证签名的代码是否未被更改,并显示其签名中记录的身份。

# 验证签名完整性;结合命令退出状态和诊断输出判断结果。
codesign --verify --strict --verbose=2 /usr/libexec/trustd

# 显示签名详细信息。
codesign -dvvv /usr/libexec/trustd

第一个命令执行验证; codesign -d 本身仅显示元数据。显示输出因 macOS 版本和二进制文件而异,因此请将其与路径和验证结果一起解释:

值得调查的结果包括:

您还可以直接询问 Gatekeeper 对应用程序包的看法:

spctl --assess --verbose=4 /Applications/SomeApp.app

accepted 和 source=Notarized Developer ID 表示 Apple 的自动公证服务扫描了提交的版本是否存在恶意组件并发出了票证。这是一个有用的信任信号,但不能保证该应用程序无害。 rejected表示该应用不满足当前正在评估的Gatekeeper策略;较旧的软件、本地版本和恶意软件都可能产生这种结果。

这里的差距是活动监视器没有公开这些。没有签名栏,没有权威字段,没有公证身份。通过苹果自己的进程查看器回答“这是苹果签署的吗”是不可能的——你必须离开它并转到终端。

检查 3:是什么启动了它?

进程的父进程告诉您它是如何存在的,这通常比进程本身提供更多信息。

ps -o pid,ppid,user,args -p <pid>

如果 PPID 是 1,则 launchd 是进程的当前父进程。它可能已将进程作为配置的作业启动,或者可能已采用其原始父进程已退出的进程。这本身并不意味着该进程将在您终止后重新启动:重新启动行为取决于 KeepAlive 和按需触发器等设置。如果您怀疑持久性,请检查可能负责的作业:

# 当前用户的启动任务
ls -la ~/Library/LaunchAgents/

# 为所有用户运行的作业
ls -la /Library/LaunchAgents/ /Library/LaunchDaemons/

苹果自己的工作位于/System/Library/LaunchAgents/和/System/Library/LaunchDaemons/,它们位于密封系统卷上。没有 /System 的 /Library/ 版本是第三方的 — 这是合法安装程序放置东西的地方,也是不需要的软件放置东西的地方。这里的 .plist 带有一个看起来随机的反向域名,指向主文件夹中的二进制文件,这是典型的广告软件模式。

作为浏览器、文档查看器进程、shell 或您最近运行的安装程序的父级是另一个值得关注的线索。

检查 4:它在做什么?

如果前三项检查与进程声称的身份一致,那么直接关注的程度就会降低,但它们并不能证明其行为是安全的。使用当前活动和持久性作为附加上下文:

最常被误认为病毒的进程

此表中的每个进程都是 macOS 的正常部分。

进程作用常见位置
kernel_task内核本身;还可以管理热负荷没有路径——它是内核
launchdPID 1;启动并监督所有其他服务/sbin/
WindowServer合成屏幕上绘制的所有内容/System/Library/PrivateFrameworks/
mds、mds_stores、mdworker聚光灯索引/System/Library/Frameworks/
nsurlsessiond应用程序和 iCloud 的后台下载和上传/usr/libexec/
trustd评估 TLS 连接的证书信任/usr/libexec/
syspolicyd网守和系统安全策略/usr/libexec/
birdiCloud Drive 文档同步/usr/libexec/
clouddCloudKit — 应用程序的 iCloud 数据/System/Library/PrivateFrameworks/
secd钥匙串和 iCloud 钥匙串同步/usr/libexec/
photoanalysisd扫描您的照片库中的面孔和场景/System/Library/PrivateFrameworks/
mediaanalysisd实时文本和视觉查找/System/Library/PrivateFrameworks/
rapportd连续性、切换和通用剪贴板/usr/libexec/
sharingdAirDrop 和共享服务/usr/libexec/
distnoted进程之间的分布式通知传递/usr/sbin/
coreaudiod音频子系统/usr/sbin/
hidd键盘、触控板和其他输入设备/usr/libexec/
backupd时间机器/System/Library/CoreServices/
com.apple.WebKit.WebContentSafari 或 WebKit 页面渲染器,每个站点一个WebKit 框架内部

这些位置是典型的而不是永久的 API 合同,Apple 可以在 macOS 版本之间移动组件。用户可写目录中的匹配名称是一个强烈的警告信号;在标记为恶意之前,应验证不同的受保护系统路径。对于特定于过程的诊断,请参阅 kernel_task、WindowServer 和 mds_stores 指南。

实际上看起来可疑的地方

值得研究的信号,大致按关注顺序排列:

  1. 从非系统路径运行的听起来像系统的名称。 /Users/Shared/ 中的 WindowServer 不是 WindowServer。
  2. 未签名或临时签名,从系统相邻目录运行。 交付给用户的合法软件已签名。
  3. 与所声称的身份不匹配的签名机构。 自称为 Adob​​e 更新程序的应用程序,由不相关的开发人员 ID 签名。
  4. 险些错过的名字。 尾随空格、交换字符、双字母 — mdworker_shared 与某个字符缺失的东西。
  5. ~/Library/LaunchAgents/ 中的启动代理指向临时或下载目录中的二进制文件。
  6. 在被终止后几秒内以新 PID 重新出现的进程,并且您无法追踪到 Apple 签名的启动守护进程。

Apple 的内置 XProtect 可自动检测并阻止已知恶意软件,并包含定期检查感染的修复技术。缺乏警报会降低对已知威胁的担忧,但并不能证明每个正在运行的进程都是安全的。如需更深入的调查工作流程,请参阅如何检测 macOS 上的可疑进程。

使用 ProcXray 同时进行所有四项检查

上面的工作流程需要在活动监视器和多个终端命令之间跳转,并对每个要清除的进程重复此操作。 ProcXray 的构建是为了将其折叠成一个视图。

选择任何流程,您将在单个详细信息面板的相邻选项卡中看到:

有两个功能对于这项任务特别重要。新生成的进程以绿色突出显示,退出的进程会褪色为红色并保持可见,因此被杀死后重新生成的进程是显而易见的,而不是您必须通过重新运行命令来捕获的进程。正则表达式搜索会同时过滤名称、PID、参数和路径,这使得调查特定的用户可写位置或将可疑名称与其可执行路径进行比较变得更加容易。不要将 /System 之外的每个进程视为第三方:许多 Apple 进程合法地从 /usr/libexec、/usr/sbin、/usr/bin 和 /sbin 运行。

常问问题

nsurlsessiond是病毒吗?

不。nsurlsessiond 是 Apple 的后台网络守护进程,负责当应用程序不在前台时继续下载和上传 — iCloud 同步、App Store 更新以及使用 URLSession 后台传输的任何应用程序。它位于 /usr/libexec/ 中并由 Apple 签名。网络或 CPU 活动较高通常意味着正在进行大量 iCloud 同步或后台应用程序下载。

如何判断 Mac 进程是否合法?

从可执行路径开始,然后运行codesign --verify --strict --verbose=2 <path>来验证其签名,并运行codesign -dvvv <path>来检查记录的身份。受保护的系统路径、与所声称的开发人员一致的有效签名、预期的父级以及可解释的行为是相辅相成的信号。从用户可写或临时目录运行的系统名称值得调查,但没有任何单一检查可以证明进程是安全的还是恶意的。

为什么活动监视器无法告诉我进程是否安全?

活动监视器显示资源使用情况,而不是来源。它没有代码签名、签名权限或公证状态列,并且只能通过“打开文件和端口”面板间接访问二进制路径。确定进程是否合法需要活动监视器不会公开的信息,这就是为什么答案通常涉及终端或 ProcXray 等工具。

恶意软件可以冒充 macOS 上的系统进程吗?

它可以自由地复制名称——这很简单。然而,在正常的 macOS 安全配置下,普通软件无法简单地将二进制文件添加到签名系统卷或创建像 Apple 那样的有效签名。只读系统卷已抵达 Catalina,并在 Big Sur 中添加了加密 SSV 保护。因此,路径和经过验证的代码身份是比显示的进程名称更有力的证据,同时仍然仅构成评估的一部分。

我应该杀死一个我不认识的进程吗?

不——不是第一步。许多不熟悉的守护进程都是承载的,杀死它们的范围从毫无意义(launchd立即重新启动它们)到破坏性(WindowServer结束您的登录会话)。首先使用四项检查来识别它。如果事实证明它是不需要的软件,则删除启动它的启动代理才是真正的修复;杀死进程只会释放它回来。

macOS 是否有内置的恶意软件防护?

是的。 XProtect 在首次启动、应用程序更改以及 XProtect 签名更新时检查应用程序是否存在已知恶意内容;其修复技术还定期检查感染情况。 Gatekeeper 会验证下载的软件,并在首次打开时请求批准,而公证则添加自动 Apple 恶意软件扫描。用户可以推翻某些 Gatekeeper 决定,并且经过签名或公证的软件并非自动无害。这些保护是强有力的基线,而不是保证。

来源和参考文献

下载 ProcXray → — 免费基本版和 14 天高级试用版,macOS Sonoma+。