當前位置:
首頁 > 新聞 > 累覺不愛 Mac App Store 上竟然也有偷偷奴役你電腦挖礦的應用

累覺不愛 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中刪除!

使用macOS的「App Store」,我們可以安裝應用程序(注意:其應用程序包命名為CalendarFree.app)。就像在官方Mac App Store中所有的應用一樣,其簽名是有效的:

在該應用程序二進位文件上運行的字元串

(CalendarFree.app/Contents/MacOS/CalendarFree)揭示了其包含各種似乎與挖掘加密貨幣有關的字元串:

$ 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

通過jtool來轉儲Objective-C(擴充C的面向對象編程語言)類信息,我們可以看到像MinerManager(挖礦管理器)這樣的類:

$ ./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

最後使用MachOView,我們發現該應用程序與一個似乎是加密貨幣挖掘框架相關聯:Coinstash_XMRSTAK.framework。

很明顯,儘管蘋果公司聲稱要徹底審查提交給Mac App Store的所有應用程序,但這個叫做Calendar 2的應用程序擁有「隱藏」的加密貨幣挖掘能力!現在,讓我們進一步了解一下如何將你的CPU資源用於我的monero(XMR)。

一般來說,應用程序邏輯始於applicationDidFinishLaunching:委託方法。對該方法反編譯之後,我們發現了執行幾個MinerManager方法的被調用的塊:

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;

}

對[MinerManager manager]的調用將觸發一個一次分配以及一個MinerManager對象的初始化。作為初始化的一部分,它調用runMining方法:

$ 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

通過檢查runMining方法的反編譯,我們可以看到它調用了Coinstash_XMRSTAK框架:

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;

}

由於該框架是用Swift()編寫的,所以該方法名被破壞了。它的demangled名字是:

+[Coinstash_XMRSTAK.Coinstash startMiningWithPort:password:coreCount:slowMemory:currency:]。

在該方法上設置一個斷點,我們可以轉儲傳入的參數:

$ 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

因為逆轉Swift比較令人討厭,而本文已經有了足夠多的反編譯代碼片段,我們直接允許調試器在+[Coinstash_XMRSTAK.Coinstash startMiningWithPort ...] 方法上執行。通過我的ProcInfo過程監視器觀察(外部)過程事件:

# ./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",

...

)

在他們的論壇上發布的一篇文章提供了更多關於他們的「macOS新的加密挖礦應用程序」xmr-stak的信息。如果我們下載他們的免費「Coinstash應用」,它就包含「相同」的xmr-stak二進位文件:

回到我們的VM。看起來像是在挖礦:

我想知道它到底在做什麼,幸運的是「Calendar」調用runMiningPingReport方法生成一個關於挖礦操作的報告,並將其發送至calendar.qbix.com/api/mining。

在-GTMHTTPFetcher initWithRequest:方法上設置一個斷點,允許我們查看將要上載的報告數據:

$ 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

{ 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,

...

}

在我們結束之前,要進行有一個有趣的觀察。正如sharp-eyed @dogcow所指出的,「Calendar 2」應用程序實際上告訴我們,它可以利用我們cpu的空閑周期,在後台執行加密貨幣的挖掘工作:

作為允許該應用將你的box變成一個加密貨幣挖礦工的回報,該應用程序正在開放「免費獲得所有高級功能」,這是一筆公平交易嗎?也許?但是用戶顯然「不會」對此引發抗議。

蘋果公司對此會持什麼態度?我無法想像他們會對這種行為持滿意態度——即使是對應用程序內部的文檔。我猜測,即使這並不違反他們嚴格的Mac App Store「服務條款」,他們也很可能會維護受害Mac用戶的利益。但是一切都不確定!

總結

在本文中,我們分析了在官方Mac App Store上發現的「Calendar 2」。有點出人意料的是,它竟然具備秘密地將你的Mac電腦變成一個加密貨幣挖礦工的能力。

還記得蘋果公司強烈暗示Mac電腦不會感染病毒嗎?

當他們告訴我們蘋果應用商店的應用程序是「安全的」的時候,或許也用有所保留的態度來看待這個問題是比較明智的!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

你是第幾個領取的人?
五大開源OSINT工具介紹

TAG:嘶吼RoarTalk |