<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/11370

            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是非常簡單的,就是創建一個普通的二進制可執行文件。然后將自己的屬性列表文件(.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中主要的字段和它的含義:

            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參數

            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存放在以下兩個路徑下:

            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

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线