[發明專利]一種工業控制設備固件的模糊測試方法有效
| 申請號: | 202010512591.6 | 申請日: | 2020-06-08 |
| 公開(公告)號: | CN111830928B | 公開(公告)日: | 2021-07-30 |
| 發明(設計)人: | 徐向華;邵帥;朱佳超 | 申請(專利權)人: | 杭州電子科技大學 |
| 主分類號: | G05B23/02 | 分類號: | G05B23/02 |
| 代理公司: | 杭州君度專利代理事務所(特殊普通合伙) 33240 | 代理人: | 朱月芬 |
| 地址: | 310018 浙*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 工業 控制 設備 模糊 測試 方法 | ||
1.一種工業控制設備固件的模糊測試方法,其特征在于具體包括四個階段:固件下載、可執行程序提取、程序模擬運行、模糊測試;
所述的固件下載階段:對每個制造商得鏡像下載地址分別進行解析得到對應得URL,將下載的固件文件保存于目錄;
所述的可執行程序提取階段:創建工作目錄,對固件進行遞歸的提取操作,提出可執行二進制程序和相關資源文件;
所述的程序模擬運行階段:創建磁盤鏡像,構建對應指令集架構的VxWorks系統和板級支持包并寫入磁盤鏡像;創建網橋綁定IP地址,最后通過QEMU模擬器運行VxWorks系統;
所述的模糊測試階段:根據被測二進制可執行文件特征值,編寫對應測試用例腳本,對模擬運行的VxWorks系統進行模糊測試;
所述固件下載階段包括以下操作:
1-1.創建固件保存目錄,用于存放下載成功的固件;
1-2.收集各個制造商各個型號的工控設備網站和FTP網站的地址保存至爬取列表;
1-3.對爬取列表每一個地址編寫頁面解析邏輯,提取每一個固件文件的下載地址,保存至固件下載地址集合;
1-4.使用Python爬蟲框架Scrapy從固件下載地址集合中拿出一個待下載固件地址,Scrapy的調度器驅動下載器下載固件文件,保存至固件保存目錄;重復步驟1-4直至固件下載地址集合為空,完成下載地址集合中的所有固件;
所述可執行程序提取階段對固件進行遞歸提取,具體包含以下步驟:
2-1.創建工作目錄,用于存放提取二進制可執行文件與執行所需資源;
2-2.對固件保存目錄中的每一個固件文件進行可執行程序提取操作,具體包括以下步驟:
2-2-1.通過Linux系統調用mmap將固件加載至內存,將用于定位當前識別固件內容的偏移量設為0;
2-2-2.在開源庫libmagic的基礎上,定義工控設備固件特征值,然后在當前字節偏移量處調用開源庫libmagic,識別固件內容,得到當前文件類型、長度;偏移量單位為字節;
當文件類型為壓縮文件時,使用tar工具解壓縮文件,然后對解壓后的文件逐一遞歸的進行步驟2-2提取文件;
當文件類型為目錄元文件時,解析得到目錄的文件數量、目錄名以及當前目錄路徑,在工作目錄創建對應目錄,遞歸的對對應目錄中包含的文件進行步驟2-2提取操作;
當文件類型為二進制可執行程序時,使用Linux系統的file工具閱讀文件的可執行可鏈接文件格式獲得該文件指令集架構、字節序;將可執行文件保存至工作目錄;
所述程序模擬運行階段,具體包含以下步驟:
3-1.使用WindRiver公司的Workbench工具創建指定指令集架構、字節序、寄存器的VxWorks系統內核文件和VxWorks BSP文件;
3-2.通過QEMU-IMG程序創建模擬運行所需的磁盤鏡像,為了將VxWorks系統鏡像寫入,需要將磁盤鏡像格式為DOS文件系統,并將BSP與VxWorks系統內核文件寫入DOS文件系統中,同時BSP文件作為啟動項;
3-3.創建網橋并分配ip地址,用于模擬器與外界網絡通信;
3-4.根據可執行文件指定指令集架構選擇對應的QEMU模擬器版本;通過模擬器以磁盤鏡像為參數啟動VxWorks系統虛擬機;
3-5.通過FTP協議,將工作目錄中二進制可執行文件、資源文件夾寫入虛擬機,然后執行二進制可執行文件等待模糊測試。
2.根據權利要求1所述一種工業控制設備固件的模糊測試方法,其特征在于:所述模糊測試階段,具體包含以下步驟:
4-1.根據二進制可執行文件特征值,查詢特征值與網絡服務的映射表得到文件提供的網絡服務類型,通過網絡服務類型進行針對性的協議模糊測試;具體包含以下步驟:
4-1-1.通過Linux系統的readelf工具讀取二進制可執行文件的符號表信息,通過Linux系統的strings工具讀取二進制可執行文件的ASCII編碼字符串;
4-1-2.遍歷特征值與網絡服務的映射表,查詢每個條目的鍵(key)是否存在于步驟4-1-1中獲得的符號表信息和字符串中;其中映射表中每個條目的鍵(key)由函數符號和關鍵字符串組成,每個條目的值(value)為對應網絡服務類型名稱;
如果映射表中沒有匹配的條目時,說明當前測試的二進制可執行文件需要使用人工方式對二進制可執行文件反編譯后獲得該二進制可執行文件執行錯誤時顯示的錯誤信息字符串、固件對應型號的字符串以及常見函數符號,并在映射表中建立對應條目,更新映射表;進入步驟4-1-2,繼續匹配;
如果映射表中獲得匹配的條目,獲得條目的網絡服務類型,得到二進制可執行文件提供的網絡服務類型名稱;
4-2.編寫測試用例腳本文件;
4-2-1.使用Python語言描述各種類型的協議字段,由這些協議字段組成TCP/IP參考模型中每一層網絡協議;每個協議字段由字段長度、字段默認值、字段名稱組成;
4-2-2.在測試用例腳本文件中添加被測二進制可執行文件的網絡服務的協議字段描述;在測試用例腳本文件執行時,根據協議字段描述生成協議數據;部分需要測試的協議字段使用模糊函數代替并且設置該協議字段的模糊化次數;模糊函數使用特殊字符、隨機值、超長字符串構造協議字段值,這樣的測試用例腳本文件執行時通過調用模糊函數生成模糊化的協議報文;
4-2-3.在測試用例腳本文件中添加測試目標IP地址和端口號;測試目標IP為模擬器網橋的IP地址,端口號與二進制可執行文件的網絡服務類型相關;同時測試用例腳本文件與網絡服務類型相關,Web服務模糊測試主要測試HTTP協議的實現;
4-3.執行測試用例腳本;
在每一次協議報文發送前通過Linux的Socket連接模擬器;
如果連接失敗,說明當前VxWorks系統中被測二進制可執行文件已經崩潰,將上一次測試用例保存至工作目錄,然后重新運行模擬器,由于被測二進制可執行文件已經寫入磁盤鏡像,因此可以直接進行模糊測試,即重新執行測試用例腳本;
如果連接成功,通過執行測試用例腳本不斷生成模糊化協議報文,使用Linux的Socket連接發送至QEMU模擬器,由VxWorks系統中運行的被測二進制可執行文件接收模糊化協議報文,其中VxWorks系統在QEMU模擬器運行;
如果當前測試次數超過或等于測試用例腳本中模糊化字段的模糊化次數,那么測試結束;否則當前測試次數加一,然后繼續在每一次測試報文發送前通過Linux的Socket連接模擬器,繼續模糊測試。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于杭州電子科技大學,未經杭州電子科技大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010512591.6/1.html,轉載請聲明來源鉆瓜專利網。





