作者:小黑豬(朱文哲)@銀河安全實驗室
公眾號:銀河安全實驗室
之前在《開源工控安全研究框架ISF介紹》這篇文章中,提到了可以利用ISF中的工控協議模塊對設備進行進行Fuzz測試,這篇文章將介紹如何具體的使用KittyFuzzer框架來實現。
由於文章主要描述的是如何利用Kitty框架結合ISF中的工控協議組件進行Fuzz,因此不會對Kitty框架本身進行過多的說明,如果對Kitty框架的參數及如何使用存在困惑的可以參考一下Kitty的官方文檔
1. 工具介紹
1.1 kittyFuzzer
Kitty是一個用python編寫的模塊化及可擴展的開源fuzzing框架,其設計靈感來自OpenRCE的Sulley和Michael Eddington的Peach Fuzzer(現在是Deja Vu Security的)。
Kitty的設計之初是用於幫助我們fuzz一些非常規的目標(例如一些複雜的非TCP/IP通訊的協議)時不用每次都重複的實現一些基礎的功能。因此Kitty被設計成一個通用的抽象的框架,Kitty本身包含了我們所能想到的每個Fuzz測試過程中的公共功能,並且允許用戶根據他們特定的目標輕鬆的進行擴展。
1.2 ISF
ISF是我之前從事工業控制設備漏洞挖掘工作時積累的工控協議和POC代碼等內容進行整合后的產物,後來將其中的一部分內容進行了開源,項目的地址是https://github.com/dark-lbp/isf。
ISF,是一款基於python編寫的類似[Metasploit]的工控漏洞利用框架。
ISF基於開源項目[routersploit]修改而來,在routersploit基礎框架上針對工控設備增加了工控協議的客戶端、工控協議模塊等功能。
2. Fuzz Modbus協議
Modbus協議是在工業控制領域使用的非常廣泛的一個基礎協議,其協議格式也較為簡單,沒有複雜的協議狀態機。下面會對如何利將Kitty框架與ISF框架中的工控協議組件相結合對Modbus-TCP協議執行fuzzing測試進行說明。
2.1. 導入需要的python庫
在進行Fuzzing測試之前我們需要使用Kitty框架來構造測試用例,首先我們需要導入一下基礎的庫。
# 從Kitty中導入Template等一系列基礎組件 from kitty.model import Template from kitty.interfaces import WebInterface from kitty.fuzzers import ServerFuzzer from kitty.model import GraphModel # 從Kitty擴展庫katnip中導入TcpTarget用於Fuzz TCP目標 from katnip.targets.tcp import TcpTarget # 從Kitty擴展庫katnip中導入scapy模塊用於直接使用Scapy的數據結構 from katnip.model.low_level.scapy import * # 從ISF中導入modbus_tcp相關的數據包結構 from icssploit.protocols.modbus_tcp import *
2.2. 定義基礎參數及數據結構
在導入了需要的模塊后,還需要對目標Fuzzing測試對象的IP地址,通訊端口等一些基礎參數進行設置。
# 定義目標Fuzz對象的IP地址 TARGET_IP = '172.16.22.131' # 定義目標Fuzz對象的通訊端口 TARGET_PORT = 502 # 定義隨機數種子 RANDSEED = int(RandShort())
在Modbus-TCP Fuzzing的例子中,我們將使用Modbus-TCP協議中的ReadCoilsRequest請求進行測試,下圖是一個典型的Modbus Read Coils請求數據包。
转载请注明:IAMCOOL » 如何使用 KittyFuzzer 結合 ISF 中的工控協議組件對工控協議進行 Fuzz