攻击者经常对于恶意进程进行一些伪装操作,混淆防守人员的视线,为扩大战果尽可能地争取时间。笔者对于进程伪装的理解是:攻击者基于安全人员的技术习惯、安全工具的检测逻辑,结合被入侵主机的实际情况,通过修改进程相关属性,使其初步被识别为合法、无害,从而规避检测,拖延时间。
一、举个例子
ps
命令。当使用ps
命令查看进程列表的时候,通常最上方会出现一批以中括号包含的进程名(如下图红框所示),这些基本上是内核线程,由内核创建,执行系统任务,例如内存管理、I/O处理等等。[kfake]
,并将路径添加至环境变量(否则运行该文件必须要加路径,效果大打折扣),然后运行。#include <unistd.h>
int main() {
pause();
return 0;
}
二、一个取巧的检测方式
[kfake]
的内核线程,对于这种伪装成内核线程的恶意进程应当如何检测?有一个取巧的检测方式,只需一条命令:ps auxc | grep "["
/proc/pid/cmdline
中读取结果,但是内核线程的cmdline文件为空,所以将从/proc/pid/stat
中获取进程名,并通过中括号标记。当添加c参数的时候,COMMAND列的值将直接从/proc/pid/stat
中获取,此时内核线程也就无需使用中括号包裹,但是伪装的内核线程名仍旧包含中括号,使用上文提到的命令即可检测。三、osquery规则
还可以依据内核线程与用户进程存在的其他差异进行检测区分。例如:
-
PPID=2,部分系统PPID=1;可使用ps xf或者pstree命令查看进程层级关系; -
/proc/pid/exe指向为空;可使用readlink查看exe是否返回为空; -
/proc/pid/cmdline、/proc/pid/maps为空;
select pid,parent as ppid,(select username from users where uid=euid)running_user,name,path as exe_path,cmdline,datetime(start_time,'unixepoch','localtime')start_localtime from processes where name like '[%]' and ppid!=2 and exe_path!='' and cmdline!='';localtime from processes where name like '[%]' and ppid!=2 and exe_path!='' and cmdline!='';
原文始发于微信公众号(风奕安全):Linux进程伪装(一):伪装内核线程
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论