加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Web攻击检测机器学习深度实践

发布时间:2019-06-27 08:15:47 所属栏目:建站 来源:月亮与六便士
导读:一、概述 1. 传统WAF的痛点 传统的WAF,依靠法则和利害名单的方法来举办Web进攻检测。该方法过度依靠安详职员的常识广度,针对未知进攻范例无可若何;另一方面纵然是已知的进攻范例,因为正则表达式生成的范围性,以及shell、php等说话极其机动的语法,理论

基于上述三种特性提取思绪,选择结果最佳的分词方法实习MLP模子,可以实习获得一个函数和参数组合,能满意对已知进攻范例的完全辨认。但因为该MLP模子的特性提取发哪个是,部门依靠法则,造成理论上永久存在漏拦和误判。由于对辨认方针来说样本永久是不充实的,必要人工不绝的Review,发明新的进攻方法,调解特性提取方法,调解参数,重实习…这条路貌似永久没有止境。

1. 为什么选择LSTM

回首下上述的Web进攻哀求,安详专家一眼便能辨认进攻,而呆板进修模子必要我们人工来汇报它一系列有区分度的特性,并行使样本数据团结特性,让ML模子模仿出一个函数获得一个是与非的输出。

安详专家看到一个url哀求,会按照自身脑海中的“履历影象”来对url哀求举办领略,url哀求布局是否正常,是否包括Web进攻要害词,每个片断有什么寄义…这些都基于对url哀求每个字符上下文的领略。传统的神经收集做不到这一点,然而轮回神经收集可以做到这一点,它应承信息一连存在。

下载.gif

恰恰操作LSTM对前后文领略上风,操作url哀求的前后字符判定是否为Web进攻。这个甜头是可以省去特性工程这一繁杂的进程。

正是这种对url哀求特性的领略方法,让它具备了必然对未知进攻的辨认手段。针对未知进攻变形来说,分词的MLP模子能领略cat,但对变形的 c’a’t则无法领略,由于分词会把它支解开来。而LSTM模子把每个字符看成一个特性,且字符间有上下文接洽,无论cat 、c’a't 或 c”’a”’t 、””c’a’t””,在颠末嵌入层的转换后,拥有近似的特性向量表达,对模子来说都是近似一回事。

2.  特性向量化和模子实习

这里仅对参数值哀求的参数值举办实习。

  1. def arg2vec(arg): 
  2.   arglis = [c for c in arg] 
  3.   x = [wordindex[c] if c in I else 1 for c in arglis] 
  4.   vec = sequence.pad_sequences([x], maxlenmaxlen=maxlen) 
  5.   return np.array(vec).reshape(-1 ,maxlen) 
  6.  
  7. def build_model(max_features, maxlen): 
  8.   """Build LSTM model""" 
  9.   model = Sequential() 
  10.   model.add(Embedding(max_features, 32, input_length=maxlen)) 
  11.   model.add(LSTM(16)) 
  12.   model.add(Dropout(0.5)) 
  13.   model.add(Dense(1)) 
  14.   model.add(Activation('sigmoid')) 
  15.   # model.compile(loss='binary_crossentropy,mean_squared_error', 
  16.   # optimizer='Adam,rmsprop') 
  17.   model.compile(loss='binary_crossentropy', 
  18.   optimizer='rmsprop', metrics= ['acc']) 
  19.   return model 
  20.  
  21. def run(): 
  22.   model = build_model(max_features, maxlen) 
  23.   reduce_lr = ReduceLROnPlateau(monitor='val_loss' , factor=0.2, patience= 4 , mode='auto', epsilon = 0.0001 ) 
  24.   model.fit(X, y, batch_size=512, epochs= 20, validation_split=0.1, callbacks = [reduce_lr]) 
  25.   return model 
  26.  
  27. if __name__=="__main__": 
  28.   startTime = time.time() 
  29.   filename = sys.argv[1] 
  30.   data = pd.read_csv(filename) 
  31.   I = ['v', 'i', '%', '}' , 'r', '^', 'a' , 'c', 'y', '.' , '_', '|', 'h' , 'w', 'd', 'g' , '{', '!', '$' , '[', ' ', '"' , ';', 't ' , '>', '<', ' ', 'l' , 'n', ' r', '(', '=', ':', 'n' , '~', '`', '&', 'x', "'" , '+', 'k', ']', ')', 'f' , 'u', '', '0', 'q', '#' , 'm', '@', '*', 'e', 'z' , '?', 't' , 's', 'b' , 'p' , 'o' , '-', 'j' , '/',',' ] 
  32.   wordindex = {k:v+2 for v, k in enumerate (I)} 
  33.   max_features = len(wordindex) + 2 # 增进未知态(包括中文)和添补态 
  34.   maxlen = 128 
  35.   X = np.array([arg2vec(x) for x in data['args']]).reshape(- 1 ,128) 
  36.   y = data['lable'] 
  37.   model = run() 
  38.   logger.info("模子存储!") 
  39.   modelname = 'model/lstm' + time.strftime('%y_%m_%d' ) + '.h5' 
  40.   model.save(modelname) 

Web进攻检测呆板进修深度实践

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读