上一篇我們已經(jīng)聊完了軟件安全需求SWSR相關(guān)內(nèi)容,接下來(lái)以此為基礎(chǔ),我們需要對(duì)軟件架構(gòu)進(jìn)行安全設(shè)計(jì),將安全機(jī)制相關(guān)的SWSR應(yīng)用于軟件架構(gòu)當(dāng)中,為后續(xù)軟件詳細(xì)設(shè)計(jì)提供基礎(chǔ),是軟件功能安全開發(fā)重要內(nèi)容。
01
軟件架構(gòu)安全設(shè)計(jì)任務(wù)
軟件安全架構(gòu)旨在刻畫出實(shí)現(xiàn)軟件功能安全基本的軟件框架,需要在系統(tǒng)架構(gòu)的基礎(chǔ)上,對(duì)其軟件部分進(jìn)行進(jìn)一步細(xì)化,開發(fā)滿足軟件功能安全要求的軟件架構(gòu)設(shè)計(jì)。 ?
一般來(lái)講,軟件架構(gòu)設(shè)計(jì)需要同時(shí)考慮安全相關(guān)和非安全相關(guān)的軟件要求,安全相關(guān)的需求甚至很大程度上決定了軟件架構(gòu)的形式,例如,是否需要分層設(shè)計(jì),軟件分區(qū)等。 ?
對(duì)于分層式軟件架構(gòu)設(shè)計(jì),功能安全架構(gòu)部分可以相對(duì)獨(dú)立進(jìn)行設(shè)計(jì)。但不管安全或非安全相關(guān)軟件架構(gòu)的設(shè)計(jì),其任務(wù)都在于描述: ?
軟件架構(gòu)要素的靜態(tài)設(shè)計(jì)方面,包括;
?─?分級(jí)層次的軟件結(jié)構(gòu); ?─?數(shù)據(jù)類型和它們的特征參數(shù); ?─?軟件組件的外部接口; ?─?嵌入式軟件的外部接口; ?─?全局變量; ?─?包括架構(gòu)的范圍和外部依賴的約束。 ?
軟件架構(gòu)要素的動(dòng)態(tài)設(shè)計(jì)方面,包括:
?─?事件和行為的功能鏈; ?─?數(shù)據(jù)處理的邏輯順序; ?─?控制流和并發(fā)進(jìn)程; ?─?通過(guò)接口和全局變量傳遞的數(shù)據(jù)流; ?─?時(shí)間的限制。 ?
所以,不管系統(tǒng)還是軟件架構(gòu),都包含靜態(tài)和動(dòng)態(tài)特性,這兩方面特性描述越全面,越利于后續(xù)軟件詳細(xì)設(shè)計(jì),在實(shí)際應(yīng)用中可根據(jù)需要選擇。 ?
02
軟件架構(gòu)開發(fā)常見(jiàn)視圖
為了描述軟件架構(gòu)靜態(tài)和動(dòng)態(tài)特性,ISO 26262對(duì)軟件架構(gòu)設(shè)計(jì)的標(biāo)記法進(jìn)行明確規(guī)定,包括: 自然語(yǔ)言,非半形式,半形式(偽代碼,UML,SysML,Simulink等),形式記法(可運(yùn)行代碼),其中對(duì)于ASIL等級(jí)C和D軟件安全需求對(duì)應(yīng)的架構(gòu)設(shè)計(jì)強(qiáng)烈推薦采用半形式法進(jìn)行。 ?
在實(shí)際架構(gòu)設(shè)計(jì)過(guò)程中,一般采用通用化建模語(yǔ)言UML或SysML,目前大部分架構(gòu)設(shè)計(jì)軟件都支持這兩種設(shè)計(jì)語(yǔ)言,如Enterprise Architect, Cameo等。 ?
此外,這些架構(gòu)設(shè)計(jì)語(yǔ)言及軟件和后續(xù)軟件設(shè)計(jì)一脈相承,可以將相應(yīng)的軟件架構(gòu)視圖直接導(dǎo)入AUTOSAR或SIMULINK等軟件開發(fā)工具,以此為基礎(chǔ)直接用于軟件詳細(xì)設(shè)計(jì)。
當(dāng)然,也可以直接采用AUTOSAR等軟件開發(fā)工具鏈進(jìn)行,進(jìn)行軟件架構(gòu)設(shè)計(jì),形成ARXML描述文件,其圖形化設(shè)計(jì)語(yǔ)言也屬于半形式標(biāo)記法。 ?
為了刻畫軟件架構(gòu)靜態(tài)和動(dòng)態(tài)特性,往往需要采用不同的軟件視圖,即從不同的角度,描述軟件架構(gòu)的行為。 ?
UML或SysML為描述架構(gòu)靜態(tài)和動(dòng)態(tài)特性,分別引入了兩大類視圖: ?
1
結(jié)構(gòu)視圖:?描述架構(gòu)靜態(tài)結(jié)構(gòu)和接口。 常見(jiàn)的結(jié)構(gòu)視圖包括,類圖,組件圖,復(fù)合結(jié)構(gòu)圖,包圖等。
2
行為視圖: 描述架構(gòu)動(dòng)態(tài)行為,例如數(shù)據(jù)流,控制流,不同狀態(tài)切換等。
常見(jiàn)的行為視圖包括,用例圖,活動(dòng)圖,時(shí)序圖,狀態(tài)圖,交互縱覽圖等。
如下圖所示,一般來(lái)講,UML和SysML視圖類型存在部分重疊,也存在一定差異,例如需求及參數(shù)視圖屬于SysML獨(dú)有。二者在視圖語(yǔ)言規(guī)則類似,UML多用于軟件架構(gòu)設(shè)計(jì),而SysML多用于系統(tǒng)設(shè)計(jì),二者可以混合使用。
?
在實(shí)際應(yīng)用過(guò)程中,可根據(jù)需要,采取不同視圖,描述軟件架構(gòu)的不同特性,之后可以專門給朋友們聊聊UML和SysML視圖。
以一個(gè)組件為例,其UML組件圖如下圖所示,用于描述組件內(nèi)部子組件及其接口關(guān)系。
疑問(wèn)解答:?在軟件定義汽車,為應(yīng)對(duì)不斷增加的軟件復(fù)雜度,架構(gòu)的重要性毋庸置疑,但很多朋友可能會(huì)好奇,為什么非要采取UML/SysML等半形式標(biāo)記法描述架構(gòu),真的有必要嗎?
1
圖比傳統(tǒng)語(yǔ)言,代碼更清晰,易懂。
2
ISO?26262?對(duì)架構(gòu)設(shè)計(jì)標(biāo)記法明確,對(duì)于ASIL C和D的系統(tǒng),強(qiáng)烈推薦使用半形式標(biāo)記法,即UML或SysML。
3
圖可以描述復(fù)雜系統(tǒng)或者過(guò)程,統(tǒng)一建模語(yǔ)言及視圖統(tǒng)一了各種方法對(duì)不同類型的系統(tǒng)、不同開發(fā)階段以及不同內(nèi)部概念的不同觀點(diǎn),從而有效的消除了各種建模語(yǔ)言之間不必要的差異。
4
為基于AUTOSAR的系統(tǒng)設(shè)計(jì)階段提供輸入和后續(xù)軟件詳細(xì)設(shè)計(jì)提供基礎(chǔ)。
03
軟件架構(gòu)安全設(shè)計(jì)
軟件架構(gòu)安全的設(shè)計(jì)的本質(zhì)是將和架構(gòu)相關(guān)的軟件安全需求SWSR應(yīng)用于軟件架構(gòu)設(shè)計(jì),初步確定軟件功能安全實(shí)現(xiàn)的基本框架和方式,為后續(xù)軟件詳細(xì)設(shè)計(jì)提供基礎(chǔ)。 ?
除經(jīng)典AUTOSAR的軟件架構(gòu),將軟件整體分為應(yīng)用層,TRE通訊層,基礎(chǔ)軟件層外,為實(shí)現(xiàn)軟件功能安全,還會(huì)將功能安全和非功能安全軟件進(jìn)行分層設(shè)計(jì)。例如E-Gas三層架構(gòu),將軟件整體分為功能層,功能監(jiān)控層和控制器監(jiān)控層,其中功能層和功能監(jiān)控層均屬于AUTOSAR中應(yīng)用軟件層,控制器監(jiān)控層為基礎(chǔ)軟件層,二者相互統(tǒng)一,并不矛盾。 ?
總體來(lái)講,根據(jù)不同的軟件分層,軟件架構(gòu)安全設(shè)計(jì)基本分為兩大部分:
功能監(jiān)控層安全設(shè)計(jì)
基礎(chǔ)軟件安全設(shè)計(jì)
?3.1 功能監(jiān)控層安全設(shè)計(jì) ?
對(duì)于軟件監(jiān)控層架構(gòu)安全設(shè)計(jì)而言,主要是將軟件架構(gòu)相關(guān)的SWSR,即錯(cuò)誤探測(cè)和錯(cuò)誤處理安全機(jī)制,應(yīng)用于軟件監(jiān)控層的架構(gòu)設(shè)計(jì)。 ?
功能監(jiān)控層屬于獨(dú)立于軟件功能實(shí)現(xiàn)的功能安全開發(fā)內(nèi)容,一般按照相應(yīng)ASIL等級(jí)進(jìn)行獨(dú)立開發(fā),對(duì)功能層中功能安全相關(guān)部分進(jìn)行監(jiān)控,包括輸入輸出診斷,邏輯監(jiān)控,故障分類及故障優(yōu)先級(jí)仲裁等。 ?
在功能監(jiān)控層軟件架構(gòu)設(shè)計(jì),主要是將和架構(gòu)相關(guān)的錯(cuò)誤探測(cè)和錯(cuò)誤處理等安全機(jī)制,應(yīng)用于功能監(jiān)控層架構(gòu)設(shè)計(jì)。雖然根據(jù)不同類型的控制器,其安全機(jī)制具體實(shí)施有所差別,但總體而言,主要包含以下安全機(jī)制: ?
用于錯(cuò)誤探測(cè)的安全機(jī)制包括:
─?輸入輸出數(shù)據(jù)的范圍檢查; ─?合理性檢查(例如,使用期望行為參考模型、斷言檢查、或不同來(lái)源信號(hào)比較); ─?數(shù)據(jù)錯(cuò)誤探測(cè)(例如,檢錯(cuò)碼和多重?cái)?shù)據(jù)存儲(chǔ)); ─?外部要素監(jiān)控程序執(zhí)行,例如,通過(guò)專用集成電路(ASIC)或者其他軟件要素來(lái)執(zhí)行看門狗功能。監(jiān)控可以是邏輯監(jiān)控或時(shí)間監(jiān)控,或者兩者的結(jié)合; ─?程序執(zhí)行的時(shí)間監(jiān)控; ─?設(shè)計(jì)中的異構(gòu)冗余;或 —在軟件或硬件中實(shí)施的訪問(wèn)沖突控制機(jī)制,與授權(quán)訪問(wèn)或拒絕訪問(wèn)安全相關(guān)共享資源有關(guān)。 ?
用于錯(cuò)誤處理的安全機(jī)制可能包括:
─?為了達(dá)到和維持安全狀態(tài)的功能關(guān)閉; ─?靜態(tài)恢復(fù)機(jī)制(例如,恢復(fù)塊、后向恢復(fù)、前向恢復(fù)以及通過(guò)重試來(lái)恢復(fù)); ─?通過(guò)劃分功能優(yōu)先級(jí)進(jìn)行平穩(wěn)降級(jí),從而最小化潛在失效對(duì)功能安全的不利影響; ─?設(shè)計(jì)中同構(gòu)冗余,主要側(cè)重于控制運(yùn)行相似軟件的硬件中瞬態(tài)故障或隨機(jī)故障的影響(例如,軟件在時(shí)間上的冗余執(zhí)行); ? 具體來(lái)講,在功能監(jiān)控層架構(gòu)設(shè)計(jì)過(guò)程中,可以根據(jù)具體監(jiān)控的功能,進(jìn)行相應(yīng)的異構(gòu)冗余計(jì)算,對(duì)其輸入,輸出,進(jìn)行范圍及合理性檢查,異構(gòu)冗余計(jì)算程序執(zhí)行過(guò)程進(jìn)行時(shí)內(nèi)部或外部要素的時(shí)間或邏輯監(jiān)控,一旦發(fā)現(xiàn)錯(cuò)誤,通過(guò)錯(cuò)誤處理機(jī)制,將系統(tǒng)導(dǎo)入安全狀態(tài)。 ?
實(shí)例:以整車控制器加速踏板信號(hào)為例,其ASIL等級(jí)要求一般為D,為了實(shí)現(xiàn)該安全需求,需要從軟件和硬件兩個(gè)方面著手:?硬件安全方面主要是加速度傳感器本身冗余及雙路冗余采樣等。軟件安全方面主要是以上述安全機(jī)制的具體應(yīng)用,例如,兩路加速踏板傳感器信號(hào)自身故障診斷,信號(hào)電壓范圍是否在有效范圍內(nèi),和制動(dòng)踏板信號(hào)之間的合理性檢驗(yàn),雙路信號(hào)是否同步等等。 ?
同樣,在軟件開發(fā)過(guò)程中,ISO 26262并沒(méi)有也沒(méi)辦法明確哪個(gè)ASIL等級(jí)應(yīng)該采取哪些軟件安全機(jī)制,根據(jù)個(gè)人經(jīng)驗(yàn),一般存在以下兩種方式可以進(jìn)行參考: ?
ISO 26262第5部分硬件開發(fā)附件中對(duì)不同類型安全機(jī)制診斷覆蓋率進(jìn)行高中低分類,可以依據(jù)安全機(jī)制覆蓋率的中高低分別應(yīng)用于ASIL D,C,B類型的安全需求。
依靠以往開發(fā)經(jīng)驗(yàn),一般對(duì)于ASIL D或C的安全需求,需要根據(jù)適用性采取目前State of Art的所有或大部分安全機(jī)制,對(duì)于ASIL B或A的安全需求,則沒(méi)有明確要求。
3.2 基礎(chǔ)軟件安全設(shè)計(jì)
基礎(chǔ)軟件多和控制器硬件相關(guān),是保證上層軟件(應(yīng)用層,功能監(jiān)控層)正常運(yùn)行基本條件。
在經(jīng)典的AUTOSAR軟件平臺(tái),為實(shí)現(xiàn)獨(dú)立于控制器硬件,多平臺(tái)軟件復(fù)用,采用了RTE層和基礎(chǔ)軟件層,通過(guò)標(biāo)準(zhǔn)化接口規(guī)范,逐級(jí)對(duì)硬件進(jìn)行抽象,對(duì)上提供統(tǒng)一訪問(wèn)接口,以此實(shí)現(xiàn)軟硬件分離。
對(duì)于基礎(chǔ)軟件安全設(shè)計(jì)而言,主要是對(duì)基礎(chǔ)軟件提出的更高的功能安全方面的需求,從ISO 26262角度而言,依據(jù)非或不同ASIL等級(jí)要素共存原則,基礎(chǔ)軟件開發(fā)存在兩種方式:
3.2.1 全部依據(jù)最高ASIL等級(jí)開發(fā)
以AUTOSAR為例,如下圖所示,全部基礎(chǔ)軟件,包括OS,內(nèi)存分配,通訊等均統(tǒng)一按照最高ASIL等級(jí)開發(fā)。
優(yōu)點(diǎn): 安全性能高,軟件主體為功能安全組件,之間無(wú)需額外安全機(jī)制保護(hù),運(yùn)行效率高。
缺點(diǎn): 底層模塊需按ASIL等級(jí)開發(fā),成本高,但隨著軟件復(fù)雜度不斷提高,為降低開發(fā)復(fù)雜度和增加軟件可靠性,逐漸成為趨勢(shì)。
3.2.2 采用Partition,使用免于干擾(FFI),要素共存措施
為降低開發(fā)成本,目前基于功能安全和非功能安全的Partion類型開發(fā)也尤為常見(jiàn)。為了實(shí)現(xiàn)非或不同ASIL等級(jí)要素共存,除了在功能監(jiān)控層對(duì)其開發(fā)進(jìn)行區(qū)別對(duì)待外,還需要在基礎(chǔ)軟件部分采用相應(yīng)的安全措施,避免高ASIL等級(jí)軟件受到低ASIL等級(jí)或QM軟件的干擾,進(jìn)而破壞安全需求,具體如下圖所示:
3.2.2.1 FFI干擾類型
ISO 26262共定義以下三種類型的干擾:?
執(zhí)行和時(shí)序(Timing &Execution)干擾
軟件在執(zhí)行和調(diào)度過(guò)程中出現(xiàn)的組件間的干擾主要包括:
─?執(zhí)行阻塞?(blocking of execution):?一個(gè)任務(wù)有CPU控制,阻塞了另外一個(gè)任務(wù)。
─?死鎖?(deadlocks):?每一個(gè)處于等待狀態(tài)的任務(wù)相互等待釋放已經(jīng)被鎖定的資源。
─?活鎖?(livelocks) :??進(jìn)程狀態(tài)不斷變化,但仍相互依賴,永遠(yuǎn)無(wú)法完成它們的任務(wù)。
─?執(zhí)行時(shí)間的不正確分配?(incorrect allocation of execution time)。
─軟件要素間的不正確同步?(incorrect synchronization between software elements)。
其對(duì)應(yīng)的安全機(jī)制包括:
─?內(nèi)外部看門狗(Internal/External Watchdog)
─?程序監(jiān)控(Program Flow Monitor)
內(nèi)存(Memory)干擾
軟件組件內(nèi)存干擾類型主要包括:
─?內(nèi)容損壞(corruption of content)
─?數(shù)據(jù)不一致(inconsistent data (e.g. due to update during data fetch))
─?堆棧溢出或下溢(stack overflow or underflow)
─?對(duì)已分配給其他軟件要素的內(nèi)存進(jìn)行讀寫訪問(wèn)(read or write access to memoryallocated to another software element)
其對(duì)應(yīng)的安全機(jī)制包括:
─ 內(nèi)存分區(qū),使用內(nèi)存保護(hù)單元(MemoryProtection Unit , MPU)來(lái)實(shí)現(xiàn)軟件分區(qū)。
信息交換(Exchange of information)干擾
發(fā)送方(Sender)和接收方(Receiver)之間的數(shù)據(jù)交換對(duì)系統(tǒng)的功能安全造成影響:
─?信息重復(fù) (repetitionof information)
─?信息丟失 (lossof information)
─?信息延遲 (delayof information)
─?信息插入 (insertionof information)
─?信息次序不正確 (incorrectsequence of information)
─?信息偽裝或不正確尋址(masquerade or incorrectaddressing of information)
─?信息損壞 (corruptionof information)
─?從發(fā)送方傳送到多個(gè)接收方的信息不對(duì)稱(asymmetric information sent from a senderto multiple receivers)
─?發(fā)送方發(fā)送的信息只能被部分接收方接收(information from a senderreceived by only a subset of the receivers)
─?通信信道阻塞(blocking access to a communicationchannel)。
其對(duì)應(yīng)的安全機(jī)制包括:
─?循環(huán)冗余校驗(yàn)(cyclic redundancy check)
─?E2E保護(hù)?(End2End Protection)
3.2.2.2 要素共存(FFI)解決方案
看完這些FFI干擾類型,大家先不要慌,基礎(chǔ)軟件多標(biāo)準(zhǔn)化開發(fā),在不同軟件平臺(tái)直接采用開發(fā)工具鏈配置即可。
例如,Vector提供AUTOSAR的ECU解決方案,包括源代碼MICROSAR和DaVinci系列配置工具,其中和功能安全相關(guān)的軟件模塊 MICROSAR Safe如下圖所示:
針對(duì)FFI不同干擾類型以及安全機(jī)制,分別對(duì)應(yīng)相應(yīng)的基礎(chǔ)軟件安全模塊,包括:
Safe OS,SafeRTE, SafeWDG,SafeE2E等等,具體使用需要根據(jù)相應(yīng)開發(fā)工具鏈進(jìn)行配置就可,但相對(duì)成本也較高。
除此之外,ISO 26262對(duì)功能安全相關(guān)的軟件架設(shè)計(jì),還根據(jù)不同ASIL等級(jí),提出了其他相關(guān)約束,包括: ?
1
軟件架構(gòu)細(xì)致程度應(yīng)能夠承載SWSR。
2
軟件架構(gòu)設(shè)計(jì)原則,包括:?適當(dāng)分層,限制軟件組件規(guī)模和復(fù)雜度,限制接口規(guī)模,組內(nèi)高內(nèi)聚,組間低耦合,限制中斷使用等。
3
軟件架構(gòu)設(shè)計(jì)驗(yàn)證方法,包括:?設(shè)計(jì)走查,設(shè)計(jì)檢查,控制流,數(shù)據(jù)流分析,仿真,快速原型等。
4
HWSR應(yīng)被分配至軟件架構(gòu)中的組件。
5
不同或非ASIL等級(jí)軟件組件開發(fā)需滿足以下原則之一:
─ 按最高ASIL等級(jí)。
─ 要素共存FFI,例如軟件分區(qū)。
6
對(duì)SWSR和具體實(shí)施之間的可追溯性。
架構(gòu)設(shè)計(jì)約束詳細(xì)內(nèi)容及表格可以直接查看ISO 26262-6:2018 第7章節(jié)內(nèi)容,在此不再贅述。
審核編輯:劉清
評(píng)論
查看更多