楊梅強,胡紹謙,尤小明,周曉飛,楊 越
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
隨著通信環(huán)境的日益復雜,電力系統(tǒng)自動化領域中數(shù)據(jù)交互日益頻繁,對控制系統(tǒng)和數(shù)據(jù)網(wǎng)絡的安全性、可靠性提出了嚴峻挑戰(zhàn)[1]。傳統(tǒng)的主子站通信協(xié)議如IEC101/IEC104、DNP3 也面臨著通信安全的風險[2-4],IEC62351 標準的頒布為這些協(xié)議實現(xiàn)通信安全提供了規(guī)范上的支撐[5]。近年來,國內外針對這些協(xié)議的通信安全也提出了多種解決方案[6-10],但方案大多基于網(wǎng)絡通信加密或結合身份認證來實現(xiàn)。實際上,這些協(xié)議多年前已經(jīng)頒布了基于通信協(xié)議本身的安全認證協(xié)議擴展[11-12],但并未出現(xiàn)積極響應通信協(xié)議安全實施和開展相關互操作性測試的狀況。
IEC62351 通信協(xié)議安全采用應用層的“挑戰(zhàn)-應答”機制[13],因而實施通信協(xié)議安全需要基于主子站之間應用層數(shù)據(jù)的交互。IEC101/IEC104 協(xié)議盡管存在較為完善的鏈路層確認機制,但子站響應的應用層數(shù)據(jù)卻沒有相應的應用層確認機制,其應用層數(shù)據(jù)交互的關聯(lián)性較弱。DNP3協(xié)議的應用層存在“查詢/應答”、“響應/確認”機制,應用層數(shù)據(jù)交互的關聯(lián)性強,因而DNP3協(xié)議在實施通信協(xié)議安全存在一定的便利性。
DNP3 作為一種通信協(xié)議在海外電力領域有著廣泛的應用,其不僅應用于主子站通信,也應用于變電站內部通信。近幾年,海外電力領域關于DNP3 主子站通信安全的呼聲逐漸加大,但實際的工程實施層案例很少[14]。
基于上述兩點,本文嘗試通過DNP3 協(xié)議來探索實現(xiàn)通信協(xié)議的安全功能。本文闡述了DNP3子站的安全認證功能的實現(xiàn)方法,并基于國際權威認證檢測機構的認證測試情況,總結了DNP3 安全認證功能實現(xiàn)的一些細節(jié)。這些實現(xiàn)細節(jié)對以后實施IEC101/IEC104的通信協(xié)議安全也具備很好的參考價值。
早在2012年,DNP3發(fā)布的規(guī)范就已經(jīng)推出了V5版安全認證的擴展規(guī)范,其按功能及實現(xiàn)可以分為兩個部分,傳輸層安全和應用層安全。其中,傳輸層安全基于TCP/IP 通信,遵循了《IEC 62351-3:2023 Power systems management and associated information exchange-data and communications security-Part 3: Communication network and system security-profiles including TCP/IP》。應用層安全基于對DNP3應用層功能碼、數(shù)據(jù)對象和處理流程的擴 展,遵 循 了《IEC 62351-5:2023 Power systems management and associated information exchange-data and communications security-Part 5: Security for IEC 60870-5 and derivatives》,適用于各種通信方式。DNP3安全認證功能的架構如圖1所示。
圖1 DNP3安全認證功能架構Fig.1 DNP3 secure authentication function architecture
DNP3 只有采用TCP/IP 通信時,才能實施傳輸層安全,關于傳輸層安全在電力系統(tǒng)中的應用和改進,已經(jīng)有很多文獻進行過探討[15-16]。DNP3 實施傳輸層安全與其他協(xié)議并無太大的區(qū)別,可以采用開放的TLS接口,實施傳輸層安全不影響DNP3的數(shù)據(jù)鏈路層、傳輸層和應用層的處理。
DNP3 應用層遵循了IEC62351-5 的要求,并根據(jù)自身的特點,擴展定義了相應的功能碼和數(shù)據(jù)對象,適用于各種介質進行通信方式,例如串口、UDP、TCP等。
DNP3應用層安全,按功能和作用主要可以分為以下幾個部分[17]。
1.2.1 數(shù)據(jù)安全驗證
數(shù)據(jù)安全驗證的實質就是接收方對收到的ASDU的身份和數(shù)據(jù)完整性進行驗證的過程,是應用層安全的核心。
IEC62351-5 采用“挑戰(zhàn)-應答”(Challenge-Reply)機制對數(shù)據(jù)進行安全驗證,即接收方對收到的ASDU發(fā)起驗證挑戰(zhàn)(Challenge);發(fā)送方根據(jù)已發(fā)送的ASDU 和驗證挑戰(zhàn)信息生成消息認證碼(MAC:Message Authentication Code)并進行驗證應答(Reply);接收方校驗消息認證碼是否有效,有效則處理ASDU,否則丟棄ASDU。
為了提高通信效率,主子站對ASDU進行了約定,區(qū)分為關鍵ASDU 和非關鍵ASDU。接收方只對關鍵ASDU 發(fā)起驗證挑戰(zhàn)。為了簡化流程,發(fā)送方可以采用主動驗證模式(Aggressive)的同時發(fā)送ASDU和消息認證碼,接收方收到ASDU 和消息認證碼即可校驗ASDU的有效性。通信時,主子站都可以對關鍵ASDU發(fā)起驗證挑戰(zhàn)。安全驗證的流程如圖2和圖3所示。
圖2 挑戰(zhàn)應答驗證流程Fig.2 Flow of challenging response verification
圖3 主動驗證模式流程Fig.3 Flow of using aggressive mode
1.2.2 會話密鑰協(xié)商
在數(shù)據(jù)安全驗證過程中,驗證的雙方都需要利用會話密鑰(Session Key)來計算消息認證碼,以達到驗證和保密的目的。為了保證通信雙方會話密鑰一致,在通信的初始化階段主站會發(fā)起會話密鑰握手協(xié)商;另外為了防止密鑰泄露產生安全問題,在通信過程中,主站會周期向子站發(fā)起會話密鑰協(xié)商。會話密鑰協(xié)商過程如圖4所示。
圖4 會話密鑰協(xié)商流程Fig.4 Session key initialization and periodic update
1.2.3 用戶管理及更新密鑰協(xié)商
數(shù)據(jù)安全驗證和會話密鑰協(xié)商都是基于相應的用戶。如果實施DNP3應用層安全時不支持用戶管理及更新密鑰(Update Key)協(xié)商,可以采用默認的用戶“Common”和預配置的更新密鑰;如果支持,則在通信初始化階段需要進行用戶管理及更新密鑰協(xié)商流程處理,如圖5所示。
圖5 用戶管理及更新密鑰協(xié)商流程Fig.5 Flow of user status change and key change update
1.2.4 安全統(tǒng)計數(shù)據(jù)
主子站實施DNP3 應用層安全時,需要對安全認證過程中的事件進行統(tǒng)計,以監(jiān)視當前的運行狀態(tài);如果這些統(tǒng)計數(shù)據(jù)開始頻繁超過事件報告閾值,表明該站正在遭受某些類型的安全攻擊。子站可以將安全統(tǒng)計數(shù)據(jù)上送給主站,以便于主站監(jiān)視子站是否遭受到了安全攻擊。安全統(tǒng)計數(shù)據(jù)和前面3個部分一起構成了DNP3應用層安全。
DNP3 安全認證功能的實現(xiàn),主要依賴于兩點:加密算法的支持和安全認證流程的實現(xiàn)。關于第一點加密算法本文不做闡述,只從子站的角度探討安全認證流程的實現(xiàn)方法及細節(jié)。
如前面所述,DNP3傳輸層安全與DNP3協(xié)議的應用數(shù)據(jù)處理是完全獨立,在實施時僅需要在TLS 握手協(xié)商、報文接收和報文發(fā)送3個方面做兼容處理,主要流程如下(流程如圖6和圖7所示):
圖6 DNP3主子站TLS握手示意圖Fig.6 TLS handshake diagram of DNP3 master-sub station
圖7 DNP3主子站調用TLS收發(fā)數(shù)據(jù)Fig.7 DNP3 master-sub station invoking TLS request and response data
1) 主子站建立TCP 連接,調用TLS 接口進行初始化握手協(xié)商;
2) 調用TLS 接口接收數(shù)據(jù),得到DNP3 協(xié)議的原始鏈路數(shù)據(jù);
3) 進行DNP3的請求處理,依次進入鏈路層、傳輸層、應用層流程,處理應用請求;
4) 進行DNP3 的響應處理,將應用響應進行應用層、傳輸層、鏈路層組幀和封裝,準備發(fā)送;
5) 調用TLS接口進行數(shù)據(jù)發(fā)送。
僅實施傳輸層安全時,不影響DNP3協(xié)議的鏈路層、傳輸層、應用層處理流程,對DNP3整體的實現(xiàn)影響較小,實施時相對簡單,但其僅僅適用于TCP/IP通信方式[18]。
DNP3 應用層安全通過擴充功能碼和數(shù)據(jù)對象來實現(xiàn),需要對DNP3 原有的處理流程進行調整,其中,會話密鑰協(xié)商、用戶管理及更新密鑰協(xié)商、安全統(tǒng)計數(shù)據(jù)對DNP3 原有的處理流程影響較小,而數(shù)據(jù)安全驗證過程對原有的處理流程影響較大。本文在實現(xiàn)時將應用層安全按如下方式進行處理。
2.2.1 應用層處理請求數(shù)據(jù)流程
實現(xiàn)常規(guī)DNP3 功能時,子站往往根據(jù)應用層功能碼進行讀、寫、遙控等請求的處理和響應,而當實施DNP3安全認證功能后,子站會對讀、寫、遙控等請求進行安全驗證,驗證通過后才進行響應;而安全認證請求和常規(guī)的讀、寫、遙控都屬于應用層請求,打亂了DNP3原本清晰的分層處理邏輯,導致應用層請求的處理存在嵌套處理的困擾。
為了避免這種嵌套對原有處理流程的大幅調整,可以將常規(guī)應用層請求之前的安全認證處理過程作為介于DNP3傳輸層和應用層之間虛擬的安全分層來考慮。
如圖8 所示,該虛擬安全分層可以對原始的應用層請求進行區(qū)分處理,能很好地解決應用層請求的邏輯嵌套。同時,從協(xié)議分層處理的角度來看,構造虛擬安全分層后,可以用該分層的邏輯接收緩存來承載數(shù)據(jù)安全驗證過程中的關鍵ASDU 數(shù)據(jù),可以有效降低對原來的傳輸層和應用層處理流程的影響。
2.2.2 應用層發(fā)送響應數(shù)據(jù)流程
實施應用層安全對應用層響應的處理流程也會產生較大影響,主要體現(xiàn)在以下幾個方面:
1) 應用層響應的安全驗證處理。在實施安全認證功能前,應用層響應會直接進入到傳輸層響應處理流程,而實施后,應用層響應需要先進行安全驗證處理(如增加主動驗證模式數(shù)據(jù)對象、增加驗證挑戰(zhàn)信息對象等)后才能進入到傳輸層處理流程;
2) 應用層數(shù)據(jù)發(fā)送順序的調整。在實施安全認證功能之前,DNP3子站發(fā)送應用層響應遵循先進先出的原則,而實施后,DNP3 子站需要優(yōu)先對應用層安全驗證請求進行處理和響應;
3) 應用層響應緩存清除策略的調整。在實施安全認證功能之前,DNP3子站應用層響應的緩存在發(fā)送后或收到應用層確認即可清除,而實施后,緩存的清除需要考慮主站是否進行驗證挑戰(zhàn)等因素。
為了應對這些情況,可以將應用層響應和傳輸層響應之間的安全驗證處理納入到虛擬安全分層來考慮。其中,將流程1)封裝為“應用層響應安全驗證處理”子邏輯(如圖9所示),構成虛擬安全分層的響應處理。
圖9 應用層響應安全驗證處理流程Fig.9 Processing flow of application layer response to security verification
進行虛擬安全分層后,“應用層安全驗證響應”在層級上要低于應用層響應,理應優(yōu)先進行響應處理,能合理地解決上述流程2)導致的問題;而虛擬安全分層對應的邏輯發(fā)送緩存也能很好地處理上述流程3)中應用緩存的清除和配合問題。
將應用層接收處理和發(fā)送處理的虛擬安全分層邏輯整合,可以得到完整的虛擬安全分層,其邏輯如圖10所示。
圖10 虛擬安全分層邏輯示意圖Fig.10 Hierarchical logic diagram of virtual security
虛擬安全分層處理有效減少了對原有應用層和傳輸層的請求/響應處理流程的調整,保持了原有分層的獨立性,這一點在功能實現(xiàn)和一致性測試中得到了驗證。
實現(xiàn)DNP3安全認證功能后,為了便于工程實施,進行了DNP3安全認證功能的一致性測試。一致性測試的內容包含以下幾個部分:
1) 驗證請求測試。測試發(fā)起驗證請求的一方處理流程是否滿足規(guī)范要求,包括根據(jù)會話密鑰正確對ASDU 發(fā)起驗證請求并驗證響應、處理主動驗證模式的響應等。
2) 驗證響應測試。測試響應驗證請求的一方處理流程是否滿足規(guī)范要求,包括根據(jù)會話密鑰正確處理驗證請求并進行響應、正確地發(fā)送主動驗證模式的響應等。
3) 子站功能測試。測試子站特定功能是否滿足規(guī)范要求,包括正確處理會話密鑰協(xié)商請求并進行響應、正確處理用戶管理及更新密鑰協(xié)商請求并進行響應,正確根據(jù)用戶角色處理應用層請求等。
4) 特定功能測試。測試子站是否滿足傳輸層安全的要求等。
測試內容涵蓋了應用層安全[19]和傳輸層安全的各項要求。
DNP3子站實施安全認證功能,對通信流量和計算耗時會產生影響。由于已經(jīng)有文章對傳輸層安全的這些影響做過分析[20-21],本文的分析只針對DNP3 應用層安全。在DNP3應用層安全中,會話密鑰協(xié)商、用戶管理和更新密鑰協(xié)商流程出現(xiàn)的頻率較低,對整體通信的影響不大,本文的分析主要集中在數(shù)據(jù)安全驗證環(huán)節(jié)。
在安全驗證環(huán)節(jié),MAC 算法一般采用HMAC[22-24]算法,MAC算法和安全驗證模式的選擇會對通信流量產生直接影響。采用挑戰(zhàn)/應答模式,安全驗證流程會增加88~98字節(jié)的通信流量;采用主動驗證模式,會增加24~36 字 節(jié) 的 通 信 流 量[25-26]。具 體 情 況 如 表1所示。
表1 MAC算法和驗證模式對流量增加的影響Table 1 Impact of MAC algorithm and authentication mode on traffic increment
DNP3 中子站響應只有0x81(請求響應)、0x82(非請求響應)、0x83(安全認證響應)3 個功能碼,如果主站對子站響應進行安全驗證,則功能碼為0x81、0x82的響應都會進行安全驗證??紤]DNP3 實際應用場景,主站是在進行多次CLASS1/2/3事件查詢后才進行一次CLASS0 總查詢或狀態(tài)數(shù)據(jù)查詢,當事件出現(xiàn)的頻率較低時(無事件數(shù)據(jù)時,子站響應空數(shù)據(jù)幀的長度為17 個字節(jié)),安全驗證流程導致流量增量的比例會比較明顯。
安全驗證環(huán)節(jié)的計算耗時主要體現(xiàn)在驗證挑戰(zhàn)時的Challenge 信息生成和MAC 計算。為了得到相對準確的數(shù)據(jù),在認證測試過程中,針對性地修改程序,對Challenge 信息生成和MAC 計算的過程進行連續(xù)性測試。運行測試程序的CPU 為雙核800 MHz,內存為2 G,程序按單線程運行,得到數(shù)據(jù)如表2和表3所示。
表2 生成Challenge信息耗時Table 2 Time-consuming of generating challenge information
表3 MAC校驗計算耗時Table 3 Time-consuming of MAC check calculation
從表2 可以看出,生成Challenge 消息的耗時平均一次約為320 μs,實際測試中,生成Challenge 消息的耗時主要耗費在調用接口生成隨機數(shù)上。
表3 列出了兩種計算MAC 算法的耗時,平均下來采用HMAC-SHA-256 進行一次MAC 計算耗時約為55 μs,而采用HMAC-SHA-1 進行一次MAC 計算耗時約為26 μs。
從以上測試數(shù)據(jù)可以看出,實施應用層安全后,通信流量增加產生的影響會比計算耗時增加的影響更加顯著。
在測試過程中,發(fā)現(xiàn)安全認證功能在工程應用中可能存在以下問題:
1) 安全認證過程中CSQ、KSQ 等序號的校驗及失步風險。以CSQ 序號為例,挑戰(zhàn)方和應答方都會校驗CSQ是否連續(xù),如果出現(xiàn)CSQ不匹配,則會導致通信出現(xiàn)問題。但DNP3的安全認證規(guī)范并未明確CSQ序號失步后如何再同步。在實際工程實施過程中,主子站需要對序號失步問題進行防范。
2) 對通信問題定位的影響。實際工程中通信問題涉及到很多方面,如通道延時、誤碼、主子站配合等;定位通信問題往往會借助報文和日志信息。實施安全認證功能后,對通信問題的分析、定位和處理會變得更加復雜。
本文闡述了DNP3 實施安全認證功能的實施細節(jié),在變電站通信終端上實現(xiàn)了DNP3安全認證功能。對測試流程和數(shù)據(jù)進行了整理和歸納,分析了測試過程中遇到的問題以及產生的原因,對DNP3 安全認證功能的實施和應用有重要意義。本文的實現(xiàn)方法和技術細節(jié)對實施IEC101/IEC104 安全認證功能也具備很好的參考價值。