由蓋世汽車、AUTOSAR組織、上海車展三方聯(lián)合主辦的SDVF2021第二屆軟件定義汽車高峰論壇暨AUTOSAR2021中國日于4月19-21日在上海舉辦,本次活動也是2021上海車展的同期活動之一,同時(shí)也是AUTOSAR組織在中國區(qū)唯一官方活動。本次會議邀請到了新思科技軟件質(zhì)量與安全部門高級安全架構(gòu)師楊國梁先生在本次論壇進(jìn)行了題為《通過Shift-Left提高汽車軟件競爭力》的主題演講,以下是他在本次演講的主要內(nèi)容:
我們公司成立于1986年主營業(yè)務(wù)是EDA,公司后來成立了一個部門叫軟件質(zhì)量與安全,我屬于這個部門,我們會做軟件層面,應(yīng)用層面,安全類,質(zhì)量類的測試,通過研發(fā)類的工具嵌入到研發(fā)流程提高產(chǎn)品質(zhì)量和安全性等等。
昨天的會議,感覺大家對汽車將來的發(fā)展,成本都在什么地方,都已經(jīng)很清晰了。大家回想一下過去一兩年時(shí)間,新勢力廠商,傳統(tǒng)廠商推出的新的車型,基本上打廣告的時(shí)候或者方向就在這兩個方向上,要么是車外自動駕駛有多智能,要么就是車內(nèi)對于乘車人或者開車人體驗(yàn)有多好。我看過一些數(shù)據(jù),保守估計(jì)可能三五年之內(nèi)電子電器和軟件成本可能占到汽車五成以上,當(dāng)然昨天我也聽到一些聲音,比較激進(jìn)的說將來七成成本都會在軟件上面。
當(dāng)然我們這里羅列出來的還是比較狹義的in-vehicle部分,如果把它推的更廣一點(diǎn),合并到車聯(lián)網(wǎng)V2X,車上生態(tài)系統(tǒng)APP,后臺各種各樣的東西,那軟件涵蓋的范疇可能就更廣了。
再來看一下軟件競爭力怎么來提升呢?以及我們說的Shift-Left是什么意思?無非就是更快速的軟件迭代投放市場,更可靠的品質(zhì),更安全。大家可以把它理解成兩個方向,一個方向往大說可以通過虛擬化的手段把原先串聯(lián)的先做硬件開發(fā),硬件出來之后基于此做軟件開發(fā)的工作,通過虛擬化手段變成硬件和軟件同步開發(fā)。這樣你算一下上市時(shí)間,芯片一出來,做一下聯(lián)調(diào),測試,上市,這樣時(shí)間極大的壓縮。從大的方向說虛擬化能夠完成整體軟件開發(fā)的Shift-Left。從小一點(diǎn)的方向來說,每一個軟件,每一個軟件項(xiàng)目的迭代都是需要相應(yīng)的工具在測試過程中,把你可能會發(fā)現(xiàn)的問題盡量的左移,這也是所謂的Shift-Left。
上面這些術(shù)語我就不講了,因?yàn)楹芏鄰S商都已經(jīng)在講了,功能安全/預(yù)期功能安全/信息安全等等之間的關(guān)系。
這是從測試角度來說的所謂Shift-Left的理念。你最終定位問題的時(shí)候,可能絕大多數(shù)問題都是由于你寫代碼的時(shí)候無心之失或者水平不夠?qū)е逻@個代碼不能很好的處理你的場景。這個柱狀圖就代表了主要BUG被引入的階段,可以看到在Coding和集成階段是最多的,綠色線就代表不同階段開展測試發(fā)現(xiàn)相應(yīng)BUG所花掉的成本是多少。
我記得昨天有一位講ITO的嘉賓講到目前汽車行業(yè)的平均用人成本是20來萬,軟件人才也就2萬多人,這還是平均的,你看一下新勢力,他們大量開發(fā)人員來自互聯(lián)網(wǎng),你知道互聯(lián)網(wǎng)的人員有多貴嗎?你再想一下,如果你讓一個這么貴的人在軟件發(fā)布之后,再花2-3天時(shí)間去研究一個本可以在寫代碼的時(shí)候順手改掉的BUG,他的總體成本是降低非常非常多的,這是Shift-Left上面方法論的介紹。
2019年我們(新思科技安全研究中心)跟SAE一起做了一個調(diào)研報(bào)告,叫做汽車工業(yè)網(wǎng)絡(luò)安全實(shí)踐研究,這里數(shù)據(jù)很多,不展開給大家講,只簡單說一下??傮w來看,調(diào)查問到你的產(chǎn)品在什么階段開展質(zhì)量和安全類的測試,需求設(shè)計(jì)階段19%的人在這個階段做,28%的人在研發(fā)和測試階段,更多的是在發(fā)布后的階段,早一點(diǎn)可能SOP之類的。還有把車輛集成到上路之后或者產(chǎn)品發(fā)布之后才做這個事情。當(dāng)然主機(jī)廠現(xiàn)在做得比較多是SOP階段找一個廠商做滲透等等,大概市場都處于這樣一個階段。
匯總來講,現(xiàn)在安全問題的評估在產(chǎn)品發(fā)布過程中進(jìn)行的太晚了,太晚就有我剛才說的那個問題,你發(fā)現(xiàn)問題打回去再進(jìn)行整改,整改的成本是非常高的。
再看一下里面的數(shù)據(jù),就目前這些車企出了安全問題之后如何改進(jìn)他們的軟件,我們就看前三個安全補(bǔ)丁管理,滲透測試以及動態(tài)安全測試DAST。所以目前排名很靠前的這些手段其實(shí)都是在開發(fā)階段很靠后的位置才開展的。相應(yīng)的在Coding階段可以做的靜態(tài)測試,軟件組成分析,安全架構(gòu)分析等等,目前看來開展的非常少。大家可能會說,之后成熟了,有OTA了,出了問題隨時(shí)推送OTA來解決,但即使OTA了,本質(zhì)上也是安全補(bǔ)丁的行為,在整個研發(fā)周期來看還是太靠后了。而在同一個報(bào)告里面,我們當(dāng)時(shí)統(tǒng)計(jì)有37%的人開始落實(shí)OTA了,當(dāng)然目前更加會更高,而且這個時(shí)候再不考慮做OTA也沒有什么競爭力可言了。
我們做了一些總結(jié),大家都會講到21434,我們羅列了一下在21434映射到在每個不同階段開發(fā)工作需要做什么,安全工作需要做什么?白色指的開發(fā)需要做得,藍(lán)色是指的安全活動,從最早的安全計(jì)劃的下發(fā)開始做TARA,再下面指導(dǎo)Secure Coding,再對第三方組件進(jìn)行管理,再做內(nèi)部各種各樣安全測試,甚至引入第三方滲透測試,以及貫穿整個流程的安全漏洞的實(shí)時(shí)處理。我們現(xiàn)在看到典型的場景是OEM掐頭去尾提安全需求以及在做末端做安全測試(比如滲透),有些就組織一個團(tuán)隊(duì)大量的做TARA;現(xiàn)在傳統(tǒng)廠商更像是一個組裝廠,沒有源代碼,但是新勢力現(xiàn)在看起來更希望全棧自研,反應(yīng)速度自然會快一些。
再往后看一個數(shù)據(jù),看一下汽車上面出現(xiàn)漏洞的主要原因。項(xiàng)目時(shí)間緊(71%)就不多說了,可以通過虛擬化shift-left等手段緩解;再往下60%和55%缺乏對安全編碼實(shí)踐的理解,意外的編碼錯誤。再往下是測試階段,占40%是使用不安全或者過時(shí)的開源軟件組件。大家看一下這些問題的種類,編碼會有什么問題?
這里講了汽車行業(yè)常見的編碼類的規(guī)范,比較熟的是MISRA,AutoSAR,26262,其他的比如說CERT,MISRA和AutoSAR有大量規(guī)則是來自于CERT,這里面有幾百條規(guī)則,用人工檢查是肯定不現(xiàn)實(shí),其他的規(guī)范也類似。上面Coverity可以看到支持了下面這些規(guī)范。當(dāng)汽車的智能化程度進(jìn)一步提升,車聯(lián)網(wǎng),人機(jī)交互更多的時(shí)候,這里羅列的其他編碼規(guī)范,比如OWASP這類在其他行業(yè)司空見慣的安全規(guī)范就會在汽車行業(yè)也越來越多的被參考。
在汽車行業(yè)還有一個比較特殊的情況,對于ECU這類嵌入式的開發(fā),不同廠商會有自己不同的開發(fā)版和編譯器,對于白盒代碼類工具來說,如果不能準(zhǔn)確識別編譯過程那檢查將會是很雞肋的。舉個例子,某個類型在你的系統(tǒng)是以16位或者32位存在的,沒有編譯過程的捕獲很可能這個都不知道,那白盒檢查出來的結(jié)果其實(shí)是更加雞肋。Coverity是目前業(yè)界支持嵌入式開發(fā)環(huán)境的最佳白盒工具,適配各類編譯器,并且對誤報(bào)率的控制業(yè)界最佳。
說到白盒工具的最佳實(shí)踐,我們可以看一下這個典型的開發(fā)流程,從寫代碼到提交到編譯到定時(shí)檢查再到發(fā)布,在這個場景下有什么位置可以做白盒測試呢?在IDE端首先可以裁減一些檢查規(guī)則,把速度快,準(zhǔn)確度高的規(guī)則在寫代碼的第一時(shí)間就同時(shí)檢查,規(guī)避問題,檢查本身耗時(shí)控制在秒級;其次,在提交代碼時(shí),可以通過工具配置,檢查企業(yè)自身的Top10類型的問題,比如命令注入以及Key被硬編碼等,檢查本身耗時(shí)控制在2-3分鐘級;到項(xiàng)目構(gòu)建的時(shí)候,涉及到跨文件/跨函數(shù)/數(shù)據(jù)流的分析,時(shí)間雖然長一點(diǎn),但是分析深度也會更深入一點(diǎn),時(shí)間控制在十幾到幾十分鐘級;最后在發(fā)布之前做一個詳細(xì)的檢查,這樣時(shí)間更長,小時(shí)級或夜間執(zhí)行。所以這都是一些取舍,你在什么階段,你的使用習(xí)慣,你能接受檢查介入到什么程度,在不同的位置要做不同的調(diào)整來適配這些白盒工具的集成。
其實(shí)在國內(nèi)某新勢力廠商,幾年前就開始做這樣的實(shí)踐,當(dāng)時(shí)的做法是在最后發(fā)布階段做一些測試,近兩年逐步的推移到構(gòu)建檢查的位置,在每一個版本構(gòu)建的時(shí)候做相應(yīng)的測試。只不過當(dāng)時(shí)強(qiáng)制程度還比較低,提供這樣的測試服務(wù),但是不強(qiáng)制要求你使用。但是現(xiàn)在新勢力廠商的智能座艙代碼量非常大,一個安卓完整編譯本身可能就花一天時(shí)間,那更進(jìn)一步往前推,推到每一個開發(fā),每一個模塊,都會拿到相應(yīng)的結(jié)果實(shí)時(shí)去查,進(jìn)一步去Shift-Left。以上是靜態(tài)工具,當(dāng)然工具還有各種各樣的報(bào)告,MISRA,HIS Metrics,Quality,Security等等。
剛才看到出現(xiàn)問題占40%是使用不安全或者過時(shí)的組件,這里指的是常見的開源組件。你的開發(fā)流程速度加快之后一定有一些前提,肯定大量復(fù)用開源現(xiàn)成組件效率才能提的上去。我們新思科技每年會發(fā)開源風(fēng)險(xiǎn)審計(jì)報(bào)告,各行各業(yè)用了多少開源組件,面臨什么風(fēng)險(xiǎn),以及趨勢。這是今年剛剛發(fā)的,審下來汽車行業(yè)里面所有代碼70%是由開源構(gòu)成的。如果把智能座艙加上去可能會更高,甚至后端的TSP,APP,可以參考其他行業(yè)就知道了,這里不做多解釋。
舉一個例子,你的汽車上市之后,你用到了curl7.58組件,如果它在明年發(fā)現(xiàn)了一個嚴(yán)重的安全漏洞,這個時(shí)候如果你有自己的ALM,PLM系統(tǒng)可以追溯這些組件被哪些軟件版本用到了,這些軟件版本被用到了哪些部件上,這些部件又被用到了哪些車型上,那一個完整的攻擊范圍就知道了,這樣你就可以精準(zhǔn)推送你的軟件補(bǔ)丁。
另外,在21434中還規(guī)定了,需要進(jìn)行Fuzz(模糊測試)。我們羅列了一下在車輛上會需要模糊測試的各種協(xié)議,接口。目前典型的做法是OEM在最后的階段進(jìn)行一下Fuzz測試;然而,根據(jù)Shift-left的方法,F(xiàn)uzz也是需要進(jìn)行調(diào)整并適配到開發(fā)過程的更早階段。
除了以上提到的各種測試方法,還有更多的需要在實(shí)踐21434過程中需要做的安全測試,然而所有測試類型都有自己Shift-Left的方法與實(shí)踐。
匯總一下,我們剛才講到V字模型上現(xiàn)階段做這開發(fā)的時(shí)候需要考慮哪些安全活動以及流程?,F(xiàn)在再看一下21434里面對于安全活動流程的圖示,其實(shí)是一個圓圈型的,對于右下角的尾巴End-Of-Life, 仔細(xì)想一下車型有退市,軟件有退市嗎?除非軟件不維護(hù)了,不然的話很有可能上一個車型軟件版本迭代用到下一個車型上,所以它是一直不停地迭代的過程。
我們剛才講的某些實(shí)踐其實(shí)內(nèi)容已經(jīng)是DevSecOps的范疇,把三者放在一起看就讓我們想到,21434模型會不會只是V字模型向DevSecOps過渡的中間產(chǎn)物?將來一定是不斷快速迭代和快速演進(jìn)的過程。
這里我找到一個案例,這是美國國防部使用DevSecOps的方法,在F16上部署了kubernetes,開發(fā)周期3-8個月縮短到一周,37個項(xiàng)目總開發(fā)時(shí)間節(jié)省超過100年;這是重武器,應(yīng)該比汽車開發(fā)慢多了吧,但是姑且可以用DevSecOps的方法來完成開發(fā)。
總結(jié)一下,我們目前所有針對每一個開發(fā)周期需要用到的工具層面,我們從軟件架構(gòu)角度來講,它的構(gòu)成一般是依托于開源組件,上面寫一些專用代碼,構(gòu)建業(yè)務(wù)需要的框架,在上面跑你的業(yè)務(wù)邏輯,通過WebUI或API等服務(wù)接口對外提供服務(wù)。對于不同階段用什么測試手段呢?我們有Coverity,在代碼開發(fā)時(shí)檢查和修復(fù)安全漏洞以及質(zhì)量問題。BlackDuck軟件成分分析,檢測和管理開源以及第三方組件風(fēng)險(xiǎn)。Seeker,交互式安全測試,在QA的同時(shí)自動完成安全測試。Defensics與Tinfoil,模糊測試與動態(tài)安全測試。
講到這兒為止其實(shí)都是每個具體項(xiàng)目里可能都會用到的質(zhì)量/安全測試工具以及方法,那剛才說的通過虛擬化把軟件和硬件開發(fā)工作同時(shí)來做,這個怎么回事兒呢?跟大家簡單講一下,還是這個V字模型,從下到上可以理解為從半導(dǎo)體廠商進(jìn)一步到Tier1基于芯片做一系列的開發(fā),再往上給OEM。我們其實(shí)可以和半導(dǎo)體芯片廠商合作,把芯片規(guī)格通過虛擬化的手段VDK交付給 Tier1,然后Tier1基于VDK開發(fā)ECU,再交付給OEM,OEM第一時(shí)間開始做各種應(yīng)用層的工作。對于Sil和pil階段,我們還有ECU虛擬化工具,Silver。大家知道SiL和PiL階段的代碼跟上HiL的還是有一定的區(qū)別,而區(qū)別某種程度上就意味著風(fēng)險(xiǎn),VDK能夠以vHiL的形式填補(bǔ)空缺,解決HiL時(shí)間緊張,資源緊張的問題,vHiL上運(yùn)行的代碼已經(jīng)非常接近真實(shí)HiL環(huán)境了。
VDK可以把芯片里面各種接口全部模擬了,模擬到哪一層都是可以的,雖然性能相比真實(shí)芯片環(huán)境會有一定的損耗,但是對于功能測試來講已經(jīng)足夠了。
從汽車軟硬件層級角度來看,從上面SW階段可以用SILVER工具對它進(jìn)行虛擬仿真,然后到直接跟硬件打交道階段VDK把它整個虛擬掉,再往下是Saber這是另外一個針對物理層信號的虛擬化工具,這些工具都可以跟其他常見的汽車行業(yè)用到的工具做聯(lián)合仿真。
這里有一個案例,英飛凌在2023年才會推出他的下一代自動駕駛芯片AURIX 3G MCU系列,然而現(xiàn)在已經(jīng)把這個芯片規(guī)格用VDK虛擬,交給Tier1,Tier1基于此設(shè)計(jì)軟件并交給知名的國際OEM大廠,現(xiàn)在該OEM已經(jīng)基于此在做整體方案的集成了,這樣做可以很簡單理解它的好處,你不用等芯片出來再做軟件部分的開發(fā),把整個周期Shift-Left提前了2-3年。
最后再總結(jié)一下,這是軟件安全層面的我們這個事業(yè)部一直比較低調(diào),但是已經(jīng)連續(xù)三年在Gartner排名上面處于領(lǐng)導(dǎo)者的位置,如果大家感興趣也可以后續(xù)交流一下。這里也有我的微信和我們事業(yè)部的二維碼,大家可以掃描添加,如果感興趣也可以到外面展臺進(jìn)一步交流。