精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品人人做人人爽| 中文字幕av一区中文字幕天堂| 日本免费成人网| 天堂网av2014| 日本欧美韩国一区三区| 久久大大胆人体| 亚洲国产综合视频| 成人国产激情在线| 亚洲一二三四在线| 日韩精品久久久毛片一区二区| 国产精品久久久久久久一区二区| 99香蕉国产精品偷在线观看| 日韩在线小视频| 亚洲乱码国产乱码精品精大量| 日韩成人在线一区| 欧美午夜久久久| 2021国产视频| 999国产在线视频| 成人免费视频一区二区| 国产精品一区二区三区免费视频 | 日本午夜在线亚洲.国产| 自拍偷拍第9页| 精品国产精品| 日韩成人中文字幕| 亚洲成人激情小说| 欧美在线一级| 色国产精品一区在线观看| 大荫蒂性生交片| 超碰在线caoporn| 亚洲国产精品精华液ab| 久久亚洲免费| 天天干,夜夜操| 国产美女娇喘av呻吟久久| 日本一区二区三区四区视频| 久久精品欧美一区二区| 日韩aaaa| 欧美一级二级三级蜜桃| 99热一区二区| 视频二区不卡| 精品国产31久久久久久| www婷婷av久久久影片| 北条麻妃在线| 久久免费精品国产久精品久久久久| 91九色蝌蚪国产| 中文字幕xxxx| 亚洲欧美网站| 久久久久一本一区二区青青蜜月| 韩国一级黄色录像| 激情婷婷综合| 亚洲天堂av在线免费观看| 91视频在线免费| 9999精品视频| 欧美女孩性生活视频| aⅴ在线免费观看| 欧美巨大丰满猛性社交| 亚洲国产日韩av| 青青视频免费在线观看| 麻豆传媒在线免费看| 国产日韩欧美不卡在线| 欧美日韩精品一区| 青青青免费视频在线2| 成人中文字幕在线| 成人在线观看av| 精品人妻无码一区二区三区蜜桃一| 美女视频黄久久| 国产成人综合亚洲| 在线观看国产区| 日韩精品成人一区二区在线| 992tv在线成人免费观看| 国产在线拍揄自揄拍| 国产精品大片| 久久乐国产精品| 久久久久成人网站| 亚洲在线黄色| 日韩av快播网址| www.国产com| 久久激情综合| 国产成人精品在线| 中文字幕+乱码+中文| 免费看黄色91| 国产伦精品免费视频| 一级做a爱片性色毛片| 精品一区二区av| 91热福利电影| 亚洲精品福利网站| 99riav一区二区三区| 欧美日韩精品久久| 91高清在线| 亚洲色图一区二区| 日韩美女爱爱视频| 少妇在线看www| 欧美日韩在线第一页| 人妻有码中文字幕| 国产精品成人国产| 91精品国产免费| 在线观看一区二区三区四区| 日韩av字幕| 亚洲色图五月天| 很污很黄的网站| 亚洲天堂偷拍| 日韩美女视频免费在线观看| 136福利视频导航| 国产成人在线影院| 免费观看成人高| 免费观看成人高潮| 午夜精品免费在线| 爱情岛论坛成人| 日韩在线视频一区二区三区| 日韩精品中文字| 国产精品一区二区亚洲| 雨宫琴音一区二区在线| 青青草精品毛片| 成人黄色免费视频| 国产午夜精品在线观看| 老司机午夜免费福利视频| 成人av观看| 日韩欧美国产成人一区二区| 成年人在线观看av| 888久久久| 秋霞成人午夜鲁丝一区二区三区| 91黄色在线视频| 久久综合色之久久综合| 日本一本草久p| 男女羞羞在线观看| 日韩欧美不卡在线观看视频| 一级片视频免费看| 亚洲视频久久| 91九色视频导航| 日韩中文字幕免费观看| 中文字幕亚洲综合久久菠萝蜜| 极品美女扒开粉嫩小泬| 国产精品亚洲一区二区在线观看| 亚洲毛片在线观看| 久久亚洲AV无码| 韩国视频一区二区| 九色综合日本| 99爱在线视频| 精品国产亚洲一区二区三区在线观看| 九九九视频在线观看| 亚洲视频二区| 国产麻豆一区二区三区在线观看| 拍真实国产伦偷精品| 日本道在线观看一区二区| 国产视频精品视频| 午夜天堂精品久久久久| 国产欧美日韩视频| 伊是香蕉大人久久| 肉大捧一出免费观看网站在线播放| av在线不卡免费| 自拍亚洲欧美老师丝袜| 精品人妻久久久久一区二区三区 | 中文字幕一区二区三区在线播放 | 精品一区二区三区免费毛片爱 | 天天干天天舔天天射| 综合久久久久综合| 日本xxxx黄色| 日韩女优在线观看| 国产精品草草| 91精品视频在线看| 中文字幕在线播放| 在线视频一区二区免费| 人妻少妇偷人精品久久久任期| 日本一区二区高清不卡| 欧洲日韩成人av| 自拍偷拍亚洲欧美日韩| 黄色一级在线视频| a看欧美黄色女同性恋| 欧美成人精品在线观看| 99久久久国产精品无码网爆| 中文字幕一区二区三区不卡在线| 亚洲欧美久久久久| 99视频只有精品| 国产精品超碰| 日韩中文字幕av| 羞羞色院91蜜桃| 国产午夜精品理论片a级大结局| 国产二区视频在线| 第一区第二区在线| 欧美日本亚洲视频| 国产精品亚洲不卡a| 福利视频在线看| 色哟哟一区二区在线观看| a毛片毛片av永久免费| 亚洲欧美日韩视频二区| 日韩欧美亚洲日产国| 欧美日韩va| 欧美巨乳美女视频| 视频二区在线播放| 成人精品电影在线| 亚洲女人天堂av| 亚洲另类在线观看| 国产清纯白嫩初高生在线观看91 | 成人小视频免费在线观看| 亚洲五码在线观看视频| 91综合精品国产丝袜长腿久久| 久久久免费观看视频| 欧美美乳在线| 欧美狂野另类xxxxoooo| 国产亚洲欧美精品久久久www| 成人app下载| 99视频在线免费| 91精品在线观看国产| 国产精品一区二区不卡视频| 日本综合字幕| 美女精品视频一区| 日韩在线无毛| 欧美一区二区三区婷婷月色| 免费观看一区二区三区毛片| 国产精品三级视频| 人妖粗暴刺激videos呻吟| 日韩成人午夜精品| 国产色一区二区三区| 三级电影一区| 国模精品一区二区三区| 国偷自产一区二区免费视频| 最近2019中文字幕第三页视频| a天堂视频在线| 欧美性69xxxx肥| 豆国产97在线 | 亚洲| 日本一区二区三区dvd视频在线| 日本中文字幕有码| 蜜臀久久99精品久久久久久9| 国产成a人亚洲精v品在线观看| 黄色不卡一区| 国产综合色一区二区三区| 天天综合在线观看| 亲子乱一区二区三区电影| 青春草在线视频| 中文字幕久久久| 天堂а√在线8种子蜜桃视频 | 成人亚洲视频在线观看| 欧美日韩少妇| 黄瓜视频免费观看在线观看www | 91精品国产91久久久久久最新毛片 | 日韩高清欧美高清| www.久久精品.com| 欧美日韩精品一区二区天天拍小说| 久草网视频在线观看| 亚洲欧洲成人av每日更新| 成人精品在线观看视频| 国产91精品精华液一区二区三区| 潘金莲激情呻吟欲求不满视频| 久久久久在线| 337p粉嫩大胆噜噜噜鲁| 亚洲无毛电影| 佐佐木明希av| 一区二区三区四区在线观看国产日韩| 日韩免费av电影| 伊人精品一区| 免费成人在线观看av| 欧美日韩导航| 久久国产日韩欧美| 国内精品麻豆美女在线播放视频| 91国产在线免费观看| 日日夜夜亚洲精品| 国产狼人综合免费视频| 久久av影院| 成人激情在线播放| 成人久久精品| 国产精品美女网站| 巨胸喷奶水www久久久免费动漫| 国产精品高潮呻吟久久av黑人| 99热免费精品在线观看| 欧美日韩亚洲综合一区二区三区激情在线| 午夜免费欧美电影| av一区二区在线看| 亚洲午夜精品| 99在线热播| 亚洲视频一起| 国产精品麻豆免费版| 爱高潮www亚洲精品| 国产精品日韩一区二区三区| 蜜桃视频最新网址| 亚洲第一网站| 精品国偷自产一区二区三区| 欧美在线免费一级片| 久久久综合免费视频| 超鹏97在线| 日韩在线观看免费高清| 国产午夜精品久久久久免费视| 久久久精品国产一区二区| 国产cdts系列另类在线观看| 国产一区二区精品丝袜| 欧美一区二区三区在线观看免费| 亚洲免费中文字幕| 成年人在线看| 久久婷婷国产麻豆91天堂| 久久一卡二卡| 国产97在线观看| 国产视频一区二区在线播放| 国产精品毛片va一区二区三区| 精品亚洲免a| 清纯唯美一区二区三区| 欧美电影免费观看高清| 日本国产中文字幕| 亚洲一区免费| 国产女人被狂躁到高潮小说| 美国十次了思思久久精品导航 | 中文字幕在线一区| 欧美日韩在线视频免费播放| 精品国产91乱高清在线观看 | 亚洲国产人成综合网站| 无码人妻精品一区二区三区蜜桃91 | 国产精品久久久久久久久果冻传媒| av最新在线观看| 亚洲国产一区二区在线播放| 福利在线一区二区| 红桃视频亚洲| 国产免费成人在线| 国产精品夜夜嗨| 国产精品无码一区二区三区| 亚洲色图视频网站| 国产精品suv一区| 日韩欧美久久久| 精品无人乱码| 久久久久久久久91| 精品美女一区| 欧美日韩系列| 在线日韩欧美| 超碰中文字幕在线观看| 成人深夜福利app| 国产极品美女在线| 亚洲r级在线视频| 国产尤物视频在线观看| 欧美精品一区二区三区一线天视频 | 自拍视频在线| 欧洲亚洲免费视频| 8x国产一区二区三区精品推荐| 天堂一区二区三区| 国产精品日韩| 成年人看片网站| 亚洲视频香蕉人妖| а中文在线天堂| 精品久久久久香蕉网| 成人在线观看免费网站| 18一19gay欧美视频网站| 日韩视频一区二区三区四区| 免费成人在线观看av| 日韩亚洲国产欧美| 香蕉久久久久久av成人| 亚洲精品视频一区| 亚洲怡红院av| 国产一区二区三区在线免费观看 | 668精品在线视频| 亚洲国产精品免费视频| 热这里只有精品| 韩国v欧美v日本v亚洲v| 亚洲综合久久av一区二区三区| 在线看一区二区| 九色视频在线观看免费播放| 欧美在线一区二区视频| 久久亚洲黄色| av在线播放亚洲| 成人免费的视频| 亚洲精品午夜久久久久久久| 欧美精品一区男女天堂| 白白色在线观看| 狠狠色综合欧美激情| 亚洲精选91| 日本一级片在线播放| 午夜国产不卡在线观看视频| 欧美一级淫片aaaaaa| 久久久在线观看| 日韩a级大片| 69堂免费视频| 久久蜜桃av一区二区天堂| 久久9999久久免费精品国产| 亚洲成人999| 欧美一级鲁丝片| 日本黑人久久| 蜜桃一区二区三区四区| 日韩国产第一页| 日韩一区二区在线免费观看| 视频在线观看入口黄最新永久免费国产| 18成人在线| 亚洲激情不卡| 中文字幕一区二区人妻在线不卡| 色系网站成人免费| www视频在线观看免费| 国产在线视频一区| 亚洲精品2区| 亚洲一区二区三区黄色| 婷婷一区二区三区| 国产精品一区在线看| 91精品国产综合久久久久久久久| 91精品动漫在线观看| av免费观看不卡| 色一情一伦一子一伦一区| 午夜国产福利在线| 超碰国产精品久久国产精品99| 亚洲精品1区2区| 夫妇露脸对白88av| 日韩欧美不卡一区| 暖暖成人免费视频| 在线视频不卡一区二区| www.亚洲在线| 亚洲无码精品在线播放| 国内精品久久久久久中文字幕| 欧美人与动xxxxz0oz| 欧美少妇性生活视频|