潜伏的 Linux Rootkit:Syslogk

news2024/9/30 14:32:50

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相似引用

最后

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

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


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

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

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

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

相关文章

【黑马JVM(1)】内存结构

JVMJVM/JRE/JDK示例JVM内存管理JVM整体架构程序计数器虚拟机栈栈内存溢出线程诊断 top/ps -H/jstack案例一:CPU占用过多案例二: 程序运行很长时间没结果本地方法栈堆堆内存溢出堆内存诊断案例一:jps/jmap/jconsole工具使用案例二:…

Java---打家劫舍ⅠⅡ

目录 打家劫舍Ⅰ 题目分析 代码一 代码二 打家劫舍Ⅱ 打家劫舍Ⅰ 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被…

设备树实践操作

目录一、使用设备树给DM9000网卡_触摸屏指定中断1、修改方法2、实验方法二、在设备树中时钟的简单使用1、参考文档2、知识讲解三、在设备树中pinctrl的简单使用1、几个概念2、设备树中pinctrl节点3、platform_device, platform_driver匹配4、驱动中想选择、设置某个状态的引脚四…

ESP32设备驱动-BMI160惯性测量传感器驱动

BMI160惯性测量传感器驱动 BMI160 是一种高度集成的低功耗惯性测量单元 (IMU),可提供精确的加速度和角速率(陀螺仪)测量。 BMI160 集成: 16位数字,三轴加速度计16位数字,三轴陀螺仪BMI160特性: 高性能加速度计和陀螺仪(硬件同步) 极低功耗:typ.925A(加速度计和陀螺…

BIM小技巧丨关于如何在Revit明细表中显示门窗面积

在明细表中显示门窗面积(以门明细表为例)在新建一个门明细表后,可以发现在Revit中不能直接使用明细表统计门窗面积。 这时,可以通过使用添加“计算值”的方式来处理,得到如下图所示,两种不同的面积统计结果: 除此之外&…

Android 12 快速适配

Android 12 需要更新适配点并不多,本篇主要介绍最常见的两个需要适配的点:android:exported[1] 和 SplashScreen[2] 。一、android:exported它主要是设置 Activity 是否可由其他应用的组件启动, “true” 则表示可以,而“false”表…

满汉楼练习 马踏棋盘

1. 满汉楼 1.结构图 2. 数据库 pwd CHAR(32) NOT NULL DEFAULT ‘’,# 密码,32位 INSERT INTO employee VALUES(NULL, ‘666’, MD5(‘123456’), ‘老韩’, ‘经理’); MD5(‘123456’)是经过MD5加密过后的32位的字符串,用来保存密码 select * fro…

辉光管时钟学习制作及开源软硬件工程

文章目录前言开源地址辉光管项目介绍辉光管的工作条件硬件部分部分介绍充电电路驱动电路不足之处软件部分总结前言 作为一个电子人,一直想做一个辉光管时钟,算是大学的一个心愿,终于在快要毕业前做了一个,下面把软件和硬件的部分…

Windows事件日志监控

大多数数据泄露属内部人员而为,但各企业在监控内部网络活动方面仍存在不足。无论是大型还是小型企业,监控内部网络活动已成为其主要要求。要保护网络安全以防范泄露和威胁,各企业需要采取积极的措施来保证其网络和数据的安全性。监控事件日志…

NCRE计算机等级考试Python真题(四)

第四套试题1、以下选项中,不属于需求分析阶段的任务是:A.需求规格说明书评审B.确定软件系统的性能需求C.确定软件系统的功能需求D.制定软件集成测试计划正确答案: D2、关于数据流图(DFD)的描述,以下选项中正…

跨境人都在用的指纹浏览器到底有什么魔力?三分钟带你了解透彻

什么是指纹浏览器?这是东哥近期收到最多的粉丝私信咨询,指纹两个字大家都很熟悉,指纹浏览器就变得陌生起来。之前东哥也跟大家分享过很多次指纹浏览器的用法,鉴于还是很多人不认识这个好用的工具,东哥今天就来详细给大…

【ICCV2022】 CAPAO:一种高效的单阶段人体姿态估计模型

CAPAO:一种高效的单阶段人体姿态估计模型 重新思考关键点表示:将关键点和姿态建模作为多人姿态估计的对象(Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human Pose Estimation&#xf…

k8s学习之路 | Day16 k8s 中的容器初探

文章目录容器镜像镜像名称镜像拉取策略私有仓库的拉取策略容器的环境变量和启动命令容器的环境变量容器的启动命令容器的生命周期钩子postStartpreStop容器的探针startupProbelivenessProbereadinessProbek8s 集群中最小的管理单元就是一个Pod,而Pod里面才是容器&am…

linux下devmem访问物理寄存器MT7621 mdio控制

在同专栏的mdio访问phy的三种方式篇,我们着重介绍了通过ioctrl的方式将mdio总线与网卡绑定进行访问,但是实时上数据接口和管理接口可以独立去控制,很不幸,作者现在必须把mdio与网卡解除绑定并独立操控,因此接下来将详细…

【elementUI】基于elementUI自定义封装分页内容

文章目录前端分页的封装后端进行分页的封装,利用el-pagination网页获取数据进行分页主要有前端分页和后端分页,对于数据量较小的数据,可以使用前端分页进行实现。但是一般的分页都是后端获取分页实现前端分页的封装 思路: 1.假设一…

Mybatis源码学习笔记(五)之Mybatis框架缓存机制原理解析

1 Mybatis框架的缓存模块 MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。Mybatis框架中的缓存分为一级缓存和二级缓存,三级缓存基本都要借助自定义缓存或第三方服务来进行实现。但本质上是一样的,都是借助Cache接…

只会手工测试,裸辞后怎么才能找到工作

我们可以从以下几个方面来具体分析下,想通了,理解透了,才能更好的利用资源提升自己。 一、我会什么? 先说第一个我会什么?第一反应:我只会功能测试,在之前的4年的中我只做了功能测试。内心存在…

如何改变照片的大小kb?照片怎么改到100kb?

在平时的日常工作生活当中,我们都会遇到需要上传照片的情况,但是随着拍摄的照片越来越清晰照片体积也越来越大,很容易遇到图片太大上传不成功的情况,那么这时候应该怎么办呢?今天来给大家分享一款照片压缩器&#xff0…

TCP/IP协议,网络工程部分

这个博客参考了许多up主的视频和网上其他的博主的文章,还有我老师的ppt 这里是目录一、osi七层模型(参考模型)1.物理层2.数据链路层(数据一跳一跳进行传递)3.网络层(端到端传输)4.传输层&#x…

synchronized底层如何实现?什么是锁的升级、降级?

第16讲 | synchronized底层如何实现?什么是锁的升级、降级? 我在上一讲对比和分析了 synchronized 和 ReentrantLock,算是专栏进入并发编程阶段的热身,相信你已经对线程安全,以及如何使用基本的同步机制有了基础&#…