study note
security
, embedded
, better-embedded
這裡是對CMU的Philip Koopman教授的著作 Better Embedded System Software 27章 做的翻譯練習。 特別聲明:此文是為了幫助工程師建立更可靠的系統,不是教你做壞事XDD。
重點提示:
此章節涵蓋內容如下:
嵌入式系統開發人員必須考量系統的資安(Security)議題,這決定了系統是否能在惡意攻擊下仍提供預期的服務。有時候還真的沒什麼可能的威脅存在,但最近此威脅有漸多趨勢。你必須假定任何嵌入式系統都有被攻擊的可能。問題現在已經不是你需不需要資安防護,而是你需要多少的防護才夠。 時下有非常多種的攻擊手法,在這裡我們都用惡意軟體(malware)來稱呼此類嘗試用某種方式搞破壞的軟體。省去用來分類這到底是蠕蟲、病毒、特洛伊木馬程式、間諜軟體或是其他類惡意軟體的功夫。 27.1.1 適當防護的重要性 大多數嵌入式系統都有其資安規劃書,即便很陽春也要。任何有聯網的嵌入式系統都必須有資安規劃(包括透過數據機modem, 嵌入式控制網路embedded control network)。嵌入式系統面臨的威脅可能不比金融財務系統來的大,但是仍需要謹慎以對。 27.1.2 可能出事情的症狀(當你的團隊出現這些情況就該小心)
用戶有誘因去修改或將你的產品改造成你不願看到的樣子(例如把一個低於製造成本售出的數位錄影機改造成泛用的linux電腦)
27.1.3 不佳的資安防護帶來的風險
你的系統可能被修改用於其他用途,導致原先硬體贊助費用、服務合約等商業模式失效造成財務損失。
我們沒辦法在一個章節裡涵蓋所有的攻擊方式。你必須從很多的資安書籍裡再多做學習,並與時俱進,因為這個領域每個月、甚至每週都有改變。我們這裡能做的是概述基礎觀念、定義術語並大致討論資安議題如何影響嵌入式系統。 27.2.1 Aspects of security 資安須考慮的面向有很多。通常對於嵌入式系統會根據應用的範疇來強調不同層面。例如生命安全攸關(safety-critical)嵌入式系統可能著重的就是資料完整性(integrity)、身分驗證,並願意為了這兩個放棄掉其他的資安措施來達到更好的完整性。其他系統會有不同的權衡方式(tradeoff)。簡單來說你應該要擔心的有以下面向:
Availability可用性 確保系統提供的服務在遭受攻擊的情況下仍然可用。跟網際網路(internet)連結的系統可能遭受服務阻斷攻擊(Denial-of-Service attack)。這是一種在即便無法入侵你的系統,還是能癱瘓你的系統、變得無法使用的攻擊方式。提供生命安全攸關(safety)服務如安全警示、危險製程控制的嵌入式系統如遭受此類攻擊,可能會很危險。一種相關的攻擊方式是試圖透過耗盡使用電池的系統的電力來破壞你的電池更換期程(shut down the pending battery replacement).
Your system may require one or more of: secrecy, authentication, integrity, and availability [name=Philip Koopman]
27.2.2 嵌入式相關的攻擊方式 Embedded-specific attacks 對嵌入式系統攻擊的方式有很多,如:
Coordinated multi-system attack 嵌入式系統通常涉及能源的消耗及釋放。例如家庭電熱水器同時控制兩者:既消耗電力來將水加熱又將加熱過的水輸出至家裡的熱水龍頭。雖說攻擊一個熱水器沒能什麼好處可拿,同時攻擊一堆熱水器可能就能帶來嚴重的後果。例如,將市內所有熱水器同時打開可能會造成電力設備過載及後續的暫時停電。
27.2.3 攻擊機率及動機 因為攻擊者都很聰明,攻擊方式總是千變萬化。對此探討資安系統的我們常要問的問題反而是:”為何有人會想攻擊我們?“。常見的動機有:
勒索Extortion 可能透過威脅要攻擊你的系統以勒索贖金。一個小型的示範性的攻擊來進行火力展示通常是此類勒索攻擊的模式之一。
Wannacry@Windows XD
我們很難去說任一種嵌入式系統的攻擊方式會不會發生。 也難以預知幾年後原先安全的系統會不會突然多了新誘因, 這些正在服役的系統成了攻擊對象. 因此, 在可能造成大災害的弱點加入基本的防護, 並做好部署出去的系統在遭到攻擊頻率加劇時該如何應對的規劃.
問自己:"他人如何從攻擊我的系統中獲利?" 還有,即便攻擊各別系統的錢少少的, 如果攻擊一堆加起來有可觀利潤的話, 還是很可能有人會攻擊你.
27.2.4 Elements of typical countermeasures 雖說把所有的防護方式列出來很重要,但這會讓我們的討論失去焦點。一般來說,好的資安防護是混合了多種適合的防護技術以應對不同系統可能的不同威脅。以下是常見的組成元件:
Secure authentication codes安全驗證碼 通常牽涉到計算出雜湊secret hash, secret digest, 一種從受保護的原始資料產生的偽隨機碼(pseudo-random bit pattern)。例如一段128 bit的原始資料可能伴隨著從資料中加密運算出的16 bit驗證碼。好的驗證碼通常很難湊出使用相同驗證碼的原始資料,也很難從密鑰中算出新的驗證碼。計算及檢查驗證碼都需要金鑰,就像加密一樣,雖說驗證碼沒有提供保密性。驗證碼原理和檢查總和(checksum)非常類似。記住一點:循環冗餘檢查(CRC)並不安全,即便你低調底隱藏了運算的多項式(secret CRC polynimonial)、使用不同的起始值(starting value)。CRC還是非常容易做逆向工程,不應被用於安全驗證碼裡。
加密既貴且慢 Encryption is expensive and slow. 當隱密性不這麼重要,改用其他輕量的機制 User lighter mechanisms when secrecy isn't important. [name=Philip Koopman] User -> Use [name=Michael Chen]
其他還有很多更複雜的防護機制,有的還蠻複雜的。以上提到的可以提供最基礎的資訊安全性。
傳統的資安入侵情節通常涉及連結到互聯網的電腦遭到遠得要命的野心國家的入侵,意圖摧毀你的社會。如果你的系統涉及控制重大的基礎設施諸如國家電力網路,那你肯定是這類攻擊的頭號目標,應當尋求資安專家的諮詢。那對其他人來說呢?一個連網的溫度計不算是國家安全的關鍵(lynchpin)吧。 不幸地,我們都需要擔憂這些潛在的威脅。儘管嵌入式系統比較不會被高調的大舉攻擊,許多攻擊還是低調的進行。重要的是,我們無法得知一、兩年後你的系統是否會變成攻擊目標,如果你的產品設計的生命期有10年,那更是個麻煩問題。因此你需要做的是確保投入夠多心力去塞住資安的漏洞(plug hole..),在了解資安重要性的前提下合理的權衡什麼程度的資安措施是足夠的。 為了討論方便,接下來我們假定攻擊者的目標是入侵我們的系統,讓他做壞壞、危險的事情,或是竊取資訊。(還有很多其他不同的攻擊方式,這裡講的會作為日後幫助你思考的底子)接下來我們來討論各種不同入侵你的嵌入式系統的方式。 各個情節我們都會討論其最起碼的預防措施。可能這些預防措施(precaution)夠用,但大部分的情況是不夠。然而如果你連這些措施都沒做或是根本沒考慮到這些點,你的資安方案就需要改進了。
27.3.1 網路連線 internet connection 很明顯的一個感染途徑。如果你的系統有連上互聯網,你可以預期他是個攻擊標的,就像其他有聯網的電腦一樣。 甚至你的訊息會遭到竊聽、竄改或暴露在壞人眼底。所以,即便你的系統沒有被惡意軟體入侵,他也有可能成為惡搞標的。例如你家的熱水器、暖氣可能會收到“將自己啟動”訊息。其他更巧妙的手法請見參考資訊 Koopman 2004。 一旦系統有網際網路連線,你就該跟其他PC或是泛用的電腦系統一樣,嚴正考慮資安防護問題。並預期資安功能將在未來持續扮演重大角色。
一旦直接或間接連上網路,你就可以預期攻擊會發生。 [name=Philip Koopman]
27.3.2 工廠安裝的惡意軟體 2008年曾有一連串的工廠植入病毒事件,受害產品涵蓋消費性電子產品如音樂播放器、數位相框、GPS導航器(見Robertson, 2008)。理論上連結到嵌入式裝置的電腦都可能成為散播病毒的理論,猜測可能來源是廠內測試用的桌電。此類海外生產基地工人受外人僱用以安裝病毒的模式很難察覺(病毒可能偷走密碼或是信用卡號,並透過可用之網際網路連線回報給犯罪人)。 這類手法很棘手,它可以攻擊一些你可能在佈署之後完全沒有外來的感染源的系統。另外這種案件還會打擊負責生產的代工廠商譽。出貨前的檢查可能對這有幫助。這還只能算是待會要討論的離線散播的特例。
負責生產或是維護你的系統的人可能就是攻擊者 [name=Philip Koopman]
27.3.3 離線散播惡意軟體 從工廠安裝的惡意軟體都是算是離線攻擊的一種. 它的情節通常是:1. 某人找出載入惡意軟體到相機、玩具等手持裝置或是其他電子產品。2. 這些裝置後來連結到嵌入式或是桌上系統。3. 惡意軟體散播出去。雖然這可能看起來很麻煩,但確實有案件已經發生了。2008年有一份報告關於數位相框被用來作為散播惡意軟體至電腦的媒介,跳過網際網路直接入侵。(參考Greg 2008)。看來這個攻擊是專門針對數位相框,企圖從感染與其連結的PC來收集密碼。沒辦法確定攻擊是來自工廠內部員工蓄意行為還是外來入侵。所以此類攻擊並不是不可能發生。 你應該要將任何將嵌入式系統連結至電腦的行為當作可能威脅來源。包括嵌入式網路、序列埠、USB、藍芽、快閃記憶體(flash memory)插槽或是任何外界連結至你的裝置的方法。如果跟外界有資料交換的行為,那就可能是惡意軟體攻擊你的途徑。攻擊者可能從以上途徑入侵你的系統或是看(skimming)、複製你的資料。
即使這個時候沒有連接到網際網路,連接到你的系統的電腦還是會攻擊你。 [name=Philip Koopman] 針對此類攻擊的一些基本對策如下:
確認傳入系統的資料沒法輕易透過緩衝區溢出攻擊來破壞記憶體內容。(例如確認有限制資料的上限長度、確認封包長度欄位與資料長度是否符合)
27.3.4 間接的網路連線 很多系統都有間接連結到網際網路。如果你的系統有乙太網路或是無線網路連結,透過防火牆或是其他裝置來抵擋來自網際網路的攻擊,你大抵會面對到跟直接連接到網際網路的系統相同的問題。你必須確認防火牆真的有發揮功效。一個應該發揮作用的防火牆被開後門是很常見的。而且,防火牆並非萬能。雖說防火牆是個好主意,但把所有的蛋放在同個資安籃子裡,系統中完全不加入資安防護機制是很危險的。例如參考資料Geer 2006裡提到了Davis-Besse核電廠遭受Slammer蠕蟲攻擊的案例,這案例跳過了防火牆,透過契約工的telephone modem連接到電廠的內部網路。 很多嵌入式系統透過非乙太網的嵌入式網路間接的連接到網際網路,如CAN或是其他私有協定。很多人宣稱這是安全的。但這可能只是一個美好幻想。如果惡意軟體可以透過網際網路入侵,對這類人再入侵一個其他協定的網路通常不是什麼難事。先不管入侵是否容易,先把這事情當成不可能是很不好的。這也是朦朧保全的一種(見結尾處的隱憂小節)。
使用非乙太網路的協定不能保護你不被攻擊 [name=Philip Koopman] 我們建議要將嵌入式網路的任何節點都當成可能的入侵來源。但不幸的是,大多數工業協定提供的資安支援有限。缺乏一個簡便的作法,讓防護措施變得很有挑戰性。 這代表實務中每次你的系統接上網際網路你都必須要非常小心。你必須在任何一個資安情境分析裡考慮到攻擊者可入侵與嵌入式系統連結的閘道(gateway)節點,並從該處發動任何想要的攻擊。盡最大的可能避免將系統直接或間接的連接到網際網路。如果一定要間接的連結,不要指望非乙太網路的協定可以保護你不被攻擊。
27.3.5 數據機(Modem)連線 任何與數據機連結的系統都有被攻擊的可能。有隻叫撥號攻擊(War-Dialing)的程式已被用了數十年來系統地找出所有數據機(即便你的號碼沒有登錄(unlisted numbers)也可以),並入侵你的電腦。(War-dialing名字來自1983年的電影War Games, 以科技情節聞名)。配置數據機的嵌入式系統通常只有有限、甚至沒有的資安防護。例如參考資料Shipley & Garfinkel(2001)提到的一個撥號攻擊實驗。如果你的系統用了數據機,那麼不可避免地(imperative),你必須像連結到網際網路一樣的假設自己會被攻擊。
數據機會被攻擊,即便你的號碼沒在名單上(unlisted number) [name=Philip Koopman]
一些基本對策如下:
使用回撥模式(Dial-back scheme),與數據機通訊會讓它回撥至受其他有授權的號碼。小心使用來電號碼來進行驗證,這很容易造假。
27.3.6 Unauthorized users未認證的使用者 有時候攻擊不是來自網路,而是來自可實體接觸系統的使用者。如果我們對這些直接接觸硬體進行攻擊的人多些忌諱,例如不敢造成外殼(enclosure)明顯的物理損傷,那麼妳就可以用些傳統的密碼在你的操作介面。這在你有不同群組的使用者(例如用戶、管理員、工廠維護人員)時侯特別有用。 對密碼管理最好還是不要太理想化。密碼會被寫在紙片裡並貼在設備上。密碼會被設定得比較好記憶。密碼可能會被不該知情的人之道,以省去一些人半夜開車到公司、走過大半個複雜的廠房的功夫。最有問題的是出廠預設的密碼,通常在同一批(class)機器裡面都用一樣的,這會導致我們難以在密碼被洩漏成公開資訊後對全部的裝置做修改。永遠要把密碼可能洩漏這件事放在心上。
如果開放讓大家輸入安全性較弱的密碼,你的用戶一定會這樣設定。如果你堅持讓他們輸入難以破解的密碼,他們會寫起來然後貼在螢幕上。 [name=Philip Koopman]
基本的密碼防護建議:
有時候你的資安防護是為了防止智財如軟體、系統上的重要資料遭到竊取。專利可以幫助保護你的創意,也對保護硬體設計、演算法有幫助。著作權(copyrights)則是對創意進行發表(expression of an idea)、軟體實作的保護有幫助。專利及著作權的保護有用,但通常不是完整的解決方案。例如,此類法律手段無法保護你的營業機密,去制止(deter)對你系統進行的逆向工程,專利、著作權也無能防範那些在市場上跟你競爭的複製品製造者。
專利和著作權能起訴智財竊賊,但不能防止“被偷”。
不幸的是,保護嵌入式系統內藏軟體非常難做好。一旦你賣出一套系統,用戶取得所有權後基本可以為所欲為。他們可能會避免去破壞保固標籤(tamper marks). 但這只有在系統單價夠高,用戶不願負擔喪失保固(或是整個系統的費用)的前提,才可有效防止用戶去拆解系統、找出裡面有什麼。
僱請專業的逆向工程公司來取得你的系統內容資訊是很容易的,取得細節可具體到整合電路裡的電晶體及記憶體內容。確實存有防逆向工程(tamper-resistant)的技術,但是可能只有些微幫助。實際上,任何此類技術都沒不是長久之計。他們都只是讓逆向工程這件事的費用多了幾千塊美金。有時候情況這有嚇阻功效(deterrent),但不盡然。 儘管基本上我們無法預防有心人取得你的系統內部資訊,我們還是有基於實務、合法性的誘因來採取行動保護你的系統。你也可以用可行(affordable)的方式讓剽竊你的系統這件事變得困難許多。
做些讓你部署出去的裝置上的軟體難以閱讀的事。
以下是增加智財保護性可採取的基本措施:
有意的插入軟體錯誤、彩蛋、不會執行到的程式碼(dead code segments)、奇怪無效率的運算方式或是明顯的設計錯誤。
27.5.1 Security plan elements
以上計劃及防備對策將幫助你組織起來以應對需要注意的攻擊, 然而還有一件極為重要的面向: 你如何隨著威脅改變演進你的系統. 為了處理這塊, 你必須要加入以下元素:
列出如何讓系統在相對安全的環境下運行的前提或需求。例如:“注意這個產品必須被被連接到與外界隔絕的乙太網路,且只有被信任的人可以接觸到實體。當這個裝置直接或間接的連接到網際網路,攻擊者就有可能成功的攻擊、劫持此系統。”此類文件你最好諮詢你的律師來調整文中用字。 “無資安”規劃在嵌入式系統中非常常見,但通常漏掉跟使用者說明清楚這一塊。
如果你沒有提供資安功能,告訴你的用戶。
還有很多容易發生的資安蠢事(blunders)及錯誤觀念。在此我們只提出幾個嵌入式系統常看到的:
Unlisted modem number 讓你的數據機電話號碼消失在電話簿上沒辦法防範撥號攻擊(war dialing),攻擊者會透過程式+數據機窮舉測試每個電話號碼。這也是朦朧保全失效的一個例子。
我一開始覺得這個時代應該沒人在用數據機了,後來發現原來網管人員可能會透過這類工具來做系統救援? [name=Michael]
Master or manufacturing keys. 在所有生產出來的裝置都使用相同萬用金鑰(master key)或出廠預設金鑰(manufacturer key)的情況下,非常多的密碼應用程式(cryptographic application)會變得容易破解。這問題是來自通常從購買到的裝置裡逆向還原出相關金鑰並不困難,而一旦還原成功,其他裝置也同時淪陷(compromised)。如果你用了出廠預設的金鑰,某人某日就是會把它找出來。相對的在出廠的每台裝置使用不同的密鑰會更好。每台裝置部署不同金鑰較難且更耗成本,但如果你真的看重資安就該這麼做。作為案例,參考資料Indesteege, 2008裡面提到車用系統Keeloq遭到還原出其中一個預設金鑰,進而攻擊其他系統的案件。至於他的競爭對手Lear汽車資訊安全系統則是在十年的生命週期中未曾被破解。Keeloq靠隱藏機要設計資訊及出廠金鑰來做防護。然而Lear則將其原理出版於美國專利(見參考資訊Koopman, 1994),但在每台發送器(transmitter)上使用不同的金鑰,意味著破解一台並不代表破解其他發送器。
27.7.1 搜尋關鍵字
Computer security
, Critical infrastructure
, Threat analysis
, SCADA security
Geer, D., "Security of critical control systems sparks concern," IEEE Computer, January 2006, pp. 20-23. 講述關於監控及資料擷取(Supervisory Control and Data Acquisition (SCADA))系統及製程控制系統(Process Control System, PCS)的資安議題
Koopman, P., "Embedded System Security," July 2004 pp.95-97. 說明對嵌入式系統直接及間接的可能攻擊方式
27.7.3 參考資料:
Koopman, P. & Finn, A. US #5,377,270; Patent Cryptographic Authentication of Transmitted Messages Using Pseudorandom Numbers; Koopman & Finn, Dec. 27, 1994 提出了一種輕量加密協定,已被使用在百萬計的車輛當中(Keeloq的主要競爭者). 起初設計為10年的生命期(product lifecycle), 並在專利中載明演算法的情況下,生命期中也沒有被破解紀錄。(其實至今也沒有被被解,雖然NSA如果真想入侵大家的車子,花點心力還是有能力做到)
NSA就是近期火紅的Wannacry的“貢獻者“XD
近期討論熱烈的vault7 https://wikileaks.org/vault7/ 及eternalBlue(wannacry) https://www.rt.com/usa/388187-leaked-nsa-exploit-ransomware/