安全動態(tài)

開源BTS產(chǎn)品中存在多處漏洞,攻擊者或可劫持手機通訊基站

來源:聚銘網(wǎng)絡(luò)    發(fā)布時間:2016-08-28    瀏覽次數(shù):
 

信息來源:FreeBuf

Clipboard Image.png

前言

在過去的幾周時間里,我從多個方面對GSM的安全性進行了調(diào)查和研究,例如GSM通信協(xié)議中存在的漏洞。除此之外,我還對目前世界上應(yīng)用最為廣泛的BTS軟件進行了安全審計。在這篇文章中,我將會給大家介紹一下我在這款開源產(chǎn)品中所發(fā)現(xiàn)的多個漏洞,這些漏洞將允許攻擊者入侵基站收發(fā)信臺(BTS),并遠程控制它的信號收發(fā)模塊。

背景知識

一個基站收發(fā)信臺(BTS)是由軟件和無線電設(shè)備組成的,它是智能手機連接GSM、UMTS、以及LTE網(wǎng)絡(luò)時必不可少的關(guān)鍵組件。BTS主要分為基帶單元、載頻單元和控制單元三部分。基帶單元主要用于話音和數(shù)據(jù)速率適配以及信道編碼等;載頻單元主要用于調(diào)制/解調(diào)與發(fā)射機/接收機間的耦合;控制單元則用于BTS的操作與維護。BTS中存儲編碼算法A5和密鑰Kc,用于解密接收到的密文形式的用戶數(shù)據(jù)和信令數(shù)據(jù)(包括解密)。

它相當于Wi-Fi網(wǎng)絡(luò)中的無線接入點,它負責(zé)管理Um接口的通信過程。Um接口是MS(MobileStation,移動臺)和BTS之間的接口,通過該接口,MS完成與網(wǎng)絡(luò)側(cè)的通信,完成分組數(shù)據(jù)傳送、移動性管理、會話管理、無線資源管理等多方面的功能。Um接口是GSM/GPRS/EDGE網(wǎng)絡(luò)中,MS與網(wǎng)絡(luò)之間的接口,也被稱為空中接口(AirInterface)。Um接口用于傳輸MS與網(wǎng)絡(luò)之間的信令信息和業(yè)務(wù)信息。具體如圖一所示:

Clipboard Image.png

圖一:MS與BTS的連接

BTS的底層軟件實際上是一個信號收發(fā)器,而它就是無線硬件設(shè)備的直接接口。它主要負責(zé)頻率調(diào)諧,并處理GMSK(高斯最小移頻鍵控)數(shù)據(jù)的調(diào)制與解調(diào)。簡而言之,它主要負責(zé)的是將無線電波轉(zhuǎn)化成數(shù)字信號。BTS其余邏輯單元的通信和同步操作都是由圖二所示的三個UDP數(shù)據(jù)包負責(zé)處理的。

Clipboard Image.png

圖二:信號收發(fā)模塊以及用來與BTS其余邏輯單元進行通信的三個UDP數(shù)據(jù)包

 其如上圖所示,“ClockSocket”數(shù)據(jù)包主要負責(zé)進行時間同步;BTS會使用“CommandSocket”數(shù)據(jù)包來向信號收發(fā)器發(fā)送控制命令;最后,“DataSocket”數(shù)據(jù)包負責(zé)將GSM數(shù)據(jù)包從BTS通過無線電信號廣播出去,然后接收返回的響應(yīng)信息。其中,信號收發(fā)器模塊中的“UDPSocket”類主要負責(zé)處理上述三個信道的通信過程。

我們的分析表明,目前大多數(shù)BTS軟件所使用的都是同一個(或者極其相似的)收發(fā)器代碼庫。因此,基本上這些BTS軟件都會受到相同漏洞的影響。惡意攻擊者可以利用這些漏洞來遠程控制信號收發(fā)器模塊,從而影響B(tài)TS的正常功能。

Clipboard Image.png

不僅如此,攻擊者還有可能向收發(fā)器模塊發(fā)送GSM數(shù)據(jù)脈沖,然后對移動用戶進行各種網(wǎng)絡(luò)攻擊,例如IMSI分離、加密降級、以及拒絕服務(wù)攻擊等等。

為了讓信號收發(fā)器模塊能夠接收并處理攻擊者發(fā)送的信息,發(fā)送至數(shù)據(jù)信道套接字的UDP數(shù)據(jù)包必須遵循下列格式:

Clipboard Image.png

當信號收發(fā)器模塊接收到了這些數(shù)據(jù)包之后,它會解碼這些數(shù)據(jù)包,然后使用GMSK來進行信號調(diào)制。最終,不同內(nèi)容的信號脈沖將會被發(fā)送到與之相連的移動臺(MS)。

即便是下方列表中標注的產(chǎn)品只使用了GMS或者UMTS網(wǎng)絡(luò),但是它們的信號收發(fā)器模塊(這是一個獨立組件)本身卻是基本相同的。所以我們推測,負責(zé)處理LTE連接的BTS軟件同樣也使用了類似的信號收發(fā)器代碼。

 受影響產(chǎn)品

-YateBTS<= 5.0.0

-OpenBTS<= 4.0.0

-OpenBTS-UMTS<= 1.0.0

-Osmo-TRX/Osmo-BTS<= 0.1.10

-以及其他使用了相同信號收發(fā)器代碼的產(chǎn)品

 相關(guān)廠商

-Legba股份有限公司(YateBTS)

-RangeNetworks(OpenBTS和OpenBTS-UMTS)

-OsmoCOM(Osmo-TRX和Osmo-BTS)

 問題一:過度暴露的服務(wù)綁定

概述

這個漏洞存在于上述產(chǎn)品的網(wǎng)絡(luò)庫中,這個問題導(dǎo)致信號收發(fā)器的UDPsockets地址綁定到了0.0.0.0,但是這三個信號收發(fā)器的地址應(yīng)該綁定到用戶設(shè)置的地址上(默認為127.0.0.1)。這也就意味著,攻擊者可以利用這些地址來與BTS系統(tǒng)進行連接,并從信號收發(fā)器中接收(發(fā)送)數(shù)據(jù)包。除此之外,訪問這些暴露了UDP網(wǎng)絡(luò)套接字的服務(wù)其安全性將無法得到保障,因為任何身份驗證機制都無法保證這些服務(wù)的安全。

Clipboard Image.png

圖三:三個信號收發(fā)器的套接字地址全部綁定到了地址0.0.0.0

影響

攻擊者可以使用IP連接來發(fā)送UDP數(shù)據(jù)包,并獲取BTS的所有功能。這也就意味著,攻擊者可以實現(xiàn)遠程控制、GSM流量劫持、獲取用戶的通信數(shù)據(jù)、DoS拒絕服務(wù)攻擊,甚至還會發(fā)生更加糟糕的事情。

細節(jié)披露

我們可以在UDPSocket類的構(gòu)造器中找到引起這個漏洞的根本原因。在源文件“CommonLibs/Sockets.cpp”中,你可以找到“UDPSocket::open”方法,而正是這個方法中的錯誤代碼才導(dǎo)致了這個漏洞的存在。值得注意的是,所有受影響的產(chǎn)品中都包含有這份源文件。下面這段代碼就是漏洞代碼:

Clipboard Image.png

從上面的代碼段中我們可以看到,系統(tǒng)將綁定的地址保存到了mDestination類的成員變量中,但是UDPSocket::open方法的實現(xiàn)方式卻是這樣的:

Clipboard Image.png

盡管UDPSocket類提供了一個構(gòu)造參數(shù)來指定服務(wù)器所要綁定的IP地址,但是這部分數(shù)據(jù)卻被代碼忽略了。正如上圖第272行代碼所示,通信socket被綁定到了INADDR_ANY,然而并沒有使用mDestination地址變量。

 問題二:基于棧的遠程緩沖區(qū)溢出

概述

攻擊者可以通過向設(shè)備的控制信道發(fā)送一個較大的UDP數(shù)據(jù)包來引起棧緩沖區(qū)的溢出。

影響

攻擊者可以實現(xiàn)遠程代碼執(zhí)行(RCE)或者對設(shè)備發(fā)動拒絕服務(wù)(DoS)攻擊。

細節(jié)披露

控制信道是由源文件Transceiver.cpp中的Transceiver::driveControl方法控制的。這部分代碼如下所示:

Clipboard Image.png

注意代碼中數(shù)據(jù)包的緩存空間,這部分空間存在于方法棧中,其大小被定義為100字節(jié)(MAX_PACKET_LENGTH)。

接下來,我們對源文件Sockets.cpp中聲明的DatagramSocket::read方法(DatagramSocket類是UDPSocket類的父類)進行了分析,結(jié)果我們發(fā)現(xiàn)了下列信息:

Clipboard Image.png

我們可以看到,代碼讀取的是MAX_UDP_LENGTH所代表的長度,并非MAX_PACKET_LENGTH變量的值。而MAX_UDP_LENGTH的值是在Sockets.h源文件中定義的,如下圖所示:

Clipboard Image.png

因此,攻擊者只需要向信號收發(fā)器發(fā)送一個大小超過100字節(jié)的UDP數(shù)據(jù)包,就可以成功在目標設(shè)備上引起棧溢出。圖四顯示的是該漏洞所引發(fā)的錯誤調(diào)試信息:

Clipboard Image.png

圖四:由于UDP數(shù)據(jù)包過大所導(dǎo)致的數(shù)據(jù)包切分錯誤

 問題三:未經(jīng)身份驗證的遠程控制

概述

控制信道并沒有引入任何形式的身份驗證機制。再加上‘問題一’使得其部分信息暴露在了外部網(wǎng)絡(luò)中,所以惡意攻擊者就可以利用這個漏洞來遠程控制信號收發(fā)器模塊。

影響

攻擊者可以:

-通過關(guān)閉模塊來實現(xiàn)拒絕服務(wù)攻擊。

-通過修改無線電信號頻率來阻塞信號發(fā)送。

-通過“SETBSIC”命令遠程劫持BTS。

 細節(jié)披露

控制信道使用源文件Transceiver.cpp中的Transceiver::driveControl方法來處理UDP協(xié)議。該協(xié)議暴露的部分功能包括:

-開啟或關(guān)閉TRX模塊:CMDPOWERON / CMD POWEROFF

-更改TRX的無線頻率:CMDRXTUNE frequency / CMD TXTUNE frequency

-設(shè)置GSM信號的驗證信息:CMDSETBSIC value

攻擊者只需要向服務(wù)器的5701端口發(fā)送一個簡單的UDP數(shù)據(jù)包,就可以遠程執(zhí)行上面這些控制命令了。關(guān)于協(xié)議的完整內(nèi)容可以在TRXManager/README.TRXManager文件中找到。

結(jié)論,緩解方案,以及建議

通過這篇文章,想必大家已經(jīng)了解了這些代碼漏洞和身份驗證機制的缺乏將會如何影響上述的這些BTS產(chǎn)品了。而且不僅如此,攻擊者甚至還可以利用這些漏洞來發(fā)動大規(guī)模的網(wǎng)絡(luò)攻擊。

我們強烈建議廠商趕緊采取下列的緩解措施,以提升相應(yīng)產(chǎn)品的安全性能:

1.    更新你的BTS軟件,如果收到了更新補丁推送,請盡快安裝補丁程序。

2.    將用于控制操作和數(shù)據(jù)轉(zhuǎn)換的socket地址綁定到本地接口(127.0.0.1)。

3.    防火墻:阻止流經(jīng)端口5701(控制端口)和端口5702(數(shù)據(jù)端口)的所有外部網(wǎng)絡(luò)流量。

4.    引入身份驗證系統(tǒng),以防止沒有權(quán)限的攻擊者通過BTS控制端口來登錄服務(wù)器或訪問網(wǎng)絡(luò)。

5.    修復(fù)代碼中的緩沖區(qū)大小問題。

6.    進行額外的代碼審計。

* 參考來源:ZIMPERIUMzLabs,本文由Alpha_h4ck編譯,轉(zhuǎn)載請注明來自FreeBuf(Freebuf.COM)

 
 

上一篇:互聯(lián)網(wǎng)信息服務(wù)被戴上“緊箍咒”

下一篇:2016年08月28日 聚銘安全速遞