退出应用程序时为什么要清除粘贴板?

信息安全 应用安全 移动的 IOS
2021-08-25 07:09:26

我一直在扫描我的 iOS 应用程序,风险最高的漏洞似乎是当我终止应用程序时粘贴板没有被清除。我不希望用户由于过度热心而丢失他们复制的潜在有用信息,特别是当应用程序尚未终止且其他应用程序正在串联运行时数据仍然非常不安全时。

在与我自己类似的问题中,但对于 Windows 粘贴板,建议这不是一个高风险问题,因为当我的设备上存在恶意软件时,粘贴板应该是我最不担心的问题。我应该这样做的主要原因是什么,为什么它被认为是相当高的风险?

该应用程序可以访问互联网并且确实包含 SPI。

3个回答

剪贴板确实不能被认为是一个安全的地方,这有几个原因:

  • 访问剪贴板内容的恶意软件:在您的问题中,您关注的是计算机中安装的恶意软件,但是可能存在临时恶意软件(例如,您访问的网站上的恶意 Adob​​e Flash 横幅......)在运行时不会感染您的计算机,但只是尝试获取当时的剪贴板内容并将其发送到他们的家中,

  • 用户错误操作:错误操作可能会导致您将错误的内容粘贴到错误的位置。通常没有后果,对于敏感数据,这种错误的操作仍然会产生严重的后果,

  • 用户周围的人:当计算机无人看管和解锁时,或者如果用户的注意力暂时被分散,其他人在他的键盘上按下一个Ctrl-V然后Ctrl-Z快速查看他的剪贴板内容,而用户没有注意到。

虽然最好避免完全使用剪贴板,但当需要缓解此类威胁时,要确保敏感数据不会在剪贴板中保留太久:理想情况下,它应该保留足够的时间以供使用,并且没有更长。

在您的问题中,您建议在应用程序退出时清除剪贴板。这样做的效率很大程度上取决于应用程序的使用方式:如果这是一种仅在一天结束时关闭的应用程序,那么这种措施似乎是无效的。

这种情况的一个很好的例子和灵感来源可以是密码管理器KeePass,它建议根据用户的偏好以两种方式处理这个问题:

  • 为了避免完全使用剪贴板,KeePass 提出了它所谓的 Auto-Type:它将通过模拟适当的按键直接填充目标字段。优点是没有数据通过剪贴板,但是这种行为实现起来更复杂,并且可能不完全兼容或可移植(尤其是因为您提到了移动应用程序),

  • 使用剪贴板复制/粘贴密码时,可以将 KeePass 配置为在短时间内自动清除剪贴板。复制密码时,KeePass 会在其主窗口底部显示一个递减进度条,为用户提供有关超时进度的视觉反馈,并且一旦超时到期(例如 15 或 30 秒)并且剪贴板仍然包含 KeePass 数据然后 KeePass 删除剪贴板内容(用户不得使用这些“剪贴板历史管理器”之一才能真正有效)。

实际上,当设备上存在恶意软件时,让粘贴板存储这些数据将是您最不必担心的事情。但是,这仍然是不好的做法。

您不应将重要的用户数据存储在剪贴板中。无论如何,您甚至都不应该将其放在粘贴板/剪贴板中。为什么?因为恶意应用程序可以访问您的剪贴板数据。想象一下,一个网站访问您的剪贴板(正常访问或通过漏洞利用),或者另一个应用程序存储它并将其发送到远程服务器?

如果有这样的方法怎么办:

sendDataToRemoteServerForPurposesOfExtremeHaxoring(string evilLaugh, string pasteboardData)?

像这样:

// Oh noes!
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
sendDataToRemoteServerForPurposesOfExtremeHaxoring("Mwahahahahaha", pasteBoard.string);

此外,在我看来,将用户密码和其他关键信息存储在剪贴板中是一个巨大的、巨大的禁忌。如果用户不小心粘贴了怎么办?如果应用程序利用它怎么办?如果网站利用它怎么办?有很多理由不这样做。

我将在这里关注 iOS 方面 - 其他答案确实提到了不适用于 iOS 的内容(例如“自动输入:”)。我是一名 iOS 开发人员,曾开发过“安全”应用程序。

可悲的是,我为 iOS 代码尝试过的每一个“安全扫描器”充其量都是我所说的“高度误导”。我怀疑我通常使用的短语对于 stackexchange 来说不够家庭友好。

“漏洞”及其建议的缓解措施是“高度误导”的。它既会损害可用性,也不会在 iPad 在“并排”多任务或其他情况下运行应用程序时提供帮助。

正如 WhiteWinterWolf 所说,如果这适用于您的用例,您应该首先考虑不要将高度敏感的数据放到系统剪贴板上。在 iOS 中,您可以通过子类化UITextField, (etc) 并为不使用系统的应用程序UITextView提供替换来实现应用程序的内部剪贴板UIResponderStandardEditActions[UIPasteboard generalPasteboard]

如果您有一个令人信服的用例来允许将数据传递给其他应用程序,从 iOS 10 开始,您还可以设置UIPasteboardOptionExpirationDateUIPasteboardOptionLocalOnly(因为 iOS 10 现在默认在所有登录到同一 iCloud 帐户的设备周围共享剪贴板)尝试限制曝光。