Linux Rootkit 手法解析(上):用户态的“隐身术”与检测思路

Linux Rootkit是一类针对Linux操作系统设计的恶意工具集,它通过多种方式隐藏自身和攻击活动,使得攻击者能够绕过安全防御机制,在受害主机上非法维持控制权限,因此常被喻为黑客的“隐身斗篷”。

面对这种高级威胁,了解其原理是实现有效检测和防御的第一步。本系列文章将深入解析Linux Rootkit的常见手法。为了方便理解,我们将分上下两篇:本篇(上篇)将聚焦于“用户态Rootkit”,探讨攻击者如何在相对外围的用户空间玩弄“隐身”把戏;而下篇则将潜入系统核心,揭开“内核态Rootkit”更为强大的隐身魔法。

本系列将主要介绍的Linux Rootkit手法

让我们先从用户态的攻防开始。用户态Rootkit通过篡改系统命令、动态链接库劫持等相对简单的手法实现隐藏,易被检出,主要手法如下:

1. 篡改系统命令

替换系统命令如ps、top、ls、lsof、ss、netstat等,达到隐藏进程、文件、网络连接的目的。下图为被替换的ps命令。

  • 检测思路:系统命令文件完整性校验。

2. 篡改环境变量脚本

修改或添加环境变量shell脚本如/etc/profile、/etc/profile.d/[恶意脚本:gateway.sh]、/etc/bashrc等,劫持环境变量,覆盖常见的系统命令如ps、netstat、dir、ls、find等,使得不展示恶意进程、文件、网络连接,并在用户登录时加载生效。下图为实际入侵事件中的恶意环境变量脚本。

  • 检测思路:
    恶意环境变量脚本文件名特征匹配;
    正则或yara规则扫描环境变量脚本内容,观察是否有命中劫持特征字符串;
    audit审计监控环境变量脚本的写入,观察是否有异常写入行为。

3. 文件挂载

运行如下命令,将进程虚拟目录挂载到隐藏目录或空目录,达到隐蔽效果。下图为挂载至空目录示例。

mount [绑定选项:-o bind、--bind] [挂载目录:/tmp/.hidden、/tmp/empty] /proc/[pid]

  • 检测思路:
    /proc/$$/mountinfo可查看到/proc/[pid]挂载记录;
    ps查看不到对应进程;
    /proc/[pid]目录大小非0。

4. 动态链接器&动态链接库劫持

首先编译生成恶意.so库,劫持系统调用或其它库函数。以libprocesshider.so(链接:https://github.com/gianlucaborello/libprocesshider)为例,下图展示了其劫持libc库函数readdir()并过滤process_to_filter变量定义的恶意进程的逻辑。

然后再通过以下7种常见手法加载恶意.so库:

  1. 篡改ld动态链接器,使其从攻击者指定路径查找.so库加载;
  2. 修改$LD_PRELOAD环境变量,添加恶意预加载.so库路径;
  3. 将恶意预加载.so库路径写入/etc/ld.so.preload文件;
  4. 修改$LD_LIBRARY_PATH或$PATH环境变量,添加恶意.so库搜索路径,使得优先加载恶意.so库;
  5. 修改或创建/etc/ld.so.conf或/etc/ld.so.conf.d/*.conf文件,添加恶意.so库搜索路径,使得优先加载恶意.so库;
  6. 将对应的原始.so库直接替换为恶意.so库,如将libc.so.6替换为恶意的libc.so.6;
  7. 修改.service系统服务Environment或EnvironmentFile,配置其包含的环境变量$LD_PRELOAD、$LD_LIBRARY_PATH或$PATH,使得指定服务优先加载恶意.so库。
  • 检测思路:
    恶意.so库文件路径特征匹配;
    动态链接器文件完整性校验;
    检测全局和系统服务的$LD_PRELOAD、$LD_LIBRARY_PATH或$PATH环境变量是否配置可疑.so库或可疑.so查找路径;
    检测/etc/ld.so.preload、/etc/ld.so.conf或/etc/ld.so.conf.d/*.conf文件是否配置可疑.so库或可疑.so查找路径;
    yara规则或病毒引擎扫描运行进程加载的.so库、环境变量和ld相关配置文件配置加载的.so库、以及系统默认.so库存放路径(如/usr/lib64/);
    利用busybox静态链接编译工具,辅助排查是否有隐藏进程、文件、网络连接的情况。

5. io_uring滥用

io_uring是Linux内核自5.1版引入的一种绕过传统系统调用的异步I/O机制,它包含ubmission Queue (SQ)和Completion Queue (CQ)两个用户和内核空间共享的环形缓冲区,应用提交I/O请求至SQ并通知内核,内核异步处理完请求后把结果放进CQ,等待应用主动去取或轮询或等待通知,目前已支持处理60+种操作请求。由于无需依赖系统调用,所以监控系统调用的安全工具无法检测仅依赖io_uring的Rootkit,需要注意的是io_uring的隐藏效果不包括恶意进程/文件/网络连接本身。

以curing为例(链接:https://github.com/armosec/curing),它利用io_uring实现client端与server端通信并执行C2指令,以绕过某些安全检测工具达到一定的隐藏效果。下图分析了curing client与server端建立通信的逻辑。

下图分析了curing client端隐蔽执行写文件C2指令的逻辑。

  • 检测思路:
    由于大多数应用通常不依赖 io_uring,可通过监控io_uring接口的异常使用情况进行检测;
    利用KRSI(Kernel Runtime Security Instrumentation,内核运行时安全检测),它允许eBPF程序附加到LSM(Linux Security Module,Linux安全模块)钩子上,提供比系统调用监控钩子更为与安全相关的内核级事件;
    寻找非系统调用的替代插桩点,再利用Kprobes或eBPF技术监控,如找到一个不同内核版本在进行文件写入时每次都能触发的HOOK点。

小结

通过上文的探讨,我们可以看到,用户态Rootkit主要通过一种“欺骗”或“劫持”的逻辑来实现隐藏。尽管这些手法在实战中屡见不鲜,但它们的共同点是依赖于用户空间的环境和组件。这决定了它们并非无迹可寻:通过文件完整性校验、环境变量审计、使用静态编译工具对比等方法,我们总能发现其中的不和谐之处。

然而,当攻击不满足于在“外围”伪装,而是将触角伸向系统的“大脑”——内核时,一场真正意义上的“隐形”战争才刚拉开序幕。如果用户态Rootkit是易容术,那么内核态Rootkit就是直接控制了你的视觉神经中枢,让你对某些东西“视而不见”。在下篇中,我们将探索内核态Rootkit这一更高级的威胁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1201785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TikTok矩阵工具实操指南:分主体适配与落地流程拆解

图片来源:TK云大师摘要:TikTok矩阵运营的核心竞争力,在于工具与业务需求的精准适配。对于号商、品牌方、跨境电商而言,工具选型失误会直接导致运营效率低下、账号风险攀升。本文聚焦三类主体的核心需求,拆解可直接复用…

人群仿真软件:Pathfinder_(3).人群建模与行为设置

人群建模与行为设置 在人群仿真软件中,人群建模与行为设置是至关重要的步骤,它直接影响到仿真的准确性和可靠性。本节将详细介绍如何在Pathfinder中进行人群建模和行为设置,包括人群属性的定义、行为模式的选择和自定义行为的创建。 1. 人群…

人群仿真软件:Pathfinder_(2).Pathfinder的基本功能与操作

Pathfinder的基本功能与操作 1. 软件界面介绍 1.1 主界面布局 Pathfinder 的主界面布局清晰,主要分为以下几个部分: 菜单栏:包含文件、编辑、视图、工具等常规操作。 工具栏:提供常用的工具按钮,如新建、打开、保存…

DeepSeek+Cursor封神指南:AI驱动编码全流程实战(含代码精解)

目录标题 一、工具选型:为什么是DeepSeekCursor?二、环境搭建:3步接入满血版DeepSeek2.1 前置准备2.2 配置Cursor与DeepSeek2.3 进阶配置(优化性能与体验) 三、核心操作:CursorDeepSeek快捷用法四、实战案例…

FastAPI系列(02):第一个示例

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695python环境 python pycharm FastAPI安装 pip install fastapi 安装后就包好了pydantic、starlette 另外,FastAPI 推荐使用 uvicorn 来运行…

心愈语伴:DeepSeek+Qwen2.5打造专属情感聊天工具全教程

目录标题 一、工具核心架构与技术选型1.1 核心设计逻辑1.2 技术栈清单 二、前置准备:环境搭建与资源获取2.1 安装基础依赖2.2 获取DeepSeek API Token2.3 本地部署Qwen2.5-3B模型 三、核心开发:从接口封装到情感协同3.1 封装DeepSeek情感分析接口3.2 封装…

2026年会议纪要工具top9_工具_测评_ASR

2024 年高效语音处理方案推荐根据 IDC《2023 年中国人工智能语音转文字应用市场白皮书》,2023 年中国语音转文字市场规模达 87.6 亿元,同比增长 34.2%,企业级用户对实时转写、多语言支持的需求同比提升 41%。从微观来看,传统会议记…

Vue3+Cesium教程(38)--动态雾浓度、颜色

本学习系列以Cesium Vue3 Typescriptelementplus作为主要技术栈,后续会循序渐进,持续探索Cesium的高级功能,敬请期待。欢迎关注威信公众号“webgis学习”。详情请查阅原文 Vue3Cesium教程(38)--动态雾浓度、颜色https://mp.weixin.qq.com/s…

一天一个Python库:requests - 简单好用的HTTP请求库

requests - 简单好用的HTTP请求库 一、什么是requests? requests 是一个用于发送HTTP请求的 Python 库。 它可以帮助你:轻松发送GET、POST、PUT、DELETE等请求 处理Cookie、会话等复杂性 自动解压缩内容 处理国际化域…

Vue3+Cesium教程(37)--下雪啦!动态设置降雪效果

本学习系列以Cesium Vue3 Typescriptelementplus作为主要技术栈,后续会循序渐进,持续探索Cesium的高级功能,敬请期待。详情请查阅原文 Vue3Cesium教程(37)--下雪啦!动态设置降雪效果https://mp.weixin.qq.com/s/5RFjzPKzkVLy_7h…

星瞳OpenMV官方机械臂教程|从零开始:Robot Arm机械臂快速上手

欢迎观看OpenMV官方机械臂的第一期教程!本期将带你快速了解机械臂并掌握基础操作。 看完后,你就能开始创建自己的专属项目啦! OpenMV官方机械臂教程|从零开始快速上手*具体教程和源码可在星瞳科技OpenMV官网[OpenMV.cc]查看哦! …

【docker部署milvus向量库和可视化界面attu】

docker compose部署milvus和attu 一、配置docker镜像源1.配置镜像源2.重启Docker服务3.验证是否生效 二、docker部署milvus和可视化界面attu1.创建目录结构2.创建docker-compose.yml文件 4.通过docker compose命令快捷管理容器 一、配置docker镜像源 1.配置镜像源 Docker的配…

PX4中关于GPS质量检测和相关控制参数

一、PX4关于GPS质量检测的相关参数 PX4官方参数树:参数参照表 | PX4 Guide (main) 1、EKF2_GPS_CHECK (INT32): Integer bitmask controlling GPS checks Comment: Each threshold value is defined by the parameter indicated next to the check. …

PX4导航遇到GPS数据丢失的处理和相关控制参数

PX4导航时GPS数据丢失的处理 1. GPS数据丢失的检测与驱动层处理 PX4的检测:GPS驱动通过poll()系统调用轮询接收数据,当超过1秒无有效数据时标记为不健康(_healthyfalse)重连:驱动会关闭并重启串口,在参数中…

Java小白求职者面试:从Spring Boot到微服务架构设计的问答解析

场景描述 超好吃是一位初入职场的Java程序员,今天他来到一家互联网大厂,面试官是一位严肃且经验丰富的技术专家。这次面试以内容社区与UGC为业务场景,展开了关于Spring Boot、微服务架构设计和安全框架的技术问答。第一轮:基础知识…

day162—递归—买卖股票的最佳时机Ⅱ(LeetCode-122)

题目描述给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。然而,你可以在 同一天 多次买卖该股票,但要确保你持有的股票不…

day163—递归—买卖股票的最佳时机含冷冻期(LeetCode-309)

题目描述给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股…

Jupyter Notebook的5个实用技巧,可视化模型训练过程

一、5个实用技巧:从“黑箱训练”到“可视化调试” 技巧1:用LiveLossPlot实时绘制训练损失曲线 痛点:训练时需手动记录损失值,无法实时观察模型收敛趋势。解决方案: python# 安装:pip install livelossplo…

send-proxy vs send-proxy-v2 vs send-proxy-v2-ssl

send-proxy vs send-proxy-v2 vs send-proxy-v2-ssl下面我严格按你的要求结构来,不跳步、不混概念:先对比 send-proxy / send-proxy-v2 / send-proxy-v2-ssl(结合你的场景)明确在 LVS TOA → HAProxy → Nginx 的正…

完整教程:Spring Boot 中的定时任务:从基础调度到高可用实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …