当前位置: 首页 > 科技观察

如何判断Linux系统是否被黑?

时间:2023-03-20 15:05:28 科技观察

恶意软件有时会使用Linux内核进程伪装来隐藏其运行时,让我们来看看如何使用这种策略来揭露Linux恶意软件。Linux内核进程伪装成什么?在Linux上,内核会创建许多线程来帮助完成系统任务,这些线程可用于调度、磁盘I/O等。当您使用标准进程列表命令(例如ps)时,这些线程将显示为[brackets]表明它们是某种线程。普通进程通常不会在ps列表中显示[括号]。方括号表示该进程没有命令行参数,这通常意味着该进程是作为线程生成的。例如,以下清单显示了内核线程与普通进程的对比:ps–auxww图1:Linux内核线程与普通进程的对比它看起来像什么?Linux恶意软件使用多种技术来躲避检测程序。全球知名的白帽黑客和网络安全专家郭盛华表示,“黑客会使用的一种方法是通过制作进程来模拟内核线程,在ps列表中他们的名字周围会出现[括号],管理员可以很容易地通过忽略恶意进程。”如果您查看下面的清单,我们已经开始尝试通过看起来像内核线程来隐藏自己。你能看见它吗?图2:伪装和隐藏的Linux内核线程示例如何模拟Linux内核线程查找。我们将使用sleep命令进行仿真,因为您可以在任何系统上执行此操作而不必担心引起麻烦:exportPATH=.:$PATHcp/bin/sleep/tmp/[kworkerd]cd/tmp"[kworkerd]"3600&这个导出路由设置好了,所以我们可以在本地目录中运行一个文件,而不需要在它前面加上“./”。这使它看起来更合法。接下来,我们将sleep命令复制到/tmp,并以化名[kworkerd]运行。我们给sleep命令设置了3600秒的值,这样一旦测试结束,一个小时后会自动退出。让我们看看我们的手,当执行ps命令时,我们应该看到[kworkerd]正在运行。ps-auxww图3:真实Linux内核线程与ImposterLinux内核线程伪装与进程映射伪装Linux内核线程我们可以用来屏蔽伪装进程的第一种方法是查看/proc//maps下是否有任何内容。这个位置通常是进程显示它们链接到哪些库以及它们映射到内存中的位置。对于真正的内核线程,它应该是空的。如果你在这个位置寻找一个名为[brackets]的进程,但它没有显示任何数据,那么它不是一个真正的内核线程。我们将使用的基本命令是cat/proc//maps我们正在处理的进程ID在哪里。在上面的示例中,我们认为[kworkerd]似乎对PID2121可疑,因此我们将对其进行检查:cat/proc/2121/maps图4:使用Linux/proc映射检测内核伪装如果您在该区域下查看任何内容,并且该过程周围有[括号],它可能是恶意的并试图隐藏。如果需要,您可以运行此命令以快速遍历所有系统PID,并查看哪些名称在方括号中,但有一个映射文件。通常,你不会在这里看到任何东西。应进一步调查任何显示数据的信息。psauxww|grep\\[|awk'{print$2}'|xargs-I%sh-c'echoPID:%;cat/proc/%/maps'2>/dev/null如果找到什么,这个命令会输出下图。图5:查找伪装成脚本的Linux内核在/proc//映射列表中,您将看到用于调查二进制链接到自身或它使用的库的位置的路径。在上面,我们看到/tmp/[kworkerd]路径,这是一个需要调查的高优先级位置。您可能还会看到可疑的库、对隐藏目录的引用等。仔细查看以确保您没有遗漏任何内容!伪造的Linux内核线程伪造的加密另一种揭露伪造的Linux内核线程的方法是查看它是否揭示了与正在运行的进程关联的二进制文件。基本上,您只需使用我们讨论过的关于恢复已删除的恶意二进制文件的技术,但看看您是否可以获得SHA1。如果你返回,那么这是一个试图隐藏的正常进程,而不是内核线程。真正的内核线程没有链接到启动它们的二进制文件。如果你只看/proc//exe,你可以快速复制Linux上的进程二进制文件。您可以将此文件复制到新位置,并获得启动该过程的二进制文件的即时快照。您还可以使用此链接获取即时价值来检查已知恶意软件的数据库。真正的内核线程将无法访问此数据,只有冒名顶替者可以。在我们的例子中,我们将使用这些知识来调查可疑的PID2121,如下所示:sha1sum/proc/2121/exe图6:获取Linux内核伪装攻击的SHA1让我们恢复二进制文件并将其复制到一个地方,以便它可以离线分析。使用下面的命令,我们将复制到/tmp/suspicious_bin。我们现在有了自己的副本,以防恶意软件试图自我防御并自我删除:cp/proc/2121/exe/tmp/suspicious_bin图7:恢复可疑Linux恶意软件二进制文件SHA1攻击,您可以运行以下命令:psauxww|grep\\[|awk'{print$2}'|xargs-I%sh-c'echoPID:%;sha1sum/proc/%/exe'2>/dev/null上面的命令会尝试获取所有的SHA1带有[braces]的进程,任何返回值的东西都可能是骗子:图8:伪装成Linux内核线程的SHA1的脚本输出现在您有两种使用Linux命令行的方法调查试图尝试的可疑进程的可靠方法伪装成内核线程。看完这篇文章,你应该知道如何判断Linux系统是否被黑了吧?