0x00 背景
前幾日,看了一份報告,是美國網絡安全公司bit9發布的:《2015: The Most Prolific Year for OS X Malware》
報告主要的內容就是說說2015年OS X平臺惡意軟件的情況。bit9的研究團隊進行了10周的分析研究,分析了1400個惡意軟件樣本。給出了下面這張圖,可見,2015年惡意軟件樣本數量是前5年惡意樣本數量之和的5倍。這估計要亮瞎蘋果公司的眼。Mac越來越火。也越來越不安全了。
報告指出的重點有:
現在惡意軟件的啟動方式(Persistence Mechanisms)使用傳統Unix技術的越來越少,基本沒有了。大部分惡意軟件使用OS X提供的新的啟動機制了。
感染持續增長,但是惡意軟件的復雜度卻不是太高。
主要的啟動方式有7種。
由于OS X平臺上惡意軟件多樣性不如windows平臺,所有相對的檢測方法就簡單一些,因為需要需要檢查的地方比windows平臺的要少。
0x01 啟動
接下來就來談談這啟動的事,看看是哪7種武器是黑客所喜歡的:
如上7種武器你知道幾種(大神就自動飄過)。
Launch daemons/agents
其實這兩種啟動方式可以一起介紹。啟動方式基本相同,只是有些區別而已。
這兩種方式都是蘋果官方提供的標準啟動方式。在官方手冊里面可以查詢到更詳細的介紹[link]。daemons和agents都是由launchd進程負責啟動的后臺作業。launchd是OS X系統用戶態的第一個進程。對應于其他UN*X系統中的init。負責直接或者間接的啟動系統中的其他進程。
從圖中可以看到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鍵。
將此.plist文件拷貝到/Library/LaunchAgents目錄(拷貝之后的文件擁有者為root),就可以在重啟后,自動啟動計算器。
可以使用
1sudo 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可以直接讀取文件作為輸入來配置:
如圖 用crontab加載文本persist
保存文本內容為:
*****open /Applications/Calculator.app
該配置為每分鐘執行open命令打開計算器。
上圖為文件格式,多個任務可以分多行給出,可以用#進行注釋。
還可以使用@reboot等配置來設置開機啟動。但是本人在OS X 10.10上測試開機啟動計算器沒有成功!用時間間隔來啟動時可以的。
可以用crontab參數
-l 查看當前的crontab配置。
-r 移除所有配置
-e 編輯配置
login items
login items是蘋果公司對需要開機運行的應用程序推薦的啟動方式。
有兩種使用login item的方式:
使用shard file list。
使用Service Management framework。針對sandbox性能的程序[link]。
第一種方式:
使用第一種方式啟動的login items在系統偏好設置->用戶和群組>登錄項里面可以查看并設置
在這個界面可以添加,刪除登錄項。
這些登錄項的信息都保存在~/Library/Preferences/com.apple.loginitems.plist配置文件中,每一個啟動項對應一個字典,有Alias,Name等,其中Name是NSString類型,其它是Data類型,進行了base64,所以目前可以刪除。(手工添加有文章說可以,在OS X 10.10.x中筆者暫時沒有找到方法)。
另外就是通過程序來添加:
12345LSSharedFileListRef 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,因為其創建和更新更為簡單。
下圖是一個例子:
開機啟動后系統會自動向腳本給出start作為參數。“$1” 表示傳給該腳本的第一個參數
StartService(), StopService(), RestartService()
當可執行文件接收到的參數為start,stop或者restart時,執行相對應的函數。
3,創建StartupParameters.plist
在目錄中創建該文件StartupParameters.plist是一個屬性列表。
關于plist中主要的字段
可以參考:
Binary infection
二進制感染實現駐留。
原理和windows系統下的PE文件感染一樣。修改二進制文件獲取執行權限執行自己的代碼。
因為OS X允許未簽名的二進制文件運行。所以該方法依然有效。且感染的方式多種多樣。其中最簡單的就是修改入口點了。通過修改Mach-O文件的Load Commands。添加新的segment來實現代碼的注入感染。
0x02 檢測
針對啟動項的檢測,bit9的報告針對企業和個人給出了建議。
這里給大家介紹下針對個人Mac的檢測方法。
除了手動針對啟動項的位置進行檢測外,你當然還可以用用腳本。不過推薦一個不錯的工具
https://objective-see.com/products/knockknock.html
該工具自動掃描9中啟動方式。
讀者可以利用此工具來進行一個快速的檢測。
該工具的作者還開發了一款啟動項動態監控軟件
https://objective-see.com/products/blockblock.html
可以動態的攔截啟動項的添加。大家不妨試試。
0x03 參考
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/
VB2014 paper: Methods of malware persistence on Mac OS Xhttps://www.virusbtn.com/virusbulletin/archive/2014/10/vb201410-malware-persistence-MacOSX
Levin, J. Mac OS X and iOS Internals: To the Apple’s Core. Wrox. 2012
Mac OSX的開機啟動配置 http://www.tanhao.me/talk/1287.html/
在SandBox沙盒下實現程序的開機啟動 http://www.tanhao.me/pieces/590.html/