最新消息:图 床

如何使用 KittyFuzzer 結合 ISF 中的工控協議組件對工控協議進行 Fuzz

COOL IAM 255浏览 0评论

作者:小黑豬(朱文哲)@銀河安全實驗室
公眾號:銀河安全實驗室

之前在《開源工控安全研究框架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

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x