黑客組織「海蓮花」再活躍 打造全新macOS後門
前言
趨勢科技於上周三(4月4號)宣稱,一種新型的MacOS後門程序(目前趨勢科技已將其定義為OSX_OCEANLOTUS.D )正被黑客組織「海蓮花」所使用,而其攻擊目標是那些安裝有Perl語言編程軟體的Mac用戶。
傳播過程分析
海蓮花(OceanLotus,又名Cobalt Kitty、SeaLotus、APT-C-00和APT 32)是高度組織化的、專業化的境外國家級黑客組織。自2012年4月起針對中國政府的海事機構、海域建設部門、科研院所和航運企業,展開了精密組織的網路攻擊,很明顯這是一個有國外政府支持的APT(高級持續性威脅)行動。
趨勢科技的研究人員認為,這個全新macOS後門是「海蓮花」所使用的最新的攻擊工具。
MacOS後門是在一個惡意的Word文檔中發現的,可能是通過電子郵件發送的。這意味著,新的MacOS後門程序是通過釣魚電子郵件中的惡意Word文檔進行傳播的。惡意Word文檔會偽裝成文件名為「2018-PHI?U GHI DANH THAM D? T?NH H?I HMDC 2018.doc」的文檔,翻譯過來也就是「2018年HMDC大會登記表」,而HMDC是一個在越南宣傳民族獨立和民主的組織。
惡意文檔攻擊時的截圖
在收件人打開該文檔時,它會建議收件人啟用該文檔的宏。而這個惡意宏則採用了十進位ASCII代碼來逐個字元地進行混淆,以逃避各種殺毒軟體的檢測。這種字元串的混淆加大逆向分析技術的難度,會讓該惡意軟體看起來不那麼可疑,如下圖所示。
文檔混淆後的代碼片段
在逆向分析之後,研究人員可以看到惡意有效載荷是用Perl編程語言編寫的。它從會從Word文檔中提取theme0.xml文件,theme0.xml文件是一個帶有0xFEEDFACE簽名的Mach-O 32位可執行文件,用於作為OSX_OCEANLOTUS.D後門程序的滴管組件(dropper),不過theme0.xml在執行之前會被解壓到 /tmp/system/word/theme/syslogd。
逆向分析之後的Perl有效載荷
滴管組件分析
滴管組件用於將後門安裝到受感染的系統中,並建立其持久性攻擊機制。
滴管組件的主要功能
滴管組件中的所有字元串以及後門本身都使用了硬編碼的RSA256密鑰進行加密。其中,加密字元串以兩種形式存在:使用RSA256加密的字元串,以及混合使用自定義base64編碼和RSA256加密的字元串。
硬編碼的RSA256密鑰會顯示前20個字元
使用setStartup()方法運行後,滴管組件會首先檢查它是否以ROOT許可權運行。因為只有這樣,GET_PROCESSPATH和GET_PROCESSNAME方法才會對硬編碼路徑和進程名稱進行解密,並安裝最終的後門程序。所以總結起來就是:
·對於有ROOT許可權運行的設備來說:
1.硬編碼路徑是 /Library/CoreMediaIO/Plug-Ins/FCP-DAL/iOSScreenCapture.plugin/Contents/Resources/;
2.進程名稱是screenassistantd
·對於沒有以ROOT許可權運行的設備來說:
1.硬編碼路徑是 ~/Library/Spelling/;
2.進程名稱是spellagentd;
隨後,在實現了Loader::installLoader方法後,惡意軟體就會讀取硬編碼的64位Mach-O可執行文件(magic value 0xFEEDFACF),並寫入之前確定的路徑和文件。
滴管組件安裝後門後,會將其屬性設置為「隱藏」,並設置一個隨機文件日期和時間
如上所示,當滴管組件安裝後門程序時,它會將其屬性設置為「hidden(隱藏)」 ,並使用touch命令將文件創建日期和時間設置為隨機值,touch命令為 touch –t YYMMDDMM 「/path/filename」 > /dev/null,此時訪問許可權將被更改為0x1ed = 755,這等於u=rwx,go=rx。
Mach-O可執行文件的隨機值0xFEEDFACF(64位)
用GET_LAUNCHNAME和GET_LABELNAME方法將為root用戶(com.apple.screen.assistantd.plist)和普通用戶(com.apple.spell.agent.plist)返回屬性列表「.plist」的硬編碼名稱。
然後,滴管組件將在/Library/LaunchDaemons/或~/Library/LaunchAgents/文件夾中創建持久文件。當操作系統啟動時,RunAtLoad將命令launchd來運行守護進程,而KeepAlive將命令啟動以使進程無限期地運行。這個持久性文件也被設置為隱藏著隨機生成的文件日期和時間。
具有持久性設置的屬性列表
/launchctl load /Library/LaunchDaemons/filename.plist或 /dev/nul or launchctl load ~/Library/LaunchAgents/ filename.plist > /dev/nul 將命令操作系統在登錄時啟動已刪除的後門文件。在該過程結束時,滴管組件會自行刪除該過程。
後門分析
後門程序包含兩個主要函數infoClient和runHandle,這兩個函數所實現的功能是不同的,infoClient負責收集用戶的設備系統信息,並將這些信息提交給命令和控制(C&C)伺服器以及接收額外的C&C通信信息,而runHandle則負責後門功能。
後門的主要功能
infoClient在HandlePP類中填充的變數:
屬於HandlePP類的變數列表
clientID是來自環境變數的MD5哈希,而strClientID是clientID的十六進位表示。下面的所有字元串都是通過AES256和base64編碼加密的。HandlePP::getClientID方法使用的是以下環境變數:
序列號
硬體UUID
MAC地址
隨機生成的UUID
對於初始信息包來說,後門也會收集以下信息。
操作系統版本
運行getpwuid ->pw_name, scutil - - -get ComputerName, uname - m將分別提供以下返回值:
1.Mac OSX 10.12;
2.System Administrator;
3.』s iMac;
4.x86_64;
所有這些數據在發送到C&C伺服器之前都會被加密和加密,詳細過程如下所述。
1.擾碼
擾碼就是作有規律的隨機化處理後的信碼,類解析器的方法有多種,每個變數類型的解析方法各不同,比如 Parser::inBytes, Parser::inByte, Parser::inString以及 Parser::inInt.。
Parser :: inBytes方法
如果clientID等於下面的位元組序列B4 B4 B1 47 BC 5282873 1F 1A 01 6B FA 72 C0 73,那麼這個擾碼的版本就是使用第三個參數(0x10)計算的,它被當做一個DWORD來處理。每4個位元組都與它異或,如下面的例子所示。
Parser :: inByte方法
當擾碼一個位元組時,擾碼器首先確定位元組值是奇數還是偶數。如果該值是奇數,則將位元組加上一個隨機生成的位元組添加到數組中。如果該值是偶數的情況,首先添加隨機生成的位元組,然後添加位元組。在上面的例子中,第三個參數是"1"= 0x31,這是一個奇數。這意味著它將位元組"1"和一個隨機生成的位元組添加到最終的擾碼陣列。
Parser :: inString方法
當擾碼字元串時,擾碼器會產生一個5位元組長的序列。首先,它生成一個隨機位元組,然後是3個零位元組,1個隨機位元組,最後是一個位元組長度的字元串。假設研究人員要打亂字元串" Mac OSX 10.12。則它的長度是13 = 0x0d,兩個隨機位元組是0xf3和0x92。最後的5位元組序列看起來就像F3 00 00 92 0D,而原來的字元串則與5位元組序列異或。
擾碼Mac OSX 10.12
2.加密
加密的位元組序列會被傳遞給Packet::Packet類的構造函數中,該類會創建一個隨機的AES256密鑰,並使用這個密鑰對緩衝區進行加密。
3.對加密密鑰編碼
為了使C&C伺服器能夠解密加密數據,隨機生成的AES256密鑰必須連同加密數據一起包含在數據包中。然而,這個密鑰也是通過異或操作XOR 0x13進行擾碼的,隨後對每個位元組應用ROL 6操作。
在輸出數據包中對AES256密鑰進行擾碼的函數
以下是在擾碼和加密過程中的一些屏幕截圖:
灰色部分的位元組表示已加密的計算機信息
隨機生成AES256密鑰
擾碼的AES256密鑰(0xC1異或0x13 = 0xD2,0xD2 ROL 6 = 0xB4等)
用AES256密鑰加密的計算機信息
發送到C&C伺服器的最終有效載荷的屏幕截圖,擾碼的AES256密鑰標記為綠色,而加密的計算機信息標記為紅色,其他位元組只是隨機生成的位元組
當後門收到來自C&C伺服器的響應時,最終的有效載荷需要以類似的方式通過解密和擾碼來進行解碼。Packet::getData 負責解密接收到的載荷,而Converter::outString 負責對結果進行解擾。
來自C&C伺服器的接收數據包括以下信息:
1.HandlePP::urlRequest (/appleauth/static/cssj/N252394295/widget/auth/app.css);
2.HandlePP::keyDecrypt;
3.STRINGDATA::BROWSER_SESSION_ID (m_pixel_ratio);
4.STRINGDATA::RESOURCE_ID;
這些數據稍後將在C&C通信中被用到,如下面的Wireshark截圖所示。
交換系統數據包信息後與C&C伺服器的通信過程
與此同時,負責後門功能的runHandle將使用以下後門命令調用requestServer方法(每個命令都有一個位元組長的代碼,並由Packet::getCommand提取):
getCommand方法
下圖顯示了幾個可能的命令代碼中的兩個示例,這兩個示例,都創建一個線程,每個線程負責下載和執行文件,或者在終端中運行一個命令行程序。
用於下載和執行的命令,以及在終端中運行一個命令
用於上傳和下載文件的命令
支持的命令及其各自的代碼
總結
雖然針對Mac設備的惡意攻擊並不像其他系統那樣常見,但這一新的MacOS後門的發現可能是通過網路釣魚郵件發送的,這意味著每個用戶都可能通過網路釣魚的方式被攻擊。
IoCs
※如何清除Windows中的RDP連接歷史記錄
※密碼竊取軟體AGENT TESLA的傳播渠道分析
TAG:嘶吼RoarTalk |