偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Rootkit隱藏進(jìn)程和端口檢測(cè)

安全 黑客攻防
本文介紹基于應(yīng)用層分析的rootkit解決方案,unhide在應(yīng)用層發(fā)現(xiàn)隱藏進(jìn)程、端口,該方案風(fēng)險(xiǎn)小,可集成到主機(jī)安全agent中。

一、引言

Rootkit是一種特殊的惡意軟件,它的功能是在安裝目標(biāo)上隱藏自身及指定的文件、進(jìn)程和網(wǎng)絡(luò)鏈接等信息,比較多見(jiàn)到的是Rootkit一般都和木馬、后門(mén)等其他惡意程序結(jié)合使用。

rootkit檢測(cè)也成為主機(jī)安全一項(xiàng)重要功能,針對(duì)rootkit中最常見(jiàn)隱藏進(jìn)程、端口檢測(cè),主要分為兩種檢測(cè)思路,一種基于內(nèi)核內(nèi)存分析,一種基于應(yīng)用層分析。

基于內(nèi)存分析Rootkit檢測(cè)可參考Rootkit檢測(cè),該方案缺點(diǎn)是需要增加內(nèi)核模塊,風(fēng)險(xiǎn)高,檢測(cè)效果相對(duì)較好。

本文介紹第二種方案,unhide在應(yīng)用層發(fā)現(xiàn)隱藏進(jìn)程、端口,該方案風(fēng)險(xiǎn)小,可集成到主機(jī)安全agent中。

[[260779]]

二、應(yīng)用層隱藏進(jìn)程檢測(cè)

1. 進(jìn)程隱藏和檢測(cè)方式

進(jìn)程隱藏兩種方式:

  • 替換ps命令,在讀取/proc/pid目錄時(shí),過(guò)濾掉需隱藏進(jìn)程信息
  • 加載內(nèi)核模塊,通過(guò)攔截proc文件系統(tǒng)的回調(diào)函數(shù),過(guò)濾掉需隱藏進(jìn)程信息

檢測(cè)核心思想:

通過(guò)libc系統(tǒng)函數(shù)盲測(cè)進(jìn)程pid的存活狀態(tài),再根據(jù)ps結(jié)果對(duì)比差異,判斷該pid是隱藏進(jìn)程。

unhide提供如下19種檢測(cè)方式,大致可分為四類(lèi):一類(lèi)通過(guò)procfs下的進(jìn)程目錄信息,第二類(lèi)通過(guò)系統(tǒng)調(diào)用函數(shù), 第三類(lèi)通過(guò)前兩類(lèi)組合方式,第四類(lèi)通過(guò)爆力破解(不推薦)。

  1. tab_test[TST_PROC].func = checkproc 
  2.    tab_test[TST_CHDIR].func = checkchdir 
  3.    tab_test[TST_OPENDIR].func = checkopendir 
  4.    tab_test[TST_READDIR].func = checkreaddir 
  5.    tab_test[TST_GETPRIO].func = checkgetpriority 
  6.    tab_test[TST_GETPGID].func = checkgetpgid 
  7.    tab_test[TST_GETSID].func = checkgetsid 
  8.    tab_test[TST_GETAFF].func = checksched_getaffinity 
  9.    tab_test[TST_GETPARM].func = checksched_getparam 
  10.    tab_test[TST_GETSCHED].func = checksched_getscheduler 
  11.    tab_test[TST_RR_INT].func = checksched_rr_get_interval 
  12.    tab_test[TST_KILL].func = checkkill 
  13.    tab_test[TST_NOPROCPS].func = checkallnoprocps 
  14.    tab_test[TST_BRUTE].func = brute 
  15.    tab_test[TST_REVERSE].func = checkallreverse 
  16.    tab_test[TST_QUICKONLY].func = checkallquick 
  17.    tab_test[TST_SYS_INFO].func = checksysinfo 
  18.    tab_test[TST_SYS_INFO2].func = checksysinfo2 
  19.    tab_test[TST_SYS_INFO3].func = checksysinfo3

從名字上可以看出,unhide使用chdir,opendir,readdir,getpriority,getpgid,getsid,sched_getaffinity,kill,sysinfo等libc函數(shù)。

下面分別從三類(lèi)中各選擇一種檢測(cè)方式分析。

2. procfs檢測(cè)

抽取checkreaddir檢測(cè)分析:

  • 遍歷/proc目錄, 子文件名如果是數(shù)字,代表是一個(gè)進(jìn)程pid
  • 讀取進(jìn)程狀態(tài)task目錄(/proc/pid/task), 獲取各子線程號(hào)
  • 通過(guò)ps命令查找是否存在該線程
  • 對(duì)比差異,不存在判斷為隱藏進(jìn)程
    1. procdir = opendir("/proc");  
    2. dirproc = readdir(procdir));  
    3. taskdir = opendir(task);  
    4. dir = readdir(taskdir)  
    5. checkps(procpids,PS_THREAD) 

該類(lèi)方法能檢測(cè)出對(duì)第二種無(wú)效。

3. syscall檢測(cè)

抽取checkgetsid檢測(cè)分析:

max_pid通過(guò)讀取 /proc/sys/kernel/pid_max獲?。?/p>

  • 從1到max_pid遍歷進(jìn)程, 通過(guò)getsid返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)ps命令查找是否存在該進(jìn)程
  • 再次通過(guò)getsid確認(rèn)進(jìn)程存活狀態(tài),防止在執(zhí)行ps這時(shí)間內(nèi),進(jìn)程退出了
  • 對(duì)比差異,不存在判斷為隱藏進(jìn)程
    1. ret = getsid(syspids) 
    2. checkps(syspids,PS_PROC | PS_THREAD); 
    3. ret = getsid(syspids) 

該類(lèi)方法都能檢測(cè)上述兩種隱藏進(jìn)程方式。

4. compund檢測(cè)

抽取checkallquick檢測(cè)分析:

  • 從1到max_pid遍歷進(jìn)程
  • 通過(guò)kill返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)getpriority返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)getpgid返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)getsid返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)sched_getaffinity返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)sched_getparam返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)sched_getscheduler返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)sched_rr_get_interval返回值和錯(cuò)誤碼探測(cè)進(jìn)程存活狀態(tài)
  • 通過(guò)chdir,opendir讀取進(jìn)程目錄(/proc/pid)
  • 通過(guò)ps命令查找是否存在該進(jìn)程
  • 再次通過(guò)kill確認(rèn)進(jìn)程存活狀態(tài),防止在執(zhí)行ps這時(shí)間內(nèi),進(jìn)程退出
  • 對(duì)比差異,只有進(jìn)程不存在(found=0)或者進(jìn)程經(jīng)過(guò)11項(xiàng)檢測(cè)(found == 11)認(rèn)為是正常的,其余都判斷為隱藏進(jìn)程
    1. ret = kill(syspids, 0); 
    2. ret = getpriority(PRIO_PROCESS, syspids); 
    3. ret = getpgid(syspids); 
    4. ret = getsid(syspids); 
    5. ret = sched_getaffinity(syspids, sizeof(cpu_set_t), &mask); 
    6. ret = sched_getparam(syspids, &param); 
    7. ret = sched_getscheduler(syspids); 
    8. statstatusproc = stat(directory, &buffer); 
    9. statusdir = chdir(directory); 
    10. dir_fd = opendir(directory) ; 
    11. checkps(syspids,PS_PROC | PS_THREAD) 
    12. ret = kill(syspids, 0); 
    13. if (found_killbefore == found_killafter) { 
    14.      if ( ! ((found_killbefore == 0 && found == 0) || 
    15.              (found_killbefore == 1 && found == 11)) ) { 
    16.         printbadpid(syspids); 
    17.      } 

三、應(yīng)用層隱藏端口檢測(cè)

核心思想:通過(guò)libc系統(tǒng)函數(shù)bind,listen盲測(cè)端口

1. tcp隱藏端口檢測(cè)

  • 從1到65535遍歷端口
  • 創(chuàng)建一個(gè)基于tcp協(xié)議SOCK_STREAM的socket
  • 通過(guò)bind返回值和錯(cuò)誤碼探測(cè)端口狀態(tài)
  • 如果被占用,通過(guò)listen 錯(cuò)誤碼是EADDRINUSE確定端口占用
  • 通過(guò)ss或netstat命令過(guò)濾tcp協(xié)議,查看端口情況
  • 對(duì)比差異,確認(rèn)該端口為隱藏端口
    1. socketsocket_desc=socket(AF_INET,SOCK_STREAM,0); 
    2. bind(socket_desc,(struct sockaddr *)&address,sizeof(address)); 
    3. listen(socket_desc,1); 
    4. if(EADDRINUSE == errno) { 
    5.     checkoneport(i, tcpcommand, TCP); 

2. udp隱藏端口檢測(cè)

相比tcp, udp使用SOCK_DGRAM的socket, 缺少listen這步,其余檢測(cè)步驟類(lèi)似

  1. socketsocket_desc=socket(AF_INET,SOCK_DGRAM,0); 
  2. bind(socket_desc,(struct sockaddr *)&address,sizeof(address)); 
  3. if(EADDRINUSE == errno) { 
  4.     checkoneport(u, udpcommand, UDP); 

四、結(jié)論

本文提供的通過(guò)應(yīng)用層方式檢測(cè)rootkit中最常見(jiàn)的隱藏進(jìn)程和端口,風(fēng)險(xiǎn)性小,可無(wú)縫集成到主機(jī)安全agent中。

責(zé)任編輯:趙寧寧 來(lái)源: Freebuf
相關(guān)推薦

2017-01-12 16:02:18

2022-02-12 10:47:58

Rootkit僵尸網(wǎng)絡(luò)攻擊

2010-12-28 11:17:50

chkrootkitrootkit檢測(cè)器

2018-01-29 11:10:47

LinuxUnix網(wǎng)絡(luò)取證工具

2020-12-09 05:25:23

Linux內(nèi)存進(jìn)程

2009-07-27 08:50:29

2010-01-15 10:32:40

2010-01-14 20:57:59

2010-12-22 21:52:12

rkhunter

2011-05-13 17:46:14

2013-08-20 16:16:19

2017-01-03 16:57:58

2011-04-15 10:10:45

2021-01-31 09:52:49

SSH監(jiān)控網(wǎng)絡(luò)攻擊

2020-09-09 16:00:22

Linux進(jìn)程

2010-08-24 14:46:08

2015-05-12 10:53:33

2016-02-18 09:52:48

2016-09-28 09:09:51

2016-10-26 09:12:58

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)