Ngrok是一个内网穿透工具,该工具采用go语言进行开发,支持TCP、HTTP、TLS(企业用户,需要付费)。该工具主要用于解决外网的客户端无法访问内网资源的问题,因为其具有使用简单、连接迅速,具备良好的跨平台特性等特点,所以可以被项目开发人员用来快速在互联网部署项目。同时,该工具也可能被一些攻击者利用来进行网络渗透。
攻击者利用Ngrok工具可以快速的将内网服务映射至公网,攻击者对内网的主动攻击行为,所有的流量都在内网主机与Ngrok官网的通信流量中,且TLSv1.3的使用隐藏了握手和证书等有用信息,增加了流量分析和检测难度。日前,观成科技安全研究团队对Ngrok等隐蔽通信的内网穿透和代理工具进行了持续跟踪和研究。这些研究成果可以帮助组织了解隐蔽通信工具的潜在威胁,确保内部网络的安全性和对数据的有效保护。
攻击原理及使用
Ngrok只需要在官网注册号账号之后,在内网主机安装Ngrok客户端程序,在给Ngrok客户端程序授权后可以直接在命令行使用。攻击者通常会将内网提供的服务映射至公网,比如Windows的RDP服务、Linux的SSH服务,具体原理如下图:
图 1 原理
如上图所示,攻击者可以将Ngrok的客户端程序上传至内网主机,授权之后,启动Ngrok将内网主机的远程桌面映射到Ngrok提供的公共服务上(命令行输入ngrok tcp 3389),之后在外网的攻击机就可以通过Ngrok程序提供的转发地址连接到内网。
图 2 Ngrok客户端信息
Web Interface是ngrok提供的监控界面,当将内网的WEB服务映射至公网时,在这个界面我们可以看到外网主机的发起的HTTP请求,包括完整的请求和响应信息。
Forwarding是内网服务映射到公网的访问地址。
图 3 Web Interface界面监控
图 4 外网主机通过转发地址连接内网的远程桌面
该工具支持添加多项配置,包括登录信息验证、限制IP登录以防止暴露在公网的服务被所有人使用。修改这些配置对流量的行为影响较小。每次启动Ngrok,内网的服务转发的地址都不会相同,可以在官网添加免费的子域名,每次登录的地址就不会发生变动。
流量分析与检测
对流量进行分析后发现,Ngrok程序启动时,不论指定的是TCP还是HTTP协议(TLS协议需付费),代理程序与ngrok官网通信使用的都是TLS1.3的协议,SNI(服务器名称指示)为connect.ngrok-agent.com。由于证书和握手信息在TLS1.3协议中是加密隐藏的,无法查看,也为基于证书、握手特征的检测带来了一定困难。
经过分析发现Ngrok在TLS通信过程中维持长连接,虽然握手信息、证书信息、传输内容都看不到,但是从加密载荷规律的时空分布上看,该工具具有较为规律的心跳特征,心跳包的载荷变化规律也呈现周期性变化,心跳包的加密流量载荷长度大多数为特定的包长序列,且在时间上存在周期性。
根据分析结果,我们可以通过利用指纹过滤、特征匹配、流量行为分析等多种检测方法结合,实现对Ngrok工具的TLS流量检测。