我们发现了很多Mac用户不太重视自己的安全。恶意软件逐渐增多,窃取用户隐私,监控用户日常行为,恶意推广广告, etc。所以要提高自己的安全意识,警钟长鸣。
0×01 前言
- 小夏是个普通人Mac用户,有一天,他计划尝试思维导图来记录工作和学习。
- 他问同事小芳:“Mac思维导图软件有哪些好用?”
- 小芳:“XMind啊,非常实用的思维导图软件。”
- 小夏:“在哪里下载,要钱吗?”
- 小芳:“哎,你百度XMind破解版! 不需要花钱,直接安装!”
- 小夏:“这么方便!我试试!”
0×02 样本概述
Xmind这是一个实用的思维导图软件。官方网站的合法价格高达99美元。当然,这个价格对普通用户来说是负担不起的。通过搜索,许多网站提供破解版本的下载
对比相同版本号的正版和破解版,hash如下:
我们发现样本收集了用户的大量隐私信息,并上传到第三方服务器,如下图所示
目的:1、非法销售用户信息、泄露用户隐私2、广告推广、盈利3、钓鱼执法、发送侵权律师函4、etc
下面详细分析一下样本
0×03 基本信息
在Mac应用中,OSX系统下的Mach-O可执行文件格式,程序运行分析Mach-O,然后链接系统的库文件和第三方动态库。
我们使用MachOView进行解析
可执行文件Load Commands 程序的加载指令记录在字段中,LC_LOAD_DYLIB是程序加载的动态库,其中Name该字段记录了动态库的路径,通常程序启动会根据该字段加载动态库。这里发现它加载了两个新的动态库文件libcJFishPoolHook.dylib、libXMindHook.dylib。除此之外,XMind使用Java编写,移植到Mac平台,可执行文件也不值得重点分析。
综上所述,我们主要做了以下事情:
- 初始化程序启动,获取资源文件。
- 加载.ini配置文件,获得启动参数键对。
- 分析参数,然后加载运行Library(Java包装动态库).
直接对比正版和破解版的包目录,我们在包里发现了两个额外的包dylib文件
下面对这2个dylib详细分析
0×04 dylib分析
对于Mac/iOS中使用到的dylib,可以使用class-dump和hoppper结合反汇编分析。class-dump又是一款开源解析MachO利器,与MachOView类似地,他可以遵循MachO偏移量,找符号表(Symbol Table),导出类名和 *** 名,但他为导出不同架构提供了许多参数MachO链接符号表。在文件中使用以下命令导出类名的 *** 名:
从导出结果来看,很可疑的是CJFishPoolHook这一类有多达16名成员。 写动态库的程序员非常诚实,没有加密、混淆类名和 *** 名。因此,不难从字面上猜出它的意思qq微信号、手机号、邮箱号、操作系统CPU类型、内存、MAC地址、内网IP、公网IP、用户名、应用列表、设备ID,是否上传信息、打开和关闭应用程序。
动态库的第二种 *** 很少,很明显,hook修改程序运行逻辑的程序函数。
主要 *** 如下:
- init初始化 ***
- ExChangeImp,Method Swizzling动态交换函数指针hook
- BuyHook
- CheckUpdatesHook
- HelpHook
- TitleHook
- OpenURLHook
- DateMenuItemHook
***该 *** 还采用加密 *** 进入***第二个参数(明文)key用于加密内容。
0×05 抓包分析
通过以上简单的分析,不难猜测他将收集到的信息发送到了服务端。样本和服务端通信的过程如下:
***二次发送到服务端checklocked,返回值为0,表示设备信息可以传输
接下的data是用来上传用户信息的。Body是经过AES加密后base既然编码,既然key已经有了,可以试着解开要求密文
通过静态分析,我们知道他使用了它AES而加密算法key代码中有硬编码
结合上述过程,了解加密算法***个参数为kCCEncrypt,第二个为kCCAlgorithmAES128,第三种是加密填充模式kCCOptionECBMode。 我们根据此写的AES解密 *** 应为:
key为:iMdpgSr642Ck:7!@
解开的密文是
让我们来看看样本是如何获得这些用户隐私的。
0×06 静态分析
收集用户隐私
CJFishPoolHook.dylib获取用户的隐私信息的过程如下
单例类在应用初始化过程中CJFishPoolHook执行初始化Init,随后,在Init包含上述16条信息的初始成员操作 *** 。
初始化后,开始捕获用户信息startCapture。这包括获取用户联系方式(getContact),获取设备信息(getDevice),判断设备是否需要上传信息(checkLocked),获取应用ID(getProduct),获取设备上的应用列表(getFeature),获取地理位置(getLocation),获取启动时间(getHabitStart)。
***一步,将所有数据上传到服务器并使用AES加密算法加密httpbody。
恶意收集 *** 信息、 *** 、微信号、应用列表
应用从Library/Containers/com.tencent.qq/Data/Library/Application Support/ *** 获取个人目录 *** 信息。保存用户的临时聊天记录、截图等信息。
从/Applications遍历本机安装的应用,形成应用列表。
恶意推广
libCJFishPoolHook.dylib修改了更新xmind官方网站,推广自己的广告网站
注入过程后使用Method Swizzling挂钩MenuItem、Button等待按钮,使其无效或重定向跳转到其他网站,屏蔽注册,激活检查和更新功能 。难怪激活按钮在启动应用程序后无法更新版本,但在购买激活产品时跳转到另一个网站。
0×07 小结
本次反向分析过程清晰,可以从 *** 传输和静态分析中了解重包装应用运行状态的整个过程。我不想对公司收集用户信息的行为做太多的评论。
主要从两个方面进行总结。对于开发者来说,我们应该了解一些基本的防御手段,注意 *** 传输和存储的安全。在开发过程中,尽量不要key在程序中编码明文,即使是二次编码后key在应用程序中。我们不知道软件是否会被破解,key是否会泄露,一旦暴露,就很容易使用来解决密文信息。更重要的是,直接使用base编码内容、数据位容、数据位或操作编码。同时,我们可以混淆加密、反调试等手段,增加软件破解的难度。另一方面,从用户的角度来看,下载和安装未经验证的软件是非常危险的,比如名称XcodeGhost事件,其实就是开发者安装了非官方验证的开发软件,导致开发的程序带有后门,窃取和上传大量用户信息。
这篇文章只描述了个人信息安全的一个角落,但他的存在不容忽视。就像这篇文章一样libCJFishPoolHook命名是一样的意思是鱼塘,软件用户是鱼,养在破解者的鱼塘里,等鱼养大了,也该关网了。
在过去的六年里,Mac销量越来越高,也意味着苹果用户越来越多。用户越多,生态系统中的软件输出必然会增加,更恶意的软件会浑水摸鱼
Mac恶意软件的发展历史
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。