看雪編輯按:IoT
現在為什麼能這麼火?究其原因還是與它所處的發展階段有關,這同最初移動端剛興起時如出一轍,即相關的防護措施沒跟上,機會自然也就多了。很大一部分為智慧裝置做開發的程式設計師往往只關注如何實現功能,而忽略了其中的安全問題,對安全研究者來說會發現世界原來如此簡單。此外,工控安全問題也日漸凸顯了出來,一旦這些基礎設施出了事情,那麼所帶來的後果往往是災難性的,例如之前的烏克蘭電網被黑事件。本次議題由啟明星辰
ADLab
西南團隊負責人王東為我們帶來有關智慧化安全的探討,相信會讓各位對所處的這個萬物智慧世界中存在的安全問題有更深刻的認識。以下內容為王東演講實錄,由看雪學院(微信公眾號:ikanxue)整理。
王東
啟明星辰ADLab西南團隊負責人,十年網路安全研究經驗,曾任職於電子科技大學。2008年開始網路安全研究,擅長windows核心安全對抗、惡意程式碼分析、主動防禦、rootkit/antirootkit、軟體除錯和漏洞分析。2016年加入啟明星辰,開始物聯網安全研究和工業控制系統安全研究。目前專注於基礎應用元件、智慧裝置、智慧應用和電力工業控制系統的漏洞挖掘,向Imagemagick、Graphicmagick、GNU
binutils、Advantech、ICS-CERT、Cisco、汽車電子、家電穿戴、工業控制等提交了多個漏洞。
王東:大家好,我是來自啟明星辰的王東,同時也是ADLab西南團隊的負責人。今天給大家分享的議題是智慧化的安全,涉及到智慧裝置、智慧應用和ICS。我們對智慧化的安全很感興趣,作為一個安全研究人員,以前更多是找別人的問題,發現別人的安全風險,如今安全人員自己也面臨安全風險了,因為我們無法抗拒這些智慧裝置應用帶來的便利。
2008年開始,我開始在電子科大做安全研究,那時安全軟體的主動防禦很火。2016年加入啟明星辰做安全研究,2017年跟東方電氣成立工控資訊保安聯合實驗室做ICS的安全研究,主要工作是漏洞挖掘。
智慧化
整個智慧化是由IOT推動的,IOT帶來了很多概念:萬物互聯,萬物智慧,萬物智慧,現在已經上升到這個智慧地球的概念了。比如,智慧冰箱/智慧汽車/智慧醫療,他們給我帶來了一些智慧化的功能,解決了一些問題。
但是,智慧化並沒有讓安全變得智慧,反而把傳統資訊化的安全問題全部保留了下來。比如說汽車,以前是沒有聯網功能的,要進行攻擊只能物理接觸,現在汽車聯網了智慧了,駭客也就可以遠端攻擊了,這是騰訊安全團隊對特拉斯汽車的遠端攻擊。卡巴斯基的統計表明,IOT的安全威脅數量直線上升。
從Security到Safety
除了數量上的變化,我們認為還有一些本質上的改變,這個本質上的改變我歸結為Security到Safety。這裡的Safety指的是一個人的物理特性,一旦被攻擊就是永久不可恢復。
傳統Security帶來的損失都是邏輯性的,都是可以恢復的,因為在本質上它不是一個物理問題,只是一個邏輯量的表徵。就像小區旁邊的樹一樣,被颱風刮掉對於你個人來說沒有物理影響,只需要給一點錢讓物業幫你修復就行了。
傳統Security的補救比較簡單,一般只需要做一些備份和恢復(大部分廠商都會做),清除惡意程式碼和還原資料庫。傳統Security的補救成效也很明顯,備份恢復可以恢復受攻擊的業務,給客戶賠禮道歉再補償點經濟損失就萬事大吉了。
這些安全事故慢慢就會被遺忘掉,比如當年刪庫的某站,資料恢復後這個網站的業務還是一如既往,只是抽風了一陣而已。
總結起來,傳統Security漏洞可以做到更改任何邏輯量,在數字世界中發起任意攻擊,但就是無法穿透”嘆息之牆”危害到人的物理本體,即使他擁有類似五小強的越級挑戰能力。
但是”嘆息之牆”是可以打破的,智慧化就是破牆的太陽般光芒。比如說智慧冰箱,透過安全漏洞控制溫度,可以讓食物變質吃壞人,或者讓一些需要恆溫的醫療用品產生質變,給人用了沒有效果或者產生醫療事故。又如智慧汽車,遠端攻擊使高速熄火,傷人十分危險。針對工業控制系統,比如說像火力發電,是要燒蒸汽來帶動這個汽輪機的旋轉,如果溫控被攻擊出事了,炸的不是一口簡單的小鍋,那鍋非常大,一旦炸了這個廠裡面的人也會被炸飛。
所以,智慧化可以輕易將邏輯世界的Security問題可以演變為物理世界的Safety問題,我們接下來看例子。
智慧裝置
首先,我們來看智慧裝置。智慧裝置主要是這麼幾類:家電、穿戴和安防,其他我認為都是一些拿來玩的,沒有多大的作用。這是智慧裝置的架構,比如這個WIFI空調,裝置跟雲端通常會用TCP/IP協議;APP跟雲端一般也是用TCP/IP,有可能是WIFI也有可能是行動網路;裝置跟雲端之間比較複雜,有可能用TCP/IP也有可能用BLE。
在智慧裝置中,有一種裝置如果不安全就特別不安全,那就是鎖。如果這個鎖出問題,你晚上睡的很安心,但是第二天一起來你可能就會發現這個世界已經變了。
我們研究了兩代智鎖,第一代就是WIFI鎖,他可以用遙控滾動碼方式控制這個鎖。這個產品經理很聰明,IOT一來他就搭上了智慧化的車,開發一個APP,家裡都有路由器,配上同時具備滾動碼和TCP/IP的裝置,這個鎖可以快速變為一個智慧鎖的。
針對TCP/IP,我們可以用很多的工具做流量資料分析。使用WIFI協議做智慧裝置通常都是為了短平快,我們只需要wireshark以及tcpdump以及路由器就可以做這個裝置的網路資料獲取和分析。
這個鎖,我們抓了這個開關門的資料,我們發現這個資料非常的簡單,64個位元組,並且還用的是廣播,還用UDP。這個裝置的協議互動非常簡單,我讓你開門就開門,我讓你關門你就關門。
我們想知道這裡面有沒有重放的問題,我們抓取連續開門報文,發現三次報文是非常的相似的,差異是特別小的,差異很有規律,一看就很典型,具有重放的可能性特別大,我們就用pcap抓包然後重放,鎖就這麼開了。
說個題外話,WIFI情況下通常抓包需要把整個網路控制了,如果你攻擊別人,即使接入了別人WIFI網路,如果不採用ARP欺騙這種連結劫持辦法,也是沒法抓取其它裝置的網路資料的。
但是,這個裝置有一個致命的錯誤,它用了廣播,完全不需要劫持。我們很快把這個鎖的互動協議分析出來,最核心是三個變數:序列號、門開關狀態,控制key。
整個報文64個位元組,沒有加密,我不知道是不是開發人員想忽悠使用者,他做了異或加密。如果想開這個鎖,必須提供正確的SN和key,也就是說Key以及Sn不對,這個鎖就會拒絕執行命令。
看完協議結構,我們發現是完全可以破解的,拿到一個廣播報文,就可以把這個Key以及SN都可以破開,這裡面SN只需要做一次異或計算就可以拿到。Key會複雜一點,因為key透過key2方式再做了異或。用兩個非常簡單的公式可以把這個算出來了。
如果說我們從來沒有辦法進入這個鎖的區域網,比如說這個鎖是放在你家裡,你在北京我在成都,我怎麼樣可以攻擊你這個鎖呢?我們可以看一下它的特性,他可以幫助我們做這個事情。
先抓一下廣域網的報文,透過手機抓到透過電信行動網路的報文,發現這個報文跟區域網條件下的報文沒有任何的改變。
首先,鎖的協議我們已知道;其次是SN,我們發現這個序號是可預測的,資訊保安裡面所有安全都來自於不可預測,如果預測的話也就沒有什麼安全性了;再次,鎖的Key絕大多數都是654321,因此鎖從安裝到使用,沒有任何一個過程會有Key的影子,絕大使用者都會是一鍵繫結和使用,導致大部分金鑰都會是這個樣子。也即是說,你在家裡不停的修改sn,然後用654321,就可以開關很多鎖。
來送一個驚喜,前面說我們需要抓包和分析,這個還是有點複雜,我們來一個小孩子都可以玩的。一部手機,下載APP,到目標門口做一次蹭網,開啟APP做一次繫結,然後可以回家了,從此可以在任何地方可以控制這個鎖了,整個繫結沒有任何互動過程,整個繫結機制是不需要使用者介入的。
蹭網也很簡單,我們都知道有一個神器可以讓你蹭網的。
我們再來看修復方法,最直接就是採用安全互動協議,不過這沒啥意義。人家用WIfi不就是想開發快,你用一個安全協議還不如用藍芽。怎麼樣改進可以帶病的工作,任何防禦都不是絕對的,看看怎麼樣提高攻擊成本。
重放攻擊,這個是因為協議互動是無狀態導致的,鎖側不能區分這次互動以及上次的區別。APP在發開關門之前執行一個額外的命令,從鎖端獲得一個隨機數ramdom。獲得之後需要把這個random帶過去,縮側可以進行校驗,這樣每次都不一樣,抓包重放也沒用。
預設金鑰,它是一個介面互動的問題,我們改變這個互動的設計就可以了,強制加入金鑰修改,連鎖都不用重新改造。
資訊洩露,這個非常嚴重,首先限制廣播,廣播應該只在裝置繫結的初始階段用廣播,或者說你想搜尋控制器的時候可以用廣播,廣播不能附帶額外的資訊。
其次限制SN洩露,SN基於GUID的風格就可以駭客很難做猜測了;還有一個限制金鑰,這個裡面直接把金鑰透過兩輪異或的方式來做編碼,其實沒有什麼用,我們前面講加的一個狀態可以用共享金鑰加密這個隨機數,可以限制這個金鑰的洩露。當然了,不僅僅是這個智慧鎖,我們在空調以及插座和冰箱裡面都有這個問題。
總結下來是:WiFi主網本身不提供安全性,開發出來確實簡單,除錯也很簡單,但是這個攻擊者其實也是非常簡單的。
智慧裝置除了使用WiFi還有這個藍芽,其實藍芽很早就有了,但是藍芽在早期沒有什麼作用,功耗無優勢,還有強制配對。當然了,開發也很麻煩,基於bsd-socket的風格。低功耗就好玩了,能耗非常明顯,關鍵是它的開發很簡單,配對方式比較靈活。
BLE也是強制配對,只不過支援不需要透過第二通道傳輸這個配對金鑰。BLE的開發是很簡單,基於GATT,GATT開發非常簡單。還有一個高頻寬也不是總需要,網際網路訪問不是總需要的。比如這裡有兩款鎖,一款是比較便宜的BLE鎖,一款是很貴的BLE鎖。
相比Wifi,ble自帶安全光環。點對點通訊,不需要中間裝置,跳頻傳輸,通道加密。導致抓包很麻煩,通常要三個廣播一起抓,關鍵抓包裝置還不便宜。這樣會導致直接網路層搞就很麻煩,但是我們不一定要直接從網路層來突破,比如GATT。
Gatt開發很簡單,那到底有多簡單呢,只能說簡單是到讓你瘋狂。所有的Gatt分為Gatt服務,所謂的服務是在GATT管理器中,服務也有很多屬性,屬性對應存取資料。資料有各種各種的描述,每一個描述都是資料的某個的維度表達,比如回撥通知描述…特別像COM開發,透過UUID來定位,不需要關注底層的連線。開發程式碼很簡單,比如這個程式碼,非常簡單。
第一款的不聯網的BLE鎖怎麼樣攻掉?這個鎖是不聯網的,我們只需要Gatt裡面找UUID,再回溯就可以看到裡面的加密是什麼樣子,再展開就可以看到跟使用者相關的提示,還沒有MAC繫結機制,我們只需要寫一個假的APP,呼叫GATT介面,就可以把這個鎖開啟。
第二款的BLE裝置是需要連網的,這個鎖超級貴。這個鎖必須手機號註冊,必須聯網,必須聯網才能開門。開門本身不用WIFI,但是連網才可以得到這個金鑰,這個鎖可以授權給別人開門,但是也得聯網。不僅僅是這個鎖的一般資訊,核心的控制資訊都是儲存在這個雲上,直接把這個雲端搞定就可以開啟鎖了。
我們深入分析發現,這個鎖裡面有別的東西。這個鎖裡面採用這個域名資訊跟這個廠商品牌完全沒有任何關係,我們做了一系列的分析,發現它是另外一個知名鎖廠商的域名,這個鎖還供應了好幾家。這其實也是一個比較經典的問題,只是…硬體代工了,軟體代工了,連使用者資料跟運營也都代工了…。
這些不同廠商鎖的使用者資料都在一個地方,哪一家公司出的問題會被一鍋端。一些簡單的修復值得去做,加固一定要做,金鑰交換也可以做一些事情。繫結MAC。
智慧應用
前面說的是裝置,我們可以看一下智慧應用。智慧應用現在有很多了,有單車、汽車,我最喜歡的是醫療。
有兩個經典問題,前面婚博會的專家已經講了這個帳號安全以及資料洩露,這是非常有用的。帳號安全來自沒有限制登陸嘗試,特別是賬號找回的嘗試,也就是說只要破解了驗證碼就可以了。
但是主流的驗證碼的運算空間是相當有限,4位空間,一般是一萬次就夠了,100個/秒的嘗試則需要不到2分鐘。6位一般是用於金融證券或者網際網路公司出品的應用。
有的時候賬號找回看上去沒有那麼直接,比如會做一個簽名,但是簽名沒有什麼用因為它是固定化了;比如加密,加密其實也沒有什麼用,加密也是在APP端做固化了;比如用HTTPS,一開始我們也比較頭痛,但是我們發現可能會存在著這個證書校驗不嚴格,透過這種方式我們把某合資汽車直接開走。
我們也來送驚喜:有時候找回的時候直接把驗證碼給你看,既透過電信網的反饋給你,也同時透過這個網路把這個驗證碼反饋給你,我認為肯定是程式設計師忘記除錯開關了,你說呢。
前面是帳號安全,再看資料洩露,這是典型的平級越權,這非常多,無論是大公司還是小公司都有這樣的問題。有合資汽車以及國產汽車都有這個問題,還有非常有名的一些醫院。這些非常好玩,最可怕的是汽車,可以用你的身份開車或者把你的車開走,但是一旦撞了人,這個鍋你是很難逃得掉的。HTTPS的方法一定要用對,用不對除了增加計算開銷成本沒有任何安全收益。
工業控制系統
最後分享下工控,這一塊我們是跟東氣聯合研究,2017年成立了聯合實驗室,跟他們一起研究原因很簡單,很多工業控制我們不懂,比如說核電。我們的研究涵蓋到這些協議以及裝置,現在已經披露的大部分ICS漏洞主要是上位機的漏洞,因為這上面這些比較好做。
我們的行業主要做電力行業,我們涉及到火電/水電/核電/氣電/風電/光伏,光伏主要是面向個人。研究涉及到輸電配電以及供電三個環節。現在大部分工控研究主要是做資訊側,這一塊很好做,有管理系統,基於WEB的HMI/SCADA、基於Windows/LINUX的上位機軟體、和安卓應用也在開始應用。研究這些有成熟的工具,所以也是比較好做的。
資訊側問題非常多,比如弱口令。我們安全專業人員認為這是非常可怕,但是工控專業人員卻認為這個東西從來都不可怕,他們認為強密碼才可怕,我覺得這是行業的認知差異。
工控生產環境中的裝置需要有人執守或者維護的,使用強密碼容易導致再緊急處理時失誤,在爭分奪秒的時候大小寫和特殊字元都可能導致處理不及時而觸發破壞性事故,所示即使用了強密碼也會直接以某種方式呈現出來。我們前期發現了大量工控資訊側的安全漏洞。
我們的研究主要還是集中在裝置側,這是網上可以買到控制器裝置,但在實際環境不是這個樣子,而是這個樣子,這還是搭到一半的樣子。要分析控制器裝置的安全漏洞,需要注意一些坑:比如不使用安全協議,裝置效能很差,沒有任何除錯的支援。
對於本身是不安全的協議,有什麼安全問題,這一開始非常讓我們頭疼。從安全形度看,只是需要理解這個PLC中線圈和暫存器的物理意義,就可以隨意控制裝置炸掉還是不炸。
ICS有一個特性是對時間非常敏感,通常IT系統講的是最小延遲時間或者平均延遲時間,工控裡面講最大延遲時間,比如說電力的協議,週期只有4毫秒,超過4毫秒是丟包,再超過4毫秒這個會話就會被人斷開了,任何影響這個實時性的問題都可能導致安全問題。
另外,ICS裝置的效能太低,測試稍不注意就會讓測試目標拒絕服務。
並且ICS裝置大多沒有除錯介面,也沒有屏顯,測試時如何判定裝置是否發生了異常也是一件難事。控制器上的LED燈的顏色可以反饋部分異常,比如通常紅色表示有問題,但我們還是很難知道紅燈的具體含義,問供應商說不知道,問廠商不理。我們最後採取韌體分析這條道來分析控制器,發現有很多的安全問題:總的來說就是,工控開發很封閉,寫程式碼的人都是假定所有參與方都是良民的。
比如針對某款電力控制器,我們發現了一系列的安全缺陷:搶佔連線、後門口令、記憶體消耗、拒絕服務。
比如這個裝置的後門口令,我們告訴廠商,廠商先否認後門,說不存在,然後又告訴我們這個口令是開發人員用,不會對使用者開放。難道不對使用者開放的口令,就是安全的口令?這是我們發現最複雜的一個漏洞,是多工條件下面的互動時序沒有考慮異常條件,導致認證過程發生拒絕服務,從而拒絕合法的認證請求。
工控漏洞的修復過程非常複雜,我們已經知道控制器的漏洞怎麼修復,但是我們沒法修復,只能依靠廠商。除此外,生產部門告訴我們,18個月之後再補。因為我們這個電力裝置的停機檢修是排了計劃表的,我們不能想停就停,電網排程側可不是你想接入就接入的,也不是想斷開就斷開的,一切都得按計劃行事。
謝謝大家!
想要獲取本演講PPT,
點選此https://bbs.pediy.com/thread-222883.htm檢視、下載哦!