22 KiB
Linux取证
使用Trickest轻松构建和自动化工作流程,利用世界上最先进的社区工具。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 发现PEASS家族,我们的独家NFTs系列
- 加入 💬 Discord群组 或 电报群组 或在Twitter上关注我们 🐦 @hacktricks_live。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
初始信息收集
基本信息
首先,建议准备一些带有已知良好的二进制文件和库的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。
要编译它,需要使用与受害者机器相同的内核。
{% hint style="info" %} 请记住,不能在受害者机器上安装LiME或任何其他东西,因为这将对其进行多处更改 {% endhint %}
因此,如果你有一个相同版本的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轻松构建和自动化工作流,利用世界上最先进的社区工具。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
搜索已知恶意软件
修改过的系统文件
Linux提供了用于确保系统组件完整性的工具,这对于发现潜在问题文件至关重要。
- 基于RedHat的系统:使用
rpm -Va
进行全面检查。 - 基于Debian的系统:首先使用
dpkg --verify
进行初始验证,然后使用debsums | grep -v "OK$"
(在使用apt-get install debsums
安装debsums
后)来识别任何问题。
恶意软件/Rootkit检测器
阅读以下页面,了解可用于查找恶意软件的工具:
{% content-ref url="malware-analysis.md" %} malware-analysis.md {% endcontent-ref %}
搜索已安装的程序
要有效地搜索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轻松构建并由全球最先进的社区工具驱动的自动化工作流程。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
恢复已删除的运行二进制文件
想象一下,有一个从 /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/:始终检查意外日志。
{% hint style="info" %} Linux系统日志和审计子系统可能在入侵或恶意软件事件中被禁用或删除。因为Linux系统上的日志通常包含有关恶意活动的最有用信息,入侵者经常删除它们。因此,在检查可用日志文件时,重要的是查找可能表示删除或篡改的间隙或顺序不当的条目。 {% endhint %}
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轻松构建和自动化工作流程,利用世界上最先进的社区工具。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
查看用户帐户和登录活动
检查 /etc/passwd、/etc/shadow 和安全日志,查找是否有异常名称或在已知未经授权事件附近创建或使用的帐户。还要检查可能的sudo暴力攻击。
此外,检查像 /etc/sudoers 和 /etc/groups 这样的文件,查看是否给用户授予了意外的特权。
最后,查找没有密码或易于猜测密码的帐户。
检查文件系统
在恶意软件调查中分析文件系统结构
在调查恶意软件事件时,文件系统的结构是信息的重要来源,可以揭示事件序列和恶意软件的内容。然而,恶意软件作者正在开发技术来阻碍这种分析,例如修改文件时间戳或避免使用文件系统进行数据存储。
为了对抗这些反取证方法,重要的是:
- 使用像Autopsy这样的工具进行彻底的时间线分析,用于可视化事件时间线,或者使用Sleuth Kit的
mactime
获取详细的时间线数据。 - 检查系统的$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```
{% hint style="info" %} 请注意,攻击者 可以 修改 时间以使文件看起来 合法,但他 无法 修改 inode。如果您发现一个 文件 表明它是在与同一文件夹中的其他文件相同时间 创建和修改的,但 inode 却 意外地更大,那么该文件的 时间戳已被修改。 {% endhint %}
比较不同文件系统版本的文件
文件系统版本比较摘要
要比较文件系统版本并准确定位更改,我们使用简化的 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
: 损坏的文件
参考资料
- https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems_Ch3.pdf
- https://www.plesk.com/blog/featured/linux-logs-explained/
- https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- 书籍: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides
从零开始学习 AWS 黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
您在网络安全公司工作吗? 您想在 HackTricks 中看到您的公司广告吗? 或者您想访问PEASS 的最新版本或下载 HackTricks 的 PDF吗? 请查看订阅计划!
- 发现我们的独家 NFTs 集合 The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组](https://discord.gg/hRep4RUj7f) 或 电报群组 或在 Twitter 上关注我 🐦@carlospolopm.
通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享您的黑客技巧。
使用 Trickest 可以轻松构建和自动化工作流程,使用世界上最先进的社区工具。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}