linux环境下模拟实现命令解释器_反弹shell逃逸基于execve的命令监控(上)

本文探讨了在Linux环境中如何监控和绕过基于execve的shell命令监控,包括用户态和内核态监控方法,如Netlink Connector、Audit和Hook execve syscall。同时介绍了如何通过Patch Shell解释器监控内置命令,以及已知的对抗策略,如无日志绕过和假日志混淆。文章展示了如何通过编写shellcode和利用ptrace系统调用来避免使用execve系统调用,从而实现反弹shell的逃逸。
摘要由CSDN通过智能技术生成

微信公众号:七夜安全博客 关注信息安全技术、关注 系统底层原理。问题或建议,请公众号留言。

一.前言

本篇聊一聊 新的主题:《反弹shell-逃逸基于execve的命令监控》,打算写一个专题,预估可以写三篇,内容确实有点多,也是最近研究了一些有意思的东西,想给大家分享一下。喜欢的话,请大家一定点在看,并分享出去,算是对我原创最大的支持了。

二.Shell命令监控

在linux中,大家用的比较多的是shell命令,同样在渗透到linux服务器,植入木马后,探测信息,执行恶意操作,维持权限,横向移动,shell命令也是必不可少的。既然在攻击侧,shell命令如此重要,那在安全防御方面,shell命令的监控也是非常关键的检测维度。各大厂商,一般怎么监控shell命令的调用呢?

2.1 基于execve的shell命令监控

系统命令,其实就是一个个程序,执行起来也就是一个个进程。命令执行的监控,也就是对外部进程创建的监控。在linux中,启动外部进程,是通过execve系统调用进行创建的,我们使用strace 打印一下在bash中启动ls的系统调用,第一句就是通过execve启动ls。

e0c6c25939dbc6b5bee6122803a35862.png

但是我们在开发linux程序的时候,执行系统命令,并没有直接使用execve系统调用,这是因为libc/glibc库对execve系统调用封装成了函数,方便我们调用。

因此基于execve的系统命令监控方式,分成了用户态和内核态。用户态通过劫持libc/glibc的exec相关函数来实现,内核态则通过系统自身组件或者劫持execve syscall 来实现。

1.用户态

在libc/glibc中,对execve syscall 进行了一系列的封装,简称exec族函数。exec系列函数调用时,启动新进程,替换掉当前进程。即程序不会再返回到原进程,具体内容如下:

int execl(constchar*path,constchar*arg0,...,(char*)0);

int execlp(constchar*file,constchar*arg0,...,(char*)0);

int execle(constchar*path,constchar*arg0,...,(char*)0,char*const envp[]);

int execv(cosnt char*path,char*const argv[]);

int execvp(cosnt char*file,char*const argv[]);

int execve(cosnt char*path,char*const argv[],char*const envp[]);

怎么劫持libc/glibc中的函数,我就不扩展了,大家google一下 so preload 劫持

2.内核态

在内核态监控其实是最准确,而且是最难绕过的。在内核态,一般是通过三种办法来监控:

  1. Netlink Connector

  2. Audit

  3. Hook execve syscall

(1)  Netlink Connector

在介绍 Netlink Connector 之前,首先了解一下 Netlink 是什么,Netlink 是一个套接字家族(socket family),它被用于内核与用户态进程以及用户态进程之间的 IPC 通信,ss命令就是通过 Netlink 与内核通信获取的信息。

Netlink Connector 是一种 Netlink ,它的 Netlink 协议号是NETLINK_CONNECTOR,其代码位于:

https://githu

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值