余 鵬,王 勇,王 相,王 敏
1(上海電力大學 計算機科學與技術學院,上海 201306)
2(國家電網 上海市電力公司檢修公司,上海 200063)
IEC 60870-5-103 規約(以下統稱為103 規約)是國際電工委員會根據IEC 60870-5 系列基本標準而制定的,是用于繼電保護設備信息接口的配套標準[1].103 規約對變電站自動化系統、廠站自動化系統中的控制系統以及繼電保護設備或者間隔單元的信息傳輸做出了明確規范,可以用于配電網自動化主站和站所終端單元(Distribution Terminal Unit,DTU)之間的數據傳輸.由于103 規約主要考慮的是信息交換數據格式的統一,不同地區和不同的廠家有著不同的具體實現方式,有的采用串口通訊,有的采用以太網TCP/IP或者是采用以太網UDP/IP,甚至可以采用二者結合的方式[2].
103 規約在設計之初并沒有考慮到其安全性,使得攻擊者很容易利用規約的漏洞進行攻擊,攔截甚至篡改通信內容,一旦通信主站接收錯誤指令或者通信系統崩潰將會給電力系統帶來巨大損失.文章針對基于TCP/IP的以太網103 規約存在的明文傳輸、易受中間人攻擊等漏洞進行分析,并進一步搭建具體的實驗環境進行驗證,最后設計了一種數據安全傳輸機制,能很好地抵擋中間人攻擊以及明文傳輸存在的威脅,一定程度上可以增強該以太網103 規約的安全性.
本文做以下工作:
(1)針對103 規約進行了安全性分析,指明其存在的若干安全隱患.并采用PMA 通信協議分析及仿真軟件進行了仿真實驗,獲得了103 規約的通信報文,驗證了該規約的明文傳輸特性.
(2)搭建了真實的通信實驗環境,構建基于以太網103規約的DTU 設備與主站的硬件連接,通過軟硬件結合可以遙測到DTU 設備所采集的電壓電流等真實數據.
(3)使用中間人攻擊的方式對系統進行了安全性測試,可以成功對主站與DTU 設備通信的網關進行欺騙,證明該規約存在中間人攻擊隱患.
(4)為增加規約的通信安全性,提出了一種基于RSA非對稱密碼算法的雙向身份認證機制,并運用高級加密標準(Advanced Encryption Standard,AES)和安全散列算法1(Secure Hash Algorithm 1,SHA-1)保證傳輸數據的機密性和完整性,最后通過socket 編程進行實現.
針對103 規約的研究,國內外學者做了諸多研究.姬希娜等[3]針對國家電網以太網103 規約設計了一種可用于測試規約子站的工具,該工具既能作為TCP 連接的客戶端,還可實現LPCI 測試和基于測試 用例集的應用功能的自動測試,能有效提高用例錯誤檢測能力.張磊等[4]針對日漸復雜和受到限制的裝置人機接口,針對103 規約的功能不足,在其基礎上擴展了裝置菜單讀取、權限控制、裝置命令等功能,有效彌補了人機交互功能差,并在保護裝置中進行實際使用.李鵬等[5]為解決當前牽引變電站綜合自動化系統在高精度實時負荷錄波方面存在的諸多不足,提出一種基于103 規約擴展的實時負荷錄波設計實現方案,并在實際使用中獲得了很好的效果.韋宇等[6]采用103 規約結合UDP 報文和TCP 報文建立發電機原有的主保護裝置與上位機的通信,用于保護裝置的數據傳輸,對發電機實施計算機控制,經過改造后可實現少人值守甚至無人值班的目標.雷林緒等[7]針對輸電線路的故障診斷,為了在修復過程中提高故障定位的準確性,提出一種應用103 規約將行波故障測距裝置連接到繼電保護信息管理系統和變電站監控系統的設計方案,并介紹了實現的方法和思路.余夢澤等[8]對103 規約在110 kV 裂心式高壓并聯可控電抗器控制裝置中的一些應用進行介紹,并對可控電抗器的運行數據結構進行分析,最后給出在可控電抗器的控制裝置中的具體實現方法.劉亮亮等[9]肯定了以太網103 規約對提高繼保裝置效率和可靠性的作用,同時淺析了以太網103 規約在實際中的優點和不足,并給出一些以太網103 規約在實際使用中的建議.
綜上所述內容,目前國內外研究人員針對103 規約的研究大部分還是在實際應用中,很少關注到安全性方面.本文通過實驗環境的搭建,重點分析103 規約存在的安全隱患.
103規約的通信報文進行的是明文傳輸,未使用任何有效的加密措施和數字簽名機制,這使得該規約存在一定的安全風險.攻擊者可以通過嗅探方式很容易獲得并輕松解析出其中的數據.如果遭受到中間人攻擊,攻擊者很容易對截獲的報文進行篡改再轉發,將導致系統的錯誤決策從而造成經濟損失.
為驗證103 規約采用的是明文傳輸,我們使用PMA 通信協議及仿真軟件進行仿真實驗,這個軟件可以模擬主從站的通信過程.首先我們在軟件中選取相應的規約并分別對通信的主從站進行相關設置,配置完成后主從站就可以進行通信,如圖1所示.從圖中我們可以看到該規約確實采用明文傳輸,其通信安全存在隱患.

圖1 主從站通信報文界面
數據校驗是為了確保數據正確傳輸,檢驗數據是否完整的一種驗證操作.首先發送方用指定的算法對原始的通信數據進行計算得出一個校驗值,接收方接收數據后采用相同的算法計算出一個校驗值,然后對比接收到的校驗值和自己計算的檢驗值是否相同,如果校驗值相同,則數據是正確傳輸,沒有出現丟失情況.103 規約是采用簡單的幀校驗和的方式進行數據校驗的.對于固定幀長格式,幀校驗和為控制域與地址域算術和(不考慮溢出位,即256 模和);對于可變幀長,幀校驗和為地址域、控制域及應用服務數據單元算術和(不考慮溢出位,即256 模和).這種校驗和算法過于簡單,雖然可以一定程度保證數據傳輸過程中的正確性,但是一旦攻擊者篡改數據之后對校驗位進行重新計算,很容易可以達到欺騙的目的.
以太網103 規約大都是基于TCP/IP 協議進行設計的,在103 規約的基礎上使用TCP 協議進行數據傳輸,導致以太網103 規約缺乏身份認證機制.TCP 協議的可靠連接是進行以太網103 規約數據傳輸的前提,但是在進行TCP 連接的時候,只要知道目的IP 就可以發起請求從而確定目的MAC 地址.攻擊者可以利用這一漏洞,通過偽造ARP 數據包把自己偽裝成目的機,進而發起中間人攻擊截獲通信數據包,攻擊者甚至可以對通信數據進行惡意轉發和非法篡改操作.
本實驗系統采用的是某品牌的DTU 設備、路由器和終端電腦構成,系統硬件連接圖如圖2所示.
在終端電腦安裝DTU 配套軟件并進行相關配置,將終端電腦IP 地址設置為198.120.0.100,網關設置為198.120.0.2,子網掩碼為255.255.0.0.將DTU 設備IP地址配置為198.120.0.1,網關與子網掩碼的配置與終端電腦是一樣的.進行連接以后,使用wireshark 軟件可看到電腦終端與DTU 設備的通信數據包如圖3所示,從圖中可看出該以太網103 規約是基于TCP 協議的.

圖3 終端電腦與DTU 設備的通信數據包
中間人攻擊是一種歷史悠久的網絡入侵方式,并且由于它存在巨大的繼續開發潛力,使得它一直以來都是信息安全領域的重要隱患.中間人攻擊的具體攻擊方式有SMB 會話劫持、ARP 欺騙、DNS 欺詐等.簡單來說,中間人攻擊就是在通信雙方不知情的情況下,分別與通信的兩方進行單獨連接,攔截和獲取網絡通信數據,并可以對通信數據進行嗅探和篡改.
文章使用的是ARP 欺騙的方式實現中間人攻擊,本實驗的網絡配置情況如下:
攻擊者的IP 地址:198.120.0.101;MAC 地址:00-0c-29-b5-48-cc.
路由器的網關IP 地址:198.120.0.2;MAC 地址:48-0e-ec-0c-d7-b4.
目標主機的IP 地址:198.120.0.100.
網絡拓撲結構如圖4所示.
在進行攻擊實驗之前,在目標主機的cmd 窗口下使用arp-a 命令查看ARP 列表,如圖5所示.
本次ARP 攻擊測試實驗所采用的工具是Kali Linux 操作系統中自帶的ettercap 軟件進行.攻擊完成以后,再查看ARP 列表會發現網關的MAC 地址已經由原來的48-0e-ec-0c-d7-b4 變為攻擊者的MAC 地址00-0c-29-b5-48-cc,結果如圖6所示.這說明攻擊者實施ARP 欺騙成功,成功地在目標主機與DTU 設備中間充當了中間人.當實現ARP 欺騙后,監控端與DTU設備不能繼續通過網關建立正常的連接,從而導致系統的崩潰.

圖4 網絡拓撲連接圖

圖5 攻擊前目標主機的ARP 列表

圖6 攻擊后目標主機的ARP 列表
通過以上實驗,我們驗證了采用以太網103 規約的DTU 設備存在中間人攻擊的風險.現在的配電網終端設備通常都是在線自動注冊的,這給不法分子有可乘之機,部分非法用戶在系統重啟時自動連接到系統,所以在主站和配電終端之間進行數據傳輸之前驗證對方身份的合法性很有必要[10].針對冒充攻擊、中間人攻擊等威脅,文獻[11]設計了一種基于身份密碼體制的挑戰/應答式雙向身份認證協議,解決了使用數字證書的身份認證機制中的證書難管理、寬帶消耗大等缺點.文獻[12]針對傳統的公鑰基礎設施(Public Key Infrastructure,PKI)中證書頒發、撤銷以及難以實現交叉認證等缺陷,提出了基于智能合約的去中心化的身份認證機制,可以實現交叉認證以及滿足不同場景下的實際需求.身份認證是網絡安全的第一道防線,具有非常重要的作用.我們設計了一種基于RSA 密碼算法雙向身份認證機制,我們將雙向身份認證的Server 端和Client 端程序部署到相應的終端設備上.在進行電力數據傳輸之前首先驗證設備的合法性,從而保證接下來通信的可靠性.
(1)注冊階段
注冊階段是使Server 端和Client 端建立初始信任的過程,整個過程可以描述為Server 端和Client 端在離線過程中交互各自的公鑰,這種直接信任的過程也是最簡單直接的方式,具體注冊過程如圖7所示.

圖7 離線注冊過程
(2)雙向身份認證過程
符號說明:
Kpubc表示Client 端公鑰,Kpric表示Client 端私鑰.
Kpubs表示Server 端公鑰,Kpris表示Server 端私鑰.
EK()表示使用密鑰對括號內容進行加密.
DK()表示使用密鑰對括號內容進行解密.
雙向身份認證詳細步驟如下:
① Client 端生成隨機數N1,使用Server 端公鑰Kpubs對N1進行加密后發送給Server 端.
② Server 端收到后進行解密得N1并隨機生成N2,將N1與N2進行合并得N1||N2,使用Client 端的公鑰Kpubc進行加密得EKpubc(N1||N2),將密文數據發送給Client 端.
③ Client 端接到數據以后,首先用自己的私鑰Kpric對密文進行解密,查看第一個分量是否為N1,如果第一個分量為N1則Client 端對Server 端身份認證成功,否則身份認證失敗.
④ Client 端解密得到的第二個分量N2使用Server 端的公鑰Kpubs進行加密得EKpubs(N2)發送給Server 端.
⑤ Server 端對密文解密驗證明文是否為N2,如果明文是N2則Server 端對Client 端身份認證成功,也就是雙向身份認證成功,否則身份認證失敗.
雙向身份認證的流程圖如圖8所示.

圖8 雙向身份認證流程圖
103 規約主要用于傳輸繼電保護相關數據,對數據的完整性保護和來源可靠性具有較高要求[13],并且該規約采用的是明文傳輸容易被他人竊聽[14,15].于是我們采用通信雙方協商的規則來確定出后續用于數據加密的對稱密鑰[16],文章利用注冊階段互換的RSA 算法的公鑰和SHA-1 散列算法協商出數據加密密鑰key,協商具體過程如圖9所示.首先由Server 端生成AES 加密密鑰key 并利用對方的公鑰將其加密發送給Client端,Client 端解密后利用自身私鑰Kpric和SHA-1 散列算法對key 簽名Sign1(key)發送給Server 端,Server驗證簽名正確則用自己的私鑰Kpris和SHA-1 散列算法生成簽名Sign2(key)發送給Client,如果兩次簽名都驗簽都正確,則雙方成功協商出數據加密密鑰key.Server 端和Client 端雙方建立通信之前協商出會話密鑰的目的是為了保證前向安全,同時也起到了功能隔離的作用,在Client 端和Server 端雖然存在注冊密鑰,如果用注冊密鑰進行加密通信數據,一旦密鑰泄露將導致所有時間的會話內容泄露,恰當地使用會話密鑰可以有效避免這一點.

圖9 密鑰協商過程
雙方協商出密鑰key 后,發送方使用密鑰key 對數據進行AES 對稱加密,并同時利用SHA-1 散列算法和自身私鑰生成簽名.SHA-1是一種密碼散列函數,可以將一段明文以不可逆的方式將它轉換成一段固定長度的輸出也就是消息摘要,只要原文被篡改將導致消息摘要發生巨大變化.數字簽名是在消息摘要的基礎上利用私鑰進行再次加密從而形成數字簽名,驗簽者則需要利用對方的公鑰進行驗簽得到消息摘要,由于非法者不能擁有合法用戶的私鑰,所以這就能夠保證數據來源的真實性,同時也能驗證數據在傳輸過程中是否被篡改,具體的數字簽名過程如圖10所示.

圖10 數字簽名過程圖
發送方對原始數據進行處理,進行對稱加密得到密文并生成數字簽名,隨后將密文和數字簽名一起發送給接收方,數據發送流程圖如圖11所示.
數據接收過程流程圖如圖12所示,接收方收到密文塊和簽名塊.接收方使用對稱密鑰key 進行解密得到明文M 并使用與發送方相同的SHA-1 散列算法進行計算消息摘要,將計算的消息摘要與運用發送方公鑰進行驗簽得到消息摘要進行對比,如果一致則認為消息是安全的未被篡改,同時也能確定數據發送方的身份真實性,否則數據通道存在不安全因素.

圖11 數據發送流程圖

圖12 數據接收流程圖
本實驗以socket為基礎設計了能夠進行雙向身份認證以及數據加密和簽名傳輸的Server 端和Client 端的Python3 程序,我們可以將相應的程序部署在相應的終端設備上.通信雙方按照我們設定的規則進行數據的交換就可以保證系統通信的安全性,使得攻擊者無法假冒身份進行接入系統,同時所傳輸數據的保密性和完整性得到很好的保證,能夠及時發現數據傳輸過程中導致的誤差,實驗的網絡環境配置如下:
Client IP:192.168.1.103.
Server IP:192.168.1.102.
網關IP:192.168.1.1.
非法Client IP:192.168.1.105.
仿真實驗網絡拓撲結構如圖13所示.

圖13 仿真實驗網絡拓撲結構
(1)雙向身份認證仿真實驗
當且僅當Client 端和Server 端互相通過身份認證,才可以建立連接進行數據的傳輸,一旦某一方對另外一方身份認證不通過則連接失敗,通信斷開無法進行后續的數據傳輸通信.Server 端與Client 端身份認證程序運行結果如圖14、圖15所示,當兩端都認證成功才算是雙向身份認證完成.

圖14 Server 端對Client 認證結果

圖15 Client 端對Server 端認證結果
當某個非法Client 端試圖與Server 端進行連接,即使它獲得合法Client 端的公鑰但由于沒有匹配的私鑰進行解密,所以無法進行假冒身份接入系統,非法Client 端試圖與Server 端連接結果如圖16所示.

圖16 非法Client 端對Server 端身份認證結果
(2)數據加密和簽名傳輸仿真
為了保證數據傳輸過程中的機密性和完整性,我們采用對稱加密和數字簽名結合的方式進行保證數據的傳輸安全.使用文章的傳輸機制后攻擊者就無法獲知具體的內容同時也能夠及時發現數據在傳輸過程中是否被篡改或者出現傳輸錯誤,具體的報文加密和簽名以PMA 軟件仿真得到的報文為例進行實驗分析,對召喚用戶2 級數據加密和簽名的程序運行結果如圖17、圖18所示.

圖17 數據發送端運行結果

圖18 數據接收端運行結果
報文經過AES 加密算法前后數據的對比如表1所示,AES 算法密鑰設為1234567890123456.

表1 AES 加密前后數據的對比
文章首先對103 規約進行了安全性分析,分析其可能存在的安全威脅.針對采用以太網103 規約進行數據通信的DTU 設備進行ARP 攻擊并成功.如果實際情況中發生這種事件,將給配電網自動化系統帶來嚴重威脅.針對中間人攻擊,本文設計了一個雙向身份認證機制對設備的合法性進行辨認,并使用對稱加密手段和數字簽名技術對通信數據進行機密性和完整性保護.最后通過仿真實驗驗證了該方法的有效性.