最新公告
  • 欢迎您光临悠哉网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 利用第三方应用的各类代码注入技术窃取钥匙串

    在macOS上存储密钥是一个巨大的挑战,可以通过多种不安全的方式来完成。我在漏洞赏金评估期间测试了许多Mac应用程序,并观察到开发人员倾向于将密钥放在偏好甚至隐藏的平面文件中。这种方法的问题在于,以标准权限运行的所有非沙盒应用程序都可以访问密钥数据。平面文件(Flat-File),Flat File是一种包含没有相对关系结构的记录的文件。这个类型通常用来描述文字处理、其他结构字符或标记被移除了的文本。

    在使用上,有一些模糊点,如像换行标记是否可以包含于“Flat File(flat file)”中。在任何事件中,许多用户把保存成“纯文本(text only)”类型的Microsoft Word文档叫做“Flat File(flat file)”。最终文件包含记录(一定长度的文本的行数)但没有信息,例如,用多长的行来定义标题或者一个程序用多大的长度来用一个内容表对该文档进行格式化。

    例如,macOS上的Signal在〜/ Library / Application Support / Signal / config.json中存储了用于加密所有消息数据库的密钥。

    macOS钥匙串

    根据苹果的说法,钥匙串是存储例如密码和加密密钥这样的小秘钥的最好地方,钥匙串是一种非常强大的机制,允许开发人员定义访问控制列表(ACL)来限制对条目的访问。应用程序可以通过密钥组权限进行签名,以便访问其他应用程序之间共享的秘钥。以下Objective-C代码将在钥匙串中保存密钥值:

    并且在执行后,你应该看到条目已成功被添加:

    第一种窃取技术

    第一种技术是验证应用程序是否已使用“Hardened Runtime”或“Library Validation”标志进行了签名,钥匙串不能检测到代码注入。因此,只需使用以下命令:

    如果标记为0x0,并且没有__RESTRICT Mach-O段(这个段非常罕见),则只需将恶意的dylib注入到应用程序的主要可执行文件中。创建具有以下内容的exploit.m文件:

    编译:

    并注入:

    第二种窃取技术

    如果可执行文件已使用Hardened Runtime签名怎么办?这个绕过技术类似于我在XPC开发系列中向你展示的内容。抓取已分析的二进制文件的旧版本,该版本在没有强化运行时的情况下签名,并将dylib注入其中。钥匙串不会验证二进制文件的版本,而是会给你展示秘钥。

    针对开发人员的建议修复程序,创建“钥匙串访问组”并将秘钥移到那里。由于二进制文件的旧版本无法使用该钥匙串组权限进行签名,因此无法获得该秘钥,详情请点此。

    第三种窃取技术

    切记如果设置了“Hardened Runtime”,则com.apple.security.cs.disable-library-validation将允许你注入恶意动态库。

    第四种窃取技术

    正如Jeff Johnson在他的文章中所证明的那样,TCC只是从表面上检查应用程序的代码签名。钥匙串中也存在相同的问题,即使整个捆绑包的签名无效,钥匙串也只会验证主要的可执行文件是否未被篡改。让我们以设备上安装的Electron应用程序(Microsoft Teams,Signal,Visual Studio Code,Slack,Discord等)之一为例,事实证明Electron应用程序无法安全地存储你的秘钥。Electron是一个创建原生应用程序的框架,基于Node.js和Chromium实现了通过JavaScript, HTML 和 CSS 等 Web 技术构建跨平台应用程序的能力。

    其中,Electron还封装了一些功能,包括自动更新、原生的菜单和通知、崩溃报告、调试和性能分析等。

    即使你使用Hardened Runtime签署了Electron,恶意应用程序也可能会更改包含实际代码的JavaScript文件。让我们看一下Github Desktop.app,它将用户的会话秘钥存储在钥匙串中:

    并已有效签名:

    接下来,更改一个JS文件并验证签名:

    可以看到签名被破坏了,但是Github会正常启动并加载保存在钥匙串中的密钥:

    为了防止修改,Electron实现了一种称为asar-integrity的机制。它计算一个SHA512哈希值并将其存储在Info.plist文件中,问题在于它不会停止注射。如果主要的可执行文件尚未使用Hardened Runtime或Kill标志签名,并且不包含受限制的权限,则只需修改asar文件,计算新的校验和并更新Info.plist文件即可。如果设置了这些标志或权限,则始终可以使用ELECTRON_RUN_AS_NODE变量,并再次在主要的可执行上下文中执行代码。因此,它可以窃取钥匙串条目。

    总结

    钥匙串中的安全密钥存储确实很难实现,因为对请求的可执行文件的代码签名检查只是一些表面的功夫,因此有多种方法可以绕过访问控制机制。

    最大的问题是在Electron应用程序中,这些应用程序无法将密钥安全地存储在钥匙串中。切记,任何将实际代码存储在主要的可执行文件之外的框架都可能被诱骗加载恶意代码。

    本文翻译自:https://wojciechregula.blog/post/stealing-macos-apps-keychain-entries/

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"www.yoozai.net",如遇到无法解压的请联系管理员!
    悠哉网 » 利用第三方应用的各类代码注入技术窃取钥匙串

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    悠哉网 WWW.YOOZAI.NET
    悠哉网,用户消费首选的网站,喜欢你就悠哉一下。

    发表评论

    • 1002会员总数(位)
    • 40233资源总数(个)
    • 43本周发布(个)
    • 42 今日发布(个)
    • 377稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情