MacOS 的 App 可以随便访问用户主目录顺便盗走私钥?
NOTE
本文是一个没有 MacOS 系统开发经验的用户做的简单验证实验,不保证所有内容正确。希望熟悉 MacOS 开发的朋友指教一下。
前几天在国内的店家1买了个《双影奇境》的破解版2,我感觉它是我使用 MacOS 来主动安装的第一个破解软件。 由于是破解软件,肯定对原始 App 包内容做过自定义修改。出于职业性考虑,我并不能、也无法确定 App 是否包含病毒🦠、恶意代码,可能的后果包括但不限于:偷数据、挖矿、劫持用户数据(付费解密)等。通过“目前打开 App 就会弹窗并打开某破解官网的这种行为”我觉得就我的考虑不是完全没有道理。但是,当时出于想玩游戏的冲动,我并没有过分研究或者尝试寻找对应措施,就直接运行了。
由于是从非 App Store 下载的,并且破解软件也不太可能能拿到 Apple 的正规签名,所以首次启动是必然会被系统弹窗警告的。
但既然是破解软件,一个愿打一个愿挨,那肯定是“sudo xattr -rd com.apple.quarantine
”一把梭去掉警告。3
简单了解了一下系统的安全机制
几天后隐约觉得不放心,拿 ChatGPT 查了一下 MacOS 的安全机制4,简单了解到以下几点(不一定正确):
-
对于上架了 App Store 的 Apps,全部运行在沙盒中。对于沙盒外的文件,仅允许访问用户授权访问的。
-
对于未上架 App Store 的 Apps5,沙盒功能是可选的。
如果未启用沙盒:系统只对类似 桌面/文档/下载 目录鉴权了,对用户主目录(即前者的上层目录)默认放行。
离谱,对于程序员/公司而言极其重要的 SSH 私钥就能这样轻轻松松地被读走?6 当时一度感觉非常震惊,甚至觉得 ChatGPT 狗屁不通在说谎:毕竟,MacOS 是众所周知地比 Windows 更安全。
我也从 ChatGPT 那里学到了 fs_usage
工具的使用,重新运行了一遍游戏,看看它到底访问了什么文件。好消息是:我本人肉眼尚没有发现明显的疑点。
自己尝试了一下偷数据
即便这样,我还是想尝试自己打包一个 App 来测试一下。
正好,Steam 创建到桌面的游戏快捷方式就是个极其简单的 App:
1 2 3 4 5 6 7 8 9 10 |
|
run.sh
就是一个普通的 bash 脚本。原内容如下:
1 2 3 4 5 |
|
于是我简单拷贝了一份,并把内容改成了如下:
1 2 3 4 |
|
然后就是见证奇迹的时刻了。双击运行之7:
对于本文所做的实验来看:不负众望;可以轻松盗走私钥。
然后我再尝试了一下读 ~/Downloads
目录内的文件,ChatGPT 没有骗我。读取失败。
好的,这下我放心了!(指放心地知道了自己的一些数据能轻易被偷走。)
把测试附件打包了,大家可以自己双击执行试一下(先验证脚本,觉得安全后执行):ReadKey.zip
-
没去判断是二手、三手还是四手(不是我本人买的)。 ^
-
对于从非 App Store 下载的正规 App(有签名的),可能也会有弹窗提示,所以移除“com.apple.quarantine”属于是使用过 MacOS 的人至少执行过一次的命令。非计算机专业被迫学习了属于是。 ^
-
虽然以前用 Windows 的写过各种类型的应用程序,所以对 Windows 的安全机制算得上了解。但是,对于使用了多年的 MacOS,却始终没有去了解过,更是没有写过太多小工具。破 Xcode 实在让人没有使用的欲望,且年费很贵。 ^
-
MacOS 不像 iOS 那样要求 Apps 只能从 App Store 下载。实际上 MacOS 上的很多 Apps 都不是从 App Store 下载的。所以虽然可能不是破解软件,也不能不防。 ^
-
可别说 SSH 私钥是被加密的/被 ssh-agent 接管的。据我在各公司待的多年经历而言,很少有员工能做到默认设密码加密私钥。 ^
-
这是我临时随机生成的一个私钥,所以不用担心我贴出来了。 ^