OS X那些事---惡意軟體是如何啟動的?

wyzsk發表於2020-08-19
作者: vvun91e0n · 2015/12/23 11:13

0x00 背景


前幾日,看了一份報告,是美國網路安全公司bit9釋出的:《2015: The Most Prolific Year for OS X Malware》

報告主要的內容就是說說2015年OS X平臺惡意軟體的情況。bit9的研究團隊進行了10周的分析研究,分析了1400個惡意軟體樣本。給出了下面這張圖,可見,2015年惡意軟體樣本數量是前5年惡意樣本數量之和的5倍。這估計要亮瞎蘋果公司的眼。Mac越來越火。也越來越不安全了。

p1

報告指出的重點有:

  1. 現在惡意軟體的啟動方式(Persistence Mechanisms)使用傳統Unix技術的越來越少,基本沒有了。大部分惡意軟體使用OS X提供的新的啟動機制了。
  2. 感染持續增長,但是惡意軟體的複雜度卻不是太高。
  3. 主要的啟動方式有7種。
  4. 由於OS X平臺上惡意軟體多樣性不如windows平臺,所有相對的檢測方法就簡單一些,因為需要需要檢查的地方比windows平臺的要少。

0x01 啟動


接下來就來談談這啟動的事,看看是哪7種武器是駭客所喜歡的:

p2

如上7種武器你知道幾種(大神就自動飄過)。

Launch daemons/agents

其實這兩種啟動方式可以一起介紹。啟動方式基本相同,只是有些區別而已。

這兩種方式都是蘋果官方提供的標準啟動方式。在官方手冊裡面可以查詢到更詳細的介紹[link]。daemons和agents都是由launchd程式負責啟動的後臺作業。launchd是OS X系統使用者態的第一個程式。對應於其他UN*X系統中的init。負責直接或者間接的啟動系統中的其他程式。

p3

從圖中可以看到daemons和agents都是由launchd程式啟動的。

  • daemons:守護程式,後臺服務,通常與使用者沒有互動。由系統自動啟動,不管是否有使用者登入系統。
  • agent:代理程式,是一類特殊的守護程式,只有在使用者登入的時候才啟動。可以和使用者有互動,還可以有GUI。

建立一個daemons或agent是非常簡單的,就是建立一個普通的二進位制可執行檔案。然後將自己的屬性列表檔案(.plist)放置到daemons或agent的配置目錄中:

目錄 用途
/System/Library/LaunchDaemons 系統本身的守護程式
/Library/LaunchDaemons 第三方程式的守護程式
/System/Library/LaunchAgents 系統本身的代理程式
/Library/LaunchAgents 第三方程式的代理程式,這個目錄通常為空
~/Library/LaunchAgents 使用者自有的launch代理程式,是有對應的使用者才會執行

plist檔案的結構可以檢視手冊[link],下面給出了一個啟動計算器的plist檔案。擁有鍵值為true的RunAtLoad鍵。

p4

將此.plist檔案複製到/Library/LaunchAgents目錄(複製之後的檔案擁有者為root),就可以在重啟後,自動啟動計算器。

可以使用

#!bash
sudo plutil -lint /path/to/com.test.plist

來檢測plist檔案格式是否有問題。

plist中主要的欄位和它的含義:

  • Label 用來在launchd中的一個唯一標識,類似於每一個程式都有一個identifies一樣。
  • UserName 指定執行啟動項的使用者,只有當Launchd 作為 root 使用者執行時,此項才適用。
  • GroupName 指定執行啟動項的組,只有當Launchd 作為 root 使用者執行時,此項才適用。
  • KeepAlive 這個key值是用來控制可執行檔案是持續執行呢,還是滿足具體條件之後再啟動。預設值為false,也就是說滿足具體條件之後才啟動。當設定值為ture時,表明無條件的開啟可執行檔案,並使之保持在整個系統執行週期內。
  • RunAtLoad 標識launchd在載入完該項服務之後立即啟動路徑指定的可執行檔案。預設值為false。
  • Program 這個值用來指定程式的可執行檔案的路徑。
  • ProgramArguments 如果未指定Program時就必須指定該項,包括可執行檔案檔案和執行的引數。

Cron job

Cron job是一個隨Unix而來的啟動機制。在OS X中已經不被推薦使用。蘋果公司推薦使用launchd命令來完成計劃任務。但是OS X仍然支援Cron。那駭客們當然不會嫌棄。

Cron可以用來在設定的時刻執行一個命令或是指令碼。如果惡意軟體是python編寫的,可以直接執行python命令。

Cron服務使用crontab命令來控制。在目錄/usr/lib/cron/tabs目錄下會有對應的使用者名稱的配置檔案。當然可以直接透過命令來進行配置。具體的可以查詢手冊[link]

crontab可以直接讀取檔案作為輸入來配置:

p5 如圖 用crontab載入文字persist

儲存文字內容為:

*****open /Applications/Calculator.app

該配置為每分鐘執行open命令開啟計算器。

p6

上圖為檔案格式,多個任務可以分多行給出,可以用#進行註釋。

[email protected]在OS X 10.10上測試開機啟動計算器沒有成功!用時間間隔來啟動時可以的。

可以用crontab引數

  • -l    檢視當前的crontab配置。
  • -r    移除所有配置
  • -e    編輯配置

login items

login items是蘋果公司對需要開機執行的應用程式推薦的啟動方式。

有兩種使用login item的方式:

  1. 使用shard file list。
  2. 使用Service Management framework。針對sandbox效能的程式[link]。

第一種方式:

使用第一種方式啟動的login items在系統偏好設定->使用者和群組>登入項裡面可以檢視並設定

p7

在這個介面可以新增,刪除登入項。

這些登入項的資訊都儲存在~/Library/Preferences/com.apple.loginitems.plist配置檔案中,每一個啟動項對應一個字典,有Alias,Name等,其中Name是NSString型別,其它是Data型別,進行了base64,所以目前可以刪除。(手工新增有文章說可以,在OS X 10.10.x中筆者暫時沒有找到方法)。

另外就是透過程式來新增:

#!bash
LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);  //url為app所在的目錄 
CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath];
LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemLast, NULL, NULL, url, NULL, NULL); 
CFRelease(item);
CFRelease(loginItems);

有的惡意軟體就是利用程式碼新增login item的方式來實現自啟動的。

第二種方式:

使用login item的程式如果是用了沙盒技術就會因為許可權問題無法使用第一種方式了。必須使用Service Management Framework。要求有兩個程式:一個主程式一個helper程式。helper程式存放在主程式的Contents/Library/LoginItems目錄下。主程式在執行時呼叫SMLoginItemSetEnabled()函式來設定helper程式為自啟動程式。具體可以參考[link] [link]

注意:你的主程式必須在Application的目錄下,開機啟動的設定才會生效,否則會失敗

StartupItems

這是蘋果公司不推薦的啟動方法。但是在現在版本中還沒有失效。

一個Startup Item是一個特殊的檔案。可以在系統boot程式中得到執行。

建立過程如下:

1,建立目錄

StartupItems存放在以下兩個路徑下:

  • /System/Library/StartupItems
  • /Library/StartupItems(預設情況下是不存在的,需要自己手動建立)

2,生成執行程式或指令碼

程式或指令碼必須和目錄名一樣,可執行檔案需要獲得root許可權。

一般使用shell script,因為其建立和更新更為簡單。

下圖是一個例子:

p8

開機啟動後系統會自動向指令碼給出start作為引數。“$1” 表示傳給該指令碼的第一個引數

StartService(), StopService(), RestartService()

當可執行檔案接收到的引數為start,stop或者restart時,執行相對應的函式。

3,建立StartupParameters.plist

在目錄中建立該檔案StartupParameters.plist是一個屬性列表。

p9

關於plist中主要的欄位

可以參考:

p10

Binary infection

二進位制感染實現駐留。

原理和windows系統下的PE檔案感染一樣。修改二進位制檔案獲取執行許可權執行自己的程式碼。

因為OS X允許未簽名的二進位制檔案執行。所以該方法依然有效。且感染的方式多種多樣。其中最簡單的就是修改入口點了。透過修改Mach-O檔案的Load Commands。新增新的segment來實現程式碼的注入感染。

0x02 檢測


針對啟動項的檢測,bit9的報告針對企業和個人給出了建議。

這裡給大家介紹下針對個人Mac的檢測方法。

除了手動針對啟動項的位置進行檢測外,你當然還可以用用指令碼。不過推薦一個不錯的工具

https://objective-see.com/products/knockknock.html

該工具自動掃描9中啟動方式。

p11

讀者可以利用此工具來進行一個快速的檢測。

該工具的作者還開發了一款啟動項動態監控軟體

https://objective-see.com/products/blockblock.html

可以動態的攔截啟動項的新增。大家不妨試試。

0x03 參考


  1. 2015: The Most Prolific Year for OS X Malware
    https://www.bit9.com/resources/research-reports/2015-the-most-prolific-year-for-os-x-malware/
  2. VB2014 paper: Methods of malware persistence on Mac OS X https://www.virusbtn.com/virusbulletin/archive/2014/10/vb201410-malware-persistence-MacOSX
  3. Levin, J. Mac OS X and iOS Internals: To the Apple’s Core. Wrox. 2012
  4. Mac OSX的開機啟動配置 http://www.tanhao.me/talk/1287.html/
  5. 在SandBox沙盒下實現程式的開機啟動 http://www.tanhao.me/pieces/590.html/
  6. 蘋果手冊https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章