精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在macOS內存中運行可執行文件

安全 網站安全
雖然Windows是最常見的目標,但是對于macOS(以前稱為OS X),并不缺乏新興的技術。在這篇文章中,我將討論一些在macOS(直到Sierra)上執行多級攻擊載荷的技術。

作為一名安全研究員,我一直在研究惡意軟件攻擊設備時使用到的新興技術。雖然Windows是最常見的目標,但是對于macOS(以前稱為OS X),并不缺乏新興的技術。在這篇文章中,我將討論一些在macOS(直到Sierra)上執行多級攻擊載荷的技術。

用于執行多級攻擊載荷的常見技術是擁有一個可以從內存中載入可執行文件而不是從計算硬盤上載入的初始攻擊載荷,它可以降低被檢測的風險。一般來說,當嘗試從macOS的內存中加載代碼時,第一步是找到動態加載器dyld,以便于加載第二級攻擊載荷。一旦你在內存中找到dyld,你可以解析它的Mach-O頭來定位函數NSCreateObjectFileImageFromMemory(創建一個NSObjectFileImage)和NSLinkModule(鏈接庫到當前進程和運行構造函數)來加載可執行文件。

深入了解dyld

你在MacOS執行一個動態鏈接的二進制文件時,內核會做的第一件事就是從二進制Mach-O的加載命令中檢索動態加載器的位置,并加載它。因此,dyld是第一個被加載到進程的地址空間的Mach-O。內核通過二進制文件的vmaddr和ASLR slide來確定dyld的候選地址。然后內核將Mach-O的sections映射到第一個可用未分配的內存地址中,內存地址要大于或等于到候選地址。

如下所示,在Sierra之前的macOS版本中,dyld的vmaddr是0x7fff5fc00000(DYLD_BASE):

MacOS的10.10.5(Yosemite)

  1. $ otool -l /usr/lib/dyldx 
  2. /usr/lib/dyld: 
  3. Load command 0 
  4.       cmd LC_SEGMENT_64 
  5.     cmdsize 552 
  6.     segname __TEXT 
  7.       vmaddr 0x00007fff5fc00000 
  8. ... 

在內存中定位dyld是很容易的; 從DYLD_BASE開始搜索,找到的第一個Mach-O映像就是dyld。然后可以通過內存中的dyld地址減去DYLD_BASE來計算用于dyld的ASLR slide。確定ASLR slide對于解析符號很重要,因為符號表的nlist_64結構中的n_value包含需要被偏移的基地址。

在Sierra中,dyld變成了動態映射(vmaddr為0):

macOS 10.12.2 (Sierra)

  1. $ otool -l /usr/lib/dyld 
  2. /usr/lib/dyld: 
  3. Mach header 
  4. magic cputype cpusubtype caps    filetype ncmds sizeofcmds      flags 
  5.   0xfeedfacf 16777223          3  0x00           7    14       1696 0x00000085 
  6. Load command 0 
  7.     cmd LC_SEGMENT_64 
  8.   cmdsize 552 
  9.   segname __TEXT 
  10.     vmaddr 0x0000000000000000 
  11. ... 

這意味著,現在,在內存中已加載的可執行映像相鄰處可以找到dyld,而不是DYLD_BASE中的第一個Mach-O映像。因為沒有固定的基地址,我們現在不能再輕松計算ASLR slide。幸運的是,我們不再關心這個值,因為符號表的nlist_64結構的n_value現在包含了從dyld開始的偏移; 一旦你在內存中找到dyld的地址,你可以解析它的符號。我們將在下面的解析符號部分詳細討論這一點。

dyld在內存中的位置

那么我們如何在內存中搜索dyld呢?在地址空間中搜索特定映像的正確方法是遞歸地使用vm_region。然而,通過這種方法產生的shellcode是冗長和繁瑣的。幸運的是,有一個選擇; 如果我們發現一個系統調用,它接受一個指針并根據地址是否被映射返回不同的返回值,我們可以使用它。chmod系統調用就是這樣。

如果路徑指針在進程分配的地址空間的之外,chmod返回EFAULT; 如果路徑不存在,則返回ENOENT。因此,我們可以使用以下函數來找到dyld:

  1. int find_macho(unsigned long addr, unsigned long *base) { 
  2.     *base = 0; 
  3.     while(1) { 
  4.         chmod((char *)addr, 0777); 
  5.         if(errno == 2 && /*ENOENT*/ 
  6.           ((int *)addr)[0] == 0xfeedfacf /*MH_MAGIC_64*/) { 
  7.             *base = addr; 
  8.             return 0; 
  9.         }  
  10.         addr += 0x1000; 
  11.     }   
  12.     return 1; 

在Sierra之前的macOS版本中,可以這樣做:

  1. unsigned long dyld; 
  2. if(find_macho(DYLD_START, &dyld)) return 

在Sierra,我們必須調用find_macho兩次:一次找到已加載的二進制,一次找到dyld:

  1. unsigned long binary, dyld; 
  2. if(find_macho(EXECUTABLE_BASE_ADDR, &binary)) return 1; 
  3. if(find_macho(binary + 0x1000, &dyld)) return 1; 

解析符號

找到dyld的字符串表可以通過解析其加載命令,并使用以下代碼(基址是內存中的dyld地址)查找符號表以及內存中的linkedit和text segments 來完成:

  1. lc = (struct load_command *)(base + sizeof(struct mach_header_64)); 
  2. for(int i=0; i<((struct mach_header_64 *)base)->ncmds; i++) { 
  3.     if(lc->cmd == 0x2/*LC_SYMTAB*/) { 
  4.         symtab = (struct symtab_command *)lc; 
  5.     } else if(lc->cmd == 0x19/*LC_SEGMENT_64*/) { 
  6.         switch(*((unsigned int *)&sc->segname[2])) { //skip __ 
  7.         case 0x4b4e494c:    //LINK 
  8.             linkedit = (struct segment_command_64 *)lc; 
  9.             break; 
  10.         case 0x54584554:    //TEXT 
  11.             text = (struct segment_command_64 *)lc; 
  12.             break;  
  13. }  
  14. }  
  15. lc = (struct load_command *)((unsigned long)lc + lc->cmdsize); 

上面的代碼略過內存中的mach_header_64結構,然后遍歷各種加載命令結構。我們保存LC_SYMTAB的地址和與__LINKEDIT和__TEXT段相關的兩個LC_SEGMENT_64命令。使用指向這些結構體的指針,我們現在可以計算內存中的字符串表的地址:

  1. unsigned long file_slide = linkedit-> vmaddr - text-> vmaddr - linkedit-> fileoff;  
  2. strtab =(char *)(base + file_slide + symtab-> stroff); 

要遍歷字符串表,我們需要遍歷符號表的nlist_64結構。每個nlist_64結構體包含一個到字符串表(n_un.n_strx)的偏移量:

  1. char * name = strtab + nl [i] .n_un.n_strx; 

并不是使用傳統的哈希算法來匹配字符串表中的符號名,我寫了一個幫助腳本(symbolyzer.py)生成唯一offset/ int對,通過以下方式識別:

  1. $ nm / usr / lib / dyld | cut -d“”-f3 | 排序| uniq | 蟒蛇symbolyzer.py 
  2. $ nm /usr/lib/dyld | cut -d" " -f3 | sort | uniq | python symbolyzer.py 
  3. ... 
  4. _NSCreateObjectFileImageFromFile[25] = 0x466d6f72 
  5. ... 

symbolyzer.py的代碼(https://github.com/CylanceVulnResearch/osx_runbin/blob/master/symbolyzer.py)可以在GitHub上找到這里。

正如你可以看到,NSCreateFileImageFromMemory的offset / int對是25&0x466d6f72。這意味著如果我們字符串表中的給定字符串索引為25,并且它等于0x466d6f72,則我們發現了一個匹配。在我們的匹配對中包含一個邏輯終止符NULL就可以匹配所有符號字符串。

加載可執行文件

在MacOS的內存中加載代碼的最常見的方法就是在macOS bundle上調用NSCreateObjectFileImageFromMemory,隨后調用NSLinkModule,然后調用NSAddressOfSymbol來查找已知函數。 “The Mac Hacker's Handbook”中為NSLinkModule指出:“目前的實現僅限用于插件的Mach-O MH_BUNDLE類型。” dyld的頭文件進一步說明“NSObjectFileImage只能用于MH_BUNDLE文件”。經過快速證實,這是真的; 如果文件類型的mach_header_64結構不是MH_BUNDLE(0x8),NSCreateObjectFileImageFromMemory會失敗。幸運的是,使用以下兩行代碼可以很容易改變結構的文件類型:

  1. int type = ((int *)binbuf)[3]; 
  2. if(type != 0x8) ((int *)binbuf)[3] = 0x8; //change to mh_bundle type 

然后我們可以在Mach-O映象內解析NSLinkModule返回的NSModule對象來找到入口點; 在Sierra中,Mach-O映象從偏移0x48變為0x50。通過迭代該映像的加載命令,我們可以找到LC_MAIN命令并獲取入口點的偏移量。只需將此偏移量添加到Mach-O基址中即可得到入口點:

  1. unsigned long execute_base = *(unsigned long *)((unsigned long)nm + 0x50); 
  2. struct entry_point_command *epc;   
  3. if(find_epc(execute_base, &epc)) {  //loops over commands and finds LC_MAIN 
  4. fprintf(stderr, "Could not find entry point command.\n"); 
  5. goto err; 
  6. int(*main)(intchar**, char**, char**) = (int(*)(intchar**, char**, char**))(execute_base+ epc->entryoff); 
  7. char *argv[]={"test"NULL}; 
  8. int argc = 1; 
  9. char *env[] = {NULL};   
  10. char *apple[] = {NULL}; 
  11. return main(argc, argv, env, apple); 

這篇文章的所有的POC代碼(https://github.com/CylanceVulnResearch/osx_runbin)都可以在GitHub上找到。

1. http://phrack.org/issues/64/11.html

2. http://www.blackhat.com/presentations/bh-dc-09/Iozzo/BlackHat-DC-09-Iozzo-let-your-mach0-fly-whitepaper.pdf

3. https://lowlevelbits.org/parsing-mach-o-files/

4. https://www.mikeash.com/pyblog/friday-qa-2012-11-09-dyld-dynamic-linking-on-os-x.html

5. https://opensource.apple.com/source/xnu/xnu-2782.1.97/bsd/kern/kern_exec.c

6. https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man2/chmod.2.html

7. https://www.amazon.com/Mac-Hackers-Handbook-Charlie-Miller/dp/0470395362

8. https://opensource.apple.com/source/cctools/cctools-384.1/man/NSModule.3.auto.html

責任編輯:武曉燕 來源: blog.cylance.com
相關推薦

2015-02-02 11:03:12

2021-01-06 05:29:57

虛擬內存文件

2012-01-05 10:37:40

Java

2010-02-22 18:04:27

CentOS mpla

2022-05-11 14:50:34

Python解包執行文件

2021-01-12 10:10:41

shell腳本Linux命令

2021-01-08 08:06:19

腳本Shell文件

2011-08-09 10:24:19

可執行文件病毒病毒

2023-03-31 23:31:06

.go文本文件

2009-06-20 09:21:37

UNIXLINUX

2024-05-06 00:00:00

Go文件瘦身代碼

2024-08-12 16:42:50

二進制工具系統

2009-04-16 10:37:17

Javaexejar

2024-05-21 12:01:39

.NET 6開發

2023-09-04 07:14:36

2022-05-20 08:55:02

py文件exepython

2021-01-14 22:17:09

PythonLinux工具

2023-12-18 09:21:22

開發靜態編譯Linux

2009-10-28 13:03:54

2025-08-13 02:00:00

點贊
收藏

51CTO技術棧公眾號

国产精品午夜在线| 亚洲美女网站| 日韩三级电影网址| 你真棒插曲来救救我在线观看| 性一交一乱一色一视频麻豆| 一区二区亚洲| 伊人久久精品视频| 三级黄色片播放| 国产ktv在线视频| 久久美女艺术照精彩视频福利播放 | 欧美日韩免费在线观看| 婷婷四月色综合| 亚洲精品97久久中文字幕| 久久久久国内| 欧美精品亚州精品| 国产伦理片在线观看| 日本亚洲视频| 欧美亚洲国产怡红院影院| 国产91在线亚洲| 欧美日韩视频精品二区| 国产精一品亚洲二区在线视频| 91av在线免费观看| 东方av正在进入| 精品一区二区三区在线| 日韩女优电影在线观看| 亚洲综合色在线观看| 阿v视频在线| 亚洲欧美日韩久久精品| 日本一区二区在线视频| 国产小视频一区| 麻豆91小视频| 国产成人亚洲精品| 日韩成人免费在线观看| 一本到12不卡视频在线dvd| 亚洲人成伊人成综合网久久久| 北京富婆泄欲对白| 精品国产一区二区三区性色av| 欧美最新大片在线看| 久久久久久免费看| av免费网站在线| 国产精品色呦呦| 美女被啪啪一区二区| 性中国古装videossex| 精品一区二区国语对白| 国产成人aa精品一区在线播放| 国产无遮挡免费视频| 欧美日韩精品| 欧美成年人网站| 人人艹在线视频| 日韩欧美在线中字| 中文字幕国内精品| 免费看污片的网站| 欧美极品中文字幕| 日韩成人中文电影| 日韩成人av一区二区| av在线亚洲色图| 亚洲精品在线观看视频| 女教师高潮黄又色视频| 国产专区精品| 日韩欧美一区二区不卡| 麻豆传媒在线看| 亚洲一区二区三区在线免费 | 国产成人啪精品视频免费网| 中文字幕一区在线播放| 久久国产免费| 国产精品久久视频| 一区二区的视频| 九色porny丨国产精品| 国产在线一区二区三区| 国产日韩欧美中文字幕| 国产成人精品一区二| 国产精品毛片va一区二区三区| 好吊色一区二区| 97久久超碰国产精品| 精品乱子伦一区二区三区| 亚洲av电影一区| 久久久久国产一区二区三区四区| 日韩videos| 亚洲图片88| 一区二区高清免费观看影视大全| 97视频在线免费| 这里有精品可以观看| 色菇凉天天综合网| 看看黄色一级片| 亚洲国产视频二区| 日韩久久精品成人| 亚洲AV成人无码网站天堂久久| 天天综合网网欲色| 性亚洲最疯狂xxxx高清| 人人爽人人爽人人片av| 精品在线观看视频| 国产伦精品一区二区三区视频免费 | 成人国产二区| 欧美美女一区二区三区| 欧美久久久久久久久久久| 婷婷国产精品| www.xxxx欧美| 亚洲一区二区91| 久久亚洲精选| 91亚洲国产成人精品性色| 日本久久一级片| 国产精品乱码一区二区三区软件| 国产一区 在线播放| 欧美极度另类| 日韩一级成人av| 91中文字幕永久在线| 久久久久久久久久久9不雅视频| 欧美精品久久久久a| 91黑人精品一区二区三区| 国产黄色精品视频| 天堂精品一区二区三区| 草草影院在线| 欧美日韩高清不卡| 青青草视频成人| 欧美亚洲不卡| 国产欧美日韩最新| 日本v片在线免费观看| 亚洲啪啪综合av一区二区三区| 日本午夜激情视频| 蜜桃精品视频| 日韩在线观看你懂的| 国语对白永久免费| 粉嫩一区二区三区性色av| 伊人精品久久久久7777| 国产日韩电影| 亚洲国产小视频在线观看| 国产稀缺精品盗摄盗拍| 蜜桃久久久久久| 日本一区二区三区在线视频| 国产精品vvv| 欧美不卡一区二区| 99热精品免费| 精品一区二区久久| 一区不卡视频| 亚洲精品555| 国产亚洲免费的视频看| 日韩毛片在线播放| 成人免费观看视频| 人妻激情另类乱人伦人妻| 24小时成人在线视频| 色一情一乱一区二区| 最近中文字幕在线免费观看| 久久精品夜夜夜夜久久| 国模吧无码一区二区三区| 群体交乱之放荡娇妻一区二区 | 欧美xxx视频| 亚洲精品xxx| 国产精品500部| 97se亚洲国产综合自在线观| 人妻少妇精品久久| 好吊妞视频这里有精品| 国模极品一区二区三区| 国模私拍视频在线| 亚洲va欧美va人人爽| 亚洲欧美日本一区| 久久久久久网| 日韩欧美在线电影| aaaa欧美| 久久色免费在线视频| av av片在线看| 一区二区三区视频在线看| 日批视频免费看| 韩国一区二区三区在线观看| 国产一区二区三区黄| aa视频在线观看| 亚洲精品自拍第一页| 国产嫩bbwbbw高潮| 日本一区二区三级电影在线观看| 手机在线成人免费视频| 午夜影院欧美| 国产91精品一区二区绿帽| 黑人玩欧美人三根一起进| 亚洲精品国产精品国产自| 成人免费a视频| 欧美激情综合五月色丁香小说| www.涩涩涩| 中文字幕午夜精品一区二区三区| 国产精品久久国产三级国电话系列| 中文字幕乱码在线播放| 中文字幕亚洲色图| www.97av| 在线观看av一区二区| 精品视频全国免费看| 少妇欧美激情一区二区三区| 国产精品久久| 欧美一进一出视频| 精品一区二区三区中文字幕| 久久久久久亚洲精品中文字幕| 免费在线稳定资源站| 欧美伦理视频网站| 中文字幕在线观看免费视频| 久久精品一区二区三区四区| 污视频在线观看免费网站| 国产精品乱看| 咪咪色在线视频| 欧美性生活一级片| 国产在线观看精品| 亚洲天堂电影| 欧美成人在线免费| 国产一区二区三区不卡在线| 日韩欧美国产综合一区| 日韩免费av网站| 亚洲第一精品在线| 亚洲色图100p| 久久久精品国产99久久精品芒果| 国产成人强伦免费视频网站| 快she精品国产999| 美脚丝袜脚交一区二区| 99久久夜色精品国产亚洲狼| 欧美激情论坛| 粉嫩的18在线观看极品精品| 国产欧美一区二区三区久久| 在线看片国产福利你懂的| 久久天天躁夜夜躁狠狠躁2022| 精品久久久久一区二区三区 | 亚洲综合另类小说| 欧美福利在线视频| 久久久影院官网| 国产免费a级片| 激情综合一区二区三区| 牛夜精品久久久久久久| 亚洲免费综合| 人人干视频在线| 欧美深夜福利| 久久观看最新视频| 亚洲视频电影在线| 中文网丁香综合网| 欧美视频免费| 日本10禁啪啪无遮挡免费一区二区| 成人春色在线观看免费网站| 99久久自偷自偷国产精品不卡| 96视频在线观看欧美| 国产九九精品视频| 成人免费av电影| 国产精品扒开腿做| 小黄鸭精品aⅴ导航网站入口| 91国语精品自产拍在线观看性色 | 欧美性精品220| 亚洲黄色小说图片| 黄色成人av在线| 日韩精品无码一区二区| 午夜视黄欧洲亚洲| 亚洲国产综合久久| 亚洲成av人片一区二区三区| 激情五月少妇a| 亚洲高清中文字幕| 久久久久久久99| 欧美日韩国产中字| 99久久久无码国产精品免费蜜柚| 色婷婷久久久久swag精品| 国产黄网在线观看| 欧美伊人久久大香线蕉综合69| 成人免费一区二区三区| 欧美日韩亚洲综合一区| 国产精品视频久久久久久| 91麻豆精品国产自产在线观看一区 | 久久久一二三区| 亚洲国产一区在线观看| 成人免费看片98欧美| 日韩欧美主播在线| 制服丝袜在线一区| 欧美精品日韩一本| 国产sm主人调教女m视频| 精品捆绑美女sm三区| 五月激情丁香婷婷| 亚洲欧美日韩久久久久久| 成人激情电影在线看| 菠萝蜜影院一区二区免费| 性欧美video高清bbw| 久久久免费高清电视剧观看| 在线观看网站免费入口在线观看国内 | 午夜av成人| 亚洲自拍偷拍一区| 精品av导航| 日本一区二区三区四区高清视频| 午夜久久电影网| 日韩伦理一区二区三区av在线| 欧美日韩一区二区三区四区不卡| 久精品国产欧美| 国产欧美日韩影院| 一区二区不卡在线| 欧美日韩精品| 熟女性饥渴一区二区三区| 91视频欧美| 国内精久久久久久久久久人| 手机av在线| 国产精品丝袜一区二区三区| 国产精品777777在线播放| 国产精品对白一区二区三区| 亚洲精品无吗| 在线观看日本一区| 最新国产拍偷乱拍精品| 黄色片在线免费| 国产成人日日夜夜| 久久精品视频18| 亚洲一区二区三区视频在线| www.国产一区二区| 日韩欧美国产一二三区| 黄色影院在线播放| 欧美国产日韩中文字幕在线| 欧洲亚洲两性| 粉嫩高清一区二区三区精品视频 | 日韩不卡一区二区| 无码人妻丰满熟妇啪啪网站| 国产精品视频第一区| 粉嫩aⅴ一区二区三区| 欧美乱妇15p| 可以直接在线观看的av| 欧美黄色www| 国产精品一级在线观看| 日本一区二区三区免费看| 伊人影院久久| www激情五月| 日本一区二区视频在线观看| 人人干人人干人人干| 欧美一区二区三区色| 一广人看www在线观看免费视频| 欧美一区二区三区免费观看| 视频二区欧美| 激情五月五月婷婷| 日本成人超碰在线观看| 国产精品探花一区二区在线观看| 亚洲精品免费在线观看| 无码人妻精品一区二区三区蜜桃91| 亚洲大胆人体在线| 麻豆av在线免费观看| 亚洲自拍偷拍福利| 亚洲国产精品91| 五月婷婷丁香色| 日本一区二区三区四区| www.日韩一区| 精品无人国产偷自产在线| 999av小视频在线| 国产免费一区| 亚洲精品1区2区| 国模私拍在线观看| 亚洲成av人片在www色猫咪| 亚洲av永久无码国产精品久久 | 久久久www免费人成黑人精品| 欧美日韩免费观看一区=区三区| 亚洲小视频网站| 国产精品白丝在线| 国产女无套免费视频| 久久影院免费观看| 国产精品视频一区二区三区| 国产系列第一页| 国产成人激情av| 日韩高清精品免费观看| 亚洲福利视频二区| 精品众筹模特私拍视频| 91文字幕巨乱亚洲香蕉| 国产一区日韩欧美| 怡红院一区二区| 欧美日韩亚洲91| 国产资源在线播放| 国产精品久久久久免费a∨大胸| 首页国产精品| japan高清日本乱xxxxx| 亚洲综合免费观看高清完整版| 神马欧美一区二区| 日本成人在线一区| 精品亚洲乱码一区二区| 欧美一区二区美女| 9lporm自拍视频区在线| 九九九九九九精品| 日韩电影在线观看一区| 国产精品丝袜一区二区| 欧美mv日韩mv| 中文字幕色婷婷在线视频 | 中文视频一区| 亚洲视频 中文字幕| 狠狠色狠色综合曰曰| 大片免费播放在线视频| 成人黄色片网站| 91久久久久| 成人性生交大片免费看无遮挡aⅴ| 欧美精品tushy高清| 少女频道在线观看高清| 久久伦理网站| 韩国女主播成人在线观看| 久久久久久久久久久97| 亚洲精品视频免费| 欧美激情啪啪| 日韩黄色短视频| 久久午夜老司机| 精品国产黄色片| 538国产精品一区二区免费视频| 青青草97国产精品麻豆| 欧美午夜精品一区二区| 日本二三区不卡| 欧美色图天堂| 欧美一区三区二区在线观看| 精品影视av免费| 亚洲天堂视频网站| 欧美日本精品在线| 九九热线有精品视频99| 三级黄色片播放| 欧美视频一区二区| 成人性生交大片免费看在线播放| 涩涩涩999|