什么是反弹shell 在liunx下如何检测后门?

反弹是shell攻击者拿来控制目标网站服务器的1种方式。目标网站服务器主动发出网络连接请求,将网站服务器命令执行的规范输入、规范输出和规范错误重定向给攻击者。通过监听来自目标网站服务器的请求,攻击者向目标服务器发送指令并获得执行结果。它通常用于目标网站服务器位于内部网、受防火墙策略限制等入侵场景。

云上的现状

通过分析云上近三年的Linux网站服务器入侵恶性事件,反弹shell建立的语言和软件在攻击环节的利用率如下:interactivebash官网+/dev/tcp是最常用的反弹shell,/dev/tcp/是bash的默认特性,这使得这种反弹方式兼容大多数环境,因此利用率高;其次是Python,兼容性好,灵活易用。随着围棋语言的兴起,云上的入侵恶性事件开始以围棋弹壳的形式出现。可见反弹壳的建立是灵活多样的,每种语言都可以进一步扩展和拓展。因此,为了保证最佳的检测效果,平衡假阳性和假阳性,弹壳的检测方案需要考虑多种场景因素。


常见的检测方案通过规则匹配提取反弹shell命令的特征来匹配命令日志和流量日志,存在以下缺陷:


命令日志收集未完成。例如,当遇到管道符号和重定向时,netlink收集的日志将无法收集完整的原始执行命令。但是,当网站服务器使用zsh、ksh等其他shell环境,或者攻击者上传自己编译的bash时,patchbash官网记录命令日志会失败;规律性掩盖不了无休止的文字对抗,攻击者总能挖掘出新的方法绕过它。在实际的业务场景中,太多复杂的规律带来性能压力,而更多多用途的规律带来误报;网络流量加密后,特征匹配失败。


测试需要从外到内挖掘出更实质的解决方案,因为表面对抗是无止境的。从检测的角度来看,反弹壳可以分为几种典型类型吗?回弹shell的实质可以理解为:命令执行和网络通信通过重定向的方式建立一个流动的数据通道,攻击者利用这个通道控制网站服务器发出指令。不同的建立方式结合起来形成多种反弹外壳,比如:网络通信可以使用TCP/UDP/ICMP等协议,TCP协议可以细分为HTTP/HTTPS协议,UDP包含DNS等等;命令执行可以通过调用shell解释器、glibc库、Syscall来建立;重定向,在本文中我们称之为“transit”,可以通过管道、成对伪终端、内存文件等来建立。


分享: