1. 程式人生 > 其它 >中國深圳一家廠商的智慧攝像頭曝出漏洞:至少 17.5 萬裝置可被遠端攻擊

中國深圳一家廠商的智慧攝像頭曝出漏洞:至少 17.5 萬裝置可被遠端攻擊

安全企業 Bitdefender 和 Checkmarx 均釋出報告表示,安全研究員在多個常用智慧攝像頭中發現遠端侵入漏洞,涉及 VStarcam、Loftek、以及 Neo IP camera。其中的 Neo IP camera 就是中國深圳廠商麗鷗電子 (Neo Electronics)生產的智慧攝像頭裝置,此次安全企業提供的報告中具體列出了麗鷗電子的兩款產品:iDoorbell 以及 Neo Coolcam NIP-22 兩種攝像頭均存在緩衝區溢位問題,受影響的裝置可以被攻擊者遠端入侵,執行任意程式碼並徹底接管。

關鍵發現

深圳麗歐電子是家中國企業,他們提供智慧感測器、報警器和攝像頭。目前其產品中 iDoorbell 和 NIP-22 攝像頭存在幾個緩衝區溢位漏洞(部分出現在身份驗證之前)。而其他攝像頭也都在使用相同的軟體,因此研究者認為深圳麗歐電子的其他產品中可能也有存在問題的產品,而不僅是 iDoorbell 以及 Neo Coolcam NIP-22 攝像頭。Bitdefender 使用 Shodan 掃描後,認為大概有 175000 個裝置所使用的 UPnP上存在開放埠,可被攻擊者利用。

Checkmarx 的研究員還分析了幾組 Loftek 和 VStarcam 的智慧攝像頭,發現了其他的安全漏洞以及之前就曝出的安全問題。他們在 Loftek CXS 2200 攝像頭中,發現了 CSRF 漏洞 ——攻擊者可以利用這個漏洞新增新的管理員賬號,還有可引發 DoS 的 SSRF 漏洞,執行任意程式碼的 XSS 漏洞和檔案洩露漏洞;而在 VStarcam C7837WIP 攝像頭中,研究員發現了儲存式 XSS,開放重定向,強制重置等問題。這些攝像頭都可以直接處理 HTTP 響應,這會提升如XSS攻擊、頁面劫持、使用者資訊修改、快取中毒等問題發生的可能性。

Checkmarx 指出一部分廠商製造的攝像頭比較簡陋,只是使用了非常簡單的硬體和軟體。調查表明超過120萬裝置是可能存在漏洞的。

我們的初次掃描結果出來後,我們發現只要你的攝像頭是能夠聯網的,你就處在風險之中。惡意使用者可以利用你的裝置追蹤你的每日生活,知道你是在家還是外出了。他們能竊取你的郵箱資訊,獲取你的無線連線,取得其他裝置的許可權,監聽你的對話。 —— Checkmarx 在報告中寫道

技術分析

深圳麗歐電子的兩款攝像頭出現的問題可能遭受兩種型別的攻擊,第一種是來自攝像頭連線的 web 服務,第二種則來自實時流協議 RSTP 服務。

web 服務 Exp

HTTP服務中出現的漏洞可以通過登陸處理使用者名稱和密碼的錯誤方式觸發。使用者在進行身份驗證的時候,他們會在 GET 請求中傳遞 “ http:///?usr=&pwd=”的身份憑證。web 認證模組試圖解析這些值的時候,“libs_parsedata”會複製棧上的兩個引數的內容而沒有檢查實際的儲存容量,所以會引發越界寫入的問題。

由於啟用了完整的ASLR機制,載入二進位制檔案的地址總是隨機的。但是,由於二進位制本身不是PIE(位置獨立可執行程式是一種保護技術,允許二進位制及其所有依賴在每次執行應用程式時都會在虛擬記憶體中被載入到隨機位置),也就是說它每次還是會載入在同一地址上。

在模擬攻擊中,研究員使用兩個溢位來呼叫“系統”函式,並指定了要執行的命令。為此,他們會使用位於地址 0x0007EDD8 的 ROP 工具。這會將棧指標的地址改為 R0,之後呼叫系統函式。跳轉到 ROP 中,棧指標就會指向返回地址所在之處。

為了執行命令,研究員首先需要用 0x0007EDD8 覆蓋返回地址,並在該地址之後寫入命令。通過 username 引數的溢位,可以覆蓋棧上的所有內容,包括返回值,之後可以使用這 204 位元組的空間寫入命令。隨後,可以使用密碼這部分的溢位來覆蓋 328 位元組的返回地址。由於字串必須是以 null 終止的,所以該位元組被自動附加,將小工具的地址留在棧上。最後的 payload 看起來應當如下所示:

GET /?usr=<204bytes>&pwd=<328bytes><0xD8ED07> HTTP/1.1

這段命令不能包含 null ,’&’字元或空的空間。但這裡的限制可以使用內部欄位分隔符 ${IFS} 來輕鬆實現。程式碼執行之後,服務崩潰,但保護程序會繼續重啟攝像頭。由於檔案系統是以讀寫方式掛載的,所以可以通過 TFTP 下載二進位制檔案並修改 rcS 檔案以在啟動時保持永續性。

攝像頭的 RSTP 服務 EXP

這個 RTSP 漏洞發生在 DESCRIBE 請求中的授權欄位的處理中。首先 “Authorization: Digest”欄位需要先複製到緩衝區中,然後執行如下程式碼,R0就會指向 “Digest” 的開頭。

接下來,由於程式會希望將輸入的內容格式化成=“” 的形式,它會嘗試使用 “sscanf” 來解析輸入內容。

R0是初始來源,R1 中是正則表示式,R2 和 R3 則是目標。因為沒有檢查字串長度,可以觸發緩衝區溢位。

由於 HTTP 伺服器和 RTSP 伺服器都執行在同一個二進位制檔案中,所以可以使用上述相同的工具來獲取程式碼執行的許可權。名稱應該具有以下形式:<296位元組>+,這會用在寫入命令中,而欄位為<548位元組>+,最終請求將如下所示:

DESCRIBE rtsp://:554/ RTSP/1.0
Authorization: Digest <296 bytes>=”<548 bytes><0xD8ED07>”

可以看到新增最後的null位元組之後,棧上會形成和(0x0007EDD8)相同的地址,此時,命令中不能包含 “=” 字元但可以包含空格。

在兩種攝像頭型號都都出現這個漏洞,唯一的區別是系統呼叫程式的地址是不同的,如上所示可以用在iDoorbell上,而如果想要用在 NIP-22 型號攝像頭上地址應該是 0x00084b64 。

目前,Bitdefender 及 Checkmarx 都向相關使用者發出預警,這些存在安全隱患的裝置可能會被劫持、組建成如 Mirai 之類的大型殭屍網路。相關使用者應當提起重視並儘快更新系統。