Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 防止在OS X上启动损坏的可执行文件_Objective C_Xcode_Macos_Security_Launchd - Fatal编程技术网

Objective c 防止在OS X上启动损坏的可执行文件

Objective c 防止在OS X上启动损坏的可执行文件,objective-c,xcode,macos,security,launchd,Objective C,Xcode,Macos,Security,Launchd,我有一个进程(启动守护进程),它是在OSX的根上下文中通过launchd启动的。该进程是经过代码签名的。如果我破坏了二进制文件,它会再次加载。为了损坏二进制文件,我在hex编辑器中打开可执行文件,并对任何字符串进行查找和替换。有没有办法防止此进程在损坏时启动?通常,只要您在下载后已删除隔离属性以批准它(“xxx是从INTERNET下载的应用程序…”),OS X的网关守护程序不会阻止您执行未经代码签名或错误签名的二进制文件。此外,如果您似乎有意执行它(右键单击、打开或在终端中执行),它也会停止运行

我有一个进程(启动守护进程),它是在OSX的根上下文中通过launchd启动的。该进程是经过代码签名的。如果我破坏了二进制文件,它会再次加载。为了损坏二进制文件,我在hex编辑器中打开可执行文件,并对任何字符串进行查找和替换。有没有办法防止此进程在损坏时启动?

通常,只要您在下载后已删除隔离属性以批准它(“xxx是从INTERNET下载的应用程序…”),OS X的网关守护程序不会阻止您执行未经代码签名或错误签名的二进制文件。此外,如果您似乎有意执行它(右键单击、打开或在终端中执行),它也会停止运行。在批准运行某项操作后,看门人就完成了

坦白说,这是一个很好的保护措施,但非常脆弱。一点也不像iOS

出于您的目的,您可能需要退房。这是最近发布的一个工具,它将导致OSX内核拒绝执行任何未签名(或修改)的二进制文件,并且从Internet上运行。您可以使用
xattr
将隔离属性添加到二进制文件中,以使其受到影响

和/或,在调用它的启动脚本中,在您愿意启动签名之前,使用
codesign-dv
自己检查签名。您还可以对应用程序进行沙箱处理,以确保如果它被劫持,它将无权做任何事情

因为这是一个启动过程,所以同一个安全研究员有另一个免费工具,名为,可能会引起您的兴趣。我相信在您批准之前,它将首先防止二进制文件被替换

坦白说,这家伙做的一切都很酷。苹果提供了一个可执行文件,允许可执行文件检查自己的签名,并测试应用程序是否被篡改

首先通过调用获取代码对象,然后使用检索到的
SecCodeRef
调用或

若应用程序遇到有效性问题,则由应用程序自行退出。当它在根上下文中运行时,它还可以从launchd卸载自己


请注意,验证应用程序所需的时间取决于其大小和文件数。一个非常大的应用程序包,如XCode,可能需要3分钟左右,但一个小应用程序几乎不会引起注意。

虽然我同意Patrick的工具Ostiarius很棒,但它不会解决问题。即使二进制文件可能已损坏,它仍然是有符号的,并且Ostiarius不会验证应用程序的完整性。此外,如果用户以前接受过要执行的应用程序,其隔离标志将被删除,Ostiarius仍将允许该应用程序运行。对此不确定。
sudo xattr-w com.apple.quantial“0002;56dffb86;Safari;0EC7F021-2F3C-43CC-BC47-7981517CD429”/usr/local/bin/ffmpeg
,然后运行<代码> /Ur/Studio/bin /FFMPEG,如果它只是在控制台运行,它就不会被删除。如果-如果有人可以修改你的二进制文件,任何涉及该程序检查自己和自我中止的解决方案都不会起作用。它可以像破解的Mac应用商店应用一样被阉割。对不起,我没有正确解释。当该属性存在时,还有另一个标志,当用户批准应用程序打开时,该标志将被标记,而不考虑gatekeeper。Ostiarius的kext检查并允许它(如果设置了该标志)。帕特里克演讲的幻灯片上记录了这一点。请注意幻灯片58中的步骤2-忽略“用户批准的”二进制文件