概 述

Ngrok是一个内网穿透工具,该工具采用go语言进行开发,支持TCP、HTTP、TLS(企业用户,需要付费)。该工具主要用于解决外网的客户端无法访问内网资源的问题,因为其具有使用简单、连接迅速,具备良好的跨平台特性等特点,所以可以被项目开发人员用来快速在互联网部署项目,同时,该工具也被很多攻击者利用来进行网络渗透。

原理及使用

  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流量检测。

总 结

攻击者利用Ngrok工具可以快速的将内网服务映射至公网,攻击者对内网的主动攻击行为,所有的流量都在内网主机与Ngrok官网的通信流量中,且TLSv1.3的使用隐藏了握手和证书等有用信息,增加了流量分析和检测难度。目前越来越多的攻击者开始使用各种内网穿透和代理工具,一方面可以访问从公网无法直接访问的内网资源,一方面可以借助加密流量隐藏自己的真实攻击信息和攻击意图。  

观成科技安全研究团队对这类隐蔽通信的内网穿透和代理工具进行持续跟踪和研究,帮助客户及时检测发现内网穿透攻击行为或潜在风险。