MacOS 虚拟网络摄像头本质上是否与 10.14 的强化运行时库验证不兼容?

jrr*_*jrr 13 security macos webcam core-media

初步观察

Zoom for Mac 4.6.9解决了可怕的安全漏洞,删除了禁用库验证权利。

在同一版本中,虚拟网络摄像头应用 Snap Camera停止工作

研究

我不熟悉您用于构建虚拟网络摄像头的特定 API,但看起来它涉及CoreMediaIO插件:

为 OS X 创建虚拟网络摄像头设备

> otool -L /Library/CoreMediaIO/Plug-Ins/DAL/SnapCamera.plugin/Contents/MacOS/SnapCamera
/Library/CoreMediaIO/Plug-Ins/DAL/SnapCamera.plugin/Contents/MacOS/SnapCamera:
    libSnapCamera.dylib (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1452.23.0)
    /System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/CoreMediaIO (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo (compatibility version 1.2.0, current version 1.5.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1452.23.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
Run Code Online (Sandbox Code Playgroud)

出于好奇,我尝试了其他几个虚拟网络摄像头——Iriun WebcamEpocCam——它们的行为相似。两者都有 CoreMediaIO 插件,并且都不适用于最近的 Zoom。

所有三个虚拟摄像头都在 Microsoft Teams 中工作,它具有以下权利:

> codesign -d --entitlements :- /Applications/Microsoft\ Teams.app/ |grep valid
Executable=/Applications/Microsoft Teams.app/Contents/MacOS/Teams
    <key>com.apple.security.cs.disable-library-validation</key>
Run Code Online (Sandbox Code Playgroud)

它们也适用于 Google Chrome(在此测试页上)。看起来至少有一个 Chrome 的助手有权利:

codesign -d --entitlements :- /Applications/Google\ Chrome.app/Contents/Frameworks/Google\ Chrome\ Framework.framework/Versions/81.0.4044.92/Helpers/Google\ Chrome\ Helper\ \(Plugin\).app
Executable=/Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/81.0.4044.92/Helpers/Google Chrome Helper (Plugin).app/Contents/MacOS/Google Chrome Helper (Plugin)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

我还注意到该插件出现在 Activity Monitor 的Open Files and Ports 中,用于属于 Teams 和 Chrome 的几个进程。( /Library/CoreMediaIO/Plug-Ins/DAL/SnapCamera.plugin/Contents/MacOS/SnapCamera)

CoreMedia 虚拟网络摄像头插件如何工作,它们是否与库验证存在内在冲突?(例如,以不再允许的方式将库加载到相机使用过程中)

是否不再可能在 MacOS 上创建虚拟网络摄像头而不与 Hardened Runtime 冲突?


4 月 19 日更新:Zoom 4.6.10 的更新日志现在显示“Zoom 已暂时取消对虚拟相机的支持”。. 看看他们是否/如何重新启用它会很有趣。(也许限制了仅在需要时使用的辅助进程的权利?)

小智 5

我在 Catalina 10.15.5 上使用 Microsoft Skype for MacOS (8.61.0.95) 遇到了同样的问题

我能够通过去解决这个问题

cd /Applications/Skype.app/Contents/Frameworks

然后删除Skype 的所有.app 部分的签名,即

codesign --remove-signature Skype\ Helper.app

codesign --remove-signature Skype\ Helper\ \(GPU\).app

codesign --remove-signature Skype\ Helper\ \(Plugin\).app

codesign --remove-signature Skype\ Helper\ \(Renderer\).app

之后,重新启动 Skype。

现在在设置中,当您选择相机时,您应该会看到 CamTwist 和 CamTwist (2VUY) 出现。

类似的修复适用于缩放:

codesign --remove-signature /Applications/zoom.us.app\