基于CNN的WebShell检测工具的设计与实现_第1页
基于CNN的WebShell检测工具的设计与实现_第2页
基于CNN的WebShell检测工具的设计与实现_第3页
基于CNN的WebShell检测工具的设计与实现_第4页
基于CNN的WebShell检测工具的设计与实现_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要随着互联网在我们生活中被广泛应用到社交、金融、行政以及办公等领域,网络安全的问题也越来越被重视。WebShell的本质是一种Web应用脚本程序,由于其可以通过HTTP协议的方式对服务器进行控制,故常被黑客用于植入到被入侵的系统中,严重威胁到主机的安全。本文针对现有的WebShell检测技术展开分析并实现一款高效、精准的WebShell检测工具。由于目前大部分主流的WebShell检测工具都是利用静态特征进行匹配的,十分依赖人工提取WebShell的特征形成规则库,并且无法对抗未知类型或经过变种的WebShell,因此本文采用了卷积神经网络算法对网络上公开的WebShell样本进行训练生成一个检测模型,并基于该模型设计检测的流程与实现,达到了较好的检测结果。□□关键词:深度学习WebShell卷积神经网络

AbstractAstheInternetiswidelyusedinourlifeinsocial,financial,administrativeandofficeareas,theissueofnetworksecurityisalsomoreandmoreattention.TheessenceofWebShellisaWebapplicationscript.BecauseitcancontroltheserverthroughHTTPprotocol,itisoftenusedbyhackerstoimplantitintothesystemthatisinvaded,whichseriouslythreatensthesecurityofthehost.ThispaperanalyzestheexistingWebShelldetectiontechnologyandrealizesanefficientandaccurateWebShelldetectiontool.Atpresent,mostofthemainstreamWebShelldetectiontoolsarematchedbystaticfeatures,whichrelyonthemanualextractionofWebShellfeaturestoformarulebase,andcannotfightagainstunknowntypesorvarietiesofWebShell.Therefore,thispaperadoptstheconvolutionalneuralnetworkalgorithmtotraintheWebShellsamplesonthenetworktogenerateadetectionmodel,anddesignsthedetectionprocessandimplementationbasedonthismodel,achievingabetterdetectioneffect.Keywords:DeepLearningWebShellCNN目录第一章绪论 第一章绪论研究背景及意义在互联网高速发展的今天,网络已经渗透到我们生活中的方方面面,网络技术在即时通讯、网络购物、移动支付、线上政务、在线教育等领域的应用,使得网络空间已经成为我们生存的“第二空间”。互联网在短时内的迅速发展,不仅改变了世界,也给我们带来的新的网络安全威胁,网络安全的重要性也逐渐被人们所重视,更成为了维护国家安全的战略新疆域。CNCERT(国家互联网应急中心)每年都会发布关于我国互联网安全态势的报告,在2019年的报告中CNCERT就监测到我国约8.5万个网站被植入了后门,比前一年发现的数量增长超过了2.59倍,此外还有大约18.6万个网站被篡改[[]国家互联网应急中心.2019年我国互联网网络安全态势综述[EB[]国家互联网应急中心.2019年我国互联网网络安全态势综述[EB/OL],/publish/main/upload/File/2019-year.pdf,2019.目前大部分的WebShell静态检测工具仍是通过匹配从文件中提取的特征码和危险函数的特征库匹配方法进行实现,这种方法无法检测未知的WebShell文件,目前许多WebShell文件为了绕过杀毒软件的查杀,也会利用编码、混淆以及加密等操作进行处理,使得现有的WebShell检测技术无法识别。近年来,随着人工智能的发展,涌现出很多基于机器学习算法的WebShell检测方法,可以比较有效地检测出经过特殊处理的WebShell文件,因此本文就是利用卷积神经网络算法实现WebShell检测流程,开发能够快速、精确检测WebShell文件的工具,从而确保服务器的安全。Web安全现状分析随着互联网的发展壮大,黑客攻击也日趋猖獗,在大部分的黑客攻击中均是针对Web应用展开攻击的。在由IDAC(中国产业互联网联盟)联合腾讯、青藤云安全等安全厂商共同发布的针对我国企业安全的调研报告中[[]中国产业互联网发展联盟,腾讯安全,腾讯标准,青藤云安全.2019中国主机安全服务报告[EB/OL],/research/report/952.html,2019.],指出了黑客针对企业发起的网络攻击事件中WebShell仍然是黑客攻击的首要方法,仅2019年统计的针对企业所属服务器的木马感染事件就超过了百万起,其中WebShell木马感染事件约80万起,如图1-1所示,WebShell感染事件占据了所有统计病毒[]中国产业互联网发展联盟,腾讯安全,腾讯标准,青藤云安全.2019中国主机安全服务报告[EB/OL],/research/report/952.html,2019.图1-SEQ图1-\*ARABIC1木马感染情况(2019)图1-SEQ图1-\*ARABIC2样本种类分布(2019)此外,随着“云计算”时代的来临,WebShell的种类也在快速增加,从被感染的主机中提取的病毒木马分析,其种类总体上呈现出多样化的趋势。图1-SEQ图1-\*ARABIC1木马感染情况(2019)图1-SEQ图1-\*ARABIC2样本种类分布(2019)图1-SEQ图1-\*ARABIC3WebShell样本语言比例(2019)根据捕获的WebShell样本分析,PHP图1-SEQ图1-\*ARABIC3WebShell样本语言比例(2019)WebShell简介WebShell是一种基于动态脚本语言的页面木马后门,通常以PHP、JSP、ASP以及CGI等脚本程序的形式实现的,并且可以执行操作系统命令,具备对服务器进行管理能力的恶意脚本代码。黑客通常会利用服务器上存在的任意文件上传漏洞、命令执行漏洞、SQL注入漏洞等可以将文件写入到服务器中的漏洞,将WebShell植入到服务器上,从而取得服务器的控制权限。从代码层面或其功能实现上进行区分,通常可以将WebShell分为以下的三类:一句话木马,其本身的代码十分简短,与其名称一样,只需通过一行代码就能接收并执行客户端提交的脚本,通常利用eval等函数在服务器上执行,可以结合蚁剑、中国菜刀等WebShell管理工具使用,具有很强的灵活性,并且可以插入到正常的页面文件中进行隐藏,不易被网站管理员发现。小马,这是相对于大马而言的,其本身实现的代码较少,功能也相对比较单一,常用于进一步提升控制服务器的权限,通常只有文件上传、代码执行等功能,协助黑客植入大马到服务器上。大马,是功能实现最全面的木马,通常都具备文件管理、数据库管理、权限提升以及命令执行等功能。论文内容与结构本文通过对现有的WebShell检测技术进行分析,采用了基于卷积神经网络的检测方法,设计并最终实现一款WebShell检测工具。本文的大概结构如下:第一章主要对研究的课题的背景和意义进行概述,通过各大权威机构和国内知名的安全厂商发布的相关安全研究报告分析我国网络空间安全中面临的WebShell攻击威胁情况,并针对WebShell进行简单介绍。第二章对目前在WebShell恶意代码检测上的现状进行分析,主要介绍了传统的WebShell检测方法和与人工智能相结合的新型检测算法,并简单分析了每种检测算法的优劣。第三章介绍了本文采用的基于卷积神经网络的检测模型,并对特征提取、卷积神经网络模型等相关技术展开分析,并利用TFlearn库实现了一个CNN模型结构进行训练。第四章主要对本文要实现的WebShell检测工具所需功能进行分析,并根据功能将程序分为四个模块并针对其所需实现的功能进行分析。第五章从代码层面上展示了实现WebShell检测工具的核心代码及对应的功能示例,通过测试样本对本工具的效果进行检验,并与其他检测工具进行对比第六章对本文进行总结以及介绍对未来的一些规划。

第二章研究现状与检测技术研究现状目前常用的WebShell木马的检测思路可以分为如下两种:基于WebShell文件代码的静态特征和基于WebShell执行过程中的流量和行为特征等动态特征。通常情况下,黑客为了避免WebShell被检测出来,会利用脚本语言本身的特性结合编码、加密等手段对WebShell进行混淆从而绕过检测,常见的免杀手段如利用字符串拆分后重新拼接、WebShell通信流量加密以及利用动态函数调用等。传统的检测是通过静态特征检测进行的,最常用的方法就是直接提取样本特征,如eval、system等关键函数、结合变量名称和文件属性等静态特征进行匹配,这种方式可以快速检测已知的WebShell,但依赖事先定制的匹配规则,对未知的恶意样本无法检测,容易被编码、加密等手段进行混淆绕过,因此传统的检测方法大多都对混淆后的变种或未知类型的WebShell的检测效果不佳。随着人工智能的发展,人工智能也广泛应用到了网络安全领域中,针对WebShell的检测也开始与机器学习技术相结合。基于机器学习的检测方法在机器学习技术的应用上,如分别提取WebShell样本和正常样本的页面特征,然后利用机器学习算法进行训练得到矩阵分解模型来完成对未知页面的预测的方法,能够较有效地检测出经过编码混淆或新型变体的恶意WebShell代码[[]戴桦[]戴桦,李景,卢新岱,孙歆.智能检测WebShell的机器学习算法[J].网络与信息安全学报,2017,3(04):51-57.又如利用语义分析算法对WebShell文件的语法和词法进行分析提取特征,从语义的角度计算出文件的风险值,从而根据风险值判断一个文件是否为恶意代码,可以较有效地区分现有类型的WebShell与正常文件[[]易楠[]易楠,方勇,黄诚,刘亮.基于语义分析的Webshell检测技术研究[J].信息安全研究,2017,3(02):145-150.基于深度学习的检测方法在深度学习技术的应用上,如利用神经网络算法将WebShell样本转换成文本向量特征,再使用SVDD(SupportVectorDomainDescription,支持向量数据描述)模型进行预测[[]吴斌[]吴斌,赵力.基于深度学习和半监督学习的webshell检测方法[J].信息技术与网络安全,2018,37(08):19-22.又如利用脚本语言编译后得到的字节码并利用词向量生成算法将字节码转换成特征向量,然后通过MLP(Multi-LayerPerceptrons,多层感知机)算法模型进行预测,这种方式可以避免代码进行混淆后无法识别的问题[[]张涵[]张涵,薛质,施勇.基于多层神经网络的Webshell改进检测方法研究[J].通信技术,2019,52(01):179-183.其他检测方法在基于动态特征的检测方法上,常见的是使用提取访问WebShell过程中产生的网络流量、应用日志等方式来提取相应的行为特征,然后通过特征匹配或机器学习分类算法进行检测。如针对WebShell需要通过HTTP协议进行访问的特点,收集黑客操作WebShell过程中产生的网络流量数据,提取HTTP请求数据包中的IP、User-Agent、URL、payload等动态特征对网络流量进行分析,从而判断是否为恶意行为所产生的流量,但这种检测方式需要镜像网络流量进行配合,需要额外的检测成本,且对于加密的通信流量检测能力较弱[[]赵运弢[]赵运弢,徐春雨,薄波,刘书林.基于流量的WebShell行为分析与检测方法[J].网络安全技术与应用,2018(04):8-9.此外,与流量检测类似,可以根据WebShell在访问过程中留下的Web日志进行分析,通过日志中的请求方式、请求参数等特征,并结合文件的访问次数和所处的目录位置、访问用户量以及与其他页面的关联程度进行分析检测[[]石刘洋,方勇.基于[]石刘洋,方勇.基于Web日志的Webshell检测方法研究[J].信息安全研究,2016,2(01):66-73.本章小结本章介绍了目前检测WebShell的几种方式,目前大部分主流的WebShell检测工具都是基于传统的静态特征匹配的方式实现的,误报率和漏报率相对较高,随着人工智能技术的发展,WebShell的检测技术也纷纷与各种机器学习算法相结合,误报率和漏报率相较于使用传统检测算法也降低了许多。当然,不同的WebShell检测技术在不同的场景下都具有其独特的优势,对于WebShell的免杀技术和检测技术来说,两者本身就是长期相互对抗的过程,并没有一种方式是可以一劳永逸的。

第三章基于卷积神经网络的检测方法卷积神经网络算法的英文全称为ConvolutionalNeuralNetworks,简称CNN,刚开始主要应用在计算机视觉领域的图像处理上,后来也逐渐应用到了自然语言处理领域中,用于对文本分类问题进行处理。对于WebShell的检测来说,其本质上也是属于文本的二分类问题[[]傅建明,黎琳,王应军.基于CNN的Webshell文件检测[J[]傅建明,黎琳,王应军.基于CNN的Webshell文件检测[J].郑州大学学报(理学版),2019,51(02):1-8.图3-SEQ图3-\*ARABIC1WebShell检测流程本文利用CNN模型对样本进行检测,训练和预测都需要通过以下三个主要步骤进行:预处理样本数据、提取特征向量以及模型检测图3-SEQ图3-\*ARABIC1WebShell检测流程预处理样本数据图3-SEQ图3-\*ARABIC2编译生成opcode示例通常情况下黑客为了躲避WebShell检测工具的查杀,会利用增加无用的注释对源代码进行混淆处理,会给基于源代码文本进行分类的检测模型带来一定的干扰。PHP作为一门解释型的脚本语言,在执行之前编译器会先经过词法、语法和语义进行分析提取源代码文本的内容,并丢弃如空格、注释等图3-SEQ图3-\*ARABIC2编译生成opcode示例[]张贺威,刘晓洁.基于文本向量的php-webshell检测方法[J].数据通信,2019(04):16-21.图3-SEQ图3-\*ARABIC3预处理数据核心代码VLD(VulcanLogicDumper)是PHP程序的一个扩展,用于输出PHP脚本编译后的opcode等信息,如图3-2所示,op一列即为利用VLD扩展将常见的一句话木马编译后进行输出的opcode序列,其中参数“-dvld.active=1”是用于启用VLD扩展输出生成的opcode信息,参数“-dvld.execute=0”是图3-SEQ图3-\*ARABIC3预处理数据核心代码尽管不同的脚本代码编译生成的opcode序列不同,但同类型的脚本代码编译生成的opcode却存在一定程度的相似,而且利用VLD扩展将源代码文本内容转换成的opcode序列只包含Zend引擎中的指令,因此可以在一定程度上消除代码混淆后对特征的影响。提取特征向量为了使提取的opcode序列特征能应用到深度学习算法中,还需要将文本类型的opcode序列转换成数值表示的特征向量,因此可以采用自然语言处理(NLP)领域中的词袋模型和TF-IDF模型以及词汇表模型分别对opcode序列的词频和词序进行处理。词袋模型和TF-IDF模型图3-SEQ图3-\*ARABIC4词袋模型示例代码词袋模型(Bag-of-wordsmodel)将每个字词作为独立的对象,不考虑字词在文本中的语义关系,而是将文本比作装着许多字词的袋子,只考虑单词在文本出现频数,并利用单词与其词频共同构成表示文本的向量特征。如图3-4所示,利用sklearn模块中的CountVectorizer函数图3-SEQ图3-\*ARABIC4词袋模型示例代码但是如果单纯只通过词频是无法准确反映出词的重要程度的,TF-IDF算法是自然语言处理领域中一种计算字词对于某个文档的重要程度算法,其原理是若一个字词在字符串中的词频越高,则说明该字词在字符串中越关键,若一个字词出现在不同字符串中的数量越少,则说明该字词对能区分不同类型字符串的能力越强,因此该算法也常常跟词袋模型结合使用。TF-IDF算法中的TF(TermFrequency)指词频,即一个单词在一个文本内出现的次数,其意义在于可以反映出某一单词w在文本中的重要性,单词w的TF值计算公式如下:TIDF(InverseDocumentFrequency)指的是逆向文件频率,即字词在所有文本内出现的次数的倒数,其意义在于其具备区分不同文本类别的能力,因为包含单词w的文本数目越少,其计算得出的IDF值越大,则能够说明某一单词w对于不同类别的文本的区分能力越强。单词w的IDF值计算公式如下:IDFTF-IDF的核心思想就是若某个字词w在文本中的词频越高,并且字词w在其他文本中出现的频率越低,则认为该字词具备较强的类别区分能力,可以被用于分类,TF-IDF值的计算公式如下:TF-IDF=TF*IDF图3-SEQ图3-\*ARABIC5词袋&TF-IDF模型示例代码在sklearn库中,图3-SEQ图3-\*ARABIC5词袋&TF-IDF模型示例代码词汇表模型基于词袋模型进行提取的特征值只记录了单词到文本之间的映射关系以及对应的词频,其特征向量表达出文本是由那些单词组成的,但由于单词之间的关联信息在提取的过程中已经丢失,因此不能表达出每个单词之间在文本中的语义上的关系。词汇表模型在词袋的基础上,利用生成的词表并按照单词在词表中的位置对原文本进行编码。如图3-6所示,VocabularyProcessor函数是TensorFlow中生成词汇表模型的实现,通过提取原文本中的单词并形成词表,然后将原文本中的每个单图3-SEQ图图3-SEQ图3-\*ARABIC6词汇表模型示例代码小结本节主要对自然语言处理领域中比较常见的词袋&TF-IDF模型和词汇表模型进行介绍以及对原理进行分析,作为PHP脚本编译后的中间代码,opcode的结构是具有语义上的联系的,因此本文将采用词汇表模型提取opcode序列的特征。检测模型图3-SEQ图3-\*ARABIC7基于opcode特征的CNN模型处理流程卷积神经网络模型最早的应用是在图像处理等计算机视觉领域中,解决了因为数据量过于庞大而无法进行学习的问题,其特点在于其神经网络的输入为原始的像素数据,避免了传统算法中复杂的特征工程[[]尹宝才,王文通,王立春.深度学习研究综述[J].图3-SEQ图3-\*ARABIC7基于opcode特征的CNN模型处理流程[]尹宝才,王文通,王立春.深度学习研究综述[J].北京工业大学学报,2015,41(01):48-59.数据集图3-SEQ图3-\*ARABIC8WebShell样本和PHP样本示意图本文针对CNN模型进行训练所使用的正常样本为主流的CMS开源代码,包括phpcms、phpMyAdmin、smarty、wordpress以及yii等主流的CMS代码图3-SEQ图3-\*ARABIC8WebShell样本和PHP样本示意图由于WebShell样本均由网络上收集汇总而成,因此需要使用去重工具对WebShell样本进行处理,处理后的正常样本数量为4613,WebShell样本数量为1192,两者的数量比例接近4:1。样本预处理图3-SEQ图3-\*ARABIC9提取opcode核心代码分别对两个样本集中的每一个样本使用PHP的VLD扩展进行提取opcode序列,提取opcode的核心代码如图3-9图3-SEQ图3-\*ARABIC9提取opcode核心代码图3-SEQ图3-\*ARABIC10预处理样本标记核心代码在获取到两个样本集对应的图3-SEQ图3-\*ARABIC10预处理样本标记核心代码图3-SEQ图3-\*ARABIC11图3-SEQ图3-\*ARABIC11opcode序列编码核心代码图3-SEQ图3-\*ARABIC12随机划分样本集代码最后使用的train_test_split函数对样本集随机划分完成样本的预处理,其中用于测试的样本集占总样本的40%,用于训练的样本集占总样本的图3-SEQ图3-\*ARABIC12随机划分样本集代码输入层经过预处理样本之后得到了样本集的opcode序列及对应的分类标记,在传入数据之前,还需要对数据进一步处理,由于代码编译生成的opcode序列的长度并不一致,所以需要对所有的opcode进行截取固定的长度,若不足则使用0进行填充。此外,由于WebShell分类属于二分类问题,还需要对标记的数据进图3-SEQ图3-\*ARABIC13输入数据处理核心代码图3-SEQ图3-\*ARABIC13输入数据处理核心代码图3-SEQ图3-\*ARABIC14图3-SEQ图3-\*ARABIC14输入层定义代码卷积层图3-SEQ图3-\*ARABIC15卷积层定义代码卷积层是由3个步长分别为3、4、5图3-SEQ图3-\*ARABIC15卷积层定义代码池化层图3-SEQ图3-\*ARABIC16池化层定义代码定义代码如图3-16所示,池化层将卷积处理后的结果进行串接,生成了固定长度的融合特征向量,之后使用全局池化对融合特征向量进行处理获得张量中的最大特征值,然后使用比率为0.8的随机丢弃操作,使得经过池化层之后的8图3-SEQ图3-\*ARABIC16池化层定义代码[]姜天.基于卷积神经网络的Webshell检测方法研究[J].信息技术与网络安全,2019,38(07):27-31.全连接层由于该模型是为了识别WebShell文件的二分类任务,因此使用softmax激活函图3-SEQ图3-\*ARABIC17全连接层定义代码数将上一层的输出通过全连接的方式进行处理,同时使用adam图3-SEQ图3-\*ARABIC17全连接层定义代码模型训练及模型结构图3-SEQ图3-\*ARABIC18图3-SEQ图3-\*ARABIC18CNN结构图图3-SEQ图3-\*ARABIC19训练代码实例化以上图3-SEQ图3-\*ARABIC19训练代码图3-SEQ图3-\*ARABIC20训练结果模型经过图3-SEQ图3-\*ARABIC20训练结果评估指标在模型的评估指标中,模型预测为正例的结果用P(Positive)表示,预测为负例的结果使用N(Negative)表示。对于模型预测结果的正确与否,分别使用T(True)和F(False)进行表示。下文将对模型评估的常用指标算法进行介绍。准确率(Accuracy):指模型预测正确的数量在总样本集的占比,是最直观的可以看出模型效果的指标,计算公式如下:A召回率(Recall):指模型预测的结果为TP的数量在总样本集中所有正例的占比,用于衡量模型对正例的识别能力,计算公式如下:R精确率(Precision):指总样本集中正例的数量在模型判断为正例的数量的比例,用于衡量模型对负例的识别能力,计算公式如下:PreF1值(F1-score):指召回率和精确率的加权平均值,是两者的综合体现,F1值越高,则说明模型越稳健,计算公式如下:F图3-SEQ图3-\*ARABIC21图3-SEQ图3-\*ARABIC21获取评估代码图3-SEQ图3-\*ARABIC22模型指标评估对上节训练得到的模型进行评估,如图3-22所示,整个模型的准确率为97.21%,召回率为91.图3-SEQ图3-\*ARABIC22模型指标评估本章小结本章主要介绍了卷积神经网络算法和使用该算法生成WebShell检测模型的步骤,并对深度学习相关的技术进行分析。CNN算法除了解决图像处理的问题外还可以解决文本分类的问题,本文采用了提取PHP类型脚本的opcode序列并使用词汇表算法编码为特征向量,从而输入到卷积神经网络中进行运算得到相应分类的结果。在特征提取的算法中,本文主要对词袋模型进行分析,词袋&TF-IDF算法可以较好地区分不同文本,但无法表达出单词之间在文本中的联系,词汇表算法在词袋模型的基础上,利用提取的词汇对文本进行重新编码,从而具备了表达单词之间前后联系的能力。此外,本章还介绍了准确率、召回率、精确率和F1值等常用的模型评估算法,在评估模型的优劣时需要考虑到各个分值,若单纯只参考一个指标,则可能导致结果出现误差,因此在机器学习中通常会综合使用以上的评估算法对一个模型的好坏进行综合评估。

第四章分析与设计功能需求分析传统的WebShell检测工具对有明显静态特征后行为模式的WebShell木马有较好的识别效果,但不能对变种、混淆的木马进行有效检测。本文将采用深度学习的卷积神经网络模型针对PHP类型的WebShell木马设计并实现一款检测工具。由于WebShell需要在服务器的Web容器中才能被执行,对于普通的个人PC来说基本没有危害,并且目前市场上绝大多数的服务器上部署的系统为发行版的Linux系统,其次是Microsoft的WindowServer,因此本工具需要具备跨平台运行的能力。Python在人工智能方面有相当丰富的第三方库实现,并且只需在操作系统中安装相应的Python解释器即可跨平台运行python代码,所以本工具将基于Python语言进行开发。此外,WebShell木马需要通过HTTP访问请求才能触发执行,因此其在服务器上的物理位置都是处于Web应用的根目录下的。针对这一特点,本工具允许用户配置固定的扫描路径的方式对Web应用的路径进行统一管理。设计方案图4-SEQ图4-\*ARABIC1总体流程图如图4-1所示,本检测工具由4个主要的图4-SEQ图4-\*ARABIC1总体流程图交互模块图4-SEQ图4-\*ARABIC2指令格式示例本模块用于为用户提供可交互的界面,通常情况下,为了提高服务器的性能,大多数服务器上的操作系统都是没有图形化界面的,所有操作都是通过Shell终端进行的,因此本程序采用实现图4-SEQ图4-\*ARABIC2指令格式示例配置模块图4-SEQ图4-\*ARABIC3配置模块相关指令本模块用于为用户提供扫描配置的接口对扫描路径和白名单路径进行管理。WebShell需要Web容器的环境才可以运行,并且服务器上的Web应用路径不会经常变动,因此本程序采用将web应用所在的物理路径统一管理图4-SEQ图4-\*ARABIC3配置模块相关指令本模块通过交互式Shell解析相关指令进行统一调用,如图4-3所示,定义三个指令:set、show和remove分别作为配置管理相关的添加、查找、删除的操作指令,由于只需要对扫描路径和白名单进行管理,因此在指令中分别使用字符串“path”和“white”作为代表。为了提供更人性化的操作,考虑到添加和删除的操作可以通过批量操作进行,因此对于其参数使用不定长的参数形式,避免管理人员添加多个目录时需要进行多次操作。并且由于删除操作具有一定的危险性,在执行删除指令时会经过二次确认后才进行操作,避免误操作带来的影响。扫描模块图4-SEQ图4-\*ARABIC4扫描流程图本模块是本工具的核心模块,用于对用户配置的路径图4-SEQ图4-\*ARABIC4扫描流程图预处理数据根据对用户配置的扫描列表进行遍历提取PHP类型的脚本文件以及剔除白名单相关的路径,最后形成一个由物理路径组成的待扫描列表,以供下一步使用。指纹识别MD5是一种信息摘要算法,任意长度的内容使用MD5进行计算后都会生成一串固定且唯一的32位长度的字符串,并且内容在被修改后,重新计算MD5得到的结果都将会另外的结果[[]李杰,张学旺.MD5报文摘要算法与文件系统完整性[]李杰,张学旺.MD5报文摘要算法与文件系统完整性保护[J].湘潭大学自然科学学报,2003(03):96-100.在获得文件的指纹后,为了加快检测效率,通过将文件指纹与现有的指纹库(存放已知WebShell文件的MD5值)进行对比,先进行筛选并分类出已知的WebShell文件和未知的待检测文件,未知文件将进入下一步的处理。模型检测在使用3.3中所提及的检测模型进行检测之前,需要将在上一步中得到了的需要使用CNN模型进行检测的文件物理路径列表中的文件的内容进行预处理。首先利用PHP程序的VLD扩展将所有的文件编译成相应的opcode序列,然后使用词汇表模型将所有的opcode序列编码成特征向量,最后输入到训练后的CNN模型进行预测,并将预测结果和上一步指纹扫描识别出的WebShell集合进行合并返回给用户。数据库在本程序需要对配置信息和WebShell指纹信息进行持久化,因此采用轻型数据库SQLite对信息进行管理。在数据库中我们需要的建立3张表用于存储程序运行所需的信息,分别为待扫描目录路径表(scanner_dir)、白名单目录路径表(scanner_whites)以及WebShell指纹信息表(web_shell_feature)。scanner_dir:用于记录需要扫描目录的物理路径等信息,数据库表结构如表4-1所示。表4-SEQ表4-\*ARABIC1scanner_dir字段名类型是否主键非空备注idInteger是是主键filepathString否是扫描文件路径scaned_timeDateTime否否上次扫描时间has_webshellBoolean否是该路径是否存在木马is_enableBoolean否否是否启用createdDateTime否是创建时间modifiedDatetime否是修改时间scanner_whites:用于记录无需扫描的白名单物理路径信息,数据库表结构如表4-2所示。表4-SEQ表4-\*ARABIC2scanner_whites表字段名类型是否主键非空备注idInteger是是主键filepathString否是加白的文件物理路径createdDateTime否是创建时间modifiedDatetime否是修改时间web_shell_feature:用于保存已知的WebShell指纹信息,数据库表结构如表4-3所示。表4-SEQ表4-\*ARABIC3web_shell_feature表字段名类型是否主键非空备注idString是是主键,文件的MD5指纹is_webshellBoolean否是加白的文件物理路径createdDateTime否是创建时间modifiedDatetime否是修改时间本章小结本章主要对WebShell的特点进行结合分析需要涉及到的功能,并将需要实现的功能划分为GUI、配置管理、扫描模块和数据库持久化四个模块,并针对每个模块中的功能进行细分和设计相关的逻辑。

第五章代码实现与测试相关的Python第三方模块简介TensorFlowTensorFlow是一个基于Python的深度学习开源框架,支持使用CPU或GPU来进行运算,被广泛应用在机器学习的各种领域中。本程序使用TensorFlow来实现CNN检测模型的训练和预测。TflearnTflearn是一个将TensorFlow进行模块化封装的工具库,其内部将TensorFlow的许多复杂操作封装成更简便的API,使得开发者可以更快速地创建机器学习的应用。本程序使用Tflearn封装的API进行卷积神经网络模型的搭建。Scikit-learnScikit-learn(sklearn)是一个针对数据挖掘和分析的工具库,其内部对机器学习中的许多方法进行实现封装,本程序使用sklearn进行特征提取和模型评估。NumpyNumpy(NumericalPython)是十分强大的数学运算库,主要用于数组计算,支持大量的维度数组与矩阵运算,常被用于机器学习中相关的数学运算。PromptToolkitPromptToolkit是一个轻量级的用于构建交互式终端的工具库,其支持构建具备语法高亮、代码补全、热键绑定等功能的交互式终端界面。本程序使用PromptToolkit实现自定义的交互式终端。PrettyTablePrettyTable是一个用于对数据进行格式化为字符串表格的工具库,支持多种样式的表格,以达到美化数据显示的效果。SQLAlchemyORM指的是对象关系映射,英文全称为ObjectRelationalMapping,可以通过操作类的对象的形式对数据库进行操作,SQLAlchemy便是基于Python的一个ORM数据库框架,本程序将基于SQLAlchemy实现数据库的操作。代码实现数据持久化本程序中采用SQLAlchemy对配置、指纹库等信息进行持久化,其可以通过创建类的方式对数据库表结构进行生成,根据数据库设计表创建如下映射类:图5-SEQ图5-\*ARABIC1映射类ScannerDir数据库表scanner图5-SEQ图5-\*ARABIC1映射类ScannerDir图5-SEQ图5-\*ARABIC2图5-SEQ图5-\*ARABIC2映射类ScannerWhites图5-SEQ图5-\*ARABIC3映射类WebShellFeature图5-SEQ图5-\*ARABIC3映射类WebShellFeature交互模块图5-SEQ图5-\*ARABIC图5-SEQ图5-\*ARABIC4界面核心代码图5-SEQ图5-\*ARABIC5指令解析核心代码图5-SEQ图5-\*ARABIC5指令解析核心代码图5-SEQ图5-\*ARABIC图5-SEQ图5-\*ARABIC6主界面演示图5-SEQ图5-\*ARABIC7图5-SEQ图5-\*ARABIC7参数提示功能演示图5-SEQ图5-\*ARABIC8参数提示核心代码参数提示功能图5-SEQ图5-\*ARABIC8参数提示核心代码图5-SEQ图5-\*ARABIC9指令解析函数演示此外,通过将指令解析成函数调用的方式可以快速新增其他功能而无需过多修改代码,如图5-9所示,其中用户输入指令“setpathxxx”,程序将会调用“图5-SEQ图5-\*ARABIC9指令解析函数演示图5-SEQ图5-\*ARABIC10装饰器实现代码示例图5-SEQ图5-\*ARABIC10装饰器实现代码示例配置管理图5-SEQ图5-\*ARABIC11配置新增查找演示set指令可以增加配置项,show图5-SEQ图5-\*ARABIC11配置新增查找演示图5-SEQ图5-\*ARABIC12删除图5-SEQ图5-\*ARABIC12删除配置演示图5-SEQ图5-\*ARABIC13移除配置核心代码图5-SEQ图5-\*ARABIC13移除配置核心代码扫描模块图5-SEQ图5-\*ARABIC14扫描核心代码扫描检测流程见第4.2.3图5-SEQ图5-\*ARABIC14扫描核心代码图5-SEQ图5-\*ARABIC15指纹信息扫描其中classification_by_md5图5-SEQ图5-\*ARABIC15指纹信息扫描图5-SEQ图5-\*ARABIC16CNN模型扫描核心代码check函数是采用CNN图5-SEQ图5-\*ARABIC16CNN模型扫描核心代码效果测试测试集图5-SEQ图5-\*ARABIC17测试样本测试样本采用随机抽取的100个WebShell样本进行测试图5-SEQ图5-\*ARABIC17测试样本测试工具图5-SEQ图5-\*ARABIC18本工具检测效果使用本工具进行检测出91图5-SEQ图5-\*ARABIC18本工具检测效果图5-SEQ图5-\*ARABIC19D盾检测结果使用D盾进行检测,共发现8图5-SEQ图5-\*ARABIC19D盾检测结果图5-SEQ图5-\*ARABIC20webdir+检测结果使用百度在线WebShell检测工具WEBDIR+进行检测,共检出7图5-SEQ图5-\*ARABIC20webdir+检测结果本章小结本章从代码的层面上介绍了实现本工具所使用的依赖库以及对程序的实现逻辑与核心代码展开分析。此外,为了检测工具的使用效果,随机抽取了100个样本分别对不同的工具进行检测,从检测结果上看,本文实现的基于卷积神经网络检测工具效果优于传统的检测工具。

第六章总结本人从2019年11月启动了毕业论文的工作,从最开始因为缺少相关资料和知识沉淀不足,导致完成毕设的进度缓慢。经过在这几个月的时间里一步一步慢慢收集资料进行学习,项目从无到有,从实现一些基础模块到整体框架的完善,最终较圆满地完成了本次的毕业设计工作。随着云时代的来临,我们面临着越来越多的网络安全威胁,对于企业来说,公司越来越多的业务模式也已经从线下迁移到了网上,面临的Web安全问题也越来越多,一旦服务器被入侵,则会给企业带来巨大的损失。在近年来的安全趋势中,企业的服务器被植入WebShell的事件也一直高居不下,传统的WebShell检测工具在误报和漏报上偏高,因此本文实现了基于卷积神经网络的WebShell检测工具,所进行的工作主要有以下几方面:研究目前各种主流工具检测WebShell的方案,并分析各种方案的优劣。研究深度学习中在WebShell检测上的应用并利用Python生成预测模型。利用上文所分析的卷积神经网络算法实现WebShell检测模型,并基于该模型设计一套检测流程。在本次毕业设计的实践中,我得到了一个很好的锻炼和提升机会,对许多学过的知识也有了全新的理解,也对本次项目有了不一样的目标,在此对这次项目的设计与实现进行简单的总结。本项目采用的检测模型在实验环境中取得了很好的效果,但在实际环境中仍有提升的空间,此外,由于WebShell样本的采集难度较大,通过开源途径收集到的样本集数量过少,也是导致模型在实际环境中效果没达到预期的原因。因此,在接下来的工作中,我将继续深入本课题的研究以期可以解决以上的问题。

参考文献致谢大学四年转眼即逝,在这四年的学习生活中,我得到了很多方面的成长,不仅学到了许多专业知识,也学会了不少的人生哲理。在此,我感谢陪我走过大学生活的每一位老师,每一位同学,感谢老师们不辞辛苦地为我们付出,感谢同学们陪我共同成长!本论文最终能顺利完成,我还要感谢我的论文导师罗海波老师,罗老师从大学入学开始就陪伴着我们一起到了毕业,本人从论文的选题到项目实现的思路再到论文的完成,罗老师都给了我不少有价值的建议,使得我的毕业设计课题可以顺利进行,使我受益良多。此外,我还要感谢我的母校广东东软学院,是母校给我提供了一个很好的学习和生活的平台,使我结识了许多良师益友。在此,我还要感谢审阅本论文的各位专家,感谢所有关心和爱护过我的亲人、老师、同学和朋友们!

电脑无法识别U盘该怎么办HYPERLINK电脑无法识别U盘怎么办?打开我的电脑上单击右键,在快捷菜单里,选择“管理”,打开“计算机管理”窗口。在计算机管理窗口里,选择“存储”下面的“磁盘管理”,如果看得到没有盘符的U盘,那么在这个U盘上按鼠标右键,选择“更改驱动器名称和路径”选项,就打开了“更改……的驱动器号和路径”对话框。再点击“更改”按钮,打开“更改驱动器号和路径”的对话框,在“指定以下驱动器号”的右边下拉列表里,选择你希望分配给U盘的驱动器号,尽可能靠后选择,比如X、Y、Z,选择好后,单击确定按钮,回到上一次“更改……的驱动器号和路径”对话框窗口,再一次单击确定,就回到“计算机管理”窗口。至此,如果一切正常,就给U盘单独设置了一个长久使用的驱动器号,并却,不受虚拟驱动器的影响了。建议将U盘插到电脑上,看任务栏中是否显示图标,如果显示,在我的电脑点右键查看属性——高级——硬件——设备管理器——查看里面是否有问号的设备,在问号设备上点右键——更新驱动程序然后下一步——否暂时不连接到网络——下一步自动安装软件(推荐)就可以了另外:系统不认U盘的几种处理方法1.禁用主板usb设备。管理员在CMOS设置里将USB设备禁用,并且设置BIOS密码,这样U盘插到电脑上以后,电脑也不会识别。这种方法有它的局限性,就是不仅禁用了U盘,同时也禁用了其他的usb设备,比如usb鼠标,usb光驱等。所以这种方法管理员一般不会用,除非这台电脑非常重要,值得他舍弃掉整个usb总线的功能。但是这种屏蔽也可以破解,即便设置了密码。整个BIOS设置都存放在CMOS芯片里,而COMS的记忆作用是靠主板上的一个电容供电的。电容的电来源于主板电池,所以,只要把主板电池卸下来,用一根导线将原来装电池的地方正负极短接,瞬间就能清空整个CMOS设置,包括BIOS的密码。随后只需安回电池,自己重新设置一下CMOS,就可以使用usb设备了。(当然,这需要打开机箱,一般众目睽睽之下不大适用~~)2.修改注册表项,禁用usb移动存储设备。打开注册表文件,依次展开"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbehci”双击右面的“Start”键,把编辑窗口中的“数值数据”改为“4”,把基数选择为“十六进制”就可以了。改好后注销一下就可以看见效果了。为了防止别人用相同的方法来破解,我们可以删除或者改名注册表编辑器程序。提示:“Start”这个键是USB设备的工作开关,默认设置为“3”表示手动,“2”是表示自动,“4”是表示停用。3.在computermanagement里将removablestorage的使用权限禁止。computermanagement是一个windows管理组件,可以在控制面板——管理工具——计算机管理打开。在该工具窗口中storage——removablestorage——property中,general项,可以控制系统托盘是否显示security则可以管理移动存储设备的使用权限。在security中将普通用户的使用权限降低,就可以达到禁用u盘的目的。破解的方法也很简单,管理员降低普通用户移动存储设备的使用权限,但未必禁用computermanagement的使用权限。普通用户可以通过这个工具解除usb移动存储设备的使用权限限制。另外,值得一提的是,如果u盘插到电脑上后可以驱动,但是我的电脑里却没有盘符,很有可能是管理员改动了u盘的默认盘符,使得我的电脑不能识别。这种情况,可以在movablestorage中看到u盘驱动器。可以在u盘驱动器属性设置里为u盘重新分配一个盘符,再重新插拔一次u盘,就可以在我的电脑里看到u盘的盘符了。一、首先可以将该U盘换到别的机器上,看使用是否正常。如果排除了硬件损坏的可能,一般就是软件方面有问题。在WindowsXP+SP1操作系统下,有些USB2.0设备的确常常出现工作不稳定的问题,可以试试安装设备自带的USB2.0驱动程序。另外最好不要使用USB延长线,防止因为供电不足而造成不稳定现象。如果仍无效,可以在主板BIOS设定中,将USB接口强行设置为USB1.1传输速率。二、(适用于WIN98)启动计算机,进入主板BIOS设置,检查BIOS中USB的相关选项是否已经打开:OnChipUSB设定为Enabled;USBController设定为Enabled;PNPOSInstalled设定为Yes;AssignIRQForUSB设成Enabled。要正常使用USB设备首先要开启USB接口,在主板BIOS里可以进行此项工作,一般来说只需在BIOS中进入ChipsetFeatures设置,并将USBKeyborad/MouseLegacy选项设定为Enable,就能够保证在操作系统下使用USB键盘了。这些选项的作用是打开主板芯片组对USB设备的完全支持,为系统识别USB设备做准备工作。三、USB口接触不好处理办法:拔下,等十秒钟再插上USB口,使接触完好;五、闪存盘驱动程序没有安装完成(WIN98系统下)处理办法:鼠标点“我的电脑”,选择属性找到“通用串行总线”,删除其中的USBMASSSTORAGE项,再点击“刷新”,然后按照提示重新安装一次驱动程序。六、接其它USB设备(如扫描仪、打印机、数码相机)时可以正常使用,接优盘时闪指示灯不亮,不能够使用。1、检查优盘与电脑的联接是否正常,并换用其它USB接口测试。2、检查设备管理器,看是否出现”通用总线设备控制器”条目,如果没有,请将电脑主板BIOS中USB接口条目*激活(ENABLE)。3、如果电脑安装过其它类型USB设备,卸载该设备驱动程序,并首先安装优盘驱动程序。4、到其它电脑试用此优盘,确认是否优盘不良。七、启动型优盘在的电脑上无法实现启动,可能是主板型号不支持。如何判断一块主板是否支持闪存盘启动系统启动型优盘是采用模拟USB软驱和USB硬盘的方式启动电脑的。只要电脑主板支持USB设备启动,即BIOS的启动选项中有USB-FDD、USB-HDD或是其它类似的选项,就可以使用启动型优盘启动电脑。八、第一次在电脑上使用优盘,未出现提示发现新硬件的窗口,驱动程序无法安装的原因可能是:1、主板usbcontroller未启用解决办法:在电脑主板BIOS中启用此功能。2、usbcontroller已经启用但运行不正常解决办法:在设备管理器中删除”通用串行控制器”下的相关设备并刷新。3、优盘被电脑识别异常,在设备管理器中表现为带有黄色?或!的”其它设备”或“未知设备”。解决办法:删除此设备并刷新。九、大容量的U盘(例如兼具MP3播放器或录音功能的U盘)或移动硬盘在电脑上无法正常使用,虽然系统提示找到了未知的USB设备,但无法正确识别U盘或移动硬盘。原因可能是:1.USB接口供电不足:系统为每个USB接口分配了500mA的最大输出电流,一般的U盘只需要100mA的工作电流,因此在使用过程中不会出现什么问题。大多数移动硬盘所使用的是普通的2.5英寸硬盘,其工作电流介于500mA~1000mA之间,此时假如仅仅通过USB接口供电,当系统中并无其他USB设备时,那么还是可以勉强使用的,但如果电压不稳的话,就随时可能出现供电不足的问题。特别是使用支持USB2.0的移动硬盘时,情况最为严重。另外,如果你的笔记本电脑使用电池供电,那么USB接口所分配的电量就更小了。2.使用了外接的USB扩展卡:在笔记本电脑中使用USB2.0的U盘或移动硬盘时,如果笔记本电脑不支持USB2.0技术,一般必须通过PCMCIA卡转USB2.0的扩展卡来间接实现支持,这些扩展卡基本上都采用NEC公司的D720100AGMUSB控制芯片,少则提供两个USB2.0接口,多则提供五个USB2.0接口,对一般用户而言足够使用了。由于PCMICA接口提供的电源功率比板载USB接口要小,这样就会由于供电不足而导致移动硬盘工作的出现问题。解决方案:1.它从USB连接线上接移动硬盘的一端引出一根转接线,可以插入电脑背后的PS/2接口取电,这里可以比USB接口提供更大的电流输出。2.利用电源补偿线(也称“键盘取电线”),如果U盘或移动硬盘的包装盒中提供了选配的电源适配器,你就可以直接使用外接电源,这样就可以从根本上避免供电不足的情况发生了前置USB线接错。当主板上的USB线和机箱上的前置USB接口对应相接时把正负接反就会发生这类故障,这也是相当危险的,因为正负接反很可能会使得USB设备烧毁。所以尽量采用机箱后置的USB接口,也少用延长线.也可能是断口有问题,换个USB端口看下.USB接口电压不足。当把<ahref="mobileharddisk">移动硬盘</a>接在前置USB口上时就有可能发生系统无法识别出设备的故障。原因是<ahref="">移动硬盘</a>功率比较大要求电压相对比较严格,前置接口可能无法提供足够的电压,当然劣质的电源也可能会造成这个问题。解决方法是<ahref="">移动硬盘</a>不要接在前置USB接口上,更换劣质低功率的电源或尽量使用外接电源的硬盘盒,假如有条件的话。主板和系统的兼容性问题。呵呵这类故障中最著名的就是NF2主板与USB的兼容性问题。假如你是在NF2的主板上碰到这个问题的话,则可以先安装最新的nForce2专用USB2.0驱动和补丁、最新的主板补丁和操作系统补丁,还是不行的话尝试着刷新一下主板的BIOS一般都能解决。系统或BIOS问题。当你在BIOS或操作系统中禁用了USB时就会发生USB设备无法在系统中识别。解决方法是开启与USB设备相关的选项。就是开机按F2或DEL键,进入BIOS,把enableusbdevice选择enable。拔插要小心,读写时千万不可拔出,不然有可能烧毁芯片。XP中任务栏中多出USB设备的图标,打开该图标就会在列表中显示U盘设备,选择将该设备停用,然后你再拔出设备,这样会比较安全。

其实判断软件硬件问题很简单,在别的机器或换个系统试试就可以了.有些小的问题不妨先用专门软件格式化下.还有提醒大家WINDOWS下格式化时要选择FAT,不要选FAT32。

提示无法识别的USB设备维修

故障提示如图:

无法识别的USB设备:UnknownUSBDevice.很多人都遇到过的一个问题,所谓“无法识别”对于操作系统来说,或者是驱动程度有问题,或者是USB设备出现了问题,或者是计算机与USB设备连接出现了故障,解决问题的方法也是从这几处着手。

对于不同的设备会有不同的处理方法,了解USB设备正常工作需要的条件以及一些可能影响USB设备正常工作的因素,会有助于解决问题。

下面是保证USB设备可以正常工作的一些条件:(1)USB设备本身没有任何问题——可以通过在其它计算机上进行测试,保证能正常工作;(2)USB接口没有任何问题——可以通过连接其它的USB设备在此接口上进行测试;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论