恶意软件有时会使用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版 腾讯云服务器如何手动搭建 WordPress 个人站点
- Linux禁止ping以及开启ping的方法
- 如何挑选蚬子
- 如何挑选红菜苔
- 如何挑选鹌鹑
- 如何挑选豆皮
- 如何自制葱油
- 如何挑选黄豆
- 如何挑选牛奶
- 如何挑选青豆