開源BTS產品中存在多處漏洞,攻擊者或可劫持手機通訊基站 |
來源:聚銘網(wǎng)絡 發(fā)布時間:2016-08-28 瀏覽次數(shù): |
信息來源:FreeBuf
前言在過去的幾周時間里,我從多個方面對GSM的安全性進行了調查和研究,例如GSM通信協(xié)議中存在的漏洞。除此之外,我還對目前世界上應用最為廣泛的BTS軟件進行了安全審計。在這篇文章中,我將會給大家介紹一下我在這款開源產品中所發(fā)現(xiàn)的多個漏洞,這些漏洞將允許攻擊者入侵基站收發(fā)信臺(BTS),并遠程控制它的信號收發(fā)模塊。 背景知識一個基站收發(fā)信臺(BTS)是由軟件和無線電設備組成的,它是智能手機連接GSM、UMTS、以及LTE網(wǎng)絡時必不可少的關鍵組件。BTS主要分為基帶單元、載頻單元和控制單元三部分?;鶐卧饕糜谠捯艉蛿?shù)據(jù)速率適配以及信道編碼等;載頻單元主要用于調制/解調與發(fā)射機/接收機間的耦合;控制單元則用于BTS的操作與維護。BTS中存儲編碼算法A5和密鑰Kc,用于解密接收到的密文形式的用戶數(shù)據(jù)和信令數(shù)據(jù)(包括解密)。 它相當于Wi-Fi網(wǎng)絡中的無線接入點,它負責管理Um接口的通信過程。Um接口是MS(MobileStation,移動臺)和BTS之間的接口,通過該接口,MS完成與網(wǎng)絡側的通信,完成分組數(shù)據(jù)傳送、移動性管理、會話管理、無線資源管理等多方面的功能。Um接口是GSM/GPRS/EDGE網(wǎng)絡中,MS與網(wǎng)絡之間的接口,也被稱為空中接口(AirInterface)。Um接口用于傳輸MS與網(wǎng)絡之間的信令信息和業(yè)務信息。具體如圖一所示: 圖一:MS與BTS的連接 BTS的底層軟件實際上是一個信號收發(fā)器,而它就是無線硬件設備的直接接口。它主要負責頻率調諧,并處理GMSK(高斯最小移頻鍵控)數(shù)據(jù)的調制與解調。簡而言之,它主要負責的是將無線電波轉化成數(shù)字信號。BTS其余邏輯單元的通信和同步操作都是由圖二所示的三個UDP數(shù)據(jù)包負責處理的。 圖二:信號收發(fā)模塊以及用來與BTS其余邏輯單元進行通信的三個UDP數(shù)據(jù)包 其如上圖所示,“ClockSocket”數(shù)據(jù)包主要負責進行時間同步;BTS會使用“CommandSocket”數(shù)據(jù)包來向信號收發(fā)器發(fā)送控制命令;最后,“DataSocket”數(shù)據(jù)包負責將GSM數(shù)據(jù)包從BTS通過無線電信號廣播出去,然后接收返回的響應信息。其中,信號收發(fā)器模塊中的“UDPSocket”類主要負責處理上述三個信道的通信過程。 我們的分析表明,目前大多數(shù)BTS軟件所使用的都是同一個(或者極其相似的)收發(fā)器代碼庫。因此,基本上這些BTS軟件都會受到相同漏洞的影響。惡意攻擊者可以利用這些漏洞來遠程控制信號收發(fā)器模塊,從而影響B(tài)TS的正常功能。 不僅如此,攻擊者還有可能向收發(fā)器模塊發(fā)送GSM數(shù)據(jù)脈沖,然后對移動用戶進行各種網(wǎng)絡攻擊,例如IMSI分離、加密降級、以及拒絕服務攻擊等等。 為了讓信號收發(fā)器模塊能夠接收并處理攻擊者發(fā)送的信息,發(fā)送至數(shù)據(jù)信道套接字的UDP數(shù)據(jù)包必須遵循下列格式: 當信號收發(fā)器模塊接收到了這些數(shù)據(jù)包之后,它會解碼這些數(shù)據(jù)包,然后使用GMSK來進行信號調制。最終,不同內容的信號脈沖將會被發(fā)送到與之相連的移動臺(MS)。 即便是下方列表中標注的產品只使用了GMS或者UMTS網(wǎng)絡,但是它們的信號收發(fā)器模塊(這是一個獨立組件)本身卻是基本相同的。所以我們推測,負責處理LTE連接的BTS軟件同樣也使用了類似的信號收發(fā)器代碼。 受影響產品
相關廠商
問題一:過度暴露的服務綁定概述這個漏洞存在于上述產品的網(wǎng)絡庫中,這個問題導致信號收發(fā)器的UDPsockets地址綁定到了0.0.0.0,但是這三個信號收發(fā)器的地址應該綁定到用戶設置的地址上(默認為127.0.0.1)。這也就意味著,攻擊者可以利用這些地址來與BTS系統(tǒng)進行連接,并從信號收發(fā)器中接收(發(fā)送)數(shù)據(jù)包。除此之外,訪問這些暴露了UDP網(wǎng)絡套接字的服務其安全性將無法得到保障,因為任何身份驗證機制都無法保證這些服務的安全。 圖三:三個信號收發(fā)器的套接字地址全部綁定到了地址0.0.0.0 影響攻擊者可以使用IP連接來發(fā)送UDP數(shù)據(jù)包,并獲取BTS的所有功能。這也就意味著,攻擊者可以實現(xiàn)遠程控制、GSM流量劫持、獲取用戶的通信數(shù)據(jù)、DoS拒絕服務攻擊,甚至還會發(fā)生更加糟糕的事情。 細節(jié)披露我們可以在UDPSocket類的構造器中找到引起這個漏洞的根本原因。在源文件“CommonLibs/Sockets.cpp”中,你可以找到“UDPSocket::open”方法,而正是這個方法中的錯誤代碼才導致了這個漏洞的存在。值得注意的是,所有受影響的產品中都包含有這份源文件。下面這段代碼就是漏洞代碼: 從上面的代碼段中我們可以看到,系統(tǒng)將綁定的地址保存到了mDestination類的成員變量中,但是UDPSocket::open方法的實現(xiàn)方式卻是這樣的: 盡管UDPSocket類提供了一個構造參數(shù)來指定服務器所要綁定的IP地址,但是這部分數(shù)據(jù)卻被代碼忽略了。正如上圖第272行代碼所示,通信socket被綁定到了INADDR_ANY,然而并沒有使用mDestination地址變量。 問題二:基于棧的遠程緩沖區(qū)溢出概述攻擊者可以通過向設備的控制信道發(fā)送一個較大的UDP數(shù)據(jù)包來引起棧緩沖區(qū)的溢出。 影響攻擊者可以實現(xiàn)遠程代碼執(zhí)行(RCE)或者對設備發(fā)動拒絕服務(DoS)攻擊。 細節(jié)披露控制信道是由源文件Transceiver.cpp中的Transceiver::driveControl方法控制的。這部分代碼如下所示: 注意代碼中數(shù)據(jù)包的緩存空間,這部分空間存在于方法棧中,其大小被定義為100字節(jié)(MAX_PACKET_LENGTH)。 接下來,我們對源文件Sockets.cpp中聲明的DatagramSocket::read方法(DatagramSocket類是UDPSocket類的父類)進行了分析,結果我們發(fā)現(xiàn)了下列信息: 我們可以看到,代碼讀取的是MAX_UDP_LENGTH所代表的長度,并非MAX_PACKET_LENGTH變量的值。而MAX_UDP_LENGTH的值是在Sockets.h源文件中定義的,如下圖所示: 因此,攻擊者只需要向信號收發(fā)器發(fā)送一個大小超過100字節(jié)的UDP數(shù)據(jù)包,就可以成功在目標設備上引起棧溢出。圖四顯示的是該漏洞所引發(fā)的錯誤調試信息: 圖四:由于UDP數(shù)據(jù)包過大所導致的數(shù)據(jù)包切分錯誤 問題三:未經身份驗證的遠程控制概述控制信道并沒有引入任何形式的身份驗證機制。再加上‘問題一’使得其部分信息暴露在了外部網(wǎng)絡中,所以惡意攻擊者就可以利用這個漏洞來遠程控制信號收發(fā)器模塊。 影響攻擊者可以:
細節(jié)披露控制信道使用源文件Transceiver.cpp中的Transceiver::driveControl方法來處理UDP協(xié)議。該協(xié)議暴露的部分功能包括:
攻擊者只需要向服務器的5701端口發(fā)送一個簡單的UDP數(shù)據(jù)包,就可以遠程執(zhí)行上面這些控制命令了。關于協(xié)議的完整內容可以在TRXManager/README.TRXManager文件中找到。 結論,緩解方案,以及建議通過這篇文章,想必大家已經了解了這些代碼漏洞和身份驗證機制的缺乏將會如何影響上述的這些BTS產品了。而且不僅如此,攻擊者甚至還可以利用這些漏洞來發(fā)動大規(guī)模的網(wǎng)絡攻擊。 我們強烈建議廠商趕緊采取下列的緩解措施,以提升相應產品的安全性能:
* 參考來源:ZIMPERIUMzLabs,本文由Alpha_h4ck編譯,轉載請注明來自FreeBuf(Freebuf.COM) |