概 述

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的使用隱藏了握手和證書等有用信息,增加了流量分析和檢測難度。目前越來越多的攻擊者開始使用各種內網穿透和代理工具,一方面可以訪問從公網無法直接訪問的內網資源,一方面可以借助加密流量隱藏自己的真實攻擊信息和攻擊意圖。  

觀成科技安全研究團隊對這類隱蔽通信的內網穿透和代理工具進行持續跟蹤和研究,幫助客戶及時檢測發現內網穿透攻擊行為或潛在風險。