Linux Forensics
最后更新于
最后更新于
使用Trickest轻松构建和自动化工作流程,利用世界上最先进的社区工具。 立即获取访问权限:
首先,建议准备一些带有已知良好的二进制文件和库的USB(您可以使用Ubuntu并复制文件夹_/bin_,/sbin,/lib_和/lib64_),然后挂载USB,并修改环境变量以使用这些二进制文件:
一旦您已配置系统以使用良好且已知的二进制文件,您可以开始提取一些基本信息:
在获取基本信息时,应检查以下异常情况:
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:
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:检查最近访问的文档,可能指示文件受到 compromise。
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)名称的隐藏文件或目录,这些文件可能隐藏恶意内容。
使用命令find / -user root -perm -04000 -print
识别setuid root文件。这会找到具有提升权限的文件,可能会被攻击者滥用。
检查inode表中的删除时间戳,以发现大量文件删除,可能表明存在rootkit或特洛伊木马。
在识别一个恶意文件后,检查相邻的inode,因为它们可能被放在一起。
检查常见的二进制目录(/bin、/sbin)中最近修改的文件,因为这些文件可能被恶意软件更改。
请注意,攻击者 可以 修改 时间以使文件看起来 合法,但他 无法 修改 inode。如果您发现一个 文件 表明它是在与同一文件夹中的其他文件相同时间 创建和修改的,但 inode 却 意外地更大,那么该文件的 时间戳已被修改。
要比较文件系统版本并准确定位更改,我们使用简化的 git diff
命令:
查找新文件,比较两个目录:
对于修改后的内容,列出更改,忽略特定行:
检测已删除的文件:
筛选选项 (--diff-filter
) 有助于缩小范围到特定更改,如添加 (A
)、删除 (D
) 或修改 (M
) 文件。
A
: 添加的文件
C
: 复制的文件
D
: 删除的文件
M
: 修改的文件
R
: 重命名的文件
T
: 类型更改(例如,文件到符号链接)
U
: 未合并的文件
X
: 未知的文件
B
: 损坏的文件
书籍: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides
使用 Trickest 可以轻松构建和自动化工作流程,使用世界上最先进的社区工具。 立即获取访问权限: