作者:
Kevin2600
·
2016/03/10 15:28
0x00 前言
首先要感謝冰哥的指導和鼓勵才有了以下這篇小文. 當下智慧物聯網裝置火熱, 許多商家和開發人員只圖功能上的快捷, 而忽略提供相應的安全方案. 同時許多傳統的工控裝置, 因新增了網路模組卻又缺少相應的安全意識, 導致這些裝置都稀裡糊塗地暴露在了公網上. 這為攻擊者開啟了一道方便之門. 本文將於這款 KACO 新能源公司生產的電源逆變器系統為例, 跟大家分享下不安全的設計會給工控系統帶來怎樣的影響.
KACO 新能源公司是一家位於德國, 專注生產和設計電力相關的工控系統. 據稱其客戶遍佈全球. 但在 2015 年的 DEFCON 23 上被爆出其在電源逆變器系統 XP100U 產品中存在後門.
而在重現的研究過程中, 我們可以發現此款產品的問題還不僅僅如此. 接下來大家就一起來場工控裝置的探索之旅吧.
0x01 經典系統後門
KACO 的這款電源逆變器系統自帶了一個Java 編寫的小型 WEB 服務, 用於遠端登陸系統監控各項資料指標.
透過閱讀操作手冊我們可以得知, 系統有個預設的密碼 ksk12. 成功登陸後便可進行一系列的資料採集等操作.
在透過檢視頁面程式碼後, 我們可以找到一個名為wms.jar 的檔案. 這裡我們可以使用JAVA decompile 軟體來檢視其原始碼.
只需簡單的查詢password關鍵字, 我們便可以輕鬆找到位於WMSSettings下的後門密碼 “kacosolar2008” .
有趣的是此後門密碼是無法修改的. 如以下程式碼所示, 整個後門的認證過程只是簡單跟WMSSettings 裡設定好的AdminPassword 在本地進行比對.
瞧整個後門還原過程是那麼的輕鬆愉快, 不過更為有趣的地方還在後頭…
0x02 掩耳盜鈴認證設計
再瞭解過上面這個經典的後門系統後門賬號後. 透過 Wireshark 抓包分析, 還可以發現了一個此係統 ”有意思” 的認證設計. 之前我們說過系統預設密碼為 ksk12. 正常情況下使用者可以將其修改為自定的密碼, 而整個過程都以明文的方式傳送. 是的, 我們可以透過簡單的sniffing 就得到密碼. 但這又有啥特別呢? 別急好戲還在後頭.....
這裡我們還是先來看下整個登陸的過程. 當我們按下Login鍵之後, 客戶端發的第一個包中含有 “aci_request_code type=‘int’> 31<
”的字樣. 那麼 31 是代表什麼意思呢?
透過查詢 Java 原始碼得知, 型別 31 是用來從伺服器 get 當前密碼的. 也就是說每次認證時, 系統都會將當前密碼以明文的方式發回...
最不可思議的地方是即使使用者輸入了錯誤密碼, 表面上會彈出個報錯框. 但實際上系統依舊將正確的密碼明文返回. 哈哈! 換句話說我們更本就不需要透過逆向原始碼這麼麻煩, 系統本身就已經把密碼告知天下了.
0x03 獵殺 XP100U
講了這麼多大家一定迫不及待的想找臺KACO 來體驗下了吧. 這裡我們可以使用搜尋引擎來幫助完成這個任務. 如下圖所示 SHODAN 輕鬆幫我們找到了幾臺暴露在公網的KACO 逆變器.
需要注意的是系統預設的埠號是 80 . 大家在測試過程中可以多試試幾個常用埠.
有意思的是在某個KACO 電源逆變器的網址, 還存在網路監視器系統 (感謝 Z-One 友情提供線索). 感興趣的朋友可以繼續深度挖掘一下. 不過不要搞破壞哦. :D
0x04 總結
透過這個案例, 可以發現在傳統系統安全中已經很少出現的漏洞. 如 HTTP 明文傳輸; 預設密碼; 系統後門等等在工控嵌入式系統中仍舊非常普遍. 可是由此所帶來的隱患卻是巨大的. 嵌入式系統往往還面臨一旦投入產品線, 便難以升級的困難. 也許產品設計者在初始階段就應該在易用 vs 安全中找到平衡點. 不過就安全愛好者本身而言, 工控嵌入式是一個非常好玩又很深的領域. 期待大家玩出更多的花樣.
0x05 參考文獻
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!