#!/bin/sh\necho Hello' > /tmp/test.sh && chmod a+...">

Mac OS会变慢吗?-Catalina在启动时会通过Internet检查所有未签名的代码

切换到Catalina后,许多用户开始抱怨刹车。西方同事发现了原因:MacOS将任何未签名代码的哈希发送到Apple服务器。

这会导致严重的执行延迟,可以很容易地检查它:

echo $'#!/bin/sh\necho Hello' > /tmp/test.sh && chmod a+x /tmp/test.sh
time /tmp/test.sh && time /tmp/test.sh

结果令人惊讶:

$ time /tmp/test.sh && time /tmp/test.sh
Hello

real    0m1.417s
user    0m0.001s
sys 0m0.003s
Hello

real    0m0.003s
user    0m0.001s
sys 0m0.002s

为什么会发生?苹果公司已经使用公证机制已有相当长的时间了-用户可以确保由有效的Developer-ID签名的程序不包含恶意组件。也就是说,除了对应用程序进行签名的事实外,Apple还将自动检查其是否包含恶意软件元素。
有趣的是,在将来,苹果公司总体上计划禁止发布未经公证的程序。引用:
重要事项

从macOS 10.14.5开始,必须使用新的Developer ID证书以及所有新的或更新的内核扩展签名的软件都必须经过公证才能运行。从macOS 10.15开始,所有经过2019年6月1日之后构建并使用Developer ID分发的软件都必须经过公证。

现在,显然,为了进行入侵,您运行的任何新的未签名代码都将发送到AAPL服务器。可以通过运行任何网络分析器并查看对api.apple-cloudkit.com域的调用来轻松验证这一点。应当注意,发送的不是代码本身,而是散列量。您可以通过两种方式进行检查-比较网络上不同大小的脚本的数据传输量;以及查看负责发送数据的守护程序的内容(otool -tV / usr / libexec / syspolicyd)。但是,如果互联网连接速度较慢,则延迟可能会是几秒钟-来自中国的用户写道,延迟约为5.47秒。

一方面,苹果公司可以理解-它关心用户的安全性,但是与此同时,其平台上的任何开发过程都陷入了困境。

但是我想引用首先引起问题的开发人员:
当低级系统API中的两个方法(例如exec和getxattr)执行同步网络调用然后返回结果时,操作系统的这种行为表明其设计中存在严重问题。

链接:

lapcatsoftware.com/articles/catalina-executables.html
news.ycombinator.com/item?id=23275922
sigpipe.macromates.com/2020/macos-catalina-slow-design

All Articles