潜伏的 Linux Rootkit:Syslogk
Rootkit 是非常危险的恶意软件,一旦侵入就很难被发现。开发 Rootkit 通常更加困难,很多攻击者都倾向于重用开源项目。
Adore-Ng 是一个相对较老的、开源的 Linux 内核 Rootkit,最初针对内核 2.x 版本开发,但目前已更新为针对内核 3.x 版本适用。该
Rootkit 可以隐藏进程、文件甚至内核模块,使其更难被发现。它还允许经过身份验证的用户模式进程与 Rootkit 交互以控制进程,从而允许攻击者使用单个
Rootkit 隐藏许多其他恶意软件。
2022 年早期,研究人员发现基于 Adore-Ng 开发而来的在野 Rootkit。根据 .modinfo 可以看出这是为特定内核版本编译的:
内核版本
如果使用 insmod --force 的命令强制将模块加载到内核中,内核找不到所需的符号就会导致系统奔溃。发现的 Rootkit
可以在不强制加载的情况下,在 CentOS 6.10 中成功加载。
Rootkit 中硬编码的文件名为 PgSD93ql,这也是要引用的 Payload 文件名。攻击者想将该名称贴近 PostgreSQL
的文件名称,不被发现。
硬编码文件
按图索骥找到被 Rootkit 隐藏的文件,实际为 C 写的后门。由于写入文件时显示 /proc/syslogk,将其命名为 Syslogk
Rootkit。
分析 Syslogk
Syslogk Rootkit 主要基于 Adore-Ng 开发,但也包含一些更为隐蔽的新功能。
加载内核模块
要将 Rootkit 加载到内核空间,需要与编译时使用的内核版本大致匹配,但不必严格相同。
通过 insmod 命令,即可在 Centos 6.10 中轻松加载该 Rootkit。但加载后使用 lsmod
命令,并不会看到内核模块列表中出现该恶意驱动程序。
掀开隐藏面纱
Rootkit 中的 hide_module 函数,使用内核 API list_del 从内核模块的链表中删除该模块。不过,Rootkit 在函数中实现了
proc_write 函数,当 /proc/syslogk 文件被写入 1 时,就会显示 Rootkit。
现形
一旦 Rootkit 被确认,就可以使用 rmmod 命令将其删除。
功能概述
Syslogk 使用了多种方式隐藏自身:
通过 hk_proc_readdir 隐藏包含恶意文件的目录
通过 hk_getpr 隐藏特定进程
通过 hk_t4_seq_show 隐藏特定服务
通过安装 netfilter hook 控制接收到的特制 TCP 数据包
通过硬编码的密钥利用特制 TCP 数据包远程启动 Payload
Syslogk 非常隐蔽,在特制的 TCP 数据包发送到实现主机前并不会加载后门,执行时也是打着 SMTP 合法服务的旗号进行隐蔽传输。
在为 PTE 增加了写权限后,Rootkit 就可以 Hook 指定函数:
Hook
函数
通过 /proc/kallsyms 获取到可 Hook 的内核符号地址后,Rootkit 使用
udis86对指定函数进行 Hook。
目录隐藏
Syslogk Rootkit Hook 了 VFS 函数来隐藏 /etc/rc-Zobk0jpi/PgSD93ql 文件。Hook 是通过
hk_root_readdir 调用 nw_root_filldir 目录过滤实现的。
部分代码
如上所示,任何包含 -Zobk0jpi 字符串的目录都会被隐藏。这一方式一点都不新鲜,可以查看 Adore-Ng
的[源码](https://github.com/yaoyumeng/adore-ng/blob/master/adore-
ng.c#L300)是如何实现的。
进程隐藏
Syslogk 进程隐藏的方式比 Adore-Ng 更简单,默认隐藏名为 PgSD93ql 的进程。
版本比较
流量隐藏
Rootkit 通过在 adore_tcp4_seq_show() 函数中利用 strnstr 函数查找特定端口的十六进制字符串,如果发现即删掉。以此,将如
netstat 的 Linux 应用程序查询监听连接时的结果进行过滤。
流量隐藏
这样,在查看失陷主机的连接情况时,就不会出现后门的连接。
特制 TCP 数据包
启动虚假 SMTP 服务器的特制 TCP 数据包非常简单,只要数据包符合 TCP 且来源端口为 59318 即可触发。
启动
启动服务前,Rootkit 会调用 pkill_clone_0 终止所有实例。然后通过
call_usermodehelper_setup、call_usermodehelper_setfns 和
call_usermodehelper_exec 的内核 API 启动服务。
/bin/sh -c /etc/rc-Zobk0jpi/PgSD93ql
停止服务的特制 TCP 数据包要求高很多:
检查启用执行标志
检查 TCP 头中的 ReservedTCP 为 0x08
检查源端口在 63400 到 63411 之间
检查源 IP 与目的端口与启动的特制 TCP 数据包一致
检查硬编码的密钥 D9sd87JMaij
硬编码的密钥的偏移量是通过 TCP 头中的 data offset 进行设置的,将 4 bit 的字节向右移动并乘以 4 后即可指向预期偏移量。
偏移量
在分析时,data offset 使用的值为 0x50,右移后会得到 20。这正好是 TCP 头的大小,使用这个值可以将密钥放在数据包数据部分的开头位置。
分析 Rekoobe
通过特制 TCP 数据包启动 Rekoobe 后,Rekoobe 看起来像一个普通的 SMTP 服务器。但其中存在后门指令
starttls,在正常情况下该指令是要开始 TLS 协商。
后门指令
为了触发 Rekoobe 后门,攻击者通过 TLS 发送 0x03 字节,随后是 TLV 格式的编码数据。
传送数据
溯源
如下所示,Rekoobe 显然是基于
TinySHell开源项目。
相似对比
另一方面,在 Syslogk Rootkit 中也有对 TinySHell 的引用,如下所示:
相似引用
最后
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:
相关文章:

潜伏的 Linux Rootkit:Syslogk
Rootkit 是非常危险的恶意软件,一旦侵入就很难被发现。开发 Rootkit 通常更加困难,很多攻击者都倾向于重用开源项目。 Adore-Ng 是一个相对较老的、开源的 Linux 内核 Rootkit,最初针对内核 2.x 版本开发,但目前已更新为针对内核…...

JVM总结
1. 内存结构 线程私有区 程序计算器 作用:是一块较小的内存空间,存储的是当前线程所执行的字节码文件的序号特点:线程私有,不会出现内存空间溢出 虚拟机栈 虚拟机栈是管理JAVA方法执行的内存模型,每个方法执行时都…...

AOF:redis宕机,如何避免数据丢失
由于redis是基于内存的数据库,一旦宕机,数据就会丢失?如何解决? 目前,Redis 的持久化主要有两大机制,即 AOF(Append Only File)日志和 RDB(Redis DataBase) 快照。 AO…...

LC-3—MIO、MMIO、Caller Save、Callee Save
LC-3—MMIO、Caller Save、Callee SaveMMIOCaller Save、Callee Save举个例子MMIO MMIO(Memory Mapped I/O)是一种在系统内存中映射I/O端口的技术,它允许设备直接访问内存中的特定地址,从而实现I/O操作。MMIO技术可以提高I/O操作…...

SQL注入报错注入之floor()报错注入原理分析
简介 对于SQL注入的报错注入通常有三个函数需要我们掌握: extractValue(xml_frag, xpath_expr)updateXML(xml_target, xpath_expr,new_xml)floor() 对于extractValue和updateXML函数来说比较好理解,就不做解释了,这里只对floor函数的报错注…...

2023CS双非保研985经验分享(南大、华科、中科大科学岛、国防科大、西交、中南、深圳大学、北邮、中科院等)
前言: 2022保研以来,因为自己的双非背景,要与985、211的排名靠前的计科大佬竞争,不自信、焦虑无时无刻的包围着我;所幸,一路以受到了许多学长、学姐耐心的帮助,也有很多保研的同学一路互相支撑。…...
Shell中的IFS
IFS是shell的内置变量,IFS是一个字符串,里面的每一个字符都会用来作为分隔符进行单词分割。 IFS变量只在当前shell起作用。 一、对$*的影响 先做参数替换把$*替换成参数列表。相当于args[] 然后下面分两种情况: (1)…...
Java学习线路图--书籍推荐
----基础---- 《Java从入门到精通》 ----进阶---- 一 《Java项目开发全程实录》《Java开发实例大全(基础篇)》《Java开发实例大全(提高篇)》 二 《Java Web从入门到精通》《Java Web项目开发全程实录》《Java Web开发实例大…...

【GO】k8s 管理系统项目23[前端部分–工作负载-Pod]
k8s 管理系统项目[前端部分–工作负载-Deployment] 1. 代码部分 1.1 准备工作 由于Pod页面和Deployment内容差不多.那么就直接把Deployment的内容复制过来.再做修改. 替换Deployment为Pod替换Deploy为Pod替换deployment为pod替换deploy为pod禁用新增的按钮,删除新增方法,表…...

rabbitmq在linux系统下安装步骤
第一步:登录官网 官网地址:www.rabbitmq.com,点击Get Started 重要信息:RabbitMQ Tutorials手册,描述了工作模式 第二步:点击Download Installation下载 重要信息:rabbitmq是用erlang语言开发的࿰…...

阿里测试员晒薪资条,看完真的扎心了...
前几天,有位老粉私信我,说看到某95后学弟晒出阿里的工资单,他是真酸了…想狠补下技术,努力冲一把大厂。 为了帮到他,也为了大家能在最短的时间内做面试复习,我把软件测试面试系列都汇总在这一篇文章了。 …...
内网渗透辅助工具集Yasso
目录 介绍 工具优势 程序功能模块 目前已有用功能模块 使用例子 工具下载</...
Spring笔记(1):概述
1、什么是Spring? Spring是最受欢迎的企业级Java应用程序开发框架,使用它创建性能好、易于测试、可重用的代码。Spring是一种轻量级的框架。Spring框架的核心特性是开发任何Java应用程序,其目标是使得J2EE开发变得更容易,通过启用…...

工程机械焊接件焊接结构件三维扫描检测外观质量控制-CASAIM三维扫描检测仪
焊接已发展为制造业中的一种重要的加工方法,广泛应用于航空、航天、冶金、石油、汽车制造以及国防等领域。工程机械焊接件品种繁多、几何形状复杂,焊接件质量的好坏将直接影响到产品的使用寿命长短。对焊缝表面尺寸测量及评定表面焊缝缺陷时,…...

使用linux部署项目步骤
文章目录前言一、服务器环境配置二、数据库导入三、项目打包1、修改项目中的访问路径2、修改db.properties的数据库访问路径3、打包4、修改配置,启动服务四、测试总结前言 今天学习了在服务器中部署项目,记录一下 一、服务器环境配置 首先要安装VMware&…...
pt02-list-tuple-dir
容器类型 通用操作 数学运算符 (1) 用于拼接两个容器 (2) 用原容器与右侧容器拼接,并重新绑定变量 (3) * 重复生成容器元素 (4) * 用原容器生成重复元素, 并重新绑定变量 (5) !:依次比较两个容器中元素,一但不同则返回比较结果。< < > > 意…...

高端电器新十年,求解「竞速突围」
竞争激烈的高端电器品牌们,平时王不见王,但也有例外。海尔、博西、海信、创维、方太、老板等等近乎中国电器行业所有一线品牌副总裁级别以上高层,2月22日都现身于上海,来参加一场由红星美凯龙攒起来的高端电器局,2023中…...

[Android Studio] Android Studio使用keytool工具读取Debug 调试版数字证书以及release 发布版数字证书
🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…...

2023年金三银四必备软件测试常见面试题1500问!!!【测试思维篇】
五、测试思维5.1 打电话功能怎么去测?我们会从几个方面去测试:界面、功能、兼容性、易用性、安全、性能、异常。1)界面我们会测试下是否跟界面原型图一致,考虑浏览器不同显示比例,屏幕分辨率。2)功能&#…...

推荐四款自用的电脑神器
作为一个经常鼓捣电脑的小编来说,无论是写文章、截图、办公方面都缺少不了一些好用的软件,今天就给大家盘点一些我推荐用的办公效率工具,让你的效率事半功倍。 写文章神器 以前写文章一直是在公众号编辑上直接写的,缺点就是格式有…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...