藏在Modbus‘写寄存器’请求里的秘密用Pythonpyshark复现CISCN2023流量分析当生产网络流量中出现异常数据包时传统的手动分析方式往往效率低下。本文将带你用Pythonpyshark构建自动化分析流水线从海量Modbus协议数据中快速定位可疑通信模式并通过多级解码技术还原被隐藏的关键信息。1. 理解Modbus协议与异常流量特征Modbus协议作为工业控制系统的通用通信标准其功能码定义了各类操作类型。其中功能码6写单个寄存器本应用于设备参数配置但攻击者常利用其数据传输特性进行隐蔽通信。我们需要特别关注以下异常特征非常规功能码使用频率正常生产环境中读取操作功能码3/4应占主导频繁出现写操作需警惕数据字段异常长度标准寄存器写入应为2字节超长数据可能包含隐藏信息非常规通信模式非工控设备间的Modbus通信、非标准端口通信等# 基础流量统计代码示例 import pyshark from collections import defaultdict def analyze_modbus_patterns(pcap_path): cap pyshark.FileCapture(pcap_path) stats defaultdict(int) for pkt in cap: if hasattr(pkt, modbus): func_code int(pkt.modbus.func_code) stats[func_code] 1 return dict(stats)2. 构建自动化分析流水线2.1 数据包筛选与提取针对功能码6的数据包我们需要提取关键字段进行深度分析。以下代码展示如何自动提取所有写寄存器请求的数据字段def extract_write_register_data(pcap_path): cap pyshark.FileCapture(pcap_path) suspicious_data [] for pkt in cap: if hasattr(pkt, modbus) and int(pkt.modbus.func_code) 6: if hasattr(pkt.modbus, data): hex_data pkt.modbus.data.replace(:, ) suspicious_data.append(hex_data) return suspicious_data2.2 数据预处理与拼接获取原始数据后需要进行规范化处理去除分隔符如Wireshark默认显示的冒号验证十六进制格式有效性按数据包顺序拼接完整载荷def preprocess_hex_data(raw_data_list): clean_data [] for item in raw_data_list: # 移除非十六进制字符 cleaned .join(c for c in item if c in 0123456789abcdefABCDEF) if len(cleaned) % 2 0: # 验证有效长度 clean_data.append(cleaned) return .join(clean_data)3. 多维度解码技术实战3.1 基础解码尝试首先尝试直接将十六进制转为ASCII字符串def hex_to_ascii(hex_str): try: return bytes.fromhex(hex_str).decode(ascii) except UnicodeDecodeError: return None3.2 高级编码识别当基础解码失败时需尝试多种编码方式编码类型Python实现典型特征Base64base64.b64decode()结尾常含字符集A-Za-z0-9/Base32base64.b32decode()结尾常含仅用A-Z和2-7Hexdumpbinascii.unhexlify()纯十六进制字符XOR加密需尝试不同密钥随机字节分布import base64 def try_multiple_decodings(data): results {} # Base64尝试 try: decoded base64.b64decode(data).decode(utf-8) results[base64] decoded except: pass # Base32尝试需填充到8的倍数 padded data * ((8 - len(data) % 8) % 8) try: decoded base64.b32decode(padded).decode(utf-8) results[base32] decoded except: pass return results4. 实战案例CISCN2023流量分析复现4.1 可疑流量定位通过统计发现功能码6异常集中stats analyze_modbus_patterns(modbus.pcap) print(stats) # 示例输出{3: 142, 6: 16, 4: 89}4.2 数据提取与解码完整处理流程代码示例def full_analysis(pcap_path): # 提取数据 raw_data extract_write_register_data(pcap_path) combined preprocess_hex_data(raw_data) # 基础解码 ascii_result hex_to_ascii(combined) if ascii_result and is_printable(ascii_result): print(fASCII解码结果: {ascii_result}) return # 高级解码 decoded try_multiple_decodings(combined) for encoding, result in decoded.items(): if result: print(f{encoding}解码成功: {result}) return print(未能解码出有效信息) def is_printable(s): return all(c.isprintable() or c in \n\r\t for c in s)4.3 结果验证技巧当获得疑似flag的字符串时检查是否符合flag{...}格式验证字符串是否包含有意义信息尝试提交到比赛平台验证# 示例最终处理 full_analysis(modbus.pcap) # 输出示例base32解码成功: MMYWMX3GNEYWOXZRGAYDA5. 分析工具优化建议5.1 性能优化技巧处理大型pcap文件时使用显示过滤器提前过滤启用多线程处理缓存中间结果# 带过滤器的捕获示例 cap pyshark.FileCapture( modbus.pcap, display_filtermodbus.func_code 6 )5.2 异常处理增强完善错误处理机制捕获文件不存在异常处理损坏的数据包记录分析日志try: cap pyshark.FileCapture(modbus.pcap) except FileNotFoundError: print(捕获文件不存在) except Exception as e: print(f捕获错误: {str(e)})工业网络流量分析需要平衡安全性与生产效率。通过Python实现自动化分析我们不仅能快速发现异常模式还能深入挖掘隐藏数据。实际项目中建议将这类脚本集成到持续监控系统中实现对生产网络流量的实时分析。
藏在Modbus‘写寄存器’请求里的秘密:用Python+pyshark复现CISCN2023流量分析
发布时间:2026/5/19 20:12:17
藏在Modbus‘写寄存器’请求里的秘密用Pythonpyshark复现CISCN2023流量分析当生产网络流量中出现异常数据包时传统的手动分析方式往往效率低下。本文将带你用Pythonpyshark构建自动化分析流水线从海量Modbus协议数据中快速定位可疑通信模式并通过多级解码技术还原被隐藏的关键信息。1. 理解Modbus协议与异常流量特征Modbus协议作为工业控制系统的通用通信标准其功能码定义了各类操作类型。其中功能码6写单个寄存器本应用于设备参数配置但攻击者常利用其数据传输特性进行隐蔽通信。我们需要特别关注以下异常特征非常规功能码使用频率正常生产环境中读取操作功能码3/4应占主导频繁出现写操作需警惕数据字段异常长度标准寄存器写入应为2字节超长数据可能包含隐藏信息非常规通信模式非工控设备间的Modbus通信、非标准端口通信等# 基础流量统计代码示例 import pyshark from collections import defaultdict def analyze_modbus_patterns(pcap_path): cap pyshark.FileCapture(pcap_path) stats defaultdict(int) for pkt in cap: if hasattr(pkt, modbus): func_code int(pkt.modbus.func_code) stats[func_code] 1 return dict(stats)2. 构建自动化分析流水线2.1 数据包筛选与提取针对功能码6的数据包我们需要提取关键字段进行深度分析。以下代码展示如何自动提取所有写寄存器请求的数据字段def extract_write_register_data(pcap_path): cap pyshark.FileCapture(pcap_path) suspicious_data [] for pkt in cap: if hasattr(pkt, modbus) and int(pkt.modbus.func_code) 6: if hasattr(pkt.modbus, data): hex_data pkt.modbus.data.replace(:, ) suspicious_data.append(hex_data) return suspicious_data2.2 数据预处理与拼接获取原始数据后需要进行规范化处理去除分隔符如Wireshark默认显示的冒号验证十六进制格式有效性按数据包顺序拼接完整载荷def preprocess_hex_data(raw_data_list): clean_data [] for item in raw_data_list: # 移除非十六进制字符 cleaned .join(c for c in item if c in 0123456789abcdefABCDEF) if len(cleaned) % 2 0: # 验证有效长度 clean_data.append(cleaned) return .join(clean_data)3. 多维度解码技术实战3.1 基础解码尝试首先尝试直接将十六进制转为ASCII字符串def hex_to_ascii(hex_str): try: return bytes.fromhex(hex_str).decode(ascii) except UnicodeDecodeError: return None3.2 高级编码识别当基础解码失败时需尝试多种编码方式编码类型Python实现典型特征Base64base64.b64decode()结尾常含字符集A-Za-z0-9/Base32base64.b32decode()结尾常含仅用A-Z和2-7Hexdumpbinascii.unhexlify()纯十六进制字符XOR加密需尝试不同密钥随机字节分布import base64 def try_multiple_decodings(data): results {} # Base64尝试 try: decoded base64.b64decode(data).decode(utf-8) results[base64] decoded except: pass # Base32尝试需填充到8的倍数 padded data * ((8 - len(data) % 8) % 8) try: decoded base64.b32decode(padded).decode(utf-8) results[base32] decoded except: pass return results4. 实战案例CISCN2023流量分析复现4.1 可疑流量定位通过统计发现功能码6异常集中stats analyze_modbus_patterns(modbus.pcap) print(stats) # 示例输出{3: 142, 6: 16, 4: 89}4.2 数据提取与解码完整处理流程代码示例def full_analysis(pcap_path): # 提取数据 raw_data extract_write_register_data(pcap_path) combined preprocess_hex_data(raw_data) # 基础解码 ascii_result hex_to_ascii(combined) if ascii_result and is_printable(ascii_result): print(fASCII解码结果: {ascii_result}) return # 高级解码 decoded try_multiple_decodings(combined) for encoding, result in decoded.items(): if result: print(f{encoding}解码成功: {result}) return print(未能解码出有效信息) def is_printable(s): return all(c.isprintable() or c in \n\r\t for c in s)4.3 结果验证技巧当获得疑似flag的字符串时检查是否符合flag{...}格式验证字符串是否包含有意义信息尝试提交到比赛平台验证# 示例最终处理 full_analysis(modbus.pcap) # 输出示例base32解码成功: MMYWMX3GNEYWOXZRGAYDA5. 分析工具优化建议5.1 性能优化技巧处理大型pcap文件时使用显示过滤器提前过滤启用多线程处理缓存中间结果# 带过滤器的捕获示例 cap pyshark.FileCapture( modbus.pcap, display_filtermodbus.func_code 6 )5.2 异常处理增强完善错误处理机制捕获文件不存在异常处理损坏的数据包记录分析日志try: cap pyshark.FileCapture(modbus.pcap) except FileNotFoundError: print(捕获文件不存在) except Exception as e: print(f捕获错误: {str(e)})工业网络流量分析需要平衡安全性与生产效率。通过Python实现自动化分析我们不仅能快速发现异常模式还能深入挖掘隐藏数据。实际项目中建议将这类脚本集成到持续监控系统中实现对生产网络流量的实时分析。