当前位置: 首页 > news >正文

潜伏的 Linux Rootkit:Syslogk

Rootkit 是非常危险的恶意软件,一旦侵入就很难被发现。开发 Rootkit 通常更加困难,很多攻击者都倾向于重用开源项目。

Adore-Ng 是一个相对较老的、开源的 Linux 内核 Rootkit,最初针对内核 2.x 版本开发,但目前已更新为针对内核 3.x 版本适用。该
Rootkit 可以隐藏进程、文件甚至内核模块,使其更难被发现。它还允许经过身份验证的用户模式进程与 Rootkit 交互以控制进程,从而允许攻击者使用单个
Rootkit 隐藏许多其他恶意软件。

2022 年早期,研究人员发现基于 Adore-Ng 开发而来的在野 Rootkit。根据 .modinfo 可以看出这是为特定内核版本编译的:

image.png-65.8kB内核版本

如果使用 insmod --force 的命令强制将模块加载到内核中,内核找不到所需的符号就会导致系统奔溃。发现的 Rootkit
可以在不强制加载的情况下,在 CentOS 6.10 中成功加载。

Rootkit 中硬编码的文件名为 PgSD93ql,这也是要引用的 Payload 文件名。攻击者想将该名称贴近 PostgreSQL
的文件名称,不被发现。

image.png-35.7kB硬编码文件

按图索骥找到被 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。

image.png-55.7kB现形

一旦 Rootkit 被确认,就可以使用 rmmod 命令将其删除。

功能概述

Syslogk 使用了多种方式隐藏自身:

通过 hk_proc_readdir 隐藏包含恶意文件的目录

通过 hk_getpr 隐藏特定进程

通过 hk_t4_seq_show 隐藏特定服务

通过安装 netfilter hook 控制接收到的特制 TCP 数据包

通过硬编码的密钥利用特制 TCP 数据包远程启动 Payload

Syslogk 非常隐蔽,在特制的 TCP 数据包发送到实现主机前并不会加载后门,执行时也是打着 SMTP 合法服务的旗号进行隐蔽传输。

在为 PTE 增加了写权限后,Rootkit 就可以 Hook 指定函数:

image.png-41.9kBHook
函数

通过 /proc/kallsyms 获取到可 Hook 的内核符号地址后,Rootkit 使用
udis86对指定函数进行 Hook。

目录隐藏

Syslogk Rootkit Hook 了 VFS 函数来隐藏 /etc/rc-Zobk0jpi/PgSD93ql 文件。Hook 是通过
hk_root_readdir 调用 nw_root_filldir 目录过滤实现的。

image.png-34.6kB部分代码

如上所示,任何包含 -Zobk0jpi 字符串的目录都会被隐藏。这一方式一点都不新鲜,可以查看 Adore-Ng
的[源码](https://github.com/yaoyumeng/adore-ng/blob/master/adore-
ng.c#L300)是如何实现的。

进程隐藏

Syslogk 进程隐藏的方式比 Adore-Ng 更简单,默认隐藏名为 PgSD93ql 的进程。

image.png-84.6kB版本比较

流量隐藏

Rootkit 通过在 adore_tcp4_seq_show() 函数中利用 strnstr 函数查找特定端口的十六进制字符串,如果发现即删掉。以此,将如
netstat 的 Linux 应用程序查询监听连接时的结果进行过滤。

image.png-96.6kB流量隐藏

这样,在查看失陷主机的连接情况时,就不会出现后门的连接。

特制 TCP 数据包

启动虚假 SMTP 服务器的特制 TCP 数据包非常简单,只要数据包符合 TCP 且来源端口为 59318 即可触发。

image.png-101kB启动

启动服务前,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 后即可指向预期偏移量。

image.png-29.8kB偏移量

在分析时,data offset 使用的值为 0x50,右移后会得到 20。这正好是 TCP 头的大小,使用这个值可以将密钥放在数据包数据部分的开头位置。

分析 Rekoobe

通过特制 TCP 数据包启动 Rekoobe 后,Rekoobe 看起来像一个普通的 SMTP 服务器。但其中存在后门指令
starttls,在正常情况下该指令是要开始 TLS 协商。

image.png-69.6kB后门指令

为了触发 Rekoobe 后门,攻击者通过 TLS 发送 0x03 字节,随后是 TLV 格式的编码数据。

image.png-118.7kB传送数据

溯源

如下所示,Rekoobe 显然是基于
TinySHell开源项目。

image.png-116.4kB相似对比

另一方面,在 Syslogk Rootkit 中也有对 TinySHell 的引用,如下所示:

image.png-94.6kB相似引用

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

相关文章:

潜伏的 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&#xff09…...

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语言开发的&#xff0…...

阿里测试员晒薪资条,看完真的扎心了...

前几天,有位老粉私信我,说看到某95后学弟晒出阿里的工资单,他是真酸了…想狠补下技术,努力冲一把大厂。 为了帮到他,也为了大家能在最短的时间内做面试复习,我把软件测试面试系列都汇总在这一篇文章了。 …...

内网渗透辅助工具集Yasso

目录 介绍 工具优势 程序功能模块 目前已有用功能模块 使用例子 工具下载</...

Spring笔记(1):概述

1、什么是Spring&#xff1f; Spring是最受欢迎的企业级Java应用程序开发框架&#xff0c;使用它创建性能好、易于测试、可重用的代码。Spring是一种轻量级的框架。Spring框架的核心特性是开发任何Java应用程序&#xff0c;其目标是使得J2EE开发变得更容易&#xff0c;通过启用…...

工程机械焊接件焊接结构件三维扫描检测外观质量控制-CASAIM三维扫描检测仪

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

使用linux部署项目步骤

文章目录前言一、服务器环境配置二、数据库导入三、项目打包1、修改项目中的访问路径2、修改db.properties的数据库访问路径3、打包4、修改配置&#xff0c;启动服务四、测试总结前言 今天学习了在服务器中部署项目&#xff0c;记录一下 一、服务器环境配置 首先要安装VMware&…...

pt02-list-tuple-dir

容器类型 通用操作 数学运算符 (1) 用于拼接两个容器 (2) 用原容器与右侧容器拼接,并重新绑定变量 (3) * 重复生成容器元素 (4) * 用原容器生成重复元素, 并重新绑定变量 (5) !&#xff1a;依次比较两个容器中元素,一但不同则返回比较结果。< < > > 意…...

高端电器新十年,求解「竞速突围」

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

[Android Studio] Android Studio使用keytool工具读取Debug 调试版数字证书以及release 发布版数字证书

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…...

2023年金三银四必备软件测试常见面试题1500问!!!【测试思维篇】

五、测试思维5.1 打电话功能怎么去测&#xff1f;我们会从几个方面去测试&#xff1a;界面、功能、兼容性、易用性、安全、性能、异常。1&#xff09;界面我们会测试下是否跟界面原型图一致&#xff0c;考虑浏览器不同显示比例&#xff0c;屏幕分辨率。2&#xff09;功能&#…...

推荐四款自用的电脑神器

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

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...