13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Rootkit隐藏进程和端口检测

一、引言

创新互联是一家专注于成都网站建设、网站设计与策划设计,西畴网站建设哪家好?创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:西畴等地区。西畴做网站价格咨询:18980820575

Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。

rootkit检测也成为主机安全一项重要功能,针对rootkit中最常见隐藏进程、端口检测,主要分为两种检测思路,一种基于内核内存分析,一种基于应用层分析。

基于内存分析Rootkit检测可参考Rootkit检测,该方案缺点是需要增加内核模块,风险高,检测效果相对较好。

本文介绍第二种方案,unhide在应用层发现隐藏进程、端口,该方案风险小,可集成到主机安全agent中。

二、应用层隐藏进程检测

1. 进程隐藏和检测方式

进程隐藏两种方式:

检测核心思想:

通过libc系统函数盲测进程pid的存活状态,再根据ps结果对比差异,判断该pid是隐藏进程。

unhide提供如下19种检测方式,大致可分为四类:一类通过procfs下的进程目录信息,第二类通过系统调用函数, 第三类通过前两类组合方式,第四类通过爆力破解(不推荐)。

 
 
 
  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函数。

下面分别从三类中各选择一种检测方式分析。

2. procfs检测

抽取checkreaddir检测分析:

该类方法能检测出对第二种无效。

3. syscall检测

抽取checkgetsid检测分析:

max_pid通过读取 /proc/sys/kernel/pid_max获取:

该类方法都能检测上述两种隐藏进程方式。

4. compund检测

抽取checkallquick检测分析:

三、应用层隐藏端口检测

核心思想:通过libc系统函数bind,listen盲测端口

1. tcp隐藏端口检测

2. udp隐藏端口检测

相比tcp, udp使用SOCK_DGRAM的socket, 缺少listen这步,其余检测步骤类似

 
 
 
  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); 

四、结论

本文提供的通过应用层方式检测rootkit中最常见的隐藏进程和端口,风险性小,可无缝集成到主机安全agent中。


标题名称:Rootkit隐藏进程和端口检测
文章源于:http://cdbrznjsb.com/article/cdjshhj.html

其他资讯

让你的专属顾问为你服务