披着羊皮的Neo-reGeorg
混迹 Web 安全行业许久,查杀网站后门已是家常便饭。时间久了,养“马”场也见的多了,Neo-reGeorg 算得上是同类中战斗力超群的“野马”了,也深受黑客和安全渗透人员的喜爱。Neo-reGeorg 能够简化攻击流程。通常,拿下 Web 服务器并进一步横向渗透时,在 Web 服务器上安装必要辅助工具的过程往往不会很顺利。而 Neo-reGeorg 可以让问题变得轻松很多,只需在本地安装好扫描工具,通过 Neo-reGeorg 把流量透传到 Web 服务器内部就可以了。
1. 工具介绍
Neo-reGeorg 是 reGeorg 和 reDuh 的升级版,是为了应付复杂的网络环境重构的项目。该工具基于 HTTP(S) 协议建立隧道,会在本地创建 Socket 监听 1080 端口用于正向代理访问 Web 服务器隧道脚本,通过正向代理的方式把数据加密封装到 HTTP 数据包中转发到服务器的横向网络中,同时隧道脚本也会把内网服务器端口的数据加密封装到 HTTP 数据包中转发到本地的 Socket 接口。
2. 涉及的概念
-
隧道技术:
隧道技术是网络设备之间传输数据的一种方式,使用隧道技术的数据包会被特殊处理 (封装打标签),并通过网络传输,其传输所经过的逻辑路径称为隧道,数据到达最终目的地会进行数据还原处理。隧道技术涵盖了数据封装 (打标签)、传输和解包 (去标签) 的整个过程。隧道是逻辑上的概念,是基于现有网络基础的产物。 -
正向和反向代理:
正向代理:Proxy 和 Client 同属一个区域,对 Server 透明。正向代理的控制权在自己手上,策略可以自定义。
反向代理:Proxy 和 Server 同属一个区域,对 Client 透明。反向代理的控制权在 Server 端,策略无法自定义。 -
Socket 和端口:
Socket 也称套接字,编程中会绑定到某个端口进行监听,应用程序通过它来发送或接收数据。Socket 套接字可以形象地理解为一张和检票口 (监听端口) 绑定的机票,乘客持此机票在检票口附近不断轮询检票口状态,当飞机到达检票口位置,乘客就可以登机了,飞机的可靠性 (类似 TCP/UDP 的选择) 则取决于机型和机长经验等因素。
3. 运行环境
- Neo-reGeorg 主程序 (下载地址)
- 需 Python 支持 ,兼容 Python2.x / Python3.x (下载地址)
- 依赖 Python 第三方扩展 requests 模块 (下载地址)
4. 使用案例
目标服务器:
192.168.88.15 Linux3.10, Tomcat8, 防火墙策略只开启 http 8080 端口
测试预期效果:
通过 8080 http 端口登陆目标服务器 SSH
- 通过 neoreg.py 脚本生成服务器端隧道脚本,默认生成到当前路径的
neoreg_server
目录下:
python neoreg.py generate -k password
- 上传 Neo-reGeorg 隧道脚本到目标服务器的虚拟目录:
- 为了可以监控 Neo-reGeorg 和目标服务器的交互过程,中间增加一道 BurpSuite 代理抓取数据包:
监听本地的 8899 端口,并关闭数据中断功能。
- 使用 neoreg.py 脚本通过 BurpSuite 代理连接到刚才上传的 tunnel 脚本。
此脚本会在本地建立 Socket 并监听 1080 端口
所有数据请求都通过 BurpSuite 进行代理中转
python neoreg.py -k password -vv -u http://192.168.88.15:8080/tunnel.jsp --proxy http://127.0.0.1:8899
- Xshell 软件设置代理,通过刚才建立的 Socket 正向代理进行远程 SSH 登陆。
- 观察 BurpSuite 转发的 http 数据包,发现传输内容经过加密,伪装成 base64 编码进行传输的。
- 分析 Linux 的
/var/log/secure
日志登陆情况。
通过 Neo-reGeorg 代理方式登陆 SSH,日志记录的 IP 源地址是服务器自身的地址,也就是隧道脚本所在服务器的地址,并非 SSH 客户端 IP 地址。
5. 如何防御 Neo-reGeorg 入侵
很多类似 Neo-reGeorg 的工具从原理上讲,都是对底层字节流量读取后进行特殊加密,然后披上 HTTP 协议外壳偷跑进网站内部的。由于 HTTP 协议包中的数据是特殊加密的,常规前置过滤手段是无法检测出来的 (这也是某些违规上网渠道难以杜绝的主因之一,所谓“道高一尺魔高一丈”)。然而,Neo-reGeorg 类工具的弱点是没办法像 rootkit 那样可以夺舍灵魂隐藏自己 (运气好甚至可以与服务器同寿)。WebShell 这类特征就比较明显了,往往东窗事发后会立刻被清理掉,攻击者只得竭尽所能隐藏行踪,避免被一眼识破。
常见的权限维持手段一般有:
-
文件伪装,例如伪装成 404 等页面,并自定义返回状态码为 404,在日志审计的时候达到一些干扰作用。
-
借助 Web 服务软件的文件名/目录解析漏洞伪装,当年的 IIS6 算是火了一把,还有 apache 的文件名从右向左的解析大法。
-
设置文件属性为隐藏,肉眼为不可见状态,更彻底一些则追加修改注册表,让文件夹选项的"显示所有文件"功能失效。
-
Linux 上可以借助一些不太常用的命令,如
chattr +i
命令,设定文件不能被修改、删除、改名等操作。 -
利用 Windows 系统保留文件名达到文件无法被删除的目的,如 aux、prn、con、nul、com1、lpt1 等,类似操作:copy 1.asp \\.\D:\wwwroot\aux.asp
-
把 Shell 内容写入数据库,需要时拿出来用。
-
对于文件包含的恶意利用,特别是跨域调用的情况来说,因为后门代码不在本地,常规的 Shell 扫描工具是无效的。文件包含的例子如下:
代码隐藏到图片
copy /b 1.jpg 2.php 3.jpg
,那么3.jpg
就是后门和图片的结合体,再以各种手段加载调用,如<?php include (‘3.jpg’); ?>
还有高级的 ADS 文件流的用法,可以参考: 运用 iGuard 防御 ADS 权限维持 -
利用 Web 软件本身配置文件做文章,最常见的是新增了虚拟目录,或者 txt 也变成了脚本解析对象等。
-
…
这些手段就像跨站漏洞一样,没完没了,不一而足。当一个技术大牛发起狠来,你永远无法估量,又有多少手段被创造出来;重新编译一个带后门的 Web 服务软件替换上去都是有可能的。
那么针对这些可能性,该如何防御?
- 借助 Shell 扫描工具定期自检,熟悉站点架构,去除敏感目录的脚本执行权限。
- 系统日志及 Web 应用日志审计,特别是异常时间段的交互。
- 借助 syslog 做好日志转发备份工作。
- 锁定中间件的配置文件,对于网页文件权限的控制做到最小化,宁可错杀后调整,也不可错放。
- 控制脚本级别文件的增删改,增加脚本白名单功能,只允许白名单内的脚本对外交互。
总 结
基于 Web 的互联网应用越来越广泛,在只保留 HTTP 端口的普遍环境下,获取网站 WebShell 权限后的横向网络渗透测试,Neo-reGeorg 是一款理想的兵器。在网站安全威胁日渐凸显的今天,入侵者轻则篡改网页内容,重则窃取重要内部数据,植入恶意代码,侵害网站访问者。天存信息的 iLocker 文件实时监控工具作为一款专业的网页篡改检测工具,可以有效检测系统异常文件变化,对运维管理团队来说,十分必要。(易树国 | 天存信息)
Ref