Rootkit隐藏进程和端口检测

linux Rootkit检查 Rootkit是linux系统下常见一种木马后门程序,通过替换系统文件来达到隐藏入侵的目的,攻击能力极强 Rootkit分类原理: 隐藏进程 隐藏文件 隐藏网络端口 后门功能 键盘记录 Rootkit主要分一下两种 1 用户态:一般通过覆盖系统二进制文件来实现 2 内核态: 通常通过可加载内核模块将恶意代码直接加载进内核中 利用Chkrootkit检测Rootkit... 阅读详情

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

例如:inetd或者login,为攻击者提供后门;隐藏攻击者的目录和进程的程序,ps、netstat等常见命令。

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

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

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

应用层隐藏进程检测
2.1 进程隐藏和检测方式
进程隐藏两种方式:

  1. 替换ps命令,在读取/proc/pid目录时,过滤掉需隐藏进程信息

2)加载内核模块,通过拦截proc文件系统的回调函数,过滤掉需隐藏进程信息

检测核心思想:

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

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

tab_test[TST_PROC].func = checkproc;

tab_test[TST_CHDIR].func = checkchdir;

tab_test[TST_OPENDIR].func = checkopendir;

tab_test[TST_READDIR].func = checkreaddir;

tab_test[TST_GETPRIO].func = checkgetpriority;

tab_test[TST_GETPGID].func = checkgetpgid;

tab_test[TST_GETSID].func = checkgetsid;

tab_test[TST_GETAFF].func = checksched_getaffinity;

tab_test[TST_GETPARM].func = checksched_getparam;

tab_test[TST_GETSCHED].func = checksched_getscheduler;

tab_test[TST_RR_INT].func = checksched_rr_get_interval;

tab_test[TST_KILL].func = checkkill;

tab_test[TST_NOPROCPS].func = checkallnoprocps;

tab_test[TST_BRUTE].func = brute;

tab_test[TST_REVERSE].func = checkallreverse;

tab_test[TST_QUICKONLY].func = checkallquick;

tab_test[TST_SYS_INFO].func = checksysinfo;

tab_test[TST_SYS_INFO2].func = checksysinfo2;

tab_test[TST_SYS_INFO3].func = checksysinfo3;
从名字上可以看出,unhide使用chdir,opendir,readdir,getpriority,getpgid,getsid,sched_getaffinity,kill,sysinfo等libc函数。

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

2.2 procfs检测
抽取checkreaddir检测分析:

1)遍历/proc目录, 子文件名如果是数字,代表是一个进程pid

2)读取进程状态task目录(/proc/pid/task), 获取各子线程号

  1. 通过ps命令查找是否存在该线程

4)对比差异,不存在判断为隐藏进程

1)procdir = opendir("/proc");

2)dirproc = readdir(procdir));

3)taskdir = opendir(task);

  1. dir = readdir(taskdir)

  2. checkps(procpids,PS_THREAD)
    该类方法能检测出第一种隐藏进程方式,对第二种无效。

2.3 syscall检测
抽取checkgetsid检测分析:

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

1)从1到max_pid遍历进程, 通过getsid返回值和错误码探测进程存活状态

2)通过ps命令查找是否存在该进程

3)再次通过getsid确认进程存活状态,防止在执行ps这时间内,进程退出了

4)对比差异,不存在判断为隐藏进程

1)ret = getsid(syspids)

2)checkps(syspids,PS_PROC | PS_THREAD);

3)ret = getsid(syspids)
该类方法都能检测上述两种隐藏进程方式。

2.4 compund检测
抽取checkallquick检测分析:

1)从1到max_pid遍历进程

  1. 通过kill返回值和错误码探测进程存活状态

  2. 通过getpriority返回值和错误码探测进程存活状态

  3. 通过getpgid返回值和错误码探测进程存活状态

  4. 通过getsid返回值和错误码探测进程存活状态

  5. 通过sched_getaffinity返回值和错误码探测进程存活状态

  6. 通过sched_getparam返回值和错误码探测进程存活状态

  7. 通过sched_getscheduler返回值和错误码探测进程存活状态

  8. 通过sched_rr_get_interval返回值和错误码探测进程存活状态

  9. 通过chdir,opendir读取进程目录(/proc/pid)

  10. 通过ps命令查找是否存在该进程

12)再次通过kill确认进程存活状态,防止在执行ps这时间内,进程退出

13)对比差异,只有进程不存在(found=0)或者进程经过11项检测(found == 11)认为是正常的,其余都判断为隐藏进程

ret = kill(syspids, 0);

ret = getpriority(PRIO_PROCESS, syspids);

ret = getpgid(syspids);

ret = getsid(syspids);

ret = sched_getaffinity(syspids, sizeof(cpu_set_t), &mask);

ret = sched_getparam(syspids, &param);

ret = sched_getscheduler(syspids);

statusproc = stat(directory, &buffer);

statusdir = chdir(directory);

dir_fd = opendir(directory) ;

checkps(syspids,PS_PROC | PS_THREAD)

ret = kill(syspids, 0);

if (found_killbefore == found_killafter) {

     if ( ! ((found_killbefore == 0 && found == 0) ||

             (found_killbefore == 1 && found == 11)) ) {

        printbadpid(syspids);

     }

应用层隐藏端口检测
核心思想:通过libc系统函数bind,listen盲测端口

3.1 tcp隐藏端口检测
1)从1到65535遍历端口

  1. 创建一个基于tcp协议SOCK_STREAM的socket

  2. 通过bind返回值和错误码探测端口状态

  3. 如果被占用,通过listen 错误码是EADDRINUSE确定端口占用

  4. 通过ss或netstat命令过滤tcp协议,查看端口情况

6)对比差异,确认该端口为隐藏端口

socket_desc=socket(AF_INET,SOCK_STREAM,0);

bind(socket_desc,(struct sockaddr *)&address,sizeof(address));

listen(socket_desc,1);

if(EADDRINUSE == errno) {

    checkoneport(i, tcpcommand, TCP);

}

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

socket_desc=socket(AF_INET,SOCK_DGRAM,0);

bind(socket_desc,(struct sockaddr *)&address,sizeof(address));

if(EADDRINUSE == errno) {

    checkoneport(u, udpcommand, UDP);

}

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

http://www.45zq.cn/portal/article/index/id/38.html

恶意代码生存与隐蔽技术剖析:Rootkit进程注入等5种核心手段深度解析 本文深度解析恶意代码为逃避检测采用的五种核心技术手段,包括Rootkit进程注入等,揭示其在网络安全领域的隐蔽性持久性。通过攻击原理与防御对策的完整剖析,为安全研究人员提供对抗网络威胁的实用知识体系。 阅读详情

相关推荐

冰刃杀毒工具使用实验(29)

冰刃是一款广受好评的ARK工具。ARK工具全称为Anti Rootkit工具,可以理解为辅助杀毒工具,在具有一定操作系统知识后,完全可以利用该工具手动杀毒!冰刃适用于Windows 2000/XP/2003 操作系统,界面虽然看起来比较的粗糙但是其内部功能是十分强大,用于查探系统中的幕后黑手—木马后门,并作出处理。一般都可轻而易举地隐藏进程端口、注册表、文件信息,一般的工具根本无法发现这些幕后黑手。目前最新版本为1.22。

yyj1781572的博客 1839

苏苏进程隐藏工具.rar

很多软件程序出于保护安全等因素,会禁止用户启动多个程序进程,特别网络游戏都通过各种方式禁止游戏多开,而大多数玩网游的童鞋都习惯多开使用,当然我们有很多方法可以让这些游戏进程多开,而苏苏进程隐藏工具无疑是最好也是成功率最高的“破解”方法。

隐藏进程 win10测试可用

可以完美隐藏进程,保护进程,保护文件,删除文件等功能,非常好用!

Linux几种检测rootkit隐藏进程的方法

Rootkit通常会隐藏进程隐藏文件网络连接。这里主要记录几种对隐藏进程检测方法 一. 隐藏进程的方法 1.1 用户级Rootkit 通过LD_PRELOADER来hook libc库实现,从而过滤/proc/pid目录 1.2 内核级rootkit 通过hook系统调用getdents/getdents64或者hook 文件file_operation的iterate 1.3 内核...

bin_linux96的专栏 4883

android 系统内存检查

1.     Introduction Android对内存的使用包括内存泄漏内存越界,内存泄漏会导致系统内存减少,最终分配不到内存,这样大的程序就不能运行,甚至系统没有内存而崩溃。Android中kernel应用程序都可能会有内存泄漏越界。对于Java代码,在越界的时候虚拟机会加以检查并抛出异常。而对于C/C++代码,越界的时候就悄无声息地让程序出错或crash 2.     

u011279649的专栏 2146

Android应用方法隐藏及反调试技术浅析

原文地址: http://www.freebuf.com/articles/terminal/75944.html 0x00 前言 Android应用的加固对抗不断升级,单纯的静态加固效果已无法满足需求,所以出现了隐藏方法加固,运行时动态恢复反调试等方法来对抗,本文通过实例来分析有哪些对抗反调试手段。 0x01 对抗反编译 首先使用apktool进行反

Omnictech的专栏 3812

ubuntu kill 端口占用进程_Rootkit隐藏进程端口检测

Rootkit隐藏进程端口检测本文介绍基于应用层分析的rootkit解决方案,unhide在应用发现隐藏进程端口,该方案风险小,可集成到主机安全agent中。

weixin_39975810的博客 222

Windows Rootkit 技术分析

List:一,前言二,简介三,rootkit的一些以公开的隐藏技术四,一些隐藏技术的应对方法五,about ring0 rootkit六,rootkit检测七,参考资料,推荐 :)*************************一.先说几句与技术无关的话。现在很多人对rootkit认识不够,可以说空白。而此愚文的目的就是让菜鸟认识rootkit→了解

1027

Rootkit For Windows

Rootkit For Windows************************************************************转载请保留文章完整,谢谢! *Date:2005/9/11 祝童童生日快乐。也纪念世贸大厦 *作者:sunwear [E.S.T] *ps:很多人问我[E.S.T]是什么……其实就是一个技术小组 :) *E-mail:shellcoder[0

xyblack技术地带 693

linux跟踪内存检测原理,wooyun/Linux下基于内存分析的Rootkit检测方法.html at master · exitmsconfig/wooyun · GitHub...

Linux下基于内存分析的Rootkit检测方法 - 路人甲body {width: 90%;max-width: 960px;display: block;margin: 0 auto;}img {max-width: 900px;}原文地址:http://drops.wooyun.org/tips/47310x00 引言某Linux服务器发现异常现象如下图,确定被植入Rootkit,但运维人员...

weixin_31411315的博客 288

隐藏进程与通信技术:原理揭秘、实践应用与防御策略

Stuxnet通过利用零日漏洞注入系统进程,并借助数字签名双PLC模块混淆视听,同时,其通信数据通过互联网加密传输,确保了其高度隐蔽性,使得这款恶意软件在很长一段时间内未被发现。总之,隐藏进程与通信技术是恶意软件逃避检测执行恶意行为的重要手段,正确认识并有效应对这些技术,对于提高网络系统的安全防护水平至关重要。定期系统审计与更新:定期进行系统软件的安全审计,及时更新系统补丁软件版本,消除已知的漏洞,防止恶意软件利用这些漏洞进行隐藏进程通信。隐藏进程与通信技术:原理揭秘、实践应用与防御策略。

Kali与编程 561

Rootkit病毒

        Rootkit病毒是一类特殊的病毒,其最大的特点是“隐形”。采用Rootkit技术的病毒,虽然存在于系统中,但是通常情况下病毒文件本身是被隐藏起来的,根本无法通过资源管理器及各种普通的文件管理工具查看到。典型的Rootkit木马病毒,有著名的“Hxdef100”“C.I.A.”,国内的“AFXRootkit”“黑客之门”等。Rootkit木马可以在目标主机上将自身程序进行隐藏,同时

VBcom的专栏 4735

linux进程隐藏端口,如何在 Linux/Unix/Windows 中发现隐藏进程端口 | Linux 中国...

原标题:如何在 Linux/Unix/Windows 中发现隐藏进程端口 | Linux 中国 绝大多数的 Rootkit 工具或者恶意软件借助内核来实现进程隐藏,这些进程只在内核内部可见。你可以使用 unhide 或者诸如 rkhunter 等工具,扫描 rootkit 程序 、后门程序以及一些可能存在的本地漏洞。-- Vivek Gite本文导航◈ 如何安装 unhide 17%◈ 如何在...

weixin_39929723的博客 617

Windows Rootkit相关链接[转]

标题: Windows Rootkit相关链接维护: 小四 链接: http://www.opencjk.org/~scz/200402170928.txt创建: 2004-02-17 09:28更新: 2004-08-03 09:52--    如有推荐,请发信至多多指教,谢谢。--[ 1] Avoiding Windows Rootkit Detection/Bypassing PatchFi

LionD8' Blog 个人作品 www.360kdj.com 360KDJ股票实验室 2313

两个linux内核rootkit--之二:adore-ng

这个rootkit使用的技术不比前一个,它不是拦截系统调用,而是拦截具体文件系统的回调函数,本身文件系统的回调函数就是动态注册的,很是不确定,那么反黑软件自然就不能简单下结论说这个函数被黑掉了,因此这个rootkit看来比前一个略胜一筹,自然的,既然是内核模块,那么模块隐藏也是一个重要的内容,以下是一个简单的模块隐藏代码,使用此代码的前提就是将此模块紧接...

weixin_34220834的博客 142

Azazel网络连接隐藏与PCAP钩子:如何实现隐身网络通信

Azazel是一个基于LD_PRELOAD技术的用户态rootkit,专注于反调试检测功能。在前100个字中,我们需要强调Azazel的核心功能:网络连接隐藏与PCAP钩子技术,这是实现隐身网络通信的关键技术。 ## 🔍 什么是Azazel的PCAP钩子? PCAP钩子是Azazel最强大的功能之一,它允许rootkit在系统层面隐藏特定的网络连接。通过拦截libpcap库的`pcap_

gitblog_00372的博客 458

Azazel高级配置指南:自定义隐藏规则与端口范围设置终极教程

Azazel是一款基于LD_PRELOAD技术的用户态rootkit工具,专注于反调试检测功能。本文将详细介绍如何通过高级配置自定义隐藏规则端口范围设置,帮助您更好地掌握这个强大的安全工具。🔒 ## 📋 为什么需要高级配置? 默认配置虽然可用,但为了增强隐蔽性安全性,自定义配置至关重要。Azazel的高级配置允许您: - **自定义隐藏规则**:控制哪些文件进程隐藏 - **

gitblog_01038的博客 530
上一篇: Splunk上安装自定义应用反弹Shell
下一篇: Go编写的多平台Agent和控制器
aliyunc
博客等级 码龄7年 32粉丝 9原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值