苹果的APNS推送通知有多安全?

8

有人知道苹果的APN推送通知服务中存在哪些漏洞吗?

我们可以确保我们的通知被安全地发送到苹果,所以我们只需要知道它们是否可以从那个点被拦截?

动机: 我们构建了一个iOS消息应用程序,我们正在使其成为100%安全的解决方案,并具有一些以前从未在安全领域中利用过的功能。


推送通知只是通知应用程序有数据/信息需要查看,您不会发送实际数据本身。 - Black Frog
2
@BlackFrog 你可以在通知的有效负载中发送2kb的数据。 - TimWhiting
1
你可以发送2kb的数据,但如果你担心安全问题,你只会发送一个标识符。当应用程序接收到该标识符时,应用程序会连接到服务器以获取实际数据本身。再次问一下,你认为APRS的哪个部分是容易受攻击的? - Black Frog
我同意这是通常的做法。我只需要知道是否有任何理由我们不应该在推送通知中发送消息正文。如果用户可以在通知中阅读消息,那么对于最终用户来说会更好,我只需要确定从安全角度来看这是否可以。黑客是否有任何现成的方法拦截通知是我的主要问题。 - TimWhiting
3个回答

8
去年,苹果发布了 UNNotificationServiceExtension,使开发人员能够通过 APNS 发送完全加密的通知负载,然后让最终用户设备上的应用程序自行解密(或加载任何其他支持数据)以显示通知。 UNNotificationServiceExtension 类提供了一个入口点,用于 Notification Service 应用程序扩展,该扩展允许您在将远程通知传递给用户之前自定义其内容。 Notification Service 应用程序扩展不会呈现任何自己的 UI。相反,在传递适当类型的通知到用户设备时,它会按需启动。您可以使用此扩展来修改通知的内容或下载与扩展相关的内容。例如,您可以使用扩展来解密加密数据块或下载与通知相关联的图像。 我们的团队正在进一步研究这一点,作为以完全符合HIPAA标准的方式发送有用通知的手段,而且苹果无法查看通知的明文。我们持乐观态度。

4
你的调查发现了什么? - Leo
1
对于最安全的应用程序,考虑到苹果员工和国家行为者的威胁向量(例如NSA如何渗透谷歌),您可以采取以下措施:1)使用UNNotificationServiceExtension 2)在消息中添加对数随机延迟 3)当没有实际消息存在时,以概率α=0.1随机发送APNS 4)当实际存在消息时,以概率β=0.9发送APNS。 - William Entriken
我们已成功实现了使用UNNotificationServiceExtension特性的端到端加密推送通知。 - Shashidhar Yamsani
即使通过UNNotificationServiceExtension传递通知警报,最终也会将其交回给操作系统在某个时刻显示给用户。简而言之,在横幅显示之前,操作系统始终有机会“查看”警报内容,并且不能消除所有内部威胁或0-day威胁。端到端加密更多地提供了传输保护和数据安全,同时减轻了几乎所有威胁,除了最偏执的用例。消息推送通知永远无法完全进行端到端加密。看起来这次对话主要集中在数据方面。 - amza

4
请看这篇文章

设备本身与推送云服务之间的连接当然是通过TLS通道进行保护的。

...

但是,从应用程序云服务发送到设备上安装的应用程序的推送消息中实际的文本和其他元数据又是如何得到保护的呢? 这就是问题所在。如上所述,在传输过程中始终得到保护,但消息本身在这些传输之间是明文的

这里涉及到用户隐私的问题。 所有的推送云服务都拥有其系统中发送的每个推送消息的明文

也就是说,他们有分析、查看、共享/出售数据的能力。 并且他们有被黑客攻击而失去数据的风险

因此,一般来说,如果您想要安全起见,请不要使用推送通知发送任何敏感数据。相反,只需将推送通知作为同步机制,以告诉应用程序需要以您可以控制的安全方式获取新数据即可。


1
请注意 - 那篇文章是在2014年写的。该篇文章的作者于2017年2月4日发表了以下评论:“使用iOS 10,您可以在从服务器发送数据之前对有效负载进行加密,然后有一个钩子可以在手机上解密它,然后再在锁定屏幕/通知中心等位置显示。” - jabbett
2
我阅读了关于OneSignal及其数据政策的帖子(它非常公开透明)。但是,如果OneSignal能够获取“您的应用程序用户的电话号码、IP地址(位置)、浏览行为等”并与他们的合作伙伴分享(出售)- 我怎么能确定Google、Apple、Amazon等公司不会以同样的方式处理用户数据(无论他们的政策如何)?我们作为开发人员需要认识到,我们有责任在我们的应用程序用户和赚取数据收益的技术公司之间创建数据链接。 - iKK

0

简短回答:您不应该将敏感数据包含在通知负载中。

更多细节:尽管APNs使用两个级别的信任进行端到端的加密验证和身份验证,根据苹果文档,您不应该在负载中包含敏感数据。

由于远程通知的传递不能保证,因此永远不要在负载中包含敏感数据或可以通过其他方式检索的数据。相反,使用通知来提醒用户有新信息或作为您的应用程序等待数据的信号。

例如,电子邮件应用程序可以使用远程通知来徽章化应用程序的图标或提醒用户特定帐户中有新电子邮件可用,而不是直接发送电子邮件消息的内容。收到通知后,应用程序应打开与您的电子邮件服务器的直接连接以检索电子邮件消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接