按 Enter 到主內容區
:::

TWCERT-電子報

:::
發布日期:
字型大小:

三項漏洞曝光,令Foscam IP Camera無法承受連鎖攻擊

CVE編號 CVE-2018-6830 CVE-2018-6831 CVE-2018-6832
影響產品 韌體版本 2.11.1.120、2.11.1.133、2.13.1.120、2.13.2.120、2.14.1.120、2.21.2.31、2.22.2.31、2.24.2.31、2.51.2.47、2.52.2.47、2.54.2.47、2.71.1.59、2.72.1.59、2.74.1.58、2.74.1.59、2.81.2.33、2.82.2.33、2.84.2.33
解決辦法 (1)參考https://www.foscam.com/downloads/index.html,選擇所持機種型號下載興版韌體。

(2)封閉port 88及443。

張貼日 2018-06-11
上稿單位 TWCERT/CC

●概述:
安全研究團隊VDOO專攻IoT資安領域,據其分析,Foscam監控設備使用Linux平台,存在3種嚴峻瑕疵能形成連鎖攻擊,駭客只要以掃描或越權存取等手段,獲得IP Camera位址,可藉strncat()函數合併URI路徑元件字串與根路徑 /tmp/www,取得完整路徑,濫用lighttpd web server客製化程式碼刪除刪除暫存快照之功能,毀掉關鍵檔案,繞過身分驗證;再塞入大量字元當成callbackJson字串參數,讓prepare_reply_func()串接callbackJson與其他資料時觸發Buffer Overflow,導致程式功能crash,迫使watchdog自動重啟程序,從而盜取管理者憑證;擁有管理者身分後,惡意改變NTP伺服器URL內容,換成 ;mal_command; 之類分號包夾惡意指令之格式,經setSystemTime指令處理變造之NTP伺服器URL,完成惡意指令注入,且以root身分執行有害的Shell Command;究其原因在於軟體設計缺陷,過多程序採用root身分,嚴重違反權力分割概念;外部程序替代既有API執行shell commands引進風險;輸入值過濾能力欠佳;及韌體檔案僅採AES 128加密區塊鏈保護,加密演算過弱,令駭客得以快速窺探軟體架構全貌,目前仍未察覺在野攻擊事例,已確認相關漏洞影響18種韌體與55款機型,Foscam已修補所屬弱點韌體。
●編註:
(1)漏洞特性分析
(1-1)Arbitrary File Deletion
無需管理者身分,藉由變造GET請求,駭客可弱點刪除攝影機檔案系統內任何檔案,此瑕疵嚴格說來算是一種目錄遍歷類弱點。
起因在於開源的lighttpd web server,容許供應商外加客製化code,而某些程式碼用途,即是snapPicture或exportConfig等API指令取用snapshot圖後,旋即刪除暫存快照,當GET request經port 88送至web server,request內URI路徑元件(con->request.uri->ptr)會被搜尋是否有 /configs/export/ 或 /snapPic/ 等路徑字串,若然,則以strncat()函數將所得路徑字串與檔案根路徑 /tmp/www 合併形成完整路徑,然後呼叫access(path, F_OK)驗證路徑是否存在,後續以remove(path)刪除之。駭客甚能使用 ../../ 的字串序列,遍覽目錄樹而找到根路徑,再補上所欲摧毀檔案之路徑字串(例:/snapPic/../../../tmp/goal),只要goal檔案實際存在,則逕予刪除。
(1-2) Stack-based Buffer Overflow
同樣地溢位漏洞需要GET請求才能觸發,web server提供的FastCGI API介面帶有多種command,其中getSWFlag指令,被HTTP GET請求/CGIProxy.fcgi?cmd=getSWFlag呼叫後,其參數callbackJson被CGIProxy.fcgi程序轉送給網路服務之getSWFlag函數程式碼,getSWFlag將callbackJson當作查詢字串參數處理,讀取內容再轉換成區域變數callbackJson_var數值,接著prepare_reply_func()函數備妥一些回送給用戶的HTTP response,若callbackJson_var非空值,prepare_reply_func()將不同的資料附掛於callbackJson_var字串之後。
關鍵在於,若駭客刻意塞入大量字元當成callbackJson查詢字串參數,則prepare_reply_func()串接callbackJson與其他資料時,直接造成callbackJson_var變數overflow,發生在getSWFlag所用stack位置,錯誤地超額覆寫並衍生crash,數秒後/usr/bin/watchdog(監視程序)重啟webService process。
(1-3)Shell Command Injection
此探勘技術需要管理者憑證,剛好前述2弱點可資利用取得,讓攻擊者扮演root角色恣意執行指令,過程中亦須與DNS server互動。
攝影機web server之FastCGI API介面,具備setSystemTime指令,以設定用戶想要的NTP server(語法:/CGIProxy.fcgi?cmd=setSystemTime),NTP server參數型態係URL字串值,當個別NTP執行續更新時,執行setSystemTimeNTP()取得NTP伺服器URL,接著執行gethostbyname(NTP伺服器URL),然而gethostbyname()設計邏輯不足以檢查NTP伺服器URL字串之正確性,就算內置空白與分號也不會被過濾掉,故錯誤值如 ;mal_command; 也能完成運算,只要gethostbyname()被判定成功解析出hostname,再來直接呼叫sprintf(buf, “ntpclient -h %s -c 3 -s”, NTP伺服器URL)與popen(buf, “r”),因參數NTP伺服器URL已被配賦 ;mal_command; 導致popen()對處理buf值時等於執行sh -c “ntpclient -h ; mal_command; -c 3 -s”,popen()函數將注入的惡意命令處理完成後,按程式設計,參數會輾轉傳遞,直到呼叫devMng程序,而devMng程序是帶著root身分運行,結果就是root權限行使破壞。
(2)軟體架構缺陷
(2-1)設備韌體內過多程序採用root身分,嚴重違反權力分割概念,程式安全應顧慮到每一個獨立程序應配賦相應之權限等級,切忌統一使用root,將程式整體使用高級權限的機會降至最低,增加駭客破解難度。
(2-2)執行太多外部程序,替代既有API或函式庫,外部程序執行shell commands同時也引進風險。
(2-3)輸入值過濾能力欠佳,原程式開發者依賴gethostbyname(),誤信可妥善處理輸入URL字串,可是gethostbyname()本來就不是為此目的而開發,用白名單過濾輸入欄位字元是否合法方為良策,
(2-4)由於韌體相關檔案僅採短而易猜之AES 128加密區塊鏈運算,加密演算過弱,令駭客快速分析軟體全貌,找出安全破綻,尤其很多函數命名皆一目瞭然,更是加速駭客入侵行動。
(3)影響韌體及機型
(3-1)本次漏洞影響韌體版本18種:
2.11.1.120、2.11.1.133、2.13.1.120、2.13.2.120、2.14.1.120、2.21.2.31、2.22.2.31、2.24.2.31、2.51.2.47、2.52.2.47、2.54.2.47、2.71.1.59、2.72.1.59、2.74.1.58、2.74.1.59、2.81.2.33、2.82.2.33、2.84.2.33。
(3-2)各韌體對應硬體型號55款:
FI9821W V2、FI9831W、FI9826W、FI9821P、FI9831P、FI9826P、FI9828P V2、FI9828P、FI9828W、FI9818W V2、FI9805W、FI9804W、FI9804P、FI9805E、FI9805P、FI9821P V2、FI9826P V2、FI9831P V2、FI9821EP、FI9803EP、FI9853EP、FI9803P、FI9851P、FI9815P、FI9815P V2、FI9816P、FI9816P V2、C1、C1 V2、C1 Lite、C1 Lite V2、FI9800P、FI9800P V2、FI9803P V2、FI9803P V3、FI9851P V2、R2、R4、C2、FI9961EP、FI9928P、FI9900EP、FI9900P、FI9901EP、FI9816P V3、FI9821EP V2、FI9821P V3、FI9826P V3、FI9831P V3、C1 Lite V3、C1 V3、FI9800P V3、FI9803P V4、FI9851P V3、FI9853EP V2

回頁首