累觉不爱 Mac App Store 上竟然也有偷偷奴役你电脑
发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370
在本文中,我们分析了在官方Mac App Store上发现的“Calendar 2”。有点出人意料的是,它竟然具备秘密地将你的Mac电脑变成一个加密货币挖矿工的能力。
背景
今天是星期天,“休息日”。如果你是使用CPU进行加密货币挖矿的人,你永远也不会休息一天。如果你是一个macOS安全研究员,一样没有假期!
今天早些时候,Ars Technica的Dan goodon向我介绍了一款官方Mac App Store(Mac应用商店)的应用,据报道,这款应用秘密的挖掘加密货币,这一情况吸引了我。因此我决定调查一番!
分析“Calendar 2”
该应用程序由一个名为Qbix的公司,将其命名为“Canlendar 2”。目前该应用程序仍可以在Mac App Store (itunes.apple.com/us/app/calendar-2/id41update)下载。
最新消息:向苹果公司报告了这一情况之后,该应用程序已经从Mac App Store中删除!
使用macOS的“App Store”,我们可以安装应用程序(注意:其应用程序包命名为CalendarFree.app)。就像在官方Mac App Store中所有的应用一样,其签名是有效的:
在该应用程序二进制文件上运行的字符串
(CalendarFree.app/Contents/MacOS/CalendarFree)揭示了其包含各种似乎与挖掘加密货币有关的字符串:
[sourcecode language="plain"]
$ strings -a ~/Downloads/CalendarFree.app/Contents/MacOS/CalendarFree
...
MinerManager
updateMiner
_parseMinerSetting
com.qbix.MineroMode
Miner: Start. core %d; cpuLimit %d; port %d; slowMemory %@; currency: %@; token: %@
Miner: Stopped
Miner: Check: hashrate %d; status: %d
[/sourcecode]
通过jtool来转储Objective-C(扩充C的面向对象编程语言)类信息,我们可以看到像MinerManager(挖矿管理器)这样的类:
[sourcecode language="plain"]
$ ./jtool -d objc -v CalendarFree.app/Contents/MacOS/CalendarFre
@interface MinerManager : ?
// 13 properties:
@property (nonatomic) long long currentPortIndex;
@property (copy) NSString slowMemoryMode;
@property (nonatomic) long long cpuLimit;
@property (nonatomic) long long coreLimit;
@property (copy) NSString token;
@property (copy) NSString algorythm;
...
// 32 instance methods
/* 0 - 0x100092e50 */ - runMiningPingReport;
/* 1 - 0x100092f10 */ - checkModeSelected;
/* 2 - 0x100077db0 */ - init;
/* 3 - 0x100077e10 */ - updateToReflectUserMode;
/* 4 - 0x100077e30 */ - updateMiner;
/* 5 - 0x100077fc0 */ - runMining;
/* 6 - 0x1000780d0 */ - stopMining;
/* 7 - 0x100078130 */ - checkMiningStatus;
/* 8 - 0x100078200 */ - startMiningCheckLoop;
/* 9 - 0x100078260 */ - stopMiningCheckLoop;
...
@end
[/sourcecode]
最后使用MachOView,我们发现该应用程序与一个似乎是加密货币挖掘框架相关联:Coinstash_XMRSTAK.framework。
很明显,尽管苹果公司声称要彻底审查提交给Mac App Store的所有应用程序,但这个叫做Calendar 2的应用程序拥有“隐藏”的加密货币挖掘能力!现在,让我们进一步了解一下如何将你的CPU资源用于我的monero(XMR)。
一般来说,应用程序逻辑始于applicationDidFinishLaunching:委托方法。对该方法反编译之后,我们发现了执行几个MinerManager方法的被调用的块:
[sourcecode language="plain"]
void -[CalendarController applicationDidFinishLaunching:]
{
...
dispatch_after(dispatch_time(0x0, 0x3b9aca00), *__dispatch_main_q, ^ {
/* block implemented _52-[CalendarController applicationDidFinishLaunching:]_block_invoke */
});
}
void _52-[CalendarController applicationDidFinishLaunching:]_block_invoke(void * _block) {
...
[[MinerManager manager] runMiningPingReport];
[[MinerManager manager] updateMiner];
return;
}
[/sourcecode]
对[MinerManager manager]的调用将触发一个一次分配以及一个MinerManager对象的初始化。作为初始化的一部分,它调用runMining方法:
[sourcecode language="plain"]
$ lldb /Applications/CalendarFree.app/
Current executable set to '/Applications/CalendarFree.app/' (x86_64).
(lldb) b -[MinerManager runMining]
Breakpoint 1: where = CalendarFree`-[MinerManager runMining]
...
Process 2944 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 6.1
CalendarFree`-[MinerManager runMining]:
(lldb) bt
* frame #0: 0x0000000100077fc0 CalendarFree`-[MinerManager runMining]
frame #1: 0x0000000100077dff CalendarFree`-[MinerManager init] + 79
...
frame #5: 0x0000000100077d22 CalendarFree`+[MinerManager manager] + 98
[/sourcecode]
通过检查runMining方法的反编译,我们可以看到它调用了Coinstash_XMRSTAK框架:
[sourcecode language="plain"]
void -[MinerManager runMining] {
rdx = self->_coreLimit;
r14 = [self calculateWorkingCores:rdx];
[_TtC17Coinstash_XMRSTAK9Coinstash setCPULimit:self->_cpuLimit];
r15 = [self getPort];
r12 = [self algorythm];
[self getSlotMemoryMode];
[_TtC17Coinstash_XMRSTAK9Coinstash startMiningWithPort:r15 password:self->_token
coreCount:r14 slowMemory:self->_slowMemoryMode currency:r12];
NSLog(@"Miner: Start. core %d; cpuLimit %d; port %d; slowMemory %@; currency: %@;
token: %@", r14, self->_cpuLimit, r15, self->_slowMemoryMode, r12, self->_token);
[self startMiningCheckLoop];
return;
}
[/sourcecode]
由于该框架是用Swift()编写的,所以该方法名被破坏了。它的demangled名字是:
+[Coinstash_XMRSTAK.Coinstash startMiningWithPort:password:coreCount:slowMemory:currency:]。
在该方法上设置一个断点,我们可以转储传入的参数:
[sourcecode language="plain"]
$ lldb /Applications/CalendarFree.app/
...
Process 1811 stopped
stop reason = breakpoint 1.1
+[Coinstash_XMRSTAK.Coinstash startMiningWithPort:password:coreCount:slowMemory:currency:]
(lldb) po $rdi
Coinstash_XMRSTAK.Coinstash
(lldb) x/s $rsi
0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"
(lldb) po $rdx
7777
(lldb) po $rcx
qbix:greg@qbix.com
[/sourcecode]
因为逆转Swift比较令人讨厌,而本文已经有了足够多的反编译代码片段,
我们直接允许调试器在+[Coinstash_XMRSTAK.Coinstash startMiningWithPort …] 方法上执行。
通过我的ProcInfo过程监视器观察(外部)过程事件:
[sourcecode language="plain"]
# ./procInfo
[NEW EVENT: PROCESS START ('xmr-stak')]
pid: 1899
path: /Applications/CalendarFree.app/Contents/Frameworks/Coinstash_XMRSTAK.framework/
Versions/A/Resources/xmr-stak
args: (
"/Applications/CalendarFree.app/Contents/Frameworks/Coinstash_XMRSTAK.framework
/Resources/xmr-stak",
"--currency",
monero,
"-o",
"pool.graft.hashvault.pro:7777",
"-u",
G81Jc3KHStAWJjjBGzZKCvEnwCeRZrHkrUKji9NSDLtJ6Evhhj43DYP7dMrYczz5KYj...,
"-p",
"qbix:greg@qbix.com",
"--config",
"/var/folders/qm/mxjk9mls58d9ycd5c1vjt9w40000gn/T/com.qbix.Calendar/
com.beachio.coinstash/config.txt",
"--cpu",
"/var/folders/qm/mxjk9mls58d9ycd5c1vjt9w40000gn/T/com.qbix.Calendar/
com.beachio.coinstash/cpu.txt",
"--amd",
"/var/folders/qm/mxjk9mls58d9ycd5c1vjt9w40000gn/T/com.qbix.Calendar/
com.beachio.coinstash/amd.txt",
...
)
[/sourcecode]
果然存在挖矿程序:xmr-stak!从其命令行参数中,可以清楚地看到它正在为某一个网站greg@qbix.com挖掘monero(XMR)。对xmr-stak谷歌一下,我们发现了Coinsta.sh,它提供了“将你的备用cpu投放到加密货币挖矿”的服务。
在他们的论坛上发布的一篇文章提供了更多关于他们的“macOS新的加密挖矿应用程序”xmr-stak的信息。如果我们下载他们的免费“Coinstash应用”,它就包含“相同”的xmr-stak二进制文件:
回到我们的VM。看起来像是在挖矿:
我想知道它到底在做什么,幸运的是“Calendar”调用runMiningPingReport方法生成一个关于挖矿操作的报告,并将其发送至calendar.qbix.com/api/mining。
在-GTMHTTPFetcher initWithRequest:方法上设置一个断点,允许我们查看将要上载的报告数据:
[sourcecode language="plain"]
$ lldb /Applications/CalendarFree.app/
Current executable set to '/Applications/CalendarFree.app/' (x86_64).
(lldb) b -[GTMHTTPFetcher initWithRequest:]
Breakpoint 1: where = CalendarFree`-[GTMHTTPFetcher initWithRequest:]
Process 2825 stopped
* thread #17, queue = 'com.apple.root.default-qos', stop reason = breakpoint 1.1
CalendarFree`-[GTMHTTPFetcher initWithRequest:]:
(lldb) po $rdx
- 上一篇:高清无码!比鬼片还刺激!且听“诡娃”远控的
- 下一篇:记一次linux(被)入侵