安全圈 | 专注于最新网络信息安全讯息新闻

首页

hacking team mac osx 64比特shellcode技術分析

作者 landy 时间 2020-02-29
all

在此次洩露的Flash 0Day的利用程式碼都包含針對Mac OSX 64比特系統的利用,以往在網上看到的大多是windows平臺32/64比特的利用程式碼,很少有Mac版的flash利用程式碼曝光,剛好可以借機分析學習下軍用級武器的寫法。

【源碼分析】

下麵以第1個HackingTeam洩露的CVE-2015-5119Flash 0day漏洞中的利用程式碼為例:

1、內在中暴力蒐索Mach-o檔案頭magic標記0xfeedfacf(類似蒐索windows平臺下的PE頭MZ標記),它代表64比特程式的意思,也是MacOS X上可執行文件的開頭。

可以用otool或者MachOView查看Mach-o可執行檔案格式:

2、在Mach-o檔案頭之後是加載命令(LoadCommand)區域,接下來程式蒐索用於映射檔案中的段到行程記憶體空間的LC_SEGMENT_64加載命令,遍歷每個被加載的段,找到包含段標記為S_SYMBOL_STUBS(代表包含符號資訊)和S_ATTR_PURE_INSTRUCTIONS(代表包含機器碼)的段,然後獲取段地址Address、偏移量Offset、Size、Stubs Size、Stubs數量以及Indirect Sym Index(間接符號錶索引值)。

3、找到_LINKEDIT段,從中獲取相應的虛擬地址和檔案偏移,然後互减得到兩者之間的偏移量。

4、獲取LC_SYMTAB加載命令的相關資訊,該命令用於指定檔案所使用的符號錶,找到後分別獲取符號錶偏移量、符號數、字串錶偏移量、字串錶大小

5、獲取LC_DYSYMTAB加載命令的相關資訊,該命令用於指定動態連結程式庫所使用的符號錶,找到後獲取間接符號錶偏移量

6、將前面獲取的符號錶地址、間接符號錶地址和字串錶地址分別加上第3步獲取的偏移量

7、從前面獲取的3個值,去字串錶中索引mprotect函數,找到其對應的記憶體位址,以利用它去真正的shellcode部分賦予可執行許可權(這部分與Windows平臺上的程式碼基本一致),以繞過DEP的保護。

8、前面都是為執行接下來x64 shellcode程式碼而作的準備,由於vfork所創建的子行程與父行程共亯數據,囙此可用於檢測是否位於沙箱中,若在沙箱中vfrok會執行失效,進而退出執行。

9、通過為syscall指定調用號來調用execve函數,以執行“/Applications/Calulator.app/Contents/MacOS/Calculator”打開小算盘,然後再調用exit退出子行程。

10、設定返回值為int atom類型,左移3比特是為了對最後3 bits清零,因為它代表著atom類型,再加6是為了設定為int atom類型,因為shellcode相當於自定義函數,它是用於替換payload的JIT函數去執行的,最後彈出棧數據,以維持棧平衡。

【總結】

    此次的Mac OSX 64比特平臺的利用,主要還是先根據Maco-o檔案頭標記找到flash模塊,然後去索引符號錶、間接符號錶和字串錶,進而找到mprotect函數的地址,將shellcode區塊設定為可執行許可權。真正用於彈出小算盘的shellcode程式碼相對比較簡單,向syscall傳遞調用號來執行execve函數,進而打開指定的程式檔案Calculator,實現最終的任意程式碼執行。