人工智能从提出至今,已经得到了长足的发展。从谷歌大脑,到百度无人车,到阿尔法狗围棋大战,人工智能越来越具有生机与活力。
与此同时,国内外的网络安全形势更加严峻,而信息安全人才却一直存在较大的缺口。安全技术和人工智能的人结合已成为大势所趋。事实上已经如此实现了,人工智能在黄反鉴定、 恶意链接、 业务风控领域、 病毒分析、APT检测方面都取得了不错的进展。
我们知道,机器学习的算法就是对数据进行处理,从大量的数据中学得知识并加以运用。所谓巧妇难为无米之炊,人工智能与Web安全的结合发展,势必需要各种有关网络信息安全的数据集来进行机器学习,这是人工智能实现的基础。在众多数据集合中,譬如KDD 99、HTTP DATASET CSIC 2010、SEA数据集、ADFA-LD数据集、Alexa域名数据、Sclikit-Learn数据集、MNIST数据集、Movie Review Data、SpamBase数据集、Enron数据集等数据集。
数字型特征提取有标准化、正则化和归一化操作:
>>> from sklearn import preprocessing
>>> import numpy as np
>>> X=np.array([[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,-1.]])
>>> X_scaled=preprocessing.scale(X)
>>> X_scaled
array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
>>> X_normalized=preprocessing.normalize(X,norm='l2')
>>> X_normalized
array([[ 0.40824829, -0.40824829, 0.81649658],
[ 1. , 0. , 0. ],
[ 0. , 0.70710678, -0.70710678]])
>>> min_max_scaler=preprocessing.MinMaxScaler()
>>> X_train_minmax=min_max_scaler.fit_transform(X)
>>> X_train_minmax
array([[0.5 , 0. , 1. ],
[1. , 0.5 , 0.33333333],
[0. , 1. , 0. ]])
文本型数据的提取本质是单词切分,不同的单词当作一个新的特征:
以hash结构为例:
>>> measurements=[
{'city':'Dubai','temperature':33.},
{'city':'London','temperature':12.},
{'city':'Beijing','temperature':18.},
]
>>> from sklearn.feature_extraction import DictVectorizer
>>> vec= DictVectorizer()
>>> vec.fit_transform(measurements).toarray()
array([[ 0., 1., 0., 33.],
[ 0., 0., 1., 12.],
[ 1., 0., 0., 18.]])
>>> vec.get_feature_names()
['city=Beijing', 'city=Dubai', 'city=London', 'temperature']
在文本特征提取中,词袋模型在词集模型的基础上加上了频率的维度:
导入相关函数库:
>>> from sklearn.feature_extraction.text import CountVectorizer
实例化分词对象:
>>> vectorizer=CountVectorizer(min_df=1)
>>> vectorizer
CountVectorizer(analyzer='word', binary=False, decode_error='strict',
dtype=, encoding='utf-8', input='content',
lowercase=True, max_df=1.0, max_features=None, min_df=1,
ngram_range=(1, 1), preprocessor=None, stop_words=None,
strip_accents=None, token_pattern='(?u)\\b\\w\\w+\\b',
tokenizer=None, vocabulary=None)
将文本进行词袋处理:
>>> corpus = [
'This is the first document.',
'This is the secend document.',
'And the third one.',
'Is this the first document?',
]
>>> X=vectorizer.fit_transform(corpus)
>>> X
<4x9 sparse matrix of type ''
with 19 stored elements in Compressed Sparse Row format>
获得对应的特征名称
>>> corpus = [
'This is the first document.',
'This is the second document.',
'And the third one.',
'Is this the first document?',
]
>>> X=vectorizer.fit_transform(corpus)
>>> X
<4x9 sparse matrix of type ''
with 19 stored elements in Compressed Sparse Row format>
>>> vectorizer.get_feature_names()==(
['and','document','first','is','one','second','the','third','this'])
True
>>>
词袋化后,下面进行向量化:
>>> vocabulary=vectorizer.vocabulary_
我个人做数据挖掘项目时,喜欢Neo4j数据库,常常需要使用到csv格式文件。事实上,处理数据时,CSV是最常见的格式。
效果验证时机器学习非常重要的环节,每次写论文,导师都会敲我脑袋说“性能呢?”。最常使用的就是交叉验证了:
说到web安全,形势极其严峻。像以前学过的XSS攻击、SQL注入相关的安全事件层出不穷。webshell是一种命令执行环境,常常被黑客用来长期控制被害服务器,并进一步进行渗透。webshell功能强大,如文件编辑、注册表管理等等。近年来webshell被控制的事件也屡屡发生,中国菜刀等工具也成为了宠儿。僵尸网络可以说是一对多的典型黑客控制例子,僵尸网络危害巨大。
我们已知在安全中已经产生了各种各样的数据集,结合机器学习,能够快速较为准确的检测恶意操作,这也是机器学习和Web安全结合的前提和基础。