傳統的DNP3安全的脆弱性體現在:
缺少認證:認證的目的是保證收到的信息來自合法的用戶,未認證用戶設備發送的命令不會被執行。在DNP3的通信過程中,沒有任何認證方面的相關定義,攻擊者只要找到一個合法地址即可使用功能碼建立DNP3通信會話,從而擾亂控制過程。
缺少授權:授權保證不同的特權操作由擁有不同權限的認證用戶來完成,這樣可以降低誤操作與內部攻擊的概率。目前DNP3沒有基于角色的訪問控制機制,也沒有對用戶進行分類,沒有對用戶的權限進行劃分,這樣任意用戶可以執行任意功能。
缺乏加密:加密可以保證通信過程中雙方的信息不被第三方非法獲取。在DNP3協議的通信過程中,地址和命令全部采用明文傳輸,因此數據可以很容易地被攻擊者捕獲和解析,為攻擊者提供便利。
協議復雜性:除缺乏認證、授權和加密等安全防護機制之外,協議的相對復雜性也是DNP3中存在的安全問題的主要根源。
設計安全問題:應用開發者在使用DNP3設計應用功能的同時應該考慮其功能實現之后導致的安全問題。保證DNP3使用的設計安全性能夠處理應用中會出現的各種異常響應以及非法操作等問題,充分保障應用程序的健壯性。
功能碼濫用:功能碼是DNP3中一項重要的內容,幾乎所有通信都涉及功能碼。功能碼濫用也是導致網絡異常的一個主要因素。例如需要引起IDS/IPS開發人員高度關注的一些DNP3消息:關閉主動上送;在DNP3端口上運行非DNP3通信;長時間多重主動上送(響應風暴);授權客戶冷重啟;未授權客戶冷重啟;停止應用;熱重啟;重新初始化數據對象;重新初始化應用;冰凍并清除可能重要的狀態信息。
TCP/IP安全問題:目前DNP3可以在通用計算機和通用操作系統上實現,運行于TCP/IP協議之上,這樣TCP/IP協議自身的安全問題就會不可避免地影響系統網絡安全。非法網絡數據獲取中間人、拒絕服務、IP欺騙等互聯網中常用的攻擊方法都會威脅DNP3系統的安全。