OS
聊一聊Linux下进程隐藏的常见手法及侦测手段
0x00.前言 进程隐藏是恶意软件隐藏自身痕迹逃避系统管理人员发现的常用伎俩之一,当然,安全防护人员有时候也会使用到,比如隐藏蜜罐中的监控进程而不被入侵者觉察等。笔者也曾在多次安全应急响应经历中遇到过多各式各样的进程隐藏伎俩,了解进程隐藏的常见手法及发现手段是每一位安全运维工程师所应掌握的知识点。本文抛砖引玉,浅谈我所了解的Linux下进程隐藏手段及发现技巧,也希望读者能够积极分享自己相关经验与技巧。 0x01.我所了解的 Linux下进程隐藏手段及侦测方法 Linux 下进程隐藏手法大体上分为两种,一种是基于用户态隐藏;一种是直接操控内核进行隐藏。 一、基于用户空间进程隐藏手法 1、偷梁换柱型 1)隐藏原理 道理很简单,通过替换系统中常见的进程查看工具(比如ps、top、lsof)的二进制程序,导致原先查看进程相关信息的工具(ps、top、lsof等)都被调包了,当然看不到 2)防护手段 I、从干净的系统上拷贝这些工具的备份至当前系统,对比前后的输出是否一致,不一致,则说明被替换了 II、检测这些工具的hash值是否与系统初始化的时候值不一致,是,则说明被替换了 III、专业一点话,使用一些系统完整性检查工具,比如tripwrie、aide等 IV、部署主机入侵检查工具(比如ossec),监控系统文件是否被替换,如有替换,则会报警记录 2、HooK系统调用型 1)隐藏原理 先说下ps、top等工具的工作原理 以ps 工作原理为例说明这些进程信息查看工具的原理 我们知道/proc是一个虚拟文件系统,是VFS的一个实现形式,/proc中包含了内核信息,硬件信息,进程信息等,ps等工具就是通过分析/proc文件系统中进程相关目录的信息获取进程信息汇总。HooK系统调用型的进程隐藏方式都是通过拦截或者迷惑ps等工具从/proc获取分析结果的过程,而不是针对/proc/文件系统生成本身。 ps 首先会调用openat 系统函数获取/proc目录的文件句柄,然后调用系统函数 getdents 递归获取/proc目录下所有文件信息(包括子目录),然后开始open函数打开/proc/进程pid/stat,/proc/进程pid/status, /proc/进程pid/cmdline 文件开始获取进程信息,然后打印给你看 攻击者通过劫持getdents 等系统调用函数或libc中的readdir 函数,实现对特定进程名进程的隐藏,以达到进程隐藏目的 劫持getdents 等系统调用函数或libc中的readdir 函数等系统调用函数一般来说有3个途径 I、修改内核调用,比如getdents 的源码 II、修改libc库中readdir 函数的源码 III、利用环境变量LD_PRELOAD 或者配置ld.so.preload文件 以使的恶意的动态库先于系统标准库加载,以达到架空系统标准库中相关函数的目的,最终实现对特定进程的隐藏 这3个原理类似,III相对于I、II比较简单,在此以III为例进行演示(劫持libc 中的readdir函数) 演示(利用LD_PRELOAD这个环境变量进行进程信息隐藏),比如隐藏ping这个进程: Read more…