返回博客

如何检测 macOS 上的可疑进程

通过代码签名验证、Gatekeeper 检查和进程审查技术,学会识别 Mac 上的恶意软件和可疑进程,保障系统安全。

你的 Mac 在任何时刻都运行着数百个进程。绝大多数是合法的系统服务和你自己安装的应用。但只要有一个流氓进程——未签名、从异常路径运行、或悄悄发起网络连接——就可能危及整台机器的安全。学会区分正常的系统守护进程和可疑入侵者,是 macOS 用户最实用的安全技能之一。

快速结论

检测 macOS 上的可疑进程,核心方法是:用 codesign -dvvv 检查代码签名是否缺失或无效,用 spctl --assess 验证 Gatekeeper 审批状态,同时审查每个进程的启动路径、父进程、网络活动和权限声明。凡是从 /tmp/var/folders 或其他用户可写位置运行、且缺少 Apple 或开发者签名的进程,都值得立即调查。

危险信号:可疑进程的特征

不是每个陌生进程都是恶意软件,但以下模式应引起警惕:

逐步排查:调查可疑进程

当你在进程列表中发现可疑条目时,按以下步骤系统性地排查。

1. 验证代码签名

这是最关键的单项检查。对可疑二进制文件运行 codesign

codesign -dvvv /path/to/suspicious-binary

重点查看 Authority(签名机构)链。正常的应用会显示类似:

Authority=Developer ID Application: Company Name (TEAMID)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

如果看到 code object is not signed at all(未签名)或签名链缺失,说明该二进制文件从未经过已识别开发者的签名。

2. 检查 Gatekeeper 和公证状态

Apple 的 Gatekeeper 会验证软件是否经过公证——即提交给 Apple 进行自动化恶意软件扫描:

spctl --assess --verbose /path/to/suspicious-binary

经过公证的应用返回 accepted, source=Notarized Developer ID。其他结果意味着该二进制文件绕过或早于 Apple 的公证要求。

3. 检查启动路径和参数

找到进程二进制文件的实际位置:

ps -eo pid,comm,args | grep <进程>

合法的系统进程运行于 /usr/libexec/System/Library/Applications。如果一个名为 com.apple.something 的进程实际从 /Users/你的用户名/Library/LaunchAgents/ 加载,二进制文件却在 /tmp 中,它就是在伪装系统服务。

4. 排查持久化机制

恶意软件通常会安装 LaunchAgent 或 LaunchDaemon 以在重启后存活:

# 用户级持久化
ls ~/Library/LaunchAgents/

# 系统级持久化
ls /Library/LaunchDaemons/
ls /Library/LaunchAgents/

打开你不认识的 .plist 文件,检查 ProgramArguments 键以确认它实际启动的是哪个二进制文件。

5. 检查网络连接

查看该进程正在与谁通信:

lsof -i -n -P | grep <PID>

留意与陌生 IP 的连接,特别是使用 4444、8080 等非标准端口的——这些是 C2(命令与控制)服务器常用的端口。

6. 审查权限声明(Entitlements)

权限声明定义了进程可以访问哪些系统资源:

codesign -d --entitlements - /path/to/binary

一个合法的 PDF 阅读器不应该需要 com.apple.security.device.cameracom.apple.security.network.server 权限。

常见的”看起来可疑”的合法进程

在恐慌之前,先对照这张表。以下 Apple 系统进程经常让用户产生误解:

进程名实际功能
kernel_taskmacOS 内核;高 CPU 通常意味着热节流,而非恶意软件
mds / mds_storesSpotlight 索引引擎;安装应用或复制文件后会出现峰值
WindowServer整个 GUI 的合成器;高 CPU 通常与显示缩放问题有关
nsurlsessiondApp Store 更新和 iCloud 同步的后台下载
trustd证书和信任评估守护进程
syspolicydGatekeeper 策略执行服务
clouddiCloud Drive 同步守护进程
birdiCloud 文档同步辅助进程
mediaanalysisd照片应用的机器学习处理(人脸/物体识别)
suggestdSiri 建议和 Spotlight 知识索引

如果以上进程具有有效的 Apple 签名且运行于 /usr/libexec/System/Library,几乎可以确定是合法的。

进程安全审计工具

活动监视器

活动监视器可以显示 CPU、内存和基本进程信息,但无法展示代码签名、权限声明、父子进程树或有意义的启动路径。在安全排查场景下,它充其量只是一个起点。

终端工具:codesign 与 spctl

codesignspctl 命令行工具是签名和公证验证的权威手段。它们不可或缺,但当你需要审计数十个进程时就显得笨拙——每次都需要手动找到二进制文件路径。

ProcXray

ProcXray 将代码签名验证和权限声明检查直接集成到进程监控界面中。对于每个运行中的进程,你可以看到:

相比手动对每个二进制文件运行 codesign -dvvv,ProcXray 实时呈现每个进程的安全上下文。当你发现未签名或从意外位置运行的进程时,无需切换到终端,即可在同一界面中调查其血缘关系和网络行为。

常见问题(FAQ)

如何判断一个进程是恶意软件还是合法的系统服务?

检查三个要素:(1)代码签名——运行 codesign -dvvv,查看是否有 Apple 或已识别开发者的签名链;(2)启动路径——合法服务运行于 /System/usr/libexec,而非 /tmp 或隐藏目录;(3)持久化——检查 ~/Library/LaunchAgents/Library/LaunchDaemons 中是否有指向该二进制文件的陌生 plist 文件。

恶意软件能否在活动监视器中隐身?

可以。Rootkit 能够通过挂钩系统调用来对用户态工具隐藏进程。macOS 的系统完整性保护(SIP)大幅增加了这一难度——如果 SIP 处于启用状态(通过 csrutil status 查看),现代 macOS 上的内核级隐藏会被阻止。但恶意软件仍然可以通过使用合法名称或注入已签名进程来进行伪装。

Gatekeeper 能防御所有恶意软件吗?

不能。Gatekeeper 和公证机制提供了强有力的第一层防护——它们默认阻止未签名和未公证的软件运行。但如果用户主动绕过 Gatekeeper(右键 > 打开),或者恶意软件通过已运行的进程投递(例如浏览器漏洞利用),Gatekeeper 就会失效。纵深防御——检查签名、监控进程行为、审计持久化机制——始终不可或缺。

参考资料

下载 ProcXray → — 内置代码签名验证,支持 macOS Sonoma+。