嵌入式系統專家:小小軟體碼錯誤也可能殺人!

嵌入式系統專家:小小軟體碼錯誤也可能殺人!:

嵌入式系統專家:小小軟體碼錯誤也可能殺人!

上網時間: 2013年10月29日  打印版  Bookmark and Share 訂閱   字型大小:  
不良軟體碼可能殺人嗎?答案是肯定的,而且悲劇顯然已經發生。
最近豐田汽車(Toyota Motor)在美國捲進了一樁官司,原告律師指稱豐田一款2005年份Camry車款在2007年於美國奧克拉荷馬高速公路上發生的一場暴衝死亡車禍,主因就是該車款內的電子節流閥控制系統軟體碼發生錯誤(參考:汽車電子缺陷導致事故? 豐田在美惹官非)。
據了解,在上述案件審訊過程中,檢視過豐田電子節流閥系統軟體碼的嵌入式系統專家作證指出,他們發現到豐田系統軟體碼的缺陷,而其內部的錯誤碼就是造成車輛無預警暴衝的原因。參與該事故調查的Barr Group技術長暨共同創辦人Michael Barr接受EETimes美國版獨家專訪時表示:「我們已經證實,只是一個小小的記憶體位元翻轉(bit flip),就會造成駕駛人無法控制引擎速度,而這種軟體故障是無法依賴任何一種故障安全(fail-safe)機制偵測出來。」
其實在這之前,不過豐田已經自認無罪──因為美國國家高速公路交通安全局(NHTSA)在 2011年2月結束了對豐田汽車的調查,該單位委託NASA的專家檢視豐田的電子節流閥系統,在為期10個月的調查期間,並沒有發現任何電子缺陷可能導致車輛暴衝。雖然NASA報告並沒有排除軟體導致車輛無預警加速暴衝的可能性,但嵌入式系統專家們並不認為NASA有足夠時間進行完整的測試。
於是包括Barr Group四位專家在內的一個七人小組接手NASA的調查任務,深入分析了發生事故的豐田汽車,並做成了一份長達800頁的調查報告。「我們做了一些NASA顯然沒有時間做的事情。」Barr表示,首先就是檢視車用系統的即時作業系統,找出「未受保護的關鍵變量(unprotected critical variables)」,他們觀察且檢視了「子處理器(sub-CPU)」的軟體原始碼,而且「發現了電子節流閥故障安全機制中的漏洞與缺陷」。
該專家小組並採用Green Hills模擬器進行了模擬:「這進一步確認某些動作會在看門狗未重新設定處理器的情形下失效。」Barr的小組也獨立檢查了在最壞情況下的堆疊深度(worst-case stack depth):「我們發現NASA調查所依據的豐田分析報告有很多嚴重錯誤。」他指出,專家們證實:「透過車輛測試,那些我們所發現的缺陷確實與無預警暴衝有關;我們還觀察檢視了汽車黑盒子內的軟體碼,發現它會錯誤記錄車輛意外前最後幾秒的駕駛人動作資訊。」
值得一提的是,Barr Group的證詞,在去年12月讓豐田面臨數十億美元損失的和解案;因為該和解案,專家們所做的詳細技術性調查並沒有被公開,直到奧克拉荷馬事故審訊進行。該和解案雖平息了數百起豐田宣佈因為車輛暴衝而召回檢修所導致的車輛折價訴訟,該公司仍須面對數起因為車輛故障所導致的人員受傷或死亡官司。
因為奧克拉荷馬高速公路事故審訊,專家證詞與發現得以公開;到底豐田的電子節流閥控制系統出現了甚麼樣的缺陷?
Barr表示,專家針對2005年份的Camry L4車款原始碼以及車內測試,證實其中有部分關鍵變量並未受軟體崩潰(corruption)保護,記憶體崩潰的原始碼也顯現;他相信豐田的工程師應該會保護大量的變量抵抗軟體與硬體導致的崩潰,但卻未能成功映射(mirror)數個關鍵變量,也沒有建立任何可以抵抗位元翻轉的硬體保護機制。他指出,堆疊溢位(Stack overflow)與軟體錯誤導致記憶體崩潰,而問題的關鍵就在於那些記憶體崩潰,就像是「擦槍走火」。
「就算小至一個位元翻轉的記憶體崩潰,也能導致程式(task)當機;只要藉由單一硬體事件的擾亂(例如位元翻轉),或是眾多軟體錯誤中的一個就能發生,例如我們在軟體碼中看到的緩衝區溢位(buffer overflow)以及競態條件(race condition)。」Barr表示:「未經測試的任務失敗可能有上千萬種組合,每一種都可能在任何一種車輛/軟體狀態下發生,它們多到來不及測試。」
不過Barr指出:「我們在2005年與2008年份Camry車款所做的測試顯示,甚至就是某個當機程式的本身,都可能造成駕駛失去對節流閥控制系統的控制權──而此時內燃機仍持續作動引擎。簡而言之,豐田確實安裝了故障安全機制,但其中有漏洞,也無法以UA透過軟體的所有方式來進行檢測。」
在此特別說明,以上所說的「程式」與智慧型手機或PC上執行的應用程式是一樣的,當軟體偶爾出現當機狀況,我們通常會重新開機;而2005年份的Camry L4有安裝一系列程式,但因為這些程式都意味著永遠執行,其中一項若當機就可能造成恐怖的後果。
在被問到是否能將豐田汽車暴衝事件原因與某個軟體程式的當機直接連結時,Barr的回答是:「應該是某應用程式的當機與其他程式當機的組合造成,」他說,該系統有數十種程式以及至少1,600萬種不同的當機方式,專家小組雖然能證實某一種軟體故障方式可能造成車輛暴衝,但還有其他許多種故障形式也可能造成同樣的結果。
Barr 表示,專家們在實驗中只研究了那數十種程式當機的模式的一半,但:「那些都無法被任何故障安全機制所偵測到。」
在奧克拉荷馬高速公路事故審訊後,Barr建議NHTSA應該要求豐田確保現有所有車款的安全性,並有需要加強針對軟體方面的管理與監督;舉例來說,美國聯邦航空局(FAA)與聯邦食品藥物管理局(FDA)都有一些針對負責監管之系統的安全關鍵軟體設計準則(如DO-178),但NHTSA則缺乏這樣的規範。
此外Barr也指出,最近NHTSA規定所有美國車輛需安裝配備特定功能的黑盒子,但相關規定還是不充足;而他們也發現到豐田車輛的黑盒子會在車輛暴衝時故障,這使得黑盒子根本無法發生作用或是錯誤紀錄。NHTSA應該注意這一點,並針對黑盒子如何收集資料的方式有更詳細的規範,不要讓黑盒子與引擎控制的電腦有共同故障點。
編譯:Judith Cheng
(參考原文: Toyota Case: Single Bit Flip That Killed,by Junko Yoshida)
'via Blog this'

留言