识别 Linux 上的恶意软件指标

CompTIABeginner
立即练习

介绍

在本实验中,你将学习在 Linux 系统上识别潜在恶意软件指标的基本技术。通过一系列实践练习,你将使用标准的命令行工具来调查常见的入侵迹象,从而获得系统监控和基础取证分析的实践技能。

你将首先观察可疑进程活动,学习如何发现可能表明恶意进程的异常 CPU 和内存峰值。接下来,你将聚焦文件系统,检测意外的文件创建和修改,这是未经授权活动的关键指标。最后,你将练习分析系统日志,查找可能指向安全漏洞的反常条目。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 83%。获得了学习者 100% 的好评率。

观察 CPU 和内存峰值的可疑进程活动

在此步骤中,你将学习如何使用标准的 Linux 工具来监控系统进程,查找 CPU 和内存使用率的异常峰值。突然的高资源消耗是恶意软件(malware)、被入侵的进程或运行不正常的应用程序的常见指标。我们将使用 top 命令进行实时监控,并使用 stress 工具来安全地模拟高负载场景。所有命令都将在你的 ~/project 目录下运行。

首先,你需要安装 stress 工具,因为它不包含在基础系统中。我们将使用 apt-get 包管理器。第一个命令会更新你的包列表,第二个命令会安装 stress

sudo apt-get update
sudo apt-get install stress -y

安装完成后,让我们通过查看系统当前的进程来建立一个基线。top 命令提供了运行系统的实时、动态视图。

top

你将看到一个全屏界面,它会持续更新。请注意 %CPU(CPU 使用率)和 %MEM(内存使用率)列。在正常情况下,大多数进程的这些值应该相对较低。按 q 键退出 top 并返回到你的命令提示符。

top - 16:20:42 up 10 min,  1 user,  load average: 0.00, 0.01, 0.00
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1987.2 total,    845.5 free,    450.1 used,    691.6 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1355.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  169404  13120   8484 S   0.0   0.6   0:01.55 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
...

现在,让我们模拟一个消耗大量 CPU 的可疑进程。我们将使用 stress 来启动一个工作进程,它将执行 CPU 密集型计算 60 秒。末尾的 & 会将命令放在后台运行,允许你继续使用终端。

stress --cpu 1 --timeout 60 &

你将看到后台作业的进程 ID(PID)。现在,快速再次运行 top 来观察效果。

top

这次,你应该会在列表顶部或附近看到 stress 进程,其 %CPU 值接近 100.0。这正是你在寻找占用 CPU 的进程时应该关注的。60 秒后,stress 进程将自动终止。按 q 键退出 top

接下来,让我们模拟一个消耗大量内存的进程。此命令将启动一个工作进程,它分配 256MB 内存并占用 60 秒。

stress --vm 1 --vm-bytes 256M --timeout 60 &

同样,立即运行 top 来查看影响。

top

top 的输出中,找到 stress 进程。这次,它的 %CPU 会很低,但它的 %MEM 值将显著高于其他进程,这表明存在内存泄漏或内存密集型攻击。此技术有助于你识别需要进一步调查的反常资源消耗。按 q 键退出。

检测意外的文件创建和修改

在此步骤中,你将学习如何检测可疑的文件系统活动,例如文件的意外创建或修改。攻击者经常创建或更改文件以建立持久性、存储恶意载荷或篡改系统配置。我们将使用两个强大的命令行工具:find 用于根据修改时间搜索文件,以及 inotifywait 用于执行目录事件的实时监控。所有操作都将在你的 ~/project 目录下进行。

首先,让我们使用 find 命令来查找最近被修改过的文件。这对于定期的安全审计很有用。让我们创建一个示例配置文件进行监控。

echo "SERVER_IP=192.168.1.1" > ~/project/app.conf

find 命令可以根据各种条件搜索文件。我们将使用 -mmin 标志,它代表“多少分钟前修改”。以下命令将在当前目录(.)中查找在过去 5 分钟内被修改过的所有文件。

find . -mmin -5

输出将列出你刚刚创建的文件。

./app.conf

现在,让我们模拟一个攻击者修改此配置文件。

echo "MALICIOUS_PAYLOAD=..." >> ~/project/app.conf

如果你再次运行 find 命令,它仍然会显示 app.conf,因为它的修改时间已被更新。这是发现近期更改的一种简单方法。现在,让我们模拟一个攻击者放置一个新文件,这是一种常见的策略。

touch ~/project/hidden_script.sh

再运行一次 find 命令。

find . -mmin -5

现在它列出了被修改的文件和新创建的文件,演示了你如何快速识别近期文件系统活动。

./app.conf
./hidden_script.sh

虽然 find 对于审计很有用,但它不提供实时警报。为此,我们可以使用 inotify-tools。首先,你必须安装该软件包。

sudo apt-get update
sudo apt-get install -y inotify-tools

核心命令是 inotifywait,它可以监控文件或目录的特定事件。让我们在 ~/project 目录上以监控模式(-m)运行它。& 会将其作为后台进程运行,以便你可以继续使用你的终端。

inotifywait -m ~/project &

该命令现在正在静默地监视更改。让我们执行几个操作来触发它。首先,创建一个文件。

echo "new file" > ~/project/new_file.txt

你将立即看到来自 inotifywait 的输出,报告 CREATE 事件。

/home/labex/project/ CREATE new_file.txt

现在,修改该文件。

echo "modified" >> ~/project/new_file.txt

该工具报告了 MODIFY 事件。

/home/labex/project/ MODIFY new_file.txt

最后,删除该文件。

rm ~/project/new_file.txt

你将看到一个 DELETE 事件。这种实时反馈对于安全运营中心(SOC)或自动化入侵检测系统来说是无价的。

/home/labex/project/ DELETE new_file.txt

要停止后台监控进程,你可以使用 pkill 命令。

pkill inotifywait

你已成功使用 findinotifywait 来检测文件系统更改。

分析系统日志中的异常条目

在此步骤中,你将学习如何分析系统日志以查找可疑活动的证据。系统日志是系统中发生的事件记录,它们是安全监控和取证分析的关键信息来源。我们将重点关注身份验证日志(记录用户登录和权限升级),并使用 greptailjournalctl 等标准 Linux 工具来查找异常条目。

大多数 Linux 系统上的系统日志都存储在 /var/log 目录中。对于安全而言,最重要的日志之一是 /var/log/auth.log,它记录了与身份验证相关的事件,包括 SSH 登录和 sudo 命令使用。让我们首先使用 tail 命令查看此文件的最后几行。你需要 sudo 权限,因为此文件受到保护。

sudo tail /var/log/auth.log

你将看到一系列带有时间戳的条目。格式通常包括日期、时间、主机名、生成日志的进程以及事件消息。

Jul 22 10:30:01 labex-vm sudo:    labex : TTY=pts/0 ; PWD=/home/labex/project ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session closed for user root

现在,让我们模拟一个常见的可疑事件:一次失败的登录尝试。攻击者经常尝试猜测有效或常见用户名的密码。我们可以通过尝试 SSH 登录到我们自己的机器(localhost)并使用一个不存在的用户名(例如 baduser)来模拟此操作。

ssh baduser@localhost

系统会提示你输入密码(你可以使用 labex 作为密码)。由于用户不存在,任何密码都会失败。只需按 Ctrl+C 取消密码提示并返回终端。连接尝试将失败,但会被记录下来。

现在,让我们查找证据。我们可以使用 grep 命令过滤 auth.log 文件,查找包含“Failed”一词的行。这可以快速隔离不成功的事件。

sudo grep "Failed" /var/log/auth.log

输出现在将清楚地显示我们失败的 SSH 登录尝试的日志条目,这是潜在入侵尝试的有力指标。

Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2

使用 systemd 的现代 Linux 系统还拥有一个由 journald 管理的集中式日志记录系统。journalctl 命令是查询这些日志的强大工具。让我们通过搜索 sshd 进程的消息来使用它查找相同的失败登录事件。请注意,你必须使用 sudo 才能查看系统级日志。

sudo journalctl | grep sshd

滚动浏览输出(使用箭头键,然后按 q 退出),你将找到相同的“Failed password”条目。为了更方便,你可以按消息优先级进行过滤。让我们要求 journalctl 只显示 sshd 服务中优先级为“error”(err)或更高的条目。

sudo journalctl -p err | grep sshd

此命令为你提供了更简洁的仅包含错误条件视图,使其在发现问题方面非常高效。

-- Logs begin at ... --
Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2
-- End of logs --

最后,你还可以使用 logger 命令手动将消息注入日志。这对于自定义脚本报告安全事件很有用。让我们创建一个自定义警报。

logger "SECURITY-ALERT: Unauthorized file access detected in /etc"

现在,在系统日志中搜索此特定警报。

sudo grep "SECURITY-ALERT" /var/log/syslog

你将看到你的自定义消息,这表明你可以将自己的监控与系统的日志记录功能集成。

Jul 22 10:40:00 labex-vm labex: SECURITY-ALERT: Unauthorized file access detected in /etc

你现在已经学会了导航系统日志以查找异常和潜在恶意活动的证据的基础知识。

总结

在此实验中,你学习了在 Linux 系统上识别恶意软件指标的基本技术。你通过使用 top 命令监控异常的 CPU 和内存峰值,练习了如何观察可疑的进程活动。为了理解在真实场景中这看起来是什么样子,你使用了 stress 工具来模拟高负载进程,并将其资源消耗与正常的系统基线进行了比较。

该实验还涵盖了如何检测意外的文件创建和修改,这些是系统被入侵的常见迹象。最后,你学会了分析系统日志中的异常条目,这是一项至关重要的技能,用于查找未经授权的访问、错误配置或其他安全相关事件的证据。