◆馬剛
基于區(qū)塊鏈技術(shù)的工業(yè)數(shù)據(jù)安全防護的研究
◆馬剛
(中國核工業(yè)電機運行技術(shù)開發(fā)有限公司 北京 100043)
數(shù)據(jù)庫作為工業(yè)控制系統(tǒng)網(wǎng)絡(luò)中的重要節(jié)點,用于接收、解析和保存通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)和命令,此數(shù)據(jù)至少有兩種用途:一種用途是檢查因組件故障和網(wǎng)絡(luò)攻擊而可能發(fā)生的流程異常;另一種用途是作為工業(yè)數(shù)據(jù)安全分析的重要輸入,這也是本文研究的重點。為了保護數(shù)據(jù)庫的工業(yè)數(shù)據(jù)安全,本文提出了一種新的體系架構(gòu),從完整性和冗余性這兩個方面來增強工業(yè)數(shù)據(jù)安全性。完整性檢查機制與區(qū)塊鏈技術(shù)相結(jié)合,用于確保數(shù)據(jù)完整性。數(shù)據(jù)冗余性通過應(yīng)用動態(tài)復(fù)制機制來實現(xiàn)的,用以在遭受網(wǎng)絡(luò)攻擊后恢復(fù)數(shù)據(jù)。
區(qū)塊鏈;工業(yè)數(shù)據(jù)安全;網(wǎng)絡(luò)攻擊
2010年伊朗布什爾核電站的“震網(wǎng)病毒”攻擊、2015年底烏克蘭電力部門遭受到惡意代碼攻擊等安全事件表明,針對工業(yè)控制系統(tǒng)[1]的漏洞攻擊正朝著關(guān)鍵基礎(chǔ)設(shè)施攻擊的趨勢發(fā)展。數(shù)據(jù)庫作為核電站儀控系統(tǒng)中的重要設(shè)備,通過可編程邏輯控制器(PLC)、傳感器和執(zhí)行器接收、解析和保存通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)和命令。數(shù)據(jù)庫的數(shù)據(jù)可用于對儀控系統(tǒng)中的故障進行根本原因分析,也可用于確定是否對工廠控制器發(fā)生了攻擊行為。因此,保護數(shù)據(jù)庫中的數(shù)據(jù)至關(guān)重要。
為了保護數(shù)據(jù)庫中的工業(yè)數(shù)據(jù)安全,重點主要考慮以下兩個方面:不變性和冗余。設(shè)計的數(shù)據(jù)安全防護方案要求是可用、可靠以及一致的,也就意味著:(1)將數(shù)據(jù)庫與網(wǎng)絡(luò)隔離是不可行的;(2)不得影響核電站的任何控制邏輯;(3)必須與現(xiàn)有儀控系統(tǒng)集成部署。以下從數(shù)據(jù)完整性和冗余兩方面,通過對比多個不同方案,闡述適用于工業(yè)數(shù)據(jù)安全防護的具體方法和措施。
加密哈希主要用于完整性檢查。下面的解決方案可以提供數(shù)據(jù)完整性,但是,每種解決方案都有自己的優(yōu)點和缺點。
解決方案 1:每個向量的加密散列。使用加密哈希函數(shù)生成每個向量的散列,例如SHA256算法。每個散列存儲在同一臺計算機或不同計算機上的另一個數(shù)據(jù)庫中。知道這種機制的攻擊者在繞過的同時,會破壞向量的同時覆蓋相應(yīng)的散列。
解決方案 2:哈希鏈。每個向量對應(yīng)一個散列:按照上面討論的解決方案1的方法生成每個向量的加密散列。但是,在這種情況下,加密哈希函數(shù)的輸入不僅是當前的向量,而且也將前一個向量的加密散列與當前的向量一起作為輸入。但是,如果攻擊者蓋寫整個哈希鏈而未被發(fā)現(xiàn),那么此解決方案就無法檢測到攻擊。當攻擊者未更改向量數(shù)據(jù)庫中的任何內(nèi)容,但刪除部分或全部散列時,由于缺乏哈希有效性校驗,解決方案1和解決方案2都無法確保數(shù)據(jù)完整性。
解決方案 3:去中心化哈希鏈。保留了解決方案2的哈希生成機制,但哈希鏈的存儲在架構(gòu)上是分散的,在邏輯上是集中的。這意味著相同的哈希鏈存儲在多臺計算機中,而不是單個計算機中。然而,在設(shè)計這種去中心化存儲時會遇到幾個挑戰(zhàn):如何在網(wǎng)絡(luò)上安全地同步哈希鏈?當不同的計算機上有不同的哈希鏈時,如何選擇正確的哈希鏈?這些問題可通過區(qū)塊鏈[2]得到解決。
解決方案 4:區(qū)塊鏈作為去中心化哈希存儲。區(qū)塊鏈是比特幣的底層技術(shù),一種分布式賬本。每個區(qū)塊可能包含一個或多個事務(wù)。由于每個區(qū)塊都包含前一個區(qū)塊的散列,因此攻擊者幾乎不可能更改每個區(qū)塊內(nèi)的數(shù)據(jù)(事務(wù))。
區(qū)塊鏈在架構(gòu)上是分散的,在邏輯上是集中的。一個相同的區(qū)塊鏈存儲在網(wǎng)絡(luò)中的多臺計算機上。這些計算機之間的塊同步是通過使用共識機制來實現(xiàn)的。共識規(guī)則的選擇可以改變區(qū)塊鏈去中心化的行為,即公有或私有區(qū)塊鏈。區(qū)塊的加密鏈與共識協(xié)議一起保護區(qū)塊鏈免受網(wǎng)絡(luò)攻擊。
區(qū)塊鏈使用底層架構(gòu)提供事務(wù)防篡改功能,同時,通過應(yīng)用運行在區(qū)塊鏈之上的基于事務(wù)的狀態(tài)機來實現(xiàn)數(shù)字資產(chǎn)的跟蹤,即包含任何信息的交易。在這種情況下,交易是觸發(fā)區(qū)塊鏈內(nèi)部狀態(tài)機的輸入。狀態(tài)機的狀態(tài)變量通過處理交易的輸入而改變。狀態(tài)機將其狀態(tài)變量存儲在區(qū)塊鏈的塊中。區(qū)塊鏈為這些狀態(tài)變量提供防篡改功能。這種基于交易的狀態(tài)機最初是由以太坊引入,并稱為智能合約。
從上面的方案對比可以看出,通過使用區(qū)塊鏈和共識機制,可以解決上述去中心化問題。此外,任何類型的數(shù)據(jù)都可以使用智能合約存儲在區(qū)塊鏈中。通過使用區(qū)塊鏈可以更輕松地實現(xiàn)去中心化哈希鏈架構(gòu)。向量的散列存儲在區(qū)塊鏈的塊中,如圖1所示。
圖1 區(qū)塊鏈用于哈希存儲
哈希鏈和去中心化是在底層區(qū)塊鏈層完成的。因此,只有向量的單個散列需要存儲在防篡改的區(qū)塊鏈中。這種使用區(qū)塊鏈作為底層來提供數(shù)據(jù)完整性的概念,如圖2所示。
圖2 區(qū)塊鏈用于數(shù)據(jù)完整性概念圖
除了上面提到的方案,還有其他機制來保證數(shù)據(jù)庫的數(shù)據(jù)完整性。數(shù)據(jù)二極管[3]是提供只讀數(shù)據(jù)庫的解決方案。數(shù)據(jù)二極管提供來自底層網(wǎng)絡(luò)層的單向數(shù)據(jù)流。但是,在數(shù)據(jù)庫網(wǎng)絡(luò)中使用數(shù)據(jù)二極管可能會影響儀控系統(tǒng)的當前網(wǎng)絡(luò)架構(gòu)。
另一種方法將數(shù)據(jù)庫配置為向其添加值,并且不允許對數(shù)據(jù)進行任何其他操作。但是,攻擊者可能不會使用數(shù)據(jù)庫引擎蓋寫數(shù)據(jù)。相反,攻擊者可能會更改操作系統(tǒng)較低層的值。這種操縱將給檢測數(shù)據(jù)完整性帶來重大挑戰(zhàn)。
為儀控系統(tǒng)的工業(yè)數(shù)據(jù)提供冗余可快速實現(xiàn)數(shù)據(jù)恢復(fù)。在儀控系統(tǒng)中,數(shù)據(jù)根據(jù)核電站的規(guī)模存儲在一個或多個數(shù)據(jù)庫中。下面將闡述數(shù)據(jù)冗余的方法及其優(yōu)缺點。
解決方案 1:傳統(tǒng)備份系統(tǒng)。備份系統(tǒng)可以定期將數(shù)據(jù)從數(shù)據(jù)庫復(fù)制到存檔文件和另一個存儲設(shè)備上。此類備份的目的是在發(fā)生數(shù)據(jù)丟失事件后恢復(fù)原始數(shù)據(jù)。
解決方案 2:靜態(tài)復(fù)制。在靜態(tài)復(fù)制中數(shù)據(jù)從數(shù)據(jù)庫實時復(fù)制到另一個類似的設(shè)備中。然而,由于每個數(shù)據(jù)庫都需要存儲整個狀態(tài)數(shù)據(jù),因此,需要配備大量的數(shù)據(jù)庫。然而,大多數(shù)儀控系統(tǒng)只配備少量的數(shù)據(jù)庫。攻擊者可以更改所有復(fù)制的數(shù)據(jù)庫中的數(shù)據(jù),或者攻擊者可以選擇性地清除所有數(shù)據(jù)庫中的數(shù)據(jù)。
解決方案 3:動態(tài)復(fù)制。在動態(tài)復(fù)制中,要復(fù)制的數(shù)據(jù)被分割成更小的數(shù)據(jù)塊。網(wǎng)絡(luò)中的多臺計算機(稱為節(jié)點)復(fù)制數(shù)據(jù)塊。每個數(shù)據(jù)塊都被復(fù)制到網(wǎng)絡(luò)中所有節(jié)點中的一組動態(tài)選擇的節(jié)點??梢栽趦x控系統(tǒng)中配置要復(fù)制的節(jié)點數(shù)量,例如,在Hadoop分布式文件系統(tǒng)(HDFS)[4]中每個數(shù)據(jù)塊被復(fù)制到三個不同的節(jié)點,如圖3所示。
圖3 HDFS架構(gòu)
在HDFS架構(gòu)中,有Namenode、Datanodes和Client。Datanodes 負責(zé)存儲文件的數(shù)據(jù)塊,而Namenode 負責(zé)跨不同數(shù)據(jù)節(jié)點的數(shù)據(jù)塊復(fù)制。Client為最終用戶提供了一個接口來操作系統(tǒng)中的文件。HDFS中的每個文件都存儲為塊序列。文件中除最后一個塊外的所有塊的大小相同。文件中的塊在大型集群中的不同數(shù)據(jù)節(jié)點之間動態(tài)復(fù)制。存儲文件數(shù)據(jù)塊副本的數(shù)據(jù)節(jié)點列在Namenode內(nèi)該文件的元數(shù)據(jù)中。每個文件的塊大小和復(fù)制因子是可配置的。
在儀控系統(tǒng)中,上述描述的動態(tài)復(fù)制用于核電站網(wǎng)絡(luò)中的不同數(shù)據(jù)庫。數(shù)據(jù)庫中的數(shù)據(jù)收集為多個時間序列的向量形式。數(shù)據(jù)庫中的每個向量都可以通過電廠網(wǎng)絡(luò)復(fù)制到其他數(shù)據(jù)庫中,標記為副本。例如,假設(shè)考慮工廠中有100個數(shù)據(jù)庫。數(shù)據(jù)庫1的向量1被復(fù)制到數(shù)據(jù)庫3和4,而數(shù)據(jù)庫1的向量2被復(fù)制到數(shù)據(jù)庫6和10。當一個向量被篡改時,它可以從任何一個副本節(jié)點中恢復(fù)。攻擊者必須知道要損壞的向量的所有副本的位置或所有數(shù)據(jù)庫都必須受到攻擊,而這使攻擊者的任務(wù)變得極具挑戰(zhàn)性。在三種冗余機制中,動態(tài)冗余被認為最優(yōu)。
采用區(qū)塊鏈和動態(tài)復(fù)制相結(jié)合的方式來實現(xiàn)工業(yè)數(shù)據(jù)安全的防護。區(qū)塊鏈用于去中心化的散列存儲架構(gòu),以保證數(shù)據(jù)完整性。通過動態(tài)復(fù)制實現(xiàn)對數(shù)據(jù)完整性攻擊的恢復(fù)能力。工業(yè)控制系統(tǒng)每一階段的數(shù)據(jù)都保存到相應(yīng)的數(shù)據(jù)庫中。傳感器的測量值按時間序列存為向量。每個向量的生成相應(yīng)的散列并將其存儲在區(qū)塊鏈中。散列大小和區(qū)塊鏈中塊大小的組合是數(shù)據(jù)安全防護的主要開銷。為了減少存儲開銷,例如為一分鐘間隔收集的向量組生成散列。
向量分組可實現(xiàn)跨多個存儲節(jié)點執(zhí)行動態(tài)復(fù)制。每組向量被復(fù)制到電廠網(wǎng)絡(luò)中的不同存儲節(jié)點。與在HDFS中一樣,存儲節(jié)點以及每個向量組的副本必須存儲在媒體上,以備恢復(fù)使用。由于每個向量組的散列都存儲在區(qū)塊鏈中,因此每個組對應(yīng)的存儲節(jié)點可以與散列一起存儲在區(qū)塊鏈中。散列、時間范圍和存儲節(jié)點列表共同構(gòu)成了向量組的索引。索引存儲在區(qū)塊鏈的區(qū)塊內(nèi)。來自儀控系統(tǒng)中每個數(shù)據(jù)存儲在相應(yīng)的存儲節(jié)點內(nèi),并動態(tài)復(fù)制到其他存儲節(jié)點。圖4顯示了基于區(qū)塊鏈技術(shù)的工業(yè)數(shù)據(jù)安全防護的架構(gòu)。
使用智能合約在區(qū)塊鏈的區(qū)塊內(nèi)存儲索引。智能合約可以保存任何類型的狀態(tài)變量,例如整數(shù)、字符串、數(shù)組、映射和結(jié)構(gòu)。結(jié)構(gòu)數(shù)據(jù)類型用于包含向量組的散列、時間范圍和存儲節(jié)點列表的索引??梢允褂镁哂袆討B(tài)長度的空索引數(shù)組初始化智能合約。當存儲節(jié)點存儲向量組的索引時,索引會附加到數(shù)組中。
智能合約包含存儲新索引的函數(shù)。該函數(shù)的參數(shù)包括向量組的散列和時間范圍。為了存儲向量組的索引,存儲節(jié)點發(fā)送一個事務(wù),其中包含對智能合約的函數(shù)調(diào)用以及相應(yīng)的參數(shù)。在索引通過智能合約的狀態(tài)變量成功存儲在區(qū)塊鏈中后復(fù)制該向量組。
在此架構(gòu)中,每個存儲節(jié)點都有自己的加密密鑰對。存儲節(jié)點的公鑰在部署時被標記為授權(quán)在智能合約中存儲索引。然后,存儲節(jié)點發(fā)送事務(wù)以存儲向量組的索引。此方法可以防止從未知資源存儲接收的索引。
總之,本框架以有效的方式利用區(qū)塊鏈,為工業(yè)數(shù)據(jù)的完整性檢查提供不可變的散列。通過使用動態(tài)復(fù)制以有效實現(xiàn)向量的冗余。
圖4 基于區(qū)塊鏈技術(shù)的工業(yè)數(shù)據(jù)安全防護架構(gòu)
本文研究了為抵御網(wǎng)絡(luò)攻擊維護數(shù)據(jù)完整性以及冗余的解決方案,并通過對比優(yōu)缺點,設(shè)計了基于區(qū)塊鏈技術(shù)的工業(yè)數(shù)據(jù)安全防御的架構(gòu)。使用區(qū)塊鏈作為數(shù)據(jù)存儲機制可以保證數(shù)據(jù)防篡改,提高數(shù)據(jù)的真實性。
[1]K. Stouffer, J. Falco, K. Scarfone, Guide to industrial control systems (ICS) security, in: NIST Special Publication, vol. 800,2011.
[2]S. Nakamoto,Bitcoin:A Peer-to-Peer Electronic Cash System,2010,https://bitcoin.org/bitcoin.pdf.
[3]王文宇,劉玉紅.基于數(shù)據(jù)二極管技術(shù)的百度木馬防御研究[J].信息安全與通信保密,2011.
[4]趙波,郭瑞.Hadoop框架核心技術(shù)在高校大數(shù)據(jù)教學(xué)系統(tǒng)中的應(yīng)用[J].無線互聯(lián)科技,2017.