Linux 应急响应

TuxResponse 是一个用 bash 编写的 Linux 系统应急响应脚本。它可以自动化 Linux 系统上的应急响应活动,让您在不影响结果的情况下快速对系统进行分类。通常企业系统会有某种监控和控制,但由于影子 IT 和非标准镜像在企业的部署,也存在例外情况。 原本需要输入 10 条命令并反复测试的工作,现在只需按一下按钮即可完成。
已在以下环境测试:
主要目的:
软件包中包含的外部工具:
INSTALL LiME
function init_lime(){
if [ -f /usr/bin/yum ]; then
yum -y install make kernel-headers kernel-devel gcc
elif [ -f /usr/bin/apt-get ]; then
apt-add-repository universe
apt-get -y install make linux-headers-$(uname -r) gcc
fi
rm -f /tmp/v1.8.1.zip
wget -P/tmp https://github.com/504ensicsLabs/LiME/archive/v1.8.1.zip
unzip /tmp/v1.8.1.zip
rm -f /tmp/v1.8.1.zip
pushd LiME-1.8.1/src
make
mv lime-*.ko /tmp/lime.ko
popd
rm -rf LiME-1.8.1
}
在响应事件时,如果必须手动逐条输入所有命令来安装 LiME,这将显著拖慢您的速度。
1) 系统信息、IP、日期、时间、本地时区、上次启动 - 'hostnamectl; who -b; uname -a; uptime; ifconfig; date; last reboot'
1) 检查已挂载的文件系统 -'df -h'
2) 对可执行文件进行哈希(MD5) - 'find /usr/bin -type f -exec file "{}" \; | grep -i "elf" | cut -f1 -d: | xargs -I "{}" -n 1 md5sum {}'
3) 修改过的文件 - 'modified_files_period_select'(调用 tuxresponse.sh 中的函数)
4) 列出所有隐藏目录 - 'find / -type d -name "\.*"'
5) 无用户/组名的文件/目录 - 'find / \( -nouser -o -nogroup \) -exec ls -l {} \; 2>/dev/null'
6) 来自软件包的已修改文件 -'packaged_files_changed'(调用 tuxresponse.sh 中的函数)
1) 检查 rootkit - 运行 'chkrootkit'
2) Yara 扫描 - 调用 tuxresponse.sh 中的函数 'yara_select'(使用主仓库中所有可用的 YARA Linux 规则扫描系统)
3) EXIFTool - 调用 tuxresponse.sh 中的函数 'exiftool_select'(安装 EXIFTool)
1) 列出正在运行的进程 - 'ps -axu'
2) 仍在运行的已删除二进制 - 'ls -alR /proc/*/exe 2> /dev/null | grep deleted'
3) 活跃网络连接(TCP、UDP) - 'ss -tunap | sed "s/[ \t]\+/|/g"'
4) 基于 PID 转储进程 - 'dump_process_select'(调用 tuxresponse.sh 中的函数)
1) 输入要转储的 PID:**(这是执行的命令 - gcore -a -o "${DUMP_FILE}" ${DUMP_PID} )**
5) 从 /tmp、/dev 运行的进程 - 'ls -alR /proc/*/cwd 2> /dev/null | grep -E "tmp|dev"'
1) 列出所有活跃网络连接/原始套接字 - 'netstat -nalp; netstat -plant'
1) 列出所有连接到系统的用户 - 'w'
2) 获取有密码的用户 - 'getent passwd'
1) 检查 bash 历史文件 - 'cat ~/.bash_history | nl'
1) 列出所有 Cron 任务 - 'list_all_crontab'(调用 tuxresponse.sh 中的函数)
2) 列出所有启动/开机程序 - 'list_all_onstartup'(调用 tuxresponse.sh 中的函数)
1) 转储用户的 .bash_history - 'cat_all_bash_history'(调用 tuxresponse.sh 中的函数)
2) 查找包含二进制内容的日志 - 'grep [[:cntrl:]] /var/log/*.log'
此选项使您能够连接到远程系统,复制所有脚本和工具并分析该系统。
此选项使您能够从源代码编译 LiME 并转储系统的 RAM 内存。这是最简单的方法,因为另一种方法是为所有主要内核版本从源代码编译并插入 LKM。
此选项使您能够使用著名工具 dd 对目标系统进行完整磁盘镜像。该函数将源和目标作为参数,并将它们插入以下命令:'dd if=${IMAGE_IN} | pv | dd of='${IMAGE_OUT}' bs=4K conv=noerror,sync'。如果您正在调查远程系统,脚本会将自身复制到远程系统。然后如果设置了参数 ${TARGET_HOST},脚本将使用以下命令将镜像下载到分析系统:>> "ssh -p${TARGET_PORT} ${TARGET_USER}@${TARGET_HOST} 'dd if=${IMAGE_IN} bs=4K conv=noerror,sync' | pv | dd of='${IMAGE_OUT}'"(我大量使用 pv 来确保进度可追踪)
您所做的所有操作都会记录在文本文件中,因此可以轻松返回查看输出。其美妙之处在于您可以将其上传到您最喜欢的日志分析工具中,并在后续阶段进行分析。除此之外,您还可以使用此功能生成 HTML 报告,以更易读的形式查看命令生成的输出。
安装脚本正常运行所需的二进制文件。
1) 依赖项
2) Yara 和规则
3) ExifTool
4) 初始检查
5) chckrootkit
6) LiME
对 tuxresponse.sh 进行了强化和取证可靠性方面的改进:
YYYYMMDDTHHMMSSZ)而非本地时间,以确保时间戳的可辩护性。evidence/manifest.txt;磁盘镜像会生成一个同名的 .sha256 文件。modified_files_period_select 不再在目标文件系统上 touch 时间戳文件(该操作曾在 find 扫描前污染 /tmp 的 atime/mtime)。现在它使用 find / -xdev -newermt "1 $opt ago"。_create_disk_image 中的 eval ${DD_CMD};dd/ssh 管道直接运行,且在源设备使用前会通过 ^/dev/[a-zA-Z0-9]+$ 进行验证。注意:菜单驱动模式仍依赖于
.cmds.sh、.menu_en.sh和forensics.sh,这些文件不在此仓库中。重建命令/菜单目录的工作已另行跟踪。
dump_process_select 在调用 gcore 前验证 PID 是否为数字,并且 /proc/<pid> 是否存在。exec_CMD 不再使用 eval;内部目录中的 shell 管道命令通过 bash -c 执行。set -euo pipefail 下运行,全局变量预先初始化。DISTO → DISTRO 拼写错误(此前会静默错误命名发行版)。apt-get install netstat → net-tools。ls)遍历 evidence/*.txt,并跳过 manifest 文件;输出变量已加引号。VERSION='1.1' 常量;横幅会打印版本号。shellcheck -S error 检查无错误。