hacktricks/mobile-pentesting/ios-pentesting/ios-uipasteboard.md

6.2 KiB
Raw Blame History

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

{% embed url="https://websec.nl/" %}

iOS设备上应用程序内部和跨应用程序之间的数据共享是通过UIPasteboard机制实现的,分为两个主要类别:

  • 系统范围的通用剪贴板:用于与任何应用程序共享数据并设计为在iOS 10以后可跨设备重启和应用卸载持久化数据的功能。
  • 自定义/命名剪贴板专门用于在应用程序内部或与共享相同团队ID的另一个应用程序之间共享数据并且不会在创建它们的应用程序进程的生命周期之外持久存在这是iOS 10引入的变化。

在利用剪贴板时,安全考虑起着重要作用。例如:

  • 用户没有管理应用程序权限访问剪贴板的机制。
  • 为了减轻未经授权的后台监控剪贴板的风险访问仅限于应用程序在前台运行时自iOS 9以来
  • 由于隐私问题,不鼓励使用持久命名剪贴板,而是推荐使用共享容器。
  • iOS 10引入的通用剪贴板功能允许通过通用剪贴板在设备之间共享内容,开发人员可以管理数据过期时间并禁用自动内容传输。

确保敏感信息不会被意外存储在全局剪贴板中至关重要。此外,应用程序应设计防止全局剪贴板数据被用于意外操作的滥用,鼓励开发人员实施措施防止将敏感信息复制到剪贴板中。

静态分析

对于静态分析,搜索源代码或二进制文件以查找:

  • generalPasteboard 以识别系统范围的通用剪贴板的使用。
  • pasteboardWithName:create:pasteboardWithUniqueName 用于创建自定义剪贴板。验证是否启用了持久性,尽管这已被弃用。

动态分析

动态分析涉及挂钩或跟踪特定方法:

  • 监视 generalPasteboard 以进行系统范围的使用。
  • 跟踪 pasteboardWithName:create:pasteboardWithUniqueName 以进行自定义实现。
  • 观察已弃用的 setPersistent: 方法调用以检查持久性设置。

要监视的关键细节包括:

  • 剪贴板名称内容例如检查字符串、URL、图像
  • 存在的项目数量数据类型,利用标准和自定义数据类型检查。
  • 通过检查 setItems:options: 方法检查到期和仅本地选项

一个监视工具的示例是objection的剪贴板监视器它每5秒轮询generalPasteboard以查看更改并输出新数据。

以下是一个简单的JavaScript脚本示例受objection方法启发每5秒读取并记录剪贴板中的更改

const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
var items = "";
var count = Pasteboard.changeCount().toString();

setInterval(function () {
const currentCount = Pasteboard.changeCount().toString();
const currentItems = Pasteboard.items().toString();

if (currentCount === count) { return; }

items = currentItems;
count = currentCount;

console.log('[* Pasteboard changed] count: ' + count +
' hasStrings: ' + Pasteboard.hasStrings().toString() +
' hasURLs: ' + Pasteboard.hasURLs().toString() +
' hasImages: ' + Pasteboard.hasImages().toString());
console.log(items);

}, 1000 * 5);

参考资料

{% embed url="https://websec.nl/" %}

从零开始学习AWS黑客技术成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持HackTricks的其他方式