[发明专利]一种基于动态污点分析的Modbus协议漏洞挖掘方法有效
申请号: | 202110471457.0 | 申请日: | 2021-04-29 |
公开(公告)号: | CN113179274B | 公开(公告)日: | 2022-05-20 |
发明(设计)人: | 田健彤 | 申请(专利权)人: | 哈尔滨工程大学 |
主分类号: | H04L9/40 | 分类号: | H04L9/40;H04L43/18;H04L12/40 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 150001 黑龙江省哈尔滨市南岗区*** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 动态 污点 分析 modbus 协议 漏洞 挖掘 方法 | ||
1.一种基于动态污点分析的Modbus协议漏洞挖掘方法,其特征在于,包括以下步骤:
步骤1:配置好工控协议通信环境,使工控协议进行正常通信;对通信报文进行抓取,并将部分正常通信报文进行变异处理;
所述的对正常通信报文进行变异处理的方法具体为:以正常工控协议格式为模板,根据变异方法,将协议中的字段替换为变异数据,利用协议生成器,逐一生成大量的变异后的协议;所述的变异数据包括字节域数据变异元素和数据域变异元素;
所述的字节域数据变异元素是把协议中各字段的字节特征作为单位,把其中的特殊字节数据从各字段所要求的取值范围中提取出来,并分为数值边界值变异元素、格式化字符变异元素以及特殊值变异元素,作为变异元素生成变异后的协议报文;所述的字节域数据变异元素分为数值边界值变异元素、格式化字符变异元素以及特殊值变异元素;
所述的数值边界值变异元素是将协议中的字节值修改为字节的边界值;所述的格式化字符变异元素是将协议中各个字节的数值修改为特殊的字符;所述的特殊值变异元素包含的是在协议的取值范围中,将数值边界值变异元素以及格式化字符变异元素去除,剩下的可以取值的元素;
所述的数据域变异元素是通过以数据域长度的不同,将不同功能类型码f的长度值进行分类,确定生成的变异协议中数据域的长度,再利用不同类型的字节变异元素来填充数据域中的字节值;数据域变异元素分为空指针变异元素、功能区的缓冲区溢出变异元素、协议的缓冲区变异元素;
所述的空指针变异元素的取值范围表示为[0,Min(f)],Min(f)表示功能类型码f对应的数据域的最小长度;所述的功能区的缓冲区溢出变异元素的取值范围是[Max(f),Max(all)],Max(f)表示功能类型码f对应的数据域的最大长度,Max(all)表示工控协议中所有的功能类型码中数据域的最大长度;所述的协议的缓冲区变异元素的取值范围是[Max(all),+∞);
步骤2:对正常通信报文和变异报文分别进行污点源数据标记;
通过采取细粒度大小,以Modbus协议中各个字节作为污点标记单位,一个字节被标记为一个污点源数据TaintData;以一个三元组的形式对每一个污点数据进行描述,三元组中包含协议通信报文序号PID、协议字段编号PFID、字段偏移位置FOP,污点源数据表示为:
TaintData=PID,PFID,FOP
其中,PID是通信报文作为污点数据的唯一序号;FOP是对工控协议结构中各个字段进行编号;FOP是污点源数据在各个字段中的字节偏移量;
步骤3:将完成污点源数据标记后的正常通信报文和变异报文分别发送到协议服务器中;
步骤4:协议服务器对正常通信报文和变异报文的污点源数据标记进行识别,获得当前污点源的操作数执行的指令类型;依据指定的细粒度污点传播规则,进行污点传播;
步骤5:判断当前操作数的污染情况;如果当前操作数仍保持被污染状态,则根据当前危险函数的污染状态,更新危险函数的调用状态信息,返回步骤4;如果当前操作数的污染情况被消除,则结束。
2.根据权利要求1所述的一种基于动态污点分析的Modbus协议漏洞挖掘方法,其特征在于:所述的步骤4中指令类型包括赋值复制指令、算数计算指令以及特殊指令,特殊指令中又包含清零指令和单操作数指令;将所有的指令操作过程,抽象为一个映射过程F,表示为:
F(INS):Y=f(X)
其中,INS被定义为程序中的指令集合{insi};X被定义为指令中源操作数的集合{xi};Y被定义为指令中目的操作数的集合{yi};f被定义为指令的运算方式;
针对污点传播规则来说,也同样将其看作是一个映射关系,表示为公式:
Ft(INS):Yt=ft(Xt)
其中,Xt被定义为指令的源操作数当前存在的污点的集合{xti};Yt被定义为被传递的指令目的操作数的污点集合{ytj};对于其中任意取值的i和j对应的xti以及ytj,分别表示为指令的源操作数集合、指令的目的操作数集合中当前的污点状态;xt1=0表示指令中第一个源操作数不是污点数据,yt1=1表示指令运算后,第一个目的操作数被传播为污点数据;
根据复制规则进行污点传播的赋值复制指令包括:mov、cmov、movsz、repmovs、replpds;
赋值复制指令mov对应的映射过程为公式:
F(mov dest,src):dest=src
赋值复制指令mov的污点传播规则为公式:
Ft(mov dest,src):destt=srct
依据计算规则进行污点传播的算数计算指令包括:add、inc、div、mul;
算数计算指令add对应的映射过程为公式:
F(add dest,src):dest=dest+src
算数计算指令add的污点传播规则为公式:
其中,dest0与dest1是为了将源操作数和目的操作数集合中的元素区分开;
需要指定特殊污点传播规则的特殊指令包括sub、movsd、push、pop、call、ret;
当sub指令的源操作数和目的操作数是同一个数据,进行相减操作后,得出的结果为0,是个常数,这时对于污点传播过程来说,需要将源操作数的污点状态漂白,运算结果不再带有污点属性;
movsd指令的污点传播规则按照复制规则进行传播,规则为公式:
Ft(movsd):[dest]t=[src]t。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工程大学,未经哈尔滨工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110471457.0/1.html,转载请声明来源钻瓜专利网。