Linux Forensics
Last updated
Last updated
使用 Trickest 轻松构建和 自动化工作流程,由世界上 最先进 的社区工具提供支持。 今天获取访问权限:
首先,建议准备一些 USB,上面有 已知的良好二进制文件和库(你可以直接获取 ubuntu 并复制文件夹 /bin, /sbin, /lib, 和 /lib64),然后挂载 USB,并修改环境变量以使用这些二进制文件:
一旦您配置系统以使用良好且已知的二进制文件,您可以开始提取一些基本信息:
在获取基本信息时,您应该检查一些奇怪的事情,例如:
Root 进程 通常使用低 PIDS,因此如果您发现一个具有大 PID 的 root 进程,您可能会怀疑
检查 /etc/passwd
中没有 shell 的用户的 注册登录
检查 /etc/shadow
中没有 shell 的用户的 密码哈希
要获取运行系统的内存,建议使用 LiME。 要 编译 它,您需要使用受害者机器正在使用的 相同内核。
请记住,您 不能在受害者机器上安装 LiME 或其他任何东西,因为这会对其进行多项更改
因此,如果您有一个相同版本的 Ubuntu,您可以使用 apt-get install lime-forensics-dkms
在其他情况下,您需要从 github 下载 LiME 并使用正确的内核头文件进行编译。要 获取受害者机器的确切内核头文件,您可以直接 复制目录 /lib/modules/<kernel version>
到您的机器,然后使用它们 编译 LiME:
LiME 支持 3 格式:
原始(每个段落连接在一起)
填充(与原始相同,但右侧位用零填充)
Lime(推荐格式,带有元数据)
LiME 还可以用于 通过网络发送转储,而不是使用类似 path=tcp:4444
的方式将其存储在系统上。
首先,您需要 关闭系统。这并不总是一个选项,因为有时系统可能是公司无法承受关闭的生产服务器。
有 2 种方法 可以关闭系统,正常关机 和 “拔掉插头”关机。第一种方法将允许 进程正常终止,并使 文件系统 同步,但这也可能允许潜在的 恶意软件 破坏证据。“拔掉插头”方法可能会导致 一些信息丢失(由于我们已经获取了内存的映像,丢失的信息不会很多),并且 恶意软件将没有机会 采取任何行动。因此,如果您 怀疑 可能存在 恶意软件,请在系统上执行 sync
命令 然后拔掉插头。
重要的是要注意,在 将计算机连接到与案件相关的任何设备之前,您需要确保它将以 只读方式挂载,以避免修改任何信息。
对没有更多数据的磁盘映像进行成像。
使用 Trickest 轻松构建和 自动化工作流程,由世界上 最先进 的社区工具提供支持。 立即获取访问权限:
Linux 提供工具以确保系统组件的完整性,这对于发现潜在问题文件至关重要。
基于 RedHat 的系统:使用 rpm -Va
进行全面检查。
基于 Debian 的系统:使用 dpkg --verify
进行初步验证,然后使用 debsums | grep -v "OK$"
(在使用 apt-get install debsums
安装 debsums
后)来识别任何问题。
阅读以下页面以了解可以用于查找恶意软件的工具:
Malware 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
。将目录列表与特定于系统的命令结合使用,以识别与已知软件包无关的可执行文件,从而增强您对所有已安装程序的搜索。
使用 Trickest 轻松构建和 自动化工作流程,由世界上 最先进 的社区工具提供支持。 立即获取访问权限:
想象一下一个从 /tmp/exec 执行并随后被删除的进程。可以提取它
恶意软件可以作为服务安装的路径:
/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: 检查最近的文档访问,以指示可能被破坏的文件。
FTP/SFTP: 检查 ~/.ftp_history 或 ~/.sftp_history 中的日志,以查找可能未经授权的文件传输。
MySQL: 检查 ~/.mysql_history 以调查执行的 MySQL 查询,可能揭示未经授权的数据库活动。
Less: 分析 ~/.lesshst 以获取使用历史,包括查看的文件和执行的命令。
Git: 检查 ~/.gitconfig 和项目 .git/logs 以查找对存储库的更改。
usbrip 是一个用纯 Python 3 编写的小软件,它解析 Linux 日志文件(/var/log/syslog*
或 /var/log/messages*
,具体取决于发行版),以构建 USB 事件历史表。
了解所有使用过的 USB 是很有趣的,如果你有一个授权的 USB 列表来查找“违规事件”(不在该列表中的 USB 使用),将更有用。
更多示例和信息请查看 GitHub: https://github.com/snovvcrash/usbrip
使用 Trickest 轻松构建和 自动化工作流程,由世界上 最先进 的社区工具提供支持。 今天就获取访问权限:
检查 /etc/passwd、/etc/shadow 和 安全日志,寻找不寻常的名称或在已知未授权事件附近创建和使用的账户。同时,检查可能的 sudo 暴力攻击。 此外,检查像 /etc/sudoers 和 /etc/groups 这样的文件,寻找意外授予用户的特权。 最后,查找 没有密码 或 容易猜测 的密码的账户。
在调查恶意软件事件时,文件系统的结构是重要的信息来源,揭示事件的顺序和恶意软件的内容。然而,恶意软件作者正在开发技术来阻碍这种分析,例如修改文件时间戳或避免使用文件系统进行数据存储。
为了对抗这些反取证方法,至关重要的是:
进行彻底的时间线分析,使用像 Autopsy 这样的工具可视化事件时间线,或使用 Sleuth Kit 的 mactime
获取详细的时间线数据。
调查系统 $PATH 中的意外脚本,这些脚本可能包括攻击者使用的 shell 或 PHP 脚本。
检查 /dev
中的非典型文件,因为它通常包含特殊文件,但可能存放与恶意软件相关的文件。
搜索隐藏的文件或目录,名称可能为 ".. "(点点空格)或 "..^G"(点点控制-G),这些可能隐藏恶意内容。
识别 setuid root 文件,使用命令:find / -user root -perm -04000 -print
这将找到具有提升权限的文件,可能被攻击者滥用。
检查 inode 表中的删除时间戳,以发现大规模文件删除,可能表明存在 rootkit 或木马。
在识别到一个恶意文件后,检查连续的 inode,因为它们可能被放置在一起。
检查常见的二进制目录 (/bin、/sbin) 中最近修改的文件,因为这些文件可能被恶意软件更改。
注意,攻击者可以修改****时间以使文件看起来是合法的,但他无法修改inode。如果你发现一个文件显示它的创建和修改时间与同一文件夹中其他文件的时间相同,但inode却意外地更大,那么该文件的时间戳被修改了。
为了比较文件系统版本并确定更改,我们使用简化的 git diff
命令:
查找新文件,比较两个目录:
对于修改过的内容,列出更改,同时忽略特定行:
检测已删除文件:
过滤选项 (--diff-filter
) 有助于缩小到特定的更改,如添加的 (A
)、删除的 (D
) 或修改的 (M
) 文件。
A
: 添加的文件
C
: 复制的文件
D
: 删除的文件
M
: 修改的文件
R
: 重命名的文件
T
: 类型更改(例如,从文件到符号链接)
U
: 未合并的文件
X
: 未知的文件
B
: 损坏的文件
书籍:Linux系统恶意软件取证实用指南:数字取证实用指南
使用 Trickest 轻松构建和 自动化工作流程,由世界上 最先进 的社区工具提供支持。 今天就获取访问权限:
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)