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