主权项 |
一种基于支持向量机的Modbus TCP入侵检测方法,其特征在于,包括以下步骤:S1:采集工业控制系统在正常状态下和入侵状态下预定时长的Modbus TCP数据,提取出Modbus数据包,然后提取出客户机向服务器请求的Modbus数据包,提取得到每个数据包的功能码和线圈地址;将正常状态下每个数据包的功能码和线圈地址作为一组数据,按照时间先后顺序进行排列,得到正常状态数据序列,根据同样的方法得到入侵状态数据序列;S2:对数据序列进行数据统计,提取得到特征向量,其具体方法为:将数据序列划分成长度为L的N个子序列,对于每个子序列,统计每个功能码对应的各类线圈地址的出现次数<img file="FDA0000823758960000011.GIF" wi="86" he="71" />其中n表示子序列的序号,n的取值范围为n=1,2,…,N,i表示功能码的编号,i的取值范围为根据实际需要确定,j表示功能码i对应的线圈地址的类别号,j的取值范围为n=1,2,…,M<sub>i</sub>,M<sub>i</sub>表示功能码i对应的线圈地址类别数量;计算子序列n中功能码i对应的第j类线圈地址的出现频率<img file="FDA0000823758960000012.GIF" wi="134" he="75" /><maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msubsup><mi>rate</mi><mrow><mi>i</mi><mi>j</mi></mrow><mi>n</mi></msubsup><mo>=</mo><mfrac><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mrow><msub><mi>a</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>a</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo>+</mo><mo>...</mo><mo>+</mo><msub><mi>a</mi><mrow><msub><mi>iM</mi><mi>i</mi></msub></mrow></msub></mrow></mfrac></mrow>]]></math><img file="FDA0000823758960000013.GIF" wi="541" he="140" /></maths>构建子序列n对应的特征向量<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>X</mi><mi>n</mi></msub><mo>=</mo><mrow><mo>(</mo><msubsup><mi>rate</mi><mn>11</mn><mi>n</mi></msubsup><mo>,</mo><msubsup><mi>rate</mi><mn>12</mn><mi>n</mi></msubsup><mo>,</mo><mo>...</mo><msubsup><mi>rate</mi><mrow><mn>1</mn><msub><mi>M</mi><mn>1</mn></msub></mrow><mi>n</mi></msubsup><mo>,</mo><msubsup><mi>rate</mi><mn>21</mn><mi>n</mi></msubsup><mo>,</mo><mo>...</mo><mo>,</mo><msubsup><mi>rate</mi><mrow><msub><mi>IM</mi><mi>I</mi></msub></mrow><mi>n</mi></msubsup><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000823758960000014.GIF" wi="974" he="95" /></maths>S3:将正常状态数据序列对应的特征向量标记为1,入侵状态数据序列对应的特征向量标记为0,将正常状态数据序列和入侵状态数据序列的所有特征向量作为训练数据,对支持向量机进行训练,得到支持向量机分类模型;S4:在实际的入侵检测过程中,实时连续采集客户机向服务器请求的Modbus数据包,提取功能码和线圈地址,得到长度为L的数据序列,采用步骤S2中的方法得到对应的特征向量,输入支持向量机分类模型,得到是否存在入侵的检测结果。 |