欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何利用自定义URL Scheme远程突破Mac

来源:本站整理 作者:佚名 时间:2018-09-03 TAG: 我要投稿
(lldb) b ___LSBundleCopyOrCheckNode_block_invoke
...
(lldb) x/gx $rdx
0x700000115c48: 0x00007fd3b4a9c520
(lldb) po 0x00007fd3b4a9c520
 { flags = 0x00000020, path = '/Users/user/Desktop/Mac File Opener.app' }
总结一下:
1、应用程序可以“声明”能够处理的各种文档或者文件类型;
2、一旦应用落盘,操作系统就会自动注册这些“document handler”;
3、文件打开时,系统会查询“launch services”数据库,确定该执行哪个应用。
以上就是“document handlers”的大概内容,接下来讨论一下自定义URL Scheme handler。从操作系统的角度来看,这种URL Scheme handler通常只是适用于url的document handler。
这对自定义URL Scheme handler来说意味着两点:
1、一旦(“声明”支持这些handler的)应用落盘,macOS会自动注册自定义的URL Scheme handler;
2、当自定义URL Scheme被调用时,就会触发(已自动注册的)handler应用。
由于这些操作都可以被网页触发,因此我们很容易就能猜到会出现什么后果。
之前我曾在Box 2017上讨论过自定义URL Scheme话题(“Oversight: Exposing Spies on macos”)。

然而当时并没有涉及到恶意软件或者恶意利用之类的内容。
由于我还没有接触WINDSHIFT恶意软件样本,我之前自己写了PoC示例,演示了攻击者如何滥用自定义URL Scheme handler来远程感染Mac主机(该过程涉及一些用户交互操作)。
我们先创建Xcode项目,使用Cocoa App模板:

应用本身的逻辑并不关键,但我们必须编辑应用的Info.plist文件,以便“声明”我们将支持一个自定义的URL Scheme。在Xcode中,我们添加了一个URL types数组,指定了Scheme的名称(windshift://)以及一个URL标识符:

观察原始的plist,我们可以看到这些信息对应其中的一些key,比如CFBundleURLTypes CFBundleURLSchemes以及CFBundleURLName:
key>CFBundleURLTypeskey>
array>
  dict>
        key>CFBundleURLSchemeskey>
        array>
                string>windshiftstring>
        array>
        key>CFBundleURLNamekey>
        string>com.foo.bar.WindShiftstring>
        dict>
array>
一旦该应用编译(或下载)完毕,lsd就会解析应用的bundle数据(特别是Info.plist文件),检测是否存在自定义URL Scheme handler,如果有则进行注册。注意这些操作都会自动完成。
为了确认这一点,我们可以转储“launch services”数据库(通过lsregister -dump命令)。其中的确可以看到我们的PoC应用(WindShift.app),以及我们自定义的URL Scheme(CFBundleURLSchemes: (windshift)):
--------------------------------------------------------------------------------
BundleClass: kLSBundleClassApplication
Container mount state: mounted
bundle  id:            168204
 Mach-O UUIDs:  E2E77A08-F458-36C1-B7BD-99F409B4DEAC
 Device Familie
  Counterpart ID
  sequenceNum:   168204
 FamilyID:      0
  PurchaserID:   0
  DownloaderID:  0
  installType:   0
  appContainer:  #
  dataContainer: #
  path:          /Users/patrick/Projects/WindShift/DerivedData/WindShift/Build/Products/Debug/WindShift.app
 name:          WindShift
  ....
  executable:    Contents/MacOS/WindShift
 ....
  CFBundleURLTypes =     (
                {
            CFBundleURLName = "com.foo.bar.WindShift";
            CFBundleURLSchemes =             (
                windshift
            );
        }

上一页  [1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载