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

Linux內(nèi)核中添加新功能隱藏進程地址空間內(nèi)存不被竊取

系統(tǒng) Linux
首先看怎樣能獲取其它進程地址空間的內(nèi)存,答案是ptrace毫無疑問了,其它比如使用crash工具,利用系統(tǒng)漏洞,插入模塊等邪門方法不在本篇討論范圍之內(nèi)。

 [[356458]]

本文轉(zhuǎn)載自微信公眾號「相遇Linux」,作者JeffXie 。轉(zhuǎn)載本文請聯(lián)系相遇Linux公眾號。    

首先看怎樣能獲取其它進程地址空間的內(nèi)存,答案是ptrace毫無疑問了,其它比如使用crash工具,利用系統(tǒng)漏洞,插入模塊等邪門方法不在本篇討論范圍之內(nèi)。

上例子:test.c

  1.  #define handle_error(msg) \ 
  2.     do { perror(msg); exit(EXIT_FAILURE); } while (0) 
  3.  
  4. int main(void) 
  5.         char *p;  
  6.         char const str[] = "Jeff Xie\n"
  7.  
  8.         p = malloc(sizeof(str)); 
  9.         if (!p) 
  10.                 handle_error("malloc"); 
  11.         printf("p:0x%llx\n", p);  
  12.         memcpy(p, str, sizeof(str)); 
  13.         printf("str:%s\n", p);  
  14.         sleep(10000); 
  15.  
  16.         return 0; 

地址: https://github.com/x-lugoo/hide-memory

上面例子test.c中只是非常單純的malloc了一塊區(qū)域(堆區(qū)),然后保存了一個字符串.

terminal 1:

  1. #gcc test.c  
  2. #./a.out  
  3. p:0xd3d260 
  4. str:Jeff Xie 

terminal 2:

  1. #ps -C a.out 
  2.   PID TTY          TIME CMD 
  3. 19145 pts/4    00:00:00 a.out 
  4. #cat /proc/19145/maps 
  5. 00400000-00401000 r-xp      /home/jeff/a.out 
  6. 00600000-00601000 r--p      /home/jeff/a.out 
  7. 00601000-00602000 rw-p      /home/jeff/a.out 
  8. 00d3d000-00d5e000 rw-p      [heap] 

可以看到0xd3d260 在heap區(qū)域范圍內(nèi),使用readmem就可以簡單粗暴的讀出了進程19145(a.out)的0xd3d260 向后十個字節(jié)的內(nèi)容.

terminal 2:

  1. #readmem 19145 0xd3d260 10 
  2. Jeff Xie 

程序readmem使用ptrace功能實現(xiàn),代碼見:

  1. https://github.com/x-lugoo/hide-memory/tree/main/ptrace 

如果進程19145保存的不是一個普通的字符串,而是某位皇帝留下的千年寶藏的地址,或者里面的信息關系到整個公司的命脈,如果被nice值不高的人獲取了,后果可想而知。

最近有人(前輩)在linux內(nèi)核社區(qū)提交了一個patch,解決了這個問題,我把整個patch簡化了一些。

原始patch:

  1. https://lore.kernel.org/linux-fsdevel/20201203062949.5484-1-rppt@kernel.org/T/#t 

被我簡化后:

  1. https://github.com/x-lugoo/hide-memory/blob/main/hidemem/0001-hidemem-Initialization-version.patc 

此patch實現(xiàn)的原理:

新增一個系統(tǒng)調(diào)用memfd_hide, 當用戶使用這個系統(tǒng)調(diào)用時,會返回一個fd, 進而使用mmap(...fd...),map一段內(nèi)存,此段內(nèi)存將是安全的,其它人不能通過ptrace獲取。

  1. --- a/arch/x86/entry/syscalls/syscall_64.tbl 
  2. +++ b/arch/x86/entry/syscalls/syscall_64.tbl 
  3. @@ -362,6 +362,7 @@ 
  4.  438    common  pidfd_getfd     sys_pidfd_getfd 
  5.  439    common  faccessat2      sys_faccessat2 
  6.  440    common  process_madvise     sys_process_madvise 
  7. +441    common  memfd_hide      sys_memfd_hide 
  8.  
  9. SYSCALL_DEFINE1(memfd_hide, unsigned long, flags) 
  10.         struct file *file; 
  11.         int fd, err; 
  12.         fd = get_unused_fd_flags(flags & O_CLOEXEC); 
  13.         file = hidemem_file_create(flags); 
  14.         fd_install(fd, file); 
  15.         return fd; 

當用戶調(diào)用441號系統(tǒng)調(diào)用時,系統(tǒng)會返回一個fd,例如用戶層這樣調(diào)用:

  1. #define __NR_memfd_hide 441 
  2. static int memfd_secret(unsigned long flags) 
  3.      return syscall(__NR_memfd_hide, flags); 
  4. fd = memfd_secret(0); 

fd_install 做了以下操作,把fd和當前進程關聯(lián)起來.

  1. struct fdtable *fdt; 
  2. struct task_struct { 
  3.           ... 
  4.           struct files_struct             *files; 
  5. fdt = current->files->fdt; 
  6. fdt->fd[fd] = file; 

hidemem_file_create 最終是返回了一個struct file, 但是做的一個很重要的動作是初始化一系列回調(diào)函數(shù),讓用戶調(diào)用mmap和memcpy時,在發(fā)生page fault時進行合適的動作,比如調(diào)用alloc_page(gfp)申請一塊內(nèi)存.

  1. fd = memfd_secret(0); 
  2. p = mmap(NULL, 4096, prot, mode, fd, 0); 
  3. memcpy(p, str, sizeof(str)); 

追隨以下綠色標記 可以很好理清函數(shù)調(diào)用關系:

  1. static struct file *hidemem_file_create(unsigned long flags) 
  2.         struct file *file = ERR_PTR(-ENOMEM); 
  3.         struct inode *inode; 
  4.         inode = alloc_anon_inode(hidemem_mnt->mnt_sb); 
  5.         file = alloc_file_pseudo(inode, hidemem_mnt, "hidemem"
  6.                                  O_RDWR, &hidemem_fops); 
  7.         inode->i_mapping->a_ops = &hidemem_aops; 
  8.  
  9. static const struct file_operations hidemem_fops = { 
  10.         .release        = hidemem_release, 
  11.         .mmap           = hidemem_mmap, 
  12. }; 
  13.  
  14. static int hidemem_mmap(struct file *file, struct vm_area_struct *vma) 
  15.         vma->vm_ops = &hidemem_vm_ops; 
  16.         vma->vm_flags |= VM_LOCKED; 
  17.  
  18. static const struct vm_operations_struct hidemem_vm_ops = { 
  19.         .fault = hidemem_fault, 
  20. }; 
  21.  
  22. static vm_fault_t hidemem_fault(struct vm_fault *vmf) 
  23.         struct address_space *mapping = vmf->vma->vm_file->f_mapping; 
  24.         vm_fault_t ret = 0; 
  25.         struct page *page; 
  26.         int err; 
  27.  
  28.         page = find_get_page(mapping, offset); 
  29.         if (!page) { 
  30.                 page = hidemem_alloc_page(vmf->gfp_mask); 
  31.                 err = add_to_page_cache(page, mapping, offset, vmf->gfp_mask); 
  32.         } 
  33.         vmf->page = page; 
  1. static struct page *hidemem_alloc_page(gfp_t gfp) 
  2.         return alloc_page(gfp); 

回到怎樣隱藏進程空間的問題上:

當其它進程使用ptrace功能獲取指定進程地址空間內(nèi)容時,會調(diào)用到check_vma_flags(), 此時加上一個條件判斷,如果此段vma(/proc/pid/maps中的每一列地址范圍屬于一個vma)屬于hidemem, 直接返回錯誤.

  1.  static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags) 
  2.  { 
  3.      vm_flags_t vm_flags = vma->vm_flags; 
  4. @@ -923,6 +925,9 @@ static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags) 
  5.      if (gup_flags & FOLL_ANON && !vma_is_anonymous(vma)) 
  6.          return -EFAULT; 
  7.  
  8. +    if (vma_is_hidemem(vma)) 
  9. +        return -EFAULT; 
  10.      if (write) { 
  11.          if (!(vm_flags & VM_WRITE)) { 
  12.              if (!(gup_flags & FOLL_FORCE)) 
  1. static const struct vm_operations_struct hidemem_vm_ops = { 
  2.         .fault = hidemem_fault, 
  3. }; 
  4.  
  5. bool vma_is_hidemem(struct vm_area_struct *vma) 
  6.         return vma->vm_ops == &hidemem_vm_ops; 

加上vma_is_hidemem(vma)判斷之后,此時如果使用readmem利用ptrace獲取指定進程內(nèi)存段的時候,會直接報錯,以達到隱藏vma背后page內(nèi)容的目的。

以上patch和測試代碼都在:

  1. https://github.com/x-lugoo/hide-memory 

原始patch:

  1. https://lore.kernel.org/linux-fsdevel/20201203062949.5484-1-rppt@kernel.org/T/#t 

 

 

責任編輯:武曉燕 來源: 相遇Linux
相關推薦

2019-03-28 09:42:15

惡意軟件Rootkit攻擊

2021-01-08 05:59:39

Linux應用程序Linux系統(tǒng)

2021-01-04 10:02:54

Facebook憑證攻擊

2022-09-13 11:15:33

加密貨幣區(qū)塊鏈

2018-05-18 08:43:27

Linux內(nèi)存空間

2012-05-03 08:27:20

Linux進程

2024-01-08 08:42:43

2018-05-18 09:07:43

Linux內(nèi)核內(nèi)存

2010-05-13 09:45:26

Linux地址空間

2013-07-01 09:58:58

Windows 8.1

2021-03-22 11:43:07

Linux運維Linux系統(tǒng)

2021-11-09 07:31:08

Robinhood黑客美國

2020-08-16 09:25:21

Windows 10Windows操作系統(tǒng)

2022-08-06 16:36:21

漏洞網(wǎng)絡攻擊

2011-10-28 15:50:45

C程序

2020-10-16 12:11:31

網(wǎng)絡攻擊網(wǎng)絡安全黑客

2019-01-29 10:10:09

Linux內(nèi)存進程堆

2009-06-09 10:00:56

2020-05-08 11:56:43

微軟GitHub賬號黑客

2021-03-28 09:37:35

竊取數(shù)據(jù)暗網(wǎng)安全
點贊
收藏

51CTO技術棧公眾號

亚洲乱码一区| av观看在线| 男人的j进女人的j一区| 色多多国产成人永久免费网站| 手机免费av片| 午夜av在线播放| 91色|porny| 91精品啪在线观看麻豆免费| 久久网免费视频| 加勒比久久综合| 日韩一级欧美一级| www.国产区| 中文在线手机av| 国产婷婷色一区二区三区| 96国产粉嫩美女| 亚洲欧美偷拍视频| 欧美影视一区| 正在播放欧美视频| 国产极品一区二区| 国产精品第一| 图片区小说区区亚洲影院| 亚州欧美一区三区三区在线| www.av黄色| 日本欧美一区二区| 亚洲18私人小影院| 搜索黄色一级片| 国产一区二区观看| 亚洲国产天堂网精品网站| 在线免费视频一区| 伊人成综合网站| 亚洲一区av在线| 一区二区三区国| 日本不卡免费播放| 成人一区二区视频| 成人精品视频99在线观看免费| av网站中文字幕| 国色天香一区二区| 日韩在线中文字| 久久精品无码一区| 国产精品18hdxxxⅹ在线| 欧美日韩免费视频| 成人性视频欧美一区二区三区| 国产极品人妖在线观看| 亚洲老妇xxxxxx| 亚洲欧洲一区二区| 国产精品久久久久一区二区国产| 不卡的av电影| av一本久道久久波多野结衣| 国产绿帽刺激高潮对白| 美女性感视频久久| 国产精品欧美在线| 亚洲图片欧美日韩| 久久aⅴ乱码一区二区三区| 国内精品久久久久久中文字幕| 国产av无码专区亚洲av毛网站| 欧美超碰在线| 中文字幕最新精品| 女人裸体性做爰全过| 国产伦精品一区二区三区千人斩 | 亚洲av无码一区二区三区dv | 依依成人精品视频| 色撸撸在线观看| 国产日产一区二区三区| 亚洲欧美日韩国产另类专区| 亚洲黄色网址在线观看| av在线免费网址| 一区二区三区在线视频观看| 亚洲国产一二三精品无码 | 精品国产免费无码久久久| 国产自产视频一区二区三区| 国产欧美精品va在线观看| 999视频在线| 青青青爽久久午夜综合久久午夜| 国产美女扒开尿口久久久| 国产精品九九九九| 国产福利91精品| 精品国产一区二区三区日日嗨| 天天操天天干天天爱| 久久久久久久久久看片| 亚洲免费在线精品一区| 菠萝菠萝蜜在线视频免费观看| 亚洲免费在线电影| 久久久久久久午夜| 99久久伊人| 日韩免费高清av| 黄色国产在线观看| 日本大胆欧美| 欧美高清激情视频| 麻豆成人免费视频| 蜜臀精品一区二区三区在线观看| 91亚洲精品视频| 天堂在线观看免费视频| 中文字幕国产一区二区| 99亚洲国产精品| 伊人成综合网站| 51精品秘密在线观看| 国模无码视频一区| 成人免费在线播放| 欧美成年人视频网站| 日韩在线 中文字幕| 国产一区不卡视频| 欧美一区二区三区在线免费观看| 米奇精品一区二区三区| 日韩欧美国产一区二区| 香港日本韩国三级网站| 欧美电影在线观看完整版| 日韩中文字幕国产| 久久99国产综合精品免费| 精品在线播放免费| 免费一区二区三区| 污污网站在线看| 欧美在线看片a免费观看| 日本少妇激三级做爰在线| 亚州综合一区| 欧美精品一本久久男人的天堂| 久久久黄色大片| 国产jizzjizz一区二区| 亚洲毛片aa| 性欧美1819sex性高清| 精品国产亚洲在线| 国产性生活大片| 日韩高清在线观看| 精品一区二区三区日本| 天天色天天射天天综合网| 欧美图区在线视频| 亚洲综合色一区| 精品动漫3d一区二区三区免费| 国产精品视频专区| 囯产精品久久久久久| 一区精品在线播放| 九一精品在线观看| 精品在线99| 57pao成人国产永久免费| www.五月天激情| 中文字幕一区二区三区蜜月| 一本久道综合色婷婷五月| 国产欧美自拍一区| 欧美肥臀大乳一区二区免费视频| 国产一区二区麻豆| 国产精品色婷婷久久58| 激情婷婷综合网| 国产成人高清| 国产a级全部精品| 日本一区高清| 欧美日韩在线第一页| 无码人妻精品一区二区三区99不卡| 婷婷综合网站| 成人福利视频网| 欧美jizz18hd性欧美| 欧美日韩三级一区二区| 337人体粉嫩噜噜噜| 日韩成人av影视| 神马影院一区二区三区| 日韩中文视频| www.欧美精品| 国产情侣av在线| 一区二区三区国产精品| 蜜臀视频在线观看| 国产一区二区三区的电影 | 欧美猛男男男激情videos| 国产国语videosex另类| av片在线看| 欧美顶级少妇做爰| 久久国产精品波多野结衣| 成人美女视频在线观看| www.com毛片| 欧美极品中文字幕| 国产精品中文字幕久久久| 好吊日视频在线观看| 日韩一卡二卡三卡| 久久精品久久国产| 久久网这里都是精品| 北条麻妃av高潮尖叫在线观看| 精品国产一区二区三区久久久樱花 | 久久久久国产精品嫩草影院| 91福利精品视频| 国产日韩精品中文字无码| 韩国一区二区三区| 日本香蕉视频在线观看| 视频小说一区二区| 成人福利在线观看| 成人ssswww在线播放| 国产亚洲欧美日韩一区二区| 国产又爽又黄又嫩又猛又粗| 亚洲国产综合在线| 日本理论中文字幕| 国产成a人无v码亚洲福利| av动漫在线看| 天天综合网网欲色| 精品国产乱码久久久久久久软件 | 天堂影院在线| 欧美久久免费观看| 亚洲精品国产精品乱码| 国产精品免费视频一区| 人妻激情偷乱频一区二区三区| 久久综合图片| 又大又硬又爽免费视频| 成人短片线上看| 国产伦精品一区二区三区免费视频| 成人开心激情| 九九久久精品一区| 国产污视频在线| 亚洲第一偷拍网| 一区二区三区亚洲视频| 精品欧美国产一区二区三区| 少妇高潮一区二区三区喷水| 99精品久久只有精品| 色18美女社区| 日韩av一二三| 久久国产精品视频在线观看| 91精品国产自产在线观看永久∴ | 国产一区二区三区四区大秀| 高清av免费一区中文字幕| 外国电影一区二区| 欧美在线视频一二三| 日本性爱视频在线观看| 日韩中文理论片| 精华区一区二区三区| 亚洲国产精品字幕| www.色视频| 欧美久久高跟鞋激| 最新中文字幕免费| 一本色道a无线码一区v| 国产大片中文字幕| 亚洲激情自拍偷拍| 天天爽天天爽天天爽| 国产日韩在线不卡| 日本免费福利视频| 成人小视频在线观看| 日本一二三四区视频| 免费高清成人在线| 国产自偷自偷免费一区| 噜噜爱69成人精品| 国产成人a亚洲精v品无码| 亚洲香蕉网站| av影院在线播放| 欧美二区视频| 欧美 亚洲 视频| 欧美1区免费| 欧美日韩视频免费| 国产精品扒开腿做爽爽爽软件| 中文字幕av导航| 小处雏高清一区二区三区| 亚洲国产精品日韩| 日韩精品影视| 一区高清视频| 68国产成人综合久久精品| 四虎免费在线观看视频| 香蕉久久网站| 免费看日本黄色| 精品成人久久| 久久久久久久久久久久久国产精品| 国产日产高清欧美一区二区三区| 欧美黑人经典片免费观看| 中文国产一区| 成人在线观看黄| 美腿丝袜在线亚洲一区| 在线免费黄色网| 国产精品一区一区三区| 亚洲成a人无码| 成人av资源在线| 丝袜美腿中文字幕| 国产偷v国产偷v亚洲高清| 国产小视频你懂的| 亚洲欧美日韩一区二区| 精品一区二区三区四| 欧美日韩激情视频8区| 无码一区二区三区在线观看| 欧美日韩综合不卡| 国产乱淫a∨片免费观看| 精品动漫一区二区三区在线观看| 四虎在线视频免费观看| 亚洲午夜未删减在线观看 | 国产色综合一区| 国产午夜精品理论片| 亚洲在线免费播放| 4438国产精品一区二区| 在线成人av影院| 日本精品999| 在线播放国产精品| 日本乱理伦在线| 日韩av免费在线观看| 91精品一区| 精品不卡一区二区三区| 欧美一区二区三区激情视频| 大陆极品少妇内射aaaaaa| 久久国产88| 一级日本黄色片| 久久综合色一综合色88| 午夜精品一区二区三级视频| 亚洲成人精品影院| 天天天天天天天干| 亚洲精品一线二线三线| 阿v免费在线观看| 久久久久久伊人| 国产91精品在线| 精品国产_亚洲人成在线| 久久在线视频| 国产免费毛卡片| 国产一区二区调教| 五级黄高潮片90分钟视频| 亚洲欧美中日韩| 性无码专区无码| 日韩一级在线观看| 18视频免费网址在线观看| 午夜精品国产精品大乳美女| 成人h在线观看| 久久精品二区| 欧美成熟视频| 日本一二区免费| 久久综合九色综合久久久精品综合| 三级在线观看免费大全| 在线视频中文字幕一区二区| 丰满人妻一区二区三区免费视频| 一区二区三区视频观看| freexxx性亚洲精品| 91免费高清视频| 精品久久精品| 黄色a级片免费| 国产91丝袜在线观看| 无码人妻精品中文字幕| 日韩欧美在线字幕| 手机在线不卡av| 欧美—级高清免费播放| 精品国产乱码一区二区三区| 翔田千里亚洲一二三区| 男女精品网站| 欧美一区二区免费在线观看| 亚洲影院在线观看| 国产精品一级二级| 日韩在线中文字幕| 91九色综合| 色噜噜色狠狠狠狠狠综合色一| 亚洲一区久久| 日本黄色动态图| 亚洲高清免费视频| 国产18精品乱码免费看| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美国产一区二区三区| 麻豆国产一区| 一区二区三区四区免费观看| 久久精品国产免费| 五月天精品在线| 欧美日韩在线播放| 成人动漫在线播放| 国产精品久久久久久影视| 狠狠综合久久av一区二区蜜桃| 日韩精品一区二区三区不卡| 91亚洲精品久久久蜜桃| wwwwww国产| 亚洲网站在线播放| 亚洲电影有码| 成人手机视频在线| 国产最新精品免费| 九九热国产精品视频| 精品国产一区二区国模嫣然| 888av在线视频| 久久精品一区二区三区不卡免费视频| 亚洲国产一区二区三区高清| 波多野结衣影院| 懂色aⅴ精品一区二区三区蜜月| 日韩av资源站| 国产成人高潮免费观看精品| 残酷重口调教一区二区| 九九久久久久久| 一区二区三区毛片| 日本美女一级片| 国产成人一区二| 亚洲欧美日韩高清在线| 乱码一区二区三区| 黑人巨大精品欧美一区二区免费| 极品美乳网红视频免费在线观看 | 99久久国产综合精品五月天喷水| 成人av午夜电影| 黄色片中文字幕| 中文字幕亚洲综合久久| 久久九九精品视频| jizzjizz国产精品喷水| 国产三级精品三级| 性网爆门事件集合av| 91精品国产高清久久久久久久久 | 日韩毛片一区| 国产一级大片免费看| 99久久99久久免费精品蜜臀| 免费又黄又爽又猛大片午夜| 久久国产精品偷| 午夜欧洲一区| www.桃色.com| 欧美色视频日本高清在线观看| 成人18在线| 国产伦精品一区二区三区照片| 久久精品免费| 久久久久99精品成人片试看| 亚洲精品久久7777777| 日本国产亚洲| 乱妇乱女熟妇熟女网站| 亚洲人成亚洲人成在线观看图片| 香蕉久久国产av一区二区| 91精品视频在线看| 美女被久久久|