2.1 训练样本获取
可选择的ML方法有很多,无论是传统机器学习或者深度学习,稍微有些NLP经验的前辈都能做出一个很好的解决方案,无非是变换一下特征提取方式和模型。重点其实是数据,掌握的websehll样本越丰富,训练出来的模型效果就越好。要培养一个某领域的专业人才,需要不断去学习该领域的专业知识信息,反复锤炼,其中知识的质量和数量缺一不可,模型训练也是如此。算法的改进是不断去触摸当下数据集所能达到的上限,高质量的数据集才是AI项目性能的基石。苏宁除了主机入侵检测系统观察到的webshell样本外,还收集了160个Github项目的webshell样本用于训练。
有了黑样本,白样本的收集就相对简单一些,但也不代表白羊本不重要,白样本的分布和广泛性也比较重要。我们可以在Github、码云、GitLab、Gitee、Coding等开源直接搜索对应文件类型的项目(由于jsp是建立在java基础上的一种网络编程语言,因此在正常jsp样本不充分的情况下可考虑用java文件来代替 );第二种方式是在条件允许的情况下,将自身业务环境中对应文件类型的文件拿来作为白样本,毕竟在自家数据环境中被教育出来的模型,在解决自家问题的时候也更加驾轻就熟,以此避免模型上线时因训练数据不充分造成的水土不服问题。
2.2 特征处理和模型训练
模型训练借鉴了兜哥《web安全之深度学习实战》书中第十一章思想,采用CountVectorizer和TfidfTransformer对n-gram后的样本进行特征向量处理,分别采用多层神经网络、XGBoost、朴素贝叶斯进行训练,其中MLPClassifier模型表现较好。主要特征处理和训练代码如下:
def features_process(negativedir, postivedir, maxfeatures):
webshell_texts = read_dir(negativedir)
normal_texts = read_dir(postivedir)
webshell_number = len(webshell_texts)
normal_number = len(normal_texts)
texts = webshell_texts + normal_texts
webshell_lables = [1] * webshell_number
normal_lables = [0] * normal_number
lables = webshell_lables + normal_lables
logger.info(“白样本总量:%i” % normal_number)
logger.info(“黑样本总量:%i” % webshell_number)
countvectorizer = CountVectorizer(ngram_range=(2, 2), decode_error="ignore",
min_df=1, analyzer="word",
token_pattern=r'[^\w\s]+|\b\w+\b',
max_features=maxfeatures)
tfidftransformer = TfidfTransformer(smooth_idf=False)
cv_x = countvectorizer.fit_transform(texts).toarray()
tf_x = tfidftransformer.fit_transform(cv_x).toarray()
joblib.dump(countvectorizer, "model/countvectorizer_" + options.version + ".pkl")
joblib.dump(tfidftransformer, "model/tfidftransformer_" + options.version + ".pkl")
return tf_x, lables, countvectorizer, tfidftransformer
def evaluation(y_test, y_pred):
logger.info(“准确率:%s” % metrics.accuracy_score(y_test, y_pred))
logger.info(confusion_matrix(y_test, y_pred))
logger.info(classification_report(y_test, y_pred))
def train(trainset, lables, mode, seed):
x_train, x_test, y_train, y_test = train_test_split(trainset, lables, test_size=0.3, random_state=seed)
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过! 详情docs.qq.com/doc/DSlhRRFFyU2pVZGhS