Better embedded software ch27 notes

study note

Chapter 27 Security

tags: security, embedded, better-embedded

這裡是對CMU的Philip Koopman教授的著作 Better Embedded System Software 27章 做的翻譯練習。 特別聲明:此文是為了幫助工程師建立更可靠的系統,不是教你做壞事XDD。

重點提示:

  • 嵌入式系統近來更常成為攻擊的目標,資安是設計時必須考量的議題。
  • 你的系統必須具有適當的保密、認證機制、完整性、隱私及可用性。(secrecy, authentication, integrity, privacy, and availability)
  • 可靠的系統結合了許多不同資安措施來應對重大的威脅並能與時俱進。

此章節涵蓋內容如下:

  • 27.1 概述
  • 27.2 Embedded security overview 針對各種不同的攻擊方式有其相應對策。加密不是唯一解,有更低成本的作法。如果攻擊你的系統有好處,有天就會出事。
  • 27.3 Attack Vectors(network and otherwise) 如果你間接或直接連接到互聯網,你就要計劃應對可能的攻擊。 其他可能的攻擊來源有生產工廠植入惡意軟體、離線感染、數據機連線及保護力不足的密碼.
  • 27.4 Intellectual property protection 專利和著作權可用來起訴智財竊賊。但是沒辦法防範被偷這件事。在你部署出去的裝置上做一些手腳,讓記憶體內的軟體變得更難閱讀並方便證明這軟體是從你這偷來的。
  • 27.5 Security plan 一個基本的安全計劃應該包含:資安目標、假想敵、可能造成危害、對策,並包含部署安全性更新的策略。
  • 27.6 Pitfalls 自以為保持低調(obscurity)就能實現安全性是行不通滴。
  • 27.7 了解更多...

27.1 概述

嵌入式系統開發人員必須考量系統的資安(Security)議題,這決定了系統是否能在惡意攻擊下仍提供預期的服務。有時候還真的沒什麼可能的威脅存在,但最近此威脅有漸多趨勢。你必須假定任何嵌入式系統都有被攻擊的可能。問題現在已經不是你需不需要資安防護,而是你需要多少的防護才夠。 時下有非常多種的攻擊手法,在這裡我們都用惡意軟體(malware)來稱呼此類嘗試用某種方式搞破壞的軟體。省去用來分類這到底是蠕蟲、病毒、特洛伊木馬程式、間諜軟體或是其他類惡意軟體的功夫。 27.1.1 適當防護的重要性 大多數嵌入式系統都有其資安規劃書,即便很陽春也要。任何有聯網的嵌入式系統都必須有資安規劃(包括透過數據機modem, 嵌入式控制網路embedded control network)。嵌入式系統面臨的威脅可能不比金融財務系統來的大,但是仍需要謹慎以對。 27.1.2 可能出事情的症狀(當你的團隊出現這些情況就該小心)

  • 沒有資安規劃書
  • 你的系統直接或是間接與互聯網相連。(即使相連的網路不是乙太網路(Ethernet)也算)
  • 你的系統在維護的時候可跟筆電或其他電腦相連。
  • 你的系統裡包含了數據機(telephone modem),或是設計中具有與數據機相連能力。
  • 你的軟體裡有商業機密等重要資訊,必須避免被他人複製、查看(examination)。
  • 用戶有誘因去修改或將你的產品改造成你不願看到的樣子(例如把一個低於製造成本售出的數位錄影機改造成泛用的linux電腦)

    27.1.3 不佳的資安防護帶來的風險

  • 你的系統可能會被攻擊、感染或透過網路、數據機、維護用電腦被遠端操縱。
  • 你的系統可能經由存取系統軟體(system software)被剽竊、造成外洩商業機密。
  • 你的系統可能被修改、或是被破壞到有操作上的危險導致你要負上法律責任。
  • 你的系統可能被修改用於其他用途,導致原先硬體贊助費用、服務合約等商業模式失效造成財務損失。

    27.2 Embedded security overview

    我們沒辦法在一個章節裡涵蓋所有的攻擊方式。你必須從很多的資安書籍裡再多做學習,並與時俱進,因為這個領域每個月、甚至每週都有改變。我們這裡能做的是概述基礎觀念、定義術語並大致討論資安議題如何影響嵌入式系統。 27.2.1 Aspects of security 資安須考慮的面向有很多。通常對於嵌入式系統會根據應用的範疇來強調不同層面。例如生命安全攸關(safety-critical)嵌入式系統可能著重的就是資料完整性(integrity)、身分驗證,並願意為了這兩個放棄掉其他的資安措施來達到更好的完整性。其他系統會有不同的權衡方式(tradeoff)。簡單來說你應該要擔心的有以下面向:

  • Secrecy保密性 防止他人存取你的資料。在網路通訊中通常透過加密來達成,而嵌入式系統則需要多考慮他人是否能透過購買或就近操作你的裝置來還原出機要資訊。
  • Authentication認證 確保只有經認證的個體(entities)可以存取資訊。使用者介面上,通常透過密碼來作為登入檢查的一部分。網路通訊也可透過加密來達成(順便提供保密性),或是對訊息的認證密碼保密(secure message authentication codes)。
  • Integrity完整性 確保資料/系統未遭竄改(tampered)。網路訊息及記憶體內容可以透過檢查資料的驗證碼來發覺是否遭竄改。加密有時也幫的上忙,但確認加密後的資料未遭竄改也很重要。
  • Privacy隱私 確保用戶資料沒有外洩。這跟保密不同的是我們常有資料需要透露給受信賴的機構,但又不能揭露跟用戶隱私有關的資料。例如車廠可能會想在不取得用戶開車習慣的情況下得知各類車子的平均時速。隱私這個概念隨著系統使用國家的文化及國情不同會有極大落差。
  • 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 對嵌入式系統攻擊的方式有很多,如:

  • Break-in, 攻擊者試圖取得系統直接控制權。例如:試圖從遠端登入系統。這通常可透過工廠生產時寫入的預設帳號密碼或密碼猜測程式用使用者常用的帳密字串進行攻擊。(提示:使用含password的字串來做密碼不僅愚蠢(trite),更是個糟糕的資安作法。不幸的是很多人還在這樣做...我們相信你不是其中之一)
  • Intercepting communication通訊攔截 可能會嘗試去破解(breach)訊息加密機制,損及通訊之加密及隱私性。無線網路訊息特別容易遭到攔截/竊聽。
  • Spoofing communication 惡搞或是製造惡意訊息來欺騙系統造成誤動作。例如電話的來電號碼可以被肯花點時間了解系統的人偽造。
  • Playing back communication 直接回播錄製的訊息來讓系統在攻擊者想要的時候重複上一動。例如:解鎖車門的驗證訊息,在車主走遠的時候回播(相關聯的議題:中間人攻擊,過程中壞人攔截通訊歷程,可能作些修改之後,再轉傳至目的地達成攻擊目的。)
  • physical analysis 此狀況中,攻擊者可直接操縱、碰觸到系統實體並可拆解成細部零件進行任何想做的分析。許多的桌上型系統假定可以接觸到這些受保護的硬體的都是好人。但在嵌入式的領域反而很多系統很容易讓攻擊者拿到想要的硬體進行分析、攻擊。
  • inserting malicious update 很多嵌入式系統有設計更新機制。利用此更新機制攻擊者可能間接導致惡意更新釋出,或是想做壞事的系統管理員也可以直接搞怪。例:一個網站上可能聲稱有軟體可更新,但其實是釣魚網站在散播惡意軟體。
  • Coordinated multi-system attack 嵌入式系統通常涉及能源的消耗及釋放。例如家庭電熱水器同時控制兩者:既消耗電力來將水加熱又將加熱過的水輸出至家裡的熱水龍頭。雖說攻擊一個熱水器沒能什麼好處可拿,同時攻擊一堆熱水器可能就能帶來嚴重的後果。例如,將市內所有熱水器同時打開可能會造成電力設備過載及後續的暫時停電。

    27.2.3 攻擊機率及動機 因為攻擊者都很聰明,攻擊方式總是千變萬化。對此探討資安系統的我們常要問的問題反而是:”為何有人會想攻擊我們?“。常見的動機有:

  • 直接獎勵direct incentive 某人可能被雇用來攻擊你的系統、改變原有功能。例如:攻擊者讓你的系統在大庭廣眾之下失效以讓你的競爭對手得利。或是某人可直接藉由讓系統失效得利。小至偽造救護車訊號來攻擊紅綠燈以加快行車速度(對,真的有人做非法裝置來做這事),大到危害(compromise)警報系統以作為搶劫的前置作業。也有人可能會將你的系統機密透露給你的競爭對手。
  • 勒索Extortion 可能透過威脅要攻擊你的系統以勒索贖金。一個小型的示範性的攻擊來進行火力展示通常是此類勒索攻擊的模式之一。

    Wannacry@Windows XD

  • 間接獎勵 某人可能透過收受報酬或是間接從攻擊你的系統得利. 例如: 任何有跟網際網路連接的電腦都有可能被攻擊, 以做為垃圾郵件散播來源. 這個案件裡, 攻擊者是以寄出垃圾郵件的多寡來領取酬勞, 並不在意是否破壞系統既有功能.
  • 報復Revenge 有人可能會藉由攻擊前僱主生產的,或是正在使用的系統來進行報復.你必須假定此類攻擊者已經知道系統設計的機密資訊, 例如出廠配置的維修密碼或是系統的可能弱點.
  • 炫耀Bragging rights 有人會因為好玩、覺得有挑戰性或是為了展現自己的專業能力來去入侵他人系統。例如2008年有個14歲的男孩修改了電視遙控器去控制波蘭羅茲(Lodz)市的輕軌系統的軌電開關(traffic switch),造成四輛列車出軌、12人受傷(見參考資料Baker 2008)
  • 網路戰Cyber warfare 政府顯然將嵌入式系統視為誘人的攻擊目標,作為國家戰略的一部分。例如你的敵人可能會試著關閉發電廠進行擾亂以搭配傳統的軍事行動。

我們很難去說任一種嵌入式系統的攻擊方式會不會發生。 也難以預知幾年後原先安全的系統會不會突然多了新誘因, 這些正在服役的系統成了攻擊對象. 因此, 在可能造成大災害的弱點加入基本的防護, 並做好部署出去的系統在遭到攻擊頻率加劇時該如何應對的規劃.

問自己:"他人如何從攻擊我的系統中獲利?" 還有,即便攻擊各別系統的錢少少的, 如果攻擊一堆加起來有可觀利潤的話, 還是很可能有人會攻擊你.

27.2.4 Elements of typical countermeasures 雖說把所有的防護方式列出來很重要,但這會讓我們的討論失去焦點。一般來說,好的資安防護是混合了多種適合的防護技術以應對不同系統可能的不同威脅。以下是常見的組成元件:

  • Encryption 加密 這招涉及將資料編碼以防止他人猜出原始資料內容,除非擁有密鑰來解密,否則無法得知傳輸內容。好的加密通常消耗很多CPU時間。今天妥當的加密方案通常隨著明天更強的CPU上市而變得過時、失去防護功能。密鑰長度隨著時代演進,運算能力增強而變長。
  • 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]

  • Login procedure 傳統的桌上型系統帳號, 密碼登入流程也可以被用在嵌入式系統裡,用以限制他人存取。
  • password management policies 規定密碼創建及修改的原則。如禁止使用容易猜的密碼,要求至少有一位數字、最短長度限制等。還有就是要求系統在出廠, 第一次安裝後必須改掉出廠預設密碼。
  • data length checks 一種軟體常見的弱點是buffer overflow攻擊,這種攻擊利用在輸入介面、網路訊息中傳入很大的資料。接受資料的程式預設資料很短(固定長度的、或是長度在傳入訊息中給定)。接受端可能誤將傳入資料覆寫到自己的程式碼、或資料中,超出程式預留的緩衝空間。這可能會導致程式碼改變,進而造成你的系統行為改變,有時候甚至讓攻擊者完全控制系統。防範此類攻擊需要檢查輸入資料沒有超出預留空間大小。即便防範方式很簡單(檢查資料大小相符), 這類攻擊還是層出不窮。
  • data validity checks 軟體常假設自己接收到的輸入是正確的。有時候不正確的資料會導致軟體問題,進而當機(crash)、或是讓系統做出你不願看到的事。如果你的軟體接收的外部輸入數值有一定的範圍,範圍外的輸入應該被視為無效或是你就要承擔此類攻擊的風險。
  • sequence numbers 桌電及企業級系統通常是基於交易(transaction)及事件,相關資料傳輸只需要傳一次。這意味著網路必須提供一個偵測訊息遺失、重複的機制。然而嵌入式系統多是基於狀態運行(state-based),同樣的訊息可以一傳再傳或是不需序號、時間戳記。這讓嵌入式系統很容易遇到回放攻擊(playback attack),訊息被錄製、儲存之後讓系統再重複該訊息的動作。即便訊息有加密也會受害-你不需要知道怎麼做出一個新的封包(packet),你只需要將先前傳輸的正確封包拿來重播就好。你可以加入tampered proof, 改變每次傳出訊息的序號或是時間戳記來減輕此類攻擊的威脅。
  • good software quality 大多數攻擊是基於軟體漏洞(bugs)或是不嚴謹(lax)的工程實作(例如沒做輸入字串長度檢查的軟體).好的軟體品質幫助系統變得更安全,在程式碼的測試、同儕檢視(peer-review)裡要求注重資安之後尤其看得到成效。

其他還有很多更複雜的防護機制,有的還蠻複雜的。以上提到的可以提供最基礎的資訊安全性。

27.3 Attack Vectors(network and otherwise)

傳統的資安入侵情節通常涉及連結到互聯網的電腦遭到遠得要命的野心國家的入侵,意圖摧毀你的社會。如果你的系統涉及控制重大的基礎設施諸如國家電力網路,那你肯定是這類攻擊的頭號目標,應當尋求資安專家的諮詢。那對其他人來說呢?一個連網的溫度計不算是國家安全的關鍵(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]

基本的密碼防護建議:

  • 考慮在系統中加入密碼設置規則(如要求使用更強的密碼)功能。
  • 如果你想要設置給廠房技術員用的或是其他此類所有機器皆適用的密碼。你必須假定你的用戶或是競爭者有天會發現它,並做好準備!
  • 考慮在每台機器上使用不同的密碼,而非台台相同到天邊(但這需要一個方便維修人員接到客服電話時方便找到密碼的機制)
  • 考慮使用實體鑰匙取代密碼機制,像是收銀機(cash register)用的。雖然鑰匙可能被複製,但是這還是比容易一通電話講幾個字母跟數字傳、發布在網路上的密碼機制好,可以減低大幅散播(dissemination)發生的機率。
  • 假定任何“秘密的”萬用/後門密碼有天都會被發現,並公開到網路上。

27.4 Intellectual property protection

有時候你的資安防護是為了防止智財如軟體、系統上的重要資料遭到竊取。專利可以幫助保護你的創意,也對保護硬體設計、演算法有幫助。著作權(copyrights)則是對創意進行發表(expression of an idea)、軟體實作的保護有幫助。專利及著作權的保護有用,但通常不是完整的解決方案。例如,此類法律手段無法保護你的營業機密,去制止(deter)對你系統進行的逆向工程,專利、著作權也無能防範那些在市場上跟你競爭的複製品製造者。

專利和著作權能起訴智財竊賊,但不能防止“被偷”。

不幸的是,保護嵌入式系統內藏軟體非常難做好。一旦你賣出一套系統,用戶取得所有權後基本可以為所欲為。他們可能會避免去破壞保固標籤(tamper marks). 但這只有在系統單價夠高,用戶不願負擔喪失保固(或是整個系統的費用)的前提,才可有效防止用戶去拆解系統、找出裡面有什麼。

僱請專業的逆向工程公司來取得你的系統內容資訊是很容易的,取得細節可具體到整合電路裡的電晶體及記憶體內容。確實存有防逆向工程(tamper-resistant)的技術,但是可能只有些微幫助。實際上,任何此類技術都沒不是長久之計。他們都只是讓逆向工程這件事的費用多了幾千塊美金。有時候情況這有嚇阻功效(deterrent),但不盡然。 儘管基本上我們無法預防有心人取得你的系統內部資訊,我們還是有基於實務、合法性的誘因來採取行動保護你的系統。你也可以用可行(affordable)的方式讓剽竊你的系統這件事變得困難許多。

做些讓你部署出去的裝置上的軟體難以閱讀的事。

以下是增加智財保護性可採取的基本措施:

  • 把建置、編譯過程中將除錯資訊從你的軟體中去除,讓他稍微難做逆向工程。具體來說,如果你的編譯器支援production builds,將symbol table拿掉。小型系統來通常為了節約記憶體用量將symbol table拿掉,這可能已經有幫你做好了。
  • 採用Security Fuse, 在你的系統寫入軟體、驗證結束後之後,防止後續對快閃記憶體可輕易進行的完整複製(read-out)。
  • 視情況在系統重要部分採用符合標準的(也就是貴貴的)防逆向工程模組,例如智慧卡系統。
  • 嵌入著作權說明或是其他特殊記號在你的程式碼裡,讓你輕易證明軟體是從你這偷來的,如果複製你的軟體的人不夠細心去檢查、改正的話是有效的。
  • 有意的插入軟體錯誤、彩蛋、不會執行到的程式碼(dead code segments)、奇怪無效率的運算方式或是明顯的設計錯誤。

    27.5 Security plan

    27.5.1 Security plan elements

  • Security goals 資訊安全對你的系統來說是什麼?你在意用戶隱私、保密性、認證、機密竊賊、等等等?你是否擔心攻擊者可以造成不安全的操作?從完善的定義資安對你系統的意義為何開始,並使用此定義判斷各個情境下孰輕孰重。盡可能涵蓋開銷和收益(cost/benefit?),以讓你知道要做到多少的資安設計。
  • Plausible attacks 什麼面對什麼樣的攻擊。通常以代表性的攻擊情節為例 你也可以從系統的功能中找出可能的有弱點的地方(例如連接到網際網路總可以當成是系統的弱點)
  • Failure criticality 那種攻擊可能造成嚴重的系統失效, 哪些對你來說毫無意義? 列出威脅的優先順序可以幫助你決定哪些對策是值得投資. 一個方式是製作一個表格一row一個威脅, 並寫上對策及重要性.
  • Countermeasures 你有哪些對策(或是你應該有哪些)來面對高嚴重性的威脅?

以上計劃及防備對策將幫助你組織起來以應對需要注意的攻擊, 然而還有一件極為重要的面向: 你如何隨著威脅改變演進你的系統. 為了處理這塊, 你必須要加入以下元素:

  • Update strategy 如果出現新的威脅, 或是舊的威脅嚴重性增加. 你將如何部署改善後的軟體? 這不只是修補你的軟體, 也涵蓋你使用的第三方軟體. 如果你計劃透過網路散播更新, 你的指導這也是開出了一個攻擊的方式. 即便你的系統不連上網際網路, 並依賴使用者進行更新. 你如何確認使用者不會被釣魚網站欺騙, 下載了假的軟體更新來安裝?
  • Monitoring strategy 你如何得知何種威脅正在入侵你的系統? 你必需要監控壞人正漸漸嘗試對你的系統做的事情, 以及時應對瞬息萬變的環境.包括確認你使用的第三方軟體是否有釋出更新. 27.5.2 The no security plan 無資安計劃時的計劃XD 有時候我們可以接受嵌入式系統沒有資訊安全功能。例如如果你願意相信用戶不會/沒有動機去入侵或是修改你的系統。或者是你被迫假設你的客戶是在一個封閉的嵌入式控制網路、我是企業防火牆保護之下不會有機會被外界攻擊。 這種產品內沒有設計資訊安全功能,只有使用者提供安全的使用環境的情況下,你還是需要有資安計劃並且涵蓋以下的內容:
  • 對使用者聲明系統沒有資安功能,他現在必須要負全責,確保系統沒有不被入侵。
  • 列出如何讓系統在相對安全的環境下運行的前提或需求。例如:“注意這個產品必須被被連接到與外界隔絕的乙太網路,且只有被信任的人可以接觸到實體。當這個裝置直接或間接的連接到網際網路,攻擊者就有可能成功的攻擊、劫持此系統。”此類文件你最好諮詢你的律師來調整文中用字。 “無資安”規劃在嵌入式系統中非常常見,但通常漏掉跟使用者說明清楚這一塊。

    如果你沒有提供資安功能,告訴你的用戶。

27.6 隱憂 Pitfalls

還有很多容易發生的資安蠢事(blunders)及錯誤觀念。在此我們只提出幾個嵌入式系統常看到的:

  • Security through obscurity 朦朧保全 隱藏設計資訊或者是依賴與攻擊者的資訊不對等並不能保證系統的安全性。這個事情不斷地在重演。有足夠的耐心跟動機的攻擊者總是會有辦法找出你的防護手法。此類案件特常發生在自製加密/驗證法上。用一個符合業界規格的演算法而不是自己去土法煉鋼。你的土炮加密系統幾乎大多會被輕易的破解,如果有人想做的話。
  • Non-Ethernet protocol / proprietary protocol 隱藏你的通訊協定也是一種朦朧保全(a variant)。有心人還是研究的出來(或是不爽的前員工會透露出去)
  • Unlisted modem number 讓你的數據機電話號碼消失在電話簿上沒辦法防範撥號攻擊(war dialing),攻擊者會透過程式+數據機窮舉測試每個電話號碼。這也是朦朧保全失效的一個例子。

    我一開始覺得這個時代應該沒人在用數據機了,後來發現原來網管人員可能會透過這類工具來做系統救援? [name=Michael]

  • Secret design information 你必須假定所有的機要都會從某種方式被泄露出去,祝你在每個裝置上面都有不同的隨機金鑰(如此一來就沒有記錄每一個發出去的鑰匙)。換句話說,唯一需要保密的只有密鑰本身。
  • Standard password or identical crypto key on all units. 有個魔術密碼(某種後門)真的很方便,可以透過電話解救你的同胞當他們忘記自己的密碼的時候。同時這也非常不安全。某人會嘗試出來、從員工口中套話或者是屈打成招,Rubber hose, 從逆向工程中找出、我是賄賂員工來取得。
  • Putting default or back door password in manuals. 幾乎所有系統的說明書都可以在網路上面找到。如果你堅持要配置的出廠預設的密碼或者是萬用密碼,不要寫在網路上面的手冊裡。
  • Master or manufacturing keys. 在所有生產出來的裝置都使用相同萬用金鑰(master key)或出廠預設金鑰(manufacturer key)的情況下,非常多的密碼應用程式(cryptographic application)會變得容易破解。這問題是來自通常從購買到的裝置裡逆向還原出相關金鑰並不困難,而一旦還原成功,其他裝置也同時淪陷(compromised)。如果你用了出廠預設的金鑰,某人某日就是會把它找出來。相對的在出廠的每台裝置使用不同的密鑰會更好。每台裝置部署不同金鑰較難且更耗成本,但如果你真的看重資安就該這麼做。作為案例,參考資料Indesteege, 2008裡面提到車用系統Keeloq遭到還原出其中一個預設金鑰,進而攻擊其他系統的案件。至於他的競爭對手Lear汽車資訊安全系統則是在十年的生命週期中未曾被破解。Keeloq靠隱藏機要設計資訊及出廠金鑰來做防護。然而Lear則將其原理出版於美國專利(見參考資訊Koopman, 1994),但在每台發送器(transmitter)上使用不同的金鑰,意味著破解一台並不代表破解其他發送器。

    27.7 了解更多...

  • 27.7.1 搜尋關鍵字

    tags: Computer security, Critical infrastructure, Threat analysis, SCADA security
  • 27.7.2 推薦閱讀: Anderson, R., Security Engineering: A Guide to Building Dependable Distributed Systems, 2nd ed., Wiley, 2008. 一本厚重但好讀的資安書籍, 內含相當多對高階嵌入式系統應用程式的討論,如自動答錄機、交通售票系統。作者在他的網站上放了幾個章節供免費參閱。

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 參考資料:

    • Baker, G., "Schoolboy hacks into city's tram system" Telegraph Media Group(telegraph.co.uk), January 11, 2008 關於14歲男童修改電視遙控器駭入電車軌道系統的新聞。改變了軌道設定,造成乘客受傷、四班列車出軌(derailing)。
    • Gage, D., "Virus from China the gift that keeps on giving," San Francisco Chronicle, February 15, 2008. 生產工廠安裝的惡意軟體透過數位相框(digital picture frame)散佈到個人電腦上。
    • Indesteege, S.; Keller, N.; Dunkelman, O.; Biham, E. & Preneel, B., "A practical attack on KeeLoq," Advances in Cryptology - Eurocrypt 2008, LNCS Vol. 4965/2008 Springer, 2008. 說明了一種針對Keeloq的攻擊,運用系統中存有一個秘密的萬用金鑰(presence of secret master key)的弱點,在花了一些時間破解其中一台機器後即得到全部機器的共用密碼。Keeloq將演算法及金鑰保密,不外傳可以爭取到一些時間,但是最終仍然無法防止遭到破解。
    • 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

    • Robertsonm J., "Your next gadget may come with a pre-installed virus" USA Today, March 14, 2008. 一份關於iPod被測試用PC感染惡意軟體、後續賣到終端客戶的報告。
    • Shipley, P & Garfinkel, S., An analysis of dial-up modems and vulnerabilities, 2001. 敘述一個大規模撥號攻擊實驗, 實驗中發現舊金山灣區46,192台數據機。其中一台沒有存取權的保護,可以直接控制高壓電力傳輸線。實驗也發現其中幾台數據機可以設計得更安全。

其他補充

近期討論熱烈的vault7 https://wikileaks.org/vault7/ 及eternalBlue(wannacry) https://www.rt.com/usa/388187-leaked-nsa-exploit-ransomware/