Linux Forensics

使用 Trickest 可轻松构建和自动化工作流程,使用全球最先进的社区工具。 立即获取访问权限:

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

初始信息收集

基本信息

首先,建议准备一些带有已知良好二进制文件和库的 USB(您可以使用 Ubuntu,然后复制文件夹 /bin/sbin/lib/lib64),然后挂载 USB,并修改环境变量以使用这些二进制文件:

export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64

一旦您配置系统以使用良好且已知的二进制文件,您可以开始提取一些基本信息

date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info
ifconfig -a || ip a #Network interfaces (promiscuous mode?)
ps -ef #Running processes
netstat -anp #Proccess and ports
lsof -V #Open files
netstat -rn; route #Routing table
df; mount #Free space and mounted devices
free #Meam and swap space
w #Who is connected
last -Faiwx #Logins
lsmod #What is loaded
cat /etc/passwd #Unexpected data?
cat /etc/shadow #Unexpected data?
find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory

可疑信息

在获取基本信息时,应检查以下奇怪的事物:

  • Root进程通常以较低的PID运行,因此如果发现一个具有较大PID的Root进程,可能存在可疑

  • 检查/etc/passwd中没有shell的用户的注册登录

  • 检查/etc/shadow中没有shell的用户的密码哈希

内存转储

要获取运行系统的内存,建议使用LiME。 要编译它,需要使用受害机器正在使用的相同内核

请记住,您不能在受害机器上安装LiME或任何其他东西,因为这将对其进行多处更改

因此,如果您有Ubuntu的相同版本,可以使用apt-get install lime-forensics-dkms 在其他情况下,您需要从github下载LiME,并使用正确的内核头文件编译它。要获取受害机器的确切内核头文件,您只需将目录/lib/modules/<kernel version>复制到您的机器上,然后使用它们编译 LiME:

make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"

LiME支持3种格式

  • 原始(每个段连接在一起)

  • 填充(与原始相同,但右位填充为零)

  • Lime(推荐的带有元数据的格式)

LiME还可以用于通过网络发送转储,而不是将其存储在系统上,使用类似于:path=tcp:4444

磁盘成像

关机

首先,您需要关闭系统。这并不总是一个选项,因为有时系统将是公司无法负担关闭的生产服务器。 有2种方式关闭系统,正常关机和**"拔插头"关机**。第一种方法将允许进程像往常一样终止文件系统将被同步,但也会允许可能的恶意软件破坏证据。"拔插头"方法可能会带来一些信息丢失(不会丢失太多信息,因为我们已经对内存进行了镜像),恶意软件将没有任何机会对此做任何事情。因此,如果您怀疑可能存在恶意软件,只需在系统上执行**sync**命令然后拔掉电源插头。

对磁盘进行成像

重要的是要注意,在将计算机连接到与案件相关的任何内容之前,您需要确保它将以只读方式挂载,以避免修改任何信息。

#Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512

#Raw copy with hashes along the way (more secure as it checks hashes while it's copying the data)
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes

磁盘镜像预分析

使用没有更多数据的磁盘镜像。

#Find out if it's a disk image using "file" command
file disk.img
disk.img: Linux rev 1.0 ext4 filesystem data, UUID=59e7a736-9c90-4fab-ae35-1d6a28e5de27 (extents) (64bit) (large files) (huge files)

#Check which type of disk image it's
img_stat -t evidence.img
raw
#You can list supported types with
img_stat -i list
Supported image format types:
raw (Single or split raw file (dd))
aff (Advanced Forensic Format)
afd (AFF Multiple File)
afm (AFF with external metadata)
afflib (All AFFLIB image formats (including beta ones))
ewf (Expert Witness Format (EnCase))

#Data of the image
fsstat -i raw -f ext4 disk.img
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: Ext4
Volume Name:
Volume ID: 162850f203fd75afab4f1e4736a7e776

Last Written at: 2020-02-06 06:22:48 (UTC)
Last Checked at: 2020-02-06 06:15:09 (UTC)

Last Mounted at: 2020-02-06 06:15:18 (UTC)
Unmounted properly
Last mounted on: /mnt/disk0

Source OS: Linux
[...]

#ls inside the image
fls -i raw -f ext4 disk.img
d/d 11: lost+found
d/d 12: Documents
d/d 8193:       folder1
d/d 8194:       folder2
V/V 65537:      $OrphanFiles

#ls inside folder
fls -i raw -f ext4 disk.img 12
r/r 16: secret.txt

#cat file inside image
icat -i raw -f ext4 disk.img 16
ThisisTheMasterSecret

使用 Trickest 可轻松构建和自动化由全球最先进的社区工具驱动的工作流程。 立即获取访问权限:

搜索已知恶意软件

修改过的系统文件

Linux 提供了用于确保系统组件完整性的工具,这对于发现潜在问题文件至关重要。

  • 基于 RedHat 的系统:使用 rpm -Va 进行全面检查。

  • 基于 Debian 的系统:首先使用 dpkg --verify 进行初始验证,然后使用 debsums | grep -v "OK$"(在使用 apt-get install debsums 安装 debsums 后)来识别任何问题。

恶意软件/Rootkit 检测器

阅读以下页面,了解可用于查找恶意软件的工具:

pageMalware Analysis

搜索已安装的程序

要有效地搜索 Debian 和 RedHat 系统上已安装的程序,考虑在常见目录中手动检查的同时,利用系统日志和数据库。

  • 对于 Debian,检查 /var/lib/dpkg/status/var/log/dpkg.log 以获取有关软件包安装的详细信息,使用 grep 过滤特定信息。

  • RedHat 用户可以使用 rpm -qa --root=/mntpath/var/lib/rpm 查询 RPM 数据库以列出已安装的软件包。

要查找手动安装或不在这些软件包管理器之外安装的软件,请探索目录如 /usr/local/opt/usr/sbin/usr/bin/bin/sbin。将目录列表与特定于系统的命令结合使用,以识别与已知软件包不相关的可执行文件,增强您对所有已安装程序的搜索。

# Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
cat /var/log/dpkg.log | grep installed
# RedHat RPM database query
rpm -qa --root=/mntpath/var/lib/rpm
# Listing directories for manual installations
ls /usr/sbin /usr/bin /bin /sbin
# Identifying non-package executables (Debian)
find /sbin/ -exec dpkg -S {} \; | grep "no path found"
# Identifying non-package executables (RedHat)
find /sbin/ –exec rpm -qf {} \; | grep "is not"
# Find exacuable files
find / -type f -executable | grep <something>

使用 Trickest 来轻松构建和自动化工作流程,利用世界上最先进的社区工具。 立即获取访问权限:

恢复已删除的运行二进制文件

想象一下,有一个进程是从 /tmp/exec 执行的,然后被删除了。可以提取它。

cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000
dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it

检查自启动位置

计划任务

cat /var/spool/cron/crontabs/*  \
/var/spool/cron/atjobs \
/var/spool/anacron \
/etc/cron* \
/etc/at* \
/etc/anacrontab \
/etc/incron.d/* \
/var/spool/incron/* \

#MacOS
ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/

服务

恶意软件可能安装为服务的路径:

  • /etc/inittab:调用初始化脚本如rc.sysinit,进一步指向启动脚本。

  • /etc/rc.d//etc/rc.boot/:包含用于服务启动的脚本,后者在旧版Linux中找到。

  • /etc/init.d/:在某些Linux版本(如Debian)中用于存储启动脚本。

  • 服务也可以通过 /etc/inetd.conf/etc/xinetd/ 激活,取决于Linux变体。

  • /etc/systemd/system:用于系统和服务管理器脚本的目录。

  • /etc/systemd/system/multi-user.target.wants/:包含应在多用户运行级别中启动的服务的链接。

  • /usr/local/etc/rc.d/:用于自定义或第三方服务。

  • ~/.config/autostart/:用于特定用户的自动启动应用程序,可能是针对用户的恶意软件的隐藏位置。

  • /lib/systemd/system/:由安装的软件包提供的系统范围默认单元文件。

内核模块

Linux内核模块,恶意软件经常用作rootkit组件,在系统启动时加载。用于这些模块的关键目录和文件包括:

  • /lib/modules/$(uname -r):保存正在运行的内核版本的模块。

  • /etc/modprobe.d:包含用于控制模块加载的配置文件。

  • /etc/modprobe/etc/modprobe.conf:全局模块设置的文件。

其他自启动位置

Linux使用各种文件在用户登录时自动执行程序,可能隐藏恶意软件:

  • /etc/profile.d/*、/etc/profile/etc/bash.bashrc:对任何用户登录执行。

  • ~/.bashrc~/.bash_profile~/.profile~/.config/autostart:用户特定文件,在其登录时运行。

  • /etc/rc.local:在所有系统服务启动后运行,标志着过渡到多用户环境的结束。

检查日志

Linux系统通过各种日志文件跟踪用户活动和系统事件。这些日志对于识别未经授权的访问、恶意软件感染和其他安全事件至关重要。关键日志文件包括:

  • /var/log/syslog(Debian)或 /var/log/messages(RedHat):捕获系统范围的消息和活动。

  • /var/log/auth.log(Debian)或 /var/log/secure(RedHat):记录认证尝试、成功和失败的登录。

  • 使用 grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log 过滤相关认证事件。

  • /var/log/boot.log:包含系统启动消息。

  • /var/log/maillog/var/log/mail.log:记录电子邮件服务器活动,有助于跟踪与电子邮件相关的服务。

  • /var/log/kern.log:存储内核消息,包括错误和警告。

  • /var/log/dmesg:保存设备驱动程序消息。

  • /var/log/faillog:记录失败的登录尝试,有助于安全事件调查。

  • /var/log/cron:记录cron作业执行。

  • /var/log/daemon.log:跟踪后台服务活动。

  • /var/log/btmp:记录失败的登录尝试。

  • /var/log/httpd/:包含Apache HTTPD错误和访问日志。

  • /var/log/mysqld.log/var/log/mysql.log:记录MySQL数据库活动。

  • /var/log/xferlog:记录FTP文件传输。

  • /var/log/:始终检查意外日志。

Linux系统日志和审计子系统可能在入侵或恶意软件事件中被禁用或删除。因为Linux系统上的日志通常包含有关恶意活动的最有用信息,入侵者经常删除它们。因此,在检查可用的日志文件时,重要的是查找可能表示删除或篡改的间隙或顺序不当的条目。

Linux为每个用户维护一个命令历史记录,存储在:

  • ~/.bash_history

  • ~/.zsh_history

  • ~/.zsh_sessions/*

  • ~/.python_history

  • ~/.*_history

此外,last -Faiwx 命令提供用户登录列表。检查其中是否有未知或意外的登录。

检查可能授予额外权限的文件:

  • 检查 /etc/sudoers 是否授予了意外的用户权限。

  • 检查 /etc/sudoers.d/ 是否授予了意外的用户权限。

  • 检查 /etc/groups 以识别任何异常的组成员或权限。

  • 检查 /etc/passwd 以识别任何异常的组成员或权限。

一些应用程序还会生成自己的日志:

  • SSH:检查 ~/.ssh/authorized_keys~/.ssh/known_hosts 是否存在未经授权的远程连接。

  • Gnome桌面:查看 ~/.recently-used.xbel 以查找通过Gnome应用程序最近访问的文件。

  • Firefox/Chrome:检查 ~/.mozilla/firefox~/.config/google-chrome 中的浏览器历史记录和下载,以查看可疑活动。

  • VIM:查看 ~/.viminfo 以获取使用详细信息,如访问的文件路径和搜索历史。

  • Open Office:检查最近访问的文档,可能指示文件受到 compromise。

  • FTP/SFTP:查看 ~/.ftp_history~/.sftp_history 中的日志,以查看可能未经授权的文件传输。

  • MySQL:调查 ~/.mysql_history 中执行的MySQL查询,可能揭示未经授权的数据库活动。

  • Less:分析 ~/.lesshst 以获取使用历史,包括查看的文件和执行的命令。

  • Git:检查 ~/.gitconfig 和项目 .git/logs 以查看对存储库的更改。

USB日志

usbrip 是一款纯Python 3编写的小型软件,用于解析Linux日志文件(取决于发行版,可能是 /var/log/syslog*/var/log/messages*)以构建USB事件历史表。

了解所有已使用的USB设备是很有趣的,如果您有一个授权的USB设备列表,将更有用,以查找“违规事件”(使用不在该列表中的USB设备)。

安装

pip3 install usbrip
usbrip ids download #Download USB ID database

例子

usbrip events history #Get USB history of your curent linux machine
usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR user
#Search for vid and/or pid
usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid

更多示例和信息请查看github:https://github.com/snovvcrash/usbrip

使用Trickest可以轻松构建和自动化工作流程,利用世界上最先进的社区工具。 立即获取访问权限:

查看用户账户和登录活动

检查 /etc/passwd/etc/shadow安全日志,查找是否存在异常名称或在已知未经授权事件附近创建或使用的帐户。还要检查可能的sudo暴力攻击。 此外,检查 /etc/sudoers/etc/groups 等文件,查看是否给用户授予了意外的特权。 最后,查找没有密码或易于猜测密码的帐户。

检查文件系统

在恶意软件调查中分析文件系统结构

在调查恶意软件事件时,文件系统的结构是信息的重要来源,可以揭示事件序列和恶意软件的内容。然而,恶意软件作者正在开发技术来阻碍这种分析,例如修改文件时间戳或避免使用文件系统进行数据存储。

为了对抗这些反取证方法,重要的是:

  • 使用Autopsy等工具进行彻底的时间线分析,用于可视化事件时间线,或使用Sleuth Kitmactime获取详细的时间线数据。

  • 调查系统的$PATH中的意外脚本,这些脚本可能包括攻击者使用的shell或PHP脚本。

  • 检查/dev中的非典型文件,因为它传统上包含特殊文件,但可能包含与恶意软件相关的文件。

  • 搜索具有类似“.. ”(点 点 空格)或“..^G”(点 点 控制-G)等名称的隐藏文件或目录,这些文件可能隐藏恶意内容。

  • 使用命令find / -user root -perm -04000 -print识别setuid root文件,这会找到具有提升权限的文件,可能会被攻击者滥用。

  • 检查inode表中的删除时间戳,以发现大量文件删除,可能表明存在rootkit或特洛伊木马。

  • 在识别一个恶意文件后,检查相邻的inode,因为它们可能被放在一起。

  • 检查常见的二进制目录(/bin/sbin)中最近修改的文件,因为这些文件可能被恶意软件更改。

# List recent files in a directory:
ls -laR --sort=time /bin```

# Sort files in a directory by inode:
ls -lai /bin | sort -n```

请注意,攻击者 可以修改时间以使文件看起来合法,但他无法修改inode。如果您发现一个文件表明它是在与同一文件夹中的其他文件相同时创建和修改的,但inode意外地更大,那么该文件的时间戳已被修改

比较不同文件系统版本的文件

文件系统版本比较摘要

为了比较文件系统版本并准确定位更改,我们使用简化的 git diff 命令:

  • 要查找新文件,比较两个目录:

git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
  • 对于修改后的内容,列出更改,忽略特定行:

git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
  • 检测已删除的文件

git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
  • 筛选选项 (--diff-filter) 有助于缩小范围,以便查看特定更改,如已添加 (A)、已删除 (D) 或已修改 (M) 文件。

  • A: 已添加的文件

  • C: 已复制的文件

  • D: 已删除的文件

  • M: 已修改的文件

  • R: 已重命名的文件

  • T: 类型更改(例如,文件到符号链接)

  • U: 未合并的文件

  • X: 未知的文件

  • B: 损坏的文件

参考资料

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

您在网络安全公司工作吗? 您想看到您的公司在HackTricks中做广告吗? 或者您想访问PEASS的最新版本或下载HackTricks的PDF吗? 请查看订阅计划

通过向 hacktricks repo hacktricks-cloud repo 提交PR来分享您的黑客技巧。

使用Trickest 可轻松构建和自动化工作流程,使用世界上最先进的社区工具。 立即获取访问权限:

最后更新于