0

我正在尝试端点安全系统扩展,以防止用户删除我的应用数据。我使用“ ES_EVENT_TYPE_AUTH_UNLINK”来阻止用户删除应用程序文件。

我试图弄清楚如何阻止用户删除钥匙串项目。

4

1 回答 1

1

不幸的是,没有官方方法可以使用 Endpoint Security 做您想做的事:没有与任何钥匙串操作相关的此类事件。

您可以在 Endpoint Security 中向 Apple 提出所需的新事件的请求,以使其以官方方式可行,但他们几乎总是不关心此类请求。

但是,使用间接方法可能会实现您想要的,但这需要您付出很多额外的努力。

用户钥匙串的文件通常存储在 ~/Library/Keychain 中。例如,login.keychain-db 文件很可能是一个 sql-lite 数据库,其中存储了所有钥匙串数据。

值得一提的是,在我的情况下,我无法打开它,因为我的 sql 查看器说它受密码保护。

因此,您可以做的是创建状态为 OK 的钥匙串文件的备份,然后在 Endpoint Security 中侦听当前钥匙串文件的写入事件。

您将无法拒绝此类事件,但您可以做的是在此操作之后立即锁定钥匙串文件(就是这样,使用 Endpoint Security,您应该在一段时间内拒绝对钥匙串数据库文件的任何其他文件操作),并且搜索您确定希望出现在钥匙串中的钥匙串项目。

您需要从用户上下文执行此操作,并且 Endpoint Security 在根上下文中运行,因此这是您需要代理(如果您在守护进程中使用 ES aa 库)/ UI 应用程序(如果您使用 ES 作为系统扩展)的地方) 和它们之间的 IPC。

如果搜索结果是肯定的,则表示用户没有删除您想要的记录,因此您可以解锁钥匙串文件并感到高兴。

否则,我建议您只从备份中恢复钥匙串文件(您可以允许在 ES 中从您的应用程序进行操作,因为您知道您需要它),因此有效地看起来用户没有从钥匙串中删除您的记录。

如果此时钥匙串文件正在使用中,这可能是一个问题。(钥匙串应用程序可能包含文件描述符)如果是这样,我建议调用普通 API 并从代理手动读取所需的项目到钥匙串。

这可能需要您解析备份钥匙串文件,或将您的项目单独存储在其他地方,但可以克服。

这个方案可能会在没有任何保证的情况下工作一段时间,并且可以随时被 Apple 破坏。

于 2021-07-30T15:56:43.647 回答