【基于日志的Web攻击检测系统设计14000字(论文)】_第1页
【基于日志的Web攻击检测系统设计14000字(论文)】_第2页
【基于日志的Web攻击检测系统设计14000字(论文)】_第3页
【基于日志的Web攻击检测系统设计14000字(论文)】_第4页
【基于日志的Web攻击检测系统设计14000字(论文)】_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1基于日志的Web攻击检测系统设计摘要随着新时代网络技术的不断发展与普及,网上冲浪已经成为了人们日常生活中至关重要的一大元素。随着时代潮流不断涌现出的各种Web应用程序——网上购物、网上支付银行、搜索引擎、网络媒体、电子邮件系统、社交软件……几乎涵盖包揽了人们日常生活的各个方面。然而,各种针对万维网应用以及服务器的攻击手段也层出不穷,而Web服务器日志则成为了检查安全隐患,及时发现系统漏洞与攻击行为并展开有效防范和补救措施的关键要素,而人工手动分析Web日志的工作量与难度又相对过大。为了解决此问题,本文设计了一个由LSTM长短期神经网络组成的Deeplog深度学习模型,利用开源日志数据集对其完成训练后,实现了基于Web日志的异常攻击行为检测系统。文中分步详细说明了系统的基本原理、设计方案、具体实现,最后完成了对系统的测试与总结,并对Web攻击检测领域作出未来展望。关键词:Web日志分析;Web攻击检测;异常检测;深度学习;目录TOC\h\z\t"章,1,节标题,2,条标题,3"摘要 II插图索引 VI附表索引 VII第1章绪论 11.1研究背景与意义 11.2国内外研究现状及研究目的 11.3论文组织结构 31.4本章总结 3第2章相关理论技术 42.1Web日志简述 42.1.1日志定义 42.1.2Web日志概述 42.1.3Web日志格式简介 52.2Web攻击简介 82.2.1Web攻击概述 82.2.2Web服务器及应用程序面临的安全问题 82.3应用技术 92.3.1攻击检测方法简介 92.3.2训练方法简介 102.3.3界面设计方法简介 112.4本章总结 11第3章系统步骤化设计 123.1系统概述 123.2系统步骤化设计 133.2.1日志结构化解析 133.2.2日志训练策略 143.2.3日志分析预测 163.2.4前端GUI界面设计 173.3本章总结 17第4章关键技术问题 184.1基于Spellpy的Web日志结构化解析 184.2基于LSTM神经网络的Web日志训练 204.3日志分析预测实际应用 264.4GUI界面 284.5本章总结 30第5章实现效果 315.1坏境调试 315.2初始界面 335.3系统测试 345.3.1上传日志 345.3.2结构化日志 355.3.3日志预测分析 375.4本章总结 39第6章总结与展望 406.1总结 406.2展望 40参考文献 41

附表索引TOC\h\z\t"样式7"\c表2.1Web日志常见字段表 7表2.2《OWASPTOP10》2013年版本与2017年版本对比 9表2.3误用检测和异常检测特点对比 10表3.1使用的Pyqt5模块 17表4.1导入训练流程的主要参数表 24

第1章绪论1.1研究背景与意义 我们常说的WWW是WorldWildWeb的简写,被称为万维网,是一个有着全世界规模的联机式信息数据存贮场所,其特点是能够提供结点分布式服务,而基于万维网开发的Web应用则是目前新时代网络的主要构成部分,诸如网上购物、网上支付与银行、搜索引擎、网络媒体、电子邮件系统、社交软件等等,形形色色的各类Web应用丰富了我们日常生活的每一个角落,而与此同时,我们的隐私信息也被置于危险的境地,篡改Web网页、跨站脚本、IP地址欺骗、伪造DNS域名攻击……各种类型的攻击手段无时无刻不在威胁着Web使用者的信息安全,Web安全成为了现代互联网日益突出的严峻问题。 万维网日志每一行都记载着日期、时间、访问请求者的IP地址及具体查看内容……一系列相关操作的描述,由于Web攻击的手段种类众多、变化多端,在Web网站遭受攻击后,管理者会选择首先去查看Web日志的服务,并对日志中的记录信息进行分析判断,通过攻击者留下的信息记录研究出其手段类型以及规律模式,再针对站点采取相应的防范处理措施。然而,在日常中的Web服务器上的日志访问记录不计其数,而其中超过百分之九十九的访问记录都是已授权的正常请求,且通常情况下攻击并不是单日志行为,而是有特征的数条异常记录分散隐藏在数量庞杂的正常日志请求记录中。倘若手动在不断增加的海量的日志记录中筛查异常的日志请求,给网站管理员带来的难度太大,既耗时又耗力。人工分析日志记录的难度过大,可见,对于怎样从海量的日志信息中分析检测出异常攻击行为、提高Web系统的安全性、进而提高Web系统的安全性的研究十分有必要。现如今原来的静态规则库类的保护机制已经无法满足Web应用蓬勃发展中涌现的新状况,所以可以通过学习日志的性质、规则,训练出一个能从日志中检测异常攻击行为的模型来应对Web应用所面临的安全问题。1.2国内外研究现状及研究目的日志安全解析系统,也称为基于Web日志的攻击检测系统(LogBasedIntrusionDetectionSystem,简称“LIDS”),它是一款针对基于网络和主机的攻击检测系统进行补充和辅助的、能显著提高信息安全性的强有力工具,日志分析是一种主动防护技术,区别于防火墙,它采用异常检测或误用检测的方式,来解析Web应用日常产生的日志文件,能有效帮助计算机识别应对网络攻击,提高了管理者安全管理服务器的能力,是攻击检测系统中的重要内容。主要的日志安全性解析系统一般采用误用检测(Misusedetection)的方式,误用检测既采集现在已存在的攻击类型,建立检测类型特征库,然后检测日志中的海量信息,把服务器管理者认为异常的数据记录提取出来后,与特征库中的数据进行匹配,其采用的方法为模式匹配算法。这种方法需要管理者拥有Web攻击的丰富知识,以及对攻击类型特征值的建立。基于攻击检测的研究在国外90年代末已经出现了商业用途的产品,而国内对此领域的商用系统开发得开始得较晚,同境外的产品存在一些整体差距。目前国内的日志安全解析工具大多采用误用检测的方式,这类工具众多,其实现的功能便是在日志记录中根据特征值库进行检索,将匹配符合的记录回传给管理者进行报告。国外的主流开源软件现有Logcheck、Friends、SimpleLogWatcher等等,常用于解析Ubuntu系统的各种日志文件记录。;国内同样存在许多在行业内领先的日志管理工具,例如:杭州SafetyBase信息技术有限公司开发出的Logbase,该项工具作为一种运维安全审计系统,采用了关键字实时跟踪的核心技术。文献《基于Web日志的入侵检测系统》[[]范春荣.基于Web日志的入侵检测系统设计与实现[D].河北科技大学,2012.]采用误用检测的模式匹配算法,并基于数据传输服务(DataTransformationServer,简称D[]范春荣.基于Web日志的入侵检测系统设计与实现[D].河北科技大学,2012.由于传统机器学习(MachineLearning,简称ML)的误用检测在面对一些新型的、从未出现过的攻击类型时会显得束手无策,本文将采取基于深度学习(DeepLearning,简称DL)的异常检测(AnomalyDetection)方式进行对日志的安全解析。异常检测区别于误用检测,其技术核心的关键在于:异常行为和正常的用户请求访问行为存在一定差异性,对于此种差异性可以进行定性或是定量的描述。基于这个理论,可以建立攻击检测模型,利用网上的正常开源Web日志数据作为样本进行学习,对此模型进行训练进行异常检测,在某单位时间内判别正常的用户请求与访问行为过程中检测异常攻击行为,统计异常的数目,并进行绘制制异常曲线,进而实现攻击检测。1.3论文组织结构本文共分为6章,文章的具体章节结构如下:第1章绪论:简单地描述了本篇文章的主要研究背景,研究意义,国内外的研究发展现状,研究目标,以及论文的组织架构。相关理论技术:介绍与攻击检测系统相关的Web日志属性定义、格式及采用的数据集、Web攻击、核心技术等相关理论技术。系统步骤化设计:本章简要分析系统、介绍攻击检测系统的步骤化设计结构方案,阐述日志解析、训练模型、分析预测和前端UI界面的设计方案。关键技术问题:该章阐述实现攻击检测系统所采用的几个核心技术的实现细节,并给出其中部分代码实现。实现效果:该章展示攻击检测系统所实现的效果图,并对其进行简要说明。总结与展望:该章对文章进行总结,并对基于日志的Web攻击防范领域的未来发展给出展望。1.4本章总结本章简要介绍了课题相关的研究背景和意义,描述了目前国内外有关Web日志安全解析系统的研究现状,并阐述研究目的与研究方向,然后概括了本文的组织结构。

第2章相关理论技术2.1Web日志简述2.1.1日志定义日志(Log)是一个系统对固定对象的所有操作和这些操作的结果按时序的记录集合,是该系统状态变化的反馈。几乎所有的网络设备、操作系统及应用程序在运行时都会生成日志文件,其格式通常为.log格式,所有日志文件都由众多条日志记录构成,每一条都记录着一次系统内的独立事件和活动信息,包含一个时间戳和发起操作的子系统包含的其他信息,这对于一个系统的监控、审计以及攻击检测是十分重要的;这些日志文件可用于管理者对系统内所管理的资源进行监控;对访问行为开展审计工作;防范攻击行为、检测攻击行为的类型、范围、时间;为网络犯罪提供物证等。日志文件的特点主要有数据量庞大、种类繁多、易被篡改等日志文件按照需要管理者关注的系统类型进行划分,大概可以分为以下几种:(一)Web服务器日志文件:万维网节点服务所生成的事件日志(EventLog)、以及错误告警(ErrorLog);(二)网络连接设备日志文件:计算机网络中各网络层连接器——交换机(Switch)、路由器(Router)等网络设备生成的数据记录等;(三)操作系统日志文件:微软Windows系列、Ubuntu/Linux系列等操作系统生成的系统日志(SysLog)等;(四)网络安全保障设备日志文件:计算机防火墙、病毒防护系统、虚拟专用网络(VPN)等生成的设备日志等;(五)应用系统服务器日志文件:邮件服务器、Tomcat、JMS等应用服务器、工作流服务器生成的错误告警日志。2.1.2Web日志概述万维网服务器被称为Web服务器,是近些年随着万维网的发展驻留于因特网(Internet)上的、可以处理浏览器等万维网客户端的请求并向其返回响应、并提供网络信息浏览与下载服务的专用计算机,其使用超文本传输协议(HTTP),网络运维人员可以在Web服务器上存储网络文件,并开放供全世界的万维网用户查看和下载。目前全世界上几种主要的Web服务器系统分别是IIS、Openstack、Apache以及Nginx。当客户端使用超文本传输协议向某指定的Web服务器发出万维网页面访问请求时,服务器接收此访问请求后,按照其既定运作方式对此客户端的请求进行响应,与此同时,此客户端的访问信息就会被记载在服务器的日志文件中,整个生成过程如下图所示。图2.1Web日志的生成Web日志中的每一条记录包含的主要信息包括:请求访问主机的IP址、访问请求发起的时间、其本次访问的具体内容、使用的请求方式及本服务器响应的状态码、亦或是请求过程中发生的错误等等各种数据。通常Web日志会事无巨细地记载着因特网服务下假设网站上完成的每一次无论成功或失败的请求访问的具体信息,所以可以基于Web日志开展攻击检测、挖掘数据、以及维修一些服务器故障或Web网页故障等等的工作。2.1.3Web日志格式简介目前被广泛使用的Web服务器有微软(Micrsoft)公司旗下的IIS服务器、Apache软件基金会开发的ApacheHTTPSever、俄罗斯程序架构师伊戈·瑟斯耶夫(IgorSysoev)为Рамблер站点开发的Nginx、美国国家航空航天局(NASA)和Rackspace共同研发的Openstack服务系统等等,这些服务器生成的Web日志格式基本都为IISW3C扩展日志格式[[]李浩杰.基于Web日志的异常检测分析研究[D].陕西师范大学,2015.][]李浩杰.基于Web日志的异常检测分析研究[D].陕西师范大学,2015.Hadoop分布式文件系统(HadoopDistributedFileSystem,简称HDFS)是指一种在通用硬件(CommodityHardware)上运行的高容错率文件系统,最开始是作为ApacheNutch基础架构开发出的,能提供高吞吐量(HighThroughput)来访问具体的Web应用程序[[]一种分布式消息获取方法[EB/OL]./zhuanli/62/CN104954460.html,2021-4-28]。HDFS采用了主仆(Master\Slave)的结构模型,一个集群由唯一一个NameNode和数个DataNode组成,每一个数据结点都用来存储数据文件,由NameNode作为主结点(Master)管理整个系统集群的命名空间和对存储文件的访问[[[]一种分布式消息获取方法[EB/OL]./zhuanli/62/CN104954460.html,2021-4-28[]百度百科.HTFS百度百科[EB/OL]./item/hdfs/4836121?fr=aladdin,2021-4-28图2.2HDFS集群架构 以Hadoop2.x版本中Yarn系统服务的日志为例,HDFS日志文件的默认存放路径一般为${HADOOP_HOME}/logs目录下,如Resourcemanager的服务日志便为yarn-${USER}-resourcemanager-${HSTNAME}.log,其中${USER}是启动Resourcemanager此进程的用户名,${HOSTNAME}是运行Resourcemanager此进程所在主机的主机名称[[][]hadoop日志存放路径(日志讲解好文章)&hadoop历史服务器[EB/OL]./qq_27231343/article/details/51305660,2016-05-03 不同的服务器系统产生日志数据记录格式存在一定的差异性,但共有的重要信息类型几乎一致,通常包括以下这几种字段:字段名称简要说明Date请求访问发生日期Time请求访问发生时刻CodeModel运行的代码模块PID每个进程被分配的唯一IDRequestID每个操作被分配的唯一响应IDIPaddress服务器和来访主机IP地址Level本次请求访问的日志等级ParameterList执行操作的具体内容及结果AgreementVertion来访者客户端使用浏览器协议及版本号Status执行操作状态码Length请求字节长度TimeTaken执行操作所用时长表2.1Web日志常见字段表下面通过对一条Openstack系统的日志记录的解析来举例说明: 2017-05-1419:39:20nova.osapi_compute.wsgi.server58[req-6b8024bd-6e56-46f4-8584-e9e60471fe69113d3a99c3da401fbd62cc2caa5b96d254fadb412c4e40cdbaed9335e4c35a9e---]"GET/v2/54fadb412c4e40cdbaed9335e4c35a9e/servers/detailHTTP/1.1"status:200len:1893time:0.2694130nova-api.log.23625746INFO 从本条日志记录可以一清二楚地看到用户请求访问的具体情况:请求访问时刻2017-05-1419:39:20(通常为格林威治时间)服务器IP地址58来访者主机IP地址每一步操作ID-6b8024bd-6e56-46f4-8584-e9e60471fe69113d3a99c3da401fbd62cc2caa5b96d254fadb412c4e40cdbaed9335e4c35a9e日志等级INFO(常见的日志等级包括:FATAL:极为严重的错误,导致应用程序立刻无法运行,例如磁盘空间为空、INFO:报告进度和状态、TRACE:在线调程序、ERROR:进程状态错误、DEBUG:调试及终端查询、WORNING:遇到非法数据警告信息,其优先级别为TRACE<DEBUG<INFO<WARNING<ERROR<FATAL)进程ID25746执行操作GET/v2/54fadb412c4e40cdbaed9335e4c35a9e/servers/detail浏览器协议类型及版本号HTTP/1.1操作状态码200(操作状态码status一般由三位阿拉伯数字构成,第一个数字代表着响应类型,常见的操作状态码有200表示操作成功、404NOTFOUND表示访问者请求的具体内容不存在、400表示访问者语法错误系统无法识别、500INTERNETSEVERERROR表示服务器或网站系统产生了预期之外的错误,例如断网。)持续时长0.2694130毫秒请求字节长度1893字节2.2Web攻击简介2.2.1Web攻击概述Web应用程序通常使用超文本传输协议(HyperTextTransferProtocol,简称HTTP)来对其进行请求访问,而Web应用攻击则是利用了HTTP对Web服务器发出特殊访问请求,发掘出某些可被操控的Web应用程序中的漏洞并实施入侵,读取并篡改目标应用程序其未被授权访问的数据信息,然后对Web服务器进行更深入的操控和破坏。Web攻击有三种主流办法可以成功:其一,利用Web网页的UI界面进而操控Web应用;其二,利用统一资源定位标识(UniformResourceLocator,简称URL)操控Web应用;其三,利用URL未收录的部分HTTP对Web应用进行非法访问和修改。2.2.2Web服务器及应用程序面临的安全问题开放式Web应用程序安全项目(OpenWebApplicationSecurityProject,简称OWASP)作为一个非营利性、开放的、致力维护网络与应用程序安全的世界权威组织,会对全世界的Web应用程序展开研究和安全评测,每隔三年都会更新一次针对万维网应用安全风险等级TOP10榜单,下表是2013年和2017年OWASP发布的十大安全隐患对比,其安全隐患程度从高到低依次递减:20132017注入攻击注入攻击已失效身份认证和会话管理已失效身份认证跨站脚本攻击(CrossSiteScripting,简称XSS)敏感信息泄露安全性不足的直接引用对象外部实体注入攻击(XMLExternalEntityattack,简称XEE)安全性配置出错已失效访问控制敏感信息泄露安全性配置出错功能性访问控制模块缺失跨站脚本攻击(CrossSiteScripting,简称XSS)伪造跨站请求访问(Cross-siteRequestForgery,简称CSRF)安全性不足的反序列操作组件已含有漏洞组件已含有漏洞未被验证的重定向转发日志数据及监控缺失不足表2.2《OWASPTOP10》2013年版本与2017年版本对比 除了上表中公布的具有典型特征和极大危险性的万维网攻击类型以外,根据国家互联网应急中心(NationalInternetEmergencyCenter,简称CNCERT/CC)最近公布的信息中,新型Wannacry蠕虫病毒的风险指数不断上升,其通过SMB漏洞攻击用户的主机,是一种新型的Web应用攻击手段,需要CNCERT/CC以及广大万维网用户对其多加关注[[][]国家互联网应集中心.关于一种蠕虫式勒索病毒的风险提示[EB/OL].2.3应用技术2.3.1攻击检测方法简介目前主流的攻击检测方法分为误用攻击检测(Misusedetection)和异常攻击检测(AnomalyDetection)两种方式。误用检测设计于可被检测出的攻击特征模型库,其核心思想从“所有含有已被检测出的攻击特征的访问请求行为都是攻击行为”着手,将来访用户的访问时间、内容、服务器响应等等的特征与攻击特征模型库中的特征值进行匹配;而异常攻击检测基于“异常的攻击行为和正常的用户请求访问行为存在明显不同”的理论,首先采集服务器、网站上的已被授权的正常用户行为信息,例如开源的日志数据集,然后基于神经网络、大数据统计等等先进的深度学习技术,训练出正常请求访问的模型,再将此模型应用于攻击检测中。当某数据集中的行为操作信息同此模型的行为模式存在明显偏差时,则判断此数据集内存在攻击行为。下表是这两种方式特点的对比:攻击检测方式检测攻击类型检测准确率采用技术误用检测只能检测出规则库中已存在的攻击类型较低专家系统、模型推理、模式匹配算法、状态转换分析异常检测所有与正常行为存在偏差的攻击行为较高神经网络、大数据统计概率、预测模式生成、矩阵分解表2.3误用检测和异常检测特点对比由于误用检测根据特征值库检测攻击行为,只能检测出规则库中已存在的攻击类型,虽然检测准确率较低,但却可以明确分析出攻击行为的类型模式;异常检测能检测出新型的攻击类型,检测准确率较高,但局限性在于难以解释攻击类型,无法描述服务器的行为轨迹。2.3.2训练方法简介 Deeplog算法由MinDu、FeifeiLi、GuinengZheng、VivekSrikumar等人于2017年在文献《DeepLog:AnomalyDetectionandDiagnosisfromSystemLogsthroughDeepLearning》[[]MinD,FLi,ZhengG,etal.DeepLog:AnomalyDetectionandDiagnosisfromSystemLogsthroughDeepLearning[C]//AcmSigsacConferenceonComputer&CommunicationsSecurity.ACM,2017.[]MinD,FLi,ZhengG,etal.DeepLog:AnomalyDetectionandDiagnosisfromSystemLogsthroughDeepLearning[C]//AcmSigsacConferenceonComputer&CommunicationsSecurity.ACM,20界面设计方法简介 图形用户界面(GraphicalUserInterface,简称GUI)能将繁杂的后端程序代码设计为友好的视窗系统,给用户带来良好的使用体验。行业内主流的GUI工具库有Tkinter、PySide、PyGTK以及Pyqt等等。原本的Qt由QtCompany于1991年研发,作为C++开源框架工具,不仅可用于GUI图形界面的可视化设计,还可以面向万维网服务器、数据库以及应用程序控制台等的非GUI界面系统。Pyqt5是该公司基于Qt中的大部分框架与Python语言开发结合成的一个高级开源框架,同样提供了一整套优秀的可视化控件[[]滕广华.基于PyQt5的动态交通标志牌管理软件的设计与实现[J].电子技术与软件工程,2020(20):26-28.][]滕广华.基于PyQt5的动态交通标志牌管理软件的设计与实现[J].电子技术与软件工程,2020(20):26-28.完美实现了跨平台适用,涵盖了Windows、MacOS、Ubuntu\Linux等各大操作系统平台;几乎拥有Qt全部成熟的框架,开发出的界面优雅;开源免费,稳定性和安全性较好,并被长期维护;拥有通用公共许可和商业双重授权;2.4本章总结 本章简单介绍了日志的定义及分类、Web日志的格式、Web应用攻击手段、攻击检测的两种方式、Deeplog算法等系统内应用到的相关理论技术。

第3章系统步骤化设计3.1系统概述伴随着万维网技术全球范围内的普及,网络攻击者们的目标愈发偏向针对各类Web应用以及Web服务器,其攻击手段类型繁多复杂、变化多端,令网络运维人员和广大万维网用户猝不及防。面对Web应用和Web服务器遭受的攻击,首先要做的就是分析Web日志记录,分析攻击手段并对其系统展开维护和防范工作。但由于人工分析海量的日志记录难度、工作量巨大、工作效率过低,所以需要设计一个能自动分析Web日志文件安全性的攻击检测系统。 本文所介绍的系统是针对Web服务器时常遭到攻击行为的情况,设计出的一款通过对网络开源日志数据集进行学习、训练出的一个攻击检测系统,能够对上传的Web日志文件内的数据记录展开单位时间内的分析异常的攻击行为,然后统计异常数目,并绘制出异常曲线图报告给服务器管理员,从而降低服务器管理员查看日志分析安全性的工作难度,有效提高Web服务器的安全管理质量。此攻击检测系统使用Python3设计,系统的适用平台为Windows、MacOS、Ubuntu\Linux,利用HDFS服务器的开源日志数据集训练出模型,主要针对Web服务器下生成的服务日志文件,成功实现了以下几个功能:Web日志服务数据的浏览与管理:提供了能够让服务器管理者能够对Web日志数据集进行上传、浏览数据集等服务。Web日志服务数据的结构化:将和用户上传的日志内非结构化的杂乱数据结构化划分,并对其进行数据清洗等预处理,让管理者能够清晰地浏览每一条日志的关键信息,解决了管理者想要手动查看日志信息耗时耗力的问题。Web服务日志数据的分析:运用LSTM组成的、已经训练好的Deeplog系统在单位时间内对已经结构化的日志数据进行分析,检测不符合正常访问行为的异常并记录。统计异常并绘制时间-异常曲线图:统计检测出的异常值,并画出时间-异常坐标的曲线图,让管理者能够更直观地看到异常数目及发生频率高的时间段。3.2系统步骤化设计3.2.1日志结构化解析 日志解析也称为结构化日志,因为日志数据信息并不是结构化数据,它们的格式和语义可能因系统而异,而且使用非结构化日志诊断问题可能十分困难,即便知道已经发生了错误。日志文件内含有数量庞大且格式杂乱不一的的各项记录信息,从海量的日志数据中人工检测异常显得更为困难。若要基于日志进行分类并学习训练,提高对日志的解析效率,至少要保证其元素相同,第一步要做的就是需要将日志进行结构划分优化,让每条记录中的重要信息以上文中提到的常见字段类型呈现,并给出所有日志记录的共有数据。这便需要利用目前国内外相关领域内特定的理论和方法来解决这个问题,比如使用关键词字段(如上文中字段表内提到的“具体执行操作”)来解析日志,使其转化为向量(Vector)。目前最主流也是最著名的Web日志解析算法当属美籍华人李飞飞(Fei-FeiLi)在文献《Spell:StreamingParsingofSystemEventLogs》[[]DMin,LiF.Spell:StreamingParsingofSystemEventLogs[C]//2016IEEE16thInternationalConferenceonDataMining(ICDM).IEEE,2016.]中所设计的Spell算法,其作为一种实时动态解析日志文件的算法模式,基于最长公共子序列(LongestCommonSubsequence,简称LCS)的方法,完美实现了实时输入日志数据时动态处理,不间断地更新日志的模板。由于解析模块——Spellpy工具存在开源库,便可以采用此工具对日志数据集先进性进行第一部的解析和结构化。使用S[]DMin,LiF.Spell:StreamingParsingofSystemEventLogs[C]//2016IEEE16thInternationalConferenceonDataMining(ICDM).IEEE,2016.图3.1结构化后的日志数据部分截图可以看到杂乱非结构化的日志记录数据被按照记录内的常见字段进行了初步结构化处理,然后再对已经结构化的日志数据做自己的如日期时间合并、事件码转换、数据清洗等的预处理操作,最后会形成一个标准模板,包含了所有日志的关键词编码向量、对应的原日志内容。3.2.2日志训练策略 本系统采用了基于长期记忆与短期记忆人工神经网络(Long-Short-TermMemory,简称LSTM)技术组成的Deeplog系统对测井曲线进行学习和训练。Deeplog是一种深度神经网络,它利用LSTM对日志条目序列进行建模,使Deeplog能够自动学习模型的正常执行行为,利用被检测的行为同系统正常执行的偏差作为异常行为检测准则。与此同时,因为它是一种深度学习驱动的方法,所以Deeplog模型可以随着时间的推移进行不断地增加量更新,以便随着时间推移在出现新的日志序列时能够容纳它们。其基本结构原理如下图所示:图3.2Deeplog基本架构 在上文提到的日志解析步骤中,每一条日志记录都被处理提取成为一个有着本条状态关键词编码向量的日志键(LogKey),而每份日志也都会被解析转化为所有记录信息的编码向量的序列,依据序列的前文历史中先生成的日志键来检测判断后生成的日志键是否存在异常信息,用这些向量序列来训练出一个基于日志键的异常检测模型。而想要在一个固定的词汇表或序列中抽取关键单词的概率,则涉及到自然语言处理(NaturalLanguageProcessing,简称NLP)中的语言系统建模问题。传统的语言建模方法是N-gram模型:设所有日志的日志键向量集合为E,每一条日志的向量序列为et∈E,则当前向量都可以看作序列中的一个单词wi,应当考虑至前文的向量为wi−n,其中i−1代表当前长序列长度(滑动窗口长度),t代表日志序列编号,nPwi=e 随着网络数据文件的不断完善与发展,传统的N-gram模型无法适应Web服务器多线程运行时愈来愈复杂的系统日志格式,而使用了LSTM神经网络构建的语言系统模型在处理各种自然语言处理问题中的效果显得出奇地好,所以在Deeplog中得以使用于异常行为检测。在一个固定的向量序列et∈E中,LSTM神经网络系统模型能够依据⁡{wi图3.3使用LSTM模型的训练模式 LSTM模型的训练核心是基于时间序列的预测,其基本原理如下:LSTM模块每利用上一个时间点的LSTM模块的状态对其进行输入便会记录一次状态,使其成为一个固定向量,然后再传输到下一个时间的模块中计算新状态,实现了历史信息的保存与叠加。在Deeplog循环流程图中,以⁡{wi=et|wi−n,wi−n+1…,wi−1}这个滑动窗口作为一个单位页,设为第j页,然后为每个日志键都分配一个LSTM模块,那么一页中便有n个LSTM模块,将上一个模块的输出Hi−n−1j和外部输入进来的新日志键wi−n作为输入一起传输到下一个LSTM模块中,这两个参数向量决定着下一个LSTM模块的状态Ci−n−1j在实际训练过程中,训练的数据集很难涵盖到所有正常行为的编码信息,因此除了正向的训练流程以外,还需要拥有反向反馈的机制流程。比如,模型对于n=3的滑动窗口、日志键序列为{w1、w2、w3}预测与此同时,模型中采用了Python开源库Torch——非常成熟的深度学习框架中的torch.nn(LSTM模块搭建)、torch(模块间参数向量的相关运算、操作)、torch.distributed(提供模块页通信端口)、torch.optim(模块的参数优化)等的一系列包。3.2.3日志分析预测上传的Web日志,将会被结构化和预处理转化为关键词转码的日志键序列。利用上文中已经训练好的、单页含有n个LSTM模块的LSTM网络对新到来的日志键序列{wi=et|w3.2.4前端GUI界面设计系统的前端UI界面采用了PyQt5图形设计,包括Pyqt5开源库中的以下几种模块:模块名称简要说明QtCore非GUI界面系统模块QtGui基本图形对象模块QtWidgets桌面GUI对象模块QtApplication应用程序对象模块QMainWindow应用程序窗口模块QtMassageBox弹窗对象模块QtCheckBox复选框对象模块QtMultimedia多媒体对象模块表3.1使用的Pyqt5模块当日志所有记录信息预测完成后,将异常行为与发生时刻统计并绘制曲线图。3.3本章总结 本章主要围绕攻击检测系统步骤化设计进行了阐述,并详细分析了日志解析、日志分类训练策略、日志预测以及前端UI界面的设计方案。

第4章关键技术问题4.1基于Spellpy的Web日志结构化解析在系统中,deeplog-torch2\example目录下是结构化解析日志、训练操作、实际预测、前端GUI界面的脚本。图4.1运行脚本目录 其中,preprocess.py是对原始日志数据进行结构化的脚本,其主要调用了spellpy开源库中的spell方法,然后首先定义了一个parser参数集合,负责将原始日志转变为结构化日志:parser=spell.LogParser(indir=input_dir,outdir=output_dir,log_format=log_format,logmain=log_main,tau=tau,) 针对以下几个准备好的HDFS日志数据集的名称进行调用input_dir参数,将其变为一个完整的路径,然后对完整路径的文件进行处理:forlog_namein['hdfs_abnormal.log','hdfs_normal2.log','hdfs_normal1.log']:parser.parse(log_name) 然后将结构化了的正常与非正常日志文件生成到output_dir中:df=pd.read_csv(f'{output_dir}/hdfs_normal1.log_structured.csv')df_normal=pd.read_csv(f'{output_dir}/hdfs_normal2.log_structured.csv')df_abnormal=pd.read_csv(f'{output_dir}/hdfs_abnormal.log_structured.csv') 接着运用map,将表2.1中的日志记录各种特征字段统一映射为一串16进制的EventID数据,成为Deeplog训练所用的样本: event_id_map=dict()fori,event_idinenumerate(df['EventId'].unique(),1):event_id_map[event_id]=i 再利用自定义的函数deeplog_df_transfer: defdeeplog_df_transfer(df,event_id_map):df['datetime']=pd.to_datetime(df['Date']+''+df['Time'])df=df[['datetime','EventId']]df['EventId']=df['EventId'].apply(lambdae:event_id_map[e]ifevent_id_map.get(e)else-1)deeplog_df=df.set_index('datetime').resample('1min').apply(_custom_resampler).reset_index()returndeeplog_df 对结构化的日志进行日期时间合并、单位时间内日志信息收拢、映射为EventID等的预处理操作,将其映射为标准化数据,保存至deeplog-torch2\example下,命名为“tarin”:deeplog_train=deeplog_df_transfer(df,event_id_map)deeplog_file_generator('train',deeplog_train) 标准化模板的每一行代表了单位时间内所有日志数据的EventID值序列:图4.2tarin内部分标准化值4.2基于LSTM神经网络的Web日志训练此系统的本质和核心关键是一由LSTM神经网络组成的Deeplog模型,以结构化的日志数据信息对其展开训练,作为其模型网络核心的包括定义、搭建、训练以及测试的基本原理已经在上文中介绍过,它们被集合封装在deeplog-torch2\deeplog路径下的Deeplog.py脚本中。图4.3Deeplog模型目录 先利用深度学习框架Torch库的相关包对LSTM模块进行了定义,主要分为LSTM时间序列和Linear层: classModel(nn.Module):def__init__(self,input_size,hidden_size,num_layers,num_classes):super(Model,self).__init__()self.hidden_size=hidden_sizeself.num_layers=num_layersself.lstm=nn.LSTM(input_size,hidden_size,num_layers,batch_first=True)self.fc=nn.Linear(hidden_size,num_classes) 其中LSTM层会将标准化模板的向量序列编码为矩阵,而Linear层功能是利用N*2的矩阵对LSTM层处理后的数据矩阵进行乘法运算,从而实现对数据的二分类。 接着对训练流向进行定义:defforward(self,input):h0=torch.zeros(self.num_layers,input.size(0),self.hidden_size)c0=torch.zeros(self.num_layers,input.size(0),self.hidden_size)out,_=self.lstm(input,(h0,c0))out=self.fc(out[:,-1,:])returnout 根据上文中介绍的神经网络具体训练原理(上一个时间点的输出和新到来的向量决定着这个时间点的LSTM模块的状态及输出等),在Generate类中对LSTM时间序列预测流程进行定义:whileline:line=tuple(map(lambdan:n-1,map(int,line.strip().split())))foriinrange(len(line)-window_size):inputs.append(line[i:i+window_size])outputs.append(line[i+window_size])line=self.readline(local)num_sessions+=1 此段Python语法的大概语义如下:当读取preprocess.py脚本输出的数据时,利用上面的几条数据去映射后一条日志数据,判断其为正常数据还是异常数据,其中window_size代表了上文中提到的滑动窗口长度。 之后检测了系统运行环境是否存在GPU,如若没有需要数个线程加载,以及分步式训练部分(利用数个加载模块进行训练):deftrain(args):is_distributed=len(args.hosts)>1andargs.backendisnotNonelogger.debug("Distributedtraining-{}".format(is_distributed))use_cuda=args.num_gpus>0logger.debug("Numberofgpusavailable-{}".format(args.num_gpus))kwargs={'num_workers':1,'pin_memory':True}ifuse_cudaelse{}device=torch.device("cuda"ifuse_cudaelse"cpu")ifis_distributed:('Initializethedistributedenvironment')world_size=len(args.hosts)os.environ['WORLD_SIZE']=str(world_size)host_rank=args.hosts.index(args.current_host)dist.init_process_group(backend=args.backend,rank=host_rank,world_size=world_size)('Initializedthedistributedenvironment:\'{}\'backendon{}nodes.'.format(args.backend,dist.get_world_size())+'Currenthostrankis{}.Numberofgpus:{}'.format(dist.get_rank(),args.num_gpus)) 由于本机测试采用单机测试,且只有一个GPU,无需采取分步式训练,此处不作过多赘述。训练流程的具体操作文件封装在deeplog-torch2\example\tarin.py中:图4.4训练操作文件 Tarin.py先调用了Torch和deeplog中的tarin函数,然后将需要的参数导入(示范为一个参数的输入):parser.add_argument('--batch-size',type=int,default=64,metavar='N',help='inputbatchsizefortraining(default:64)') 训练所需的主要参数有以下几个:参数名简要说明batch-size批处理数据长度epochs训练总轮数window-size滑动窗口长度input-size单次输入长度hidden-size隐藏页大小num-layers神经网络整体页数seed随机种子(用于固定跳出页随机丢弃的少数结点)num-classes模式总数num-candidates训练序列总数表4.1导入训练流程的主要参数表 最后将文件夹路径输入,参数导入,调用tarin函数启动进程,开始一轮轮的训练流程: ifnotos.path.isdir('./model/'):os.mkdir('./model/')train(parser.parse_args())视线转回deeplog.py,训练的具体流程如下:forepochinrange(1,args.epochs+1):model.train()train_loss=0forseq,labelintrain_loader:seq=seq.clone().detach().view(-1,args.window_size,args.input_size).to(device)optimizer.zero_grad()output=model(seq)loss=criterion(output,label.to(device))loss.backward()ifis_distributedandnotuse_cuda:_average_gradients(model)optimizer.step()train_loss+=loss.item()logger.debug('Epoch[{}/{}],Train_loss:{}'.format(epoch,args.epochs,round(train_loss/len(train_loader.dataset),4)))logger.debug('FinishedTraining')save_model(model,args.model_dir,args)其中epoch为训练总轮数,tarin_loader为其中负责加载新一轮训练的线程,将每一轮的日志数据seq下发给神经网络。output=model(seq)这一句为训练的过程,将seq下发给神经网络预测后输出,然后用loss=criterion(output,label.to(device))将输出结果同标准结果进行比对,将比对结果用loss.backward()实现上文提到的模型反馈机制,展开优化订正,再通过step函数更新优化后的神经网络系统,最后又开启新一轮的训练。通过上述数轮周而复始的训练过程,神经网络异常检测的思路已经基本成型,将此模型保存在deeplog-torch2\example\model下:图4.5保存好的模型文件 defsave_model(model,model_dir,args):("Savingthemodel.")path=os.path.join(model_dir,'model.pth')torch.save(model.cpu().state_dict(),path)model_info_path=os.path.join(model_dir,'model_info.pth')withopen(model_info_path,'wb')asf:model_info={'input_size':args.input_size,'hidden_size':args.hidden_size,'num_layers':args.num_layers,'num_classes':args.num_classes,'num_candidates':args.num_candidates,'window_size':args.window_size,}torch.save(model_info,f) 完成训练后的神经网络模型便可以用于实际预测了。4.3日志分析预测实际应用 系统用于日志分析预测的脚本为predict.py,同样封装在deeplog-torch2\example目录下:图4.6分析预测脚本目录 其中调用了deeplog.py中的predict_fn(预测函数)、model_fn(训练好的模型),对normal和abnormal两个测试数据集进行预测:test_abnormal_list=[]withopen('test_abnormal','r')asf:forlineinf.readlines():line=list(map(lambdan:n-1,map(int,line.strip().split())))request=json.dumps({'line':line})input_data=input_fn(request,'application/json')response=predict_fn(input_data,model_info)test_abnormal_list.append(response)print(test_abnormal_list)test_normal_list=[]withopen('test_normal','r')asf:forlineinf.readlines():line=list(map(lambdan:n-1,map(int,line.strip().split())))request=json.dumps({'line':line})input_data=input_fn(request,'application/json')response=predict_fn(input_data,model_info)test_normal_list.append(response)print(test_normal_list)最后统计出异常数目的结果:test_abnormal_list=[]withopen('test','r')asf:forlineinf.readlines():line=list(map(lambdan:n-1,map(int,line.strip().split())))request=json.dumps({'line':line})input_data=input_fn(request,'application/json')response=predict_fn(input_data,model_info)test_abnormal_list.append(response)print(test_abnormal_list)thres=args.thresholdtest_has_anomaly=[1ift['anomaly_cnt']>threselse0fortintest_abnormal_list]test_cnt_anomaly=[t['anomaly_cnt']fortintest_abnormal_list]abnormal_predict=[]fortest_abnormalintest_abnormal_list:abnormal_predict+=test_abnormal['predict_list']并对统计结果进行评估准确率,其中参数accu的数值在85到95之间都会令模型产生输出:(f'thres:{thres}')(f'TP:{TP}')(f'FP:{FP}')(f'TN:{TN}')(f'FN:{FN}')accuracy=accu/len(predict)precision=TP/(TP+FP)if(TP+FP)else0recall=TP/(TP+FN)if(TP+FN)else0F1=2*precision*recall/(precision+recall)if(precision+recall)else0(f'accuracy:{accuracy}')(f'Precision:{precision}')(f'Recall:{recall}')(f'F1:{F1}'4.4GUI界面 GUI.py界面脚本文件保存在deeplog-torch2\example目录下:图4.7GUI.py文件路径 首先调用开源包Pyqt5中的各类函数,对文本框、按钮等界面元素进行定义与设置(示范为其中一个按钮设置):classUi_Form(object): defsetupUi(self,Form): self.okButton=QtWidgets.QPushButton(Form) self.okButton.setGeometry(QtCore.QRect(260,450,100,31)) font=QtGui.QFont() font.setPointSize(14) self.okButton.setFont(font) self.okButton.setObjectName("okButton") defretranslateUi(self,Form): self.okButton.setText(_translate("Form","日志预测")) 将三个主要按钮进行我同对应的脚本文件中的函数进行绑定连接: classMyMainForm(QMainWindow,Ui_Form):def__init__(self,parent=None):super(MyMainForm,self).__init__(parent)self.setupUi(self)self.okButton.clicked.connect(self.checkCheckBox)self.PreButton.clicked.connect(self.preprocess)self.UpButton.clicked.connect(self.openimage) 在预测环节完成后统计异常日志记录的数量(与predict中的一样),最后利用plt函数将统计结果与时间的曲线图画在mapplotlib中: fortest_abnormalintest_abnormal_list:abnormal_predict+=test_abnormal['predict_list']plt.plot([iforiinrange(len(test_cnt_anomaly))],test_cnt_anomaly)plt.xlabel("Time(/Min)")plt.ylabel("Numofabnormallogs")plt.savefig("output.png")plt.clf()print(test_cnt_anomaly)jpg=QtGui.QPixmap("./output.png").scaled(self.fig_output.width(),self.fig_output.height())self.fig_output.setPixmap(jpg)self.label_2.setText("Totalabnormallogs'num:"+str(sum(test_cnt_anomaly)))4.5本章总结本章同样分为Web日志结构化与标准化、训练LSTM神经网络和测试日志实际预测三个环节,详细讲述了系统所用关键核心技术问题的实现方法,其中LSTM神经网络的训练策略是本文的核心与关键技术。

第5章实现效果5.1坏境调试 系统使用Pycharm2021.1.1平台,运行于Windows10专业版64位坏境,用到的部分Python开源库如下图所示:图5.1-5.2部分所用的pip工具包5.2初始界面点击运行deeplog-torch2\example下的GUI.py脚本文件:图5.3运行GUI.py 加载出了初始GUI界面:图5.4初始界面 其中,左下侧三个按钮——“上传日志”、“结构化”、“日志预测”分别绑定到Pyqt框架中的上传模块、preprocess以及predict中的主体函数。5.3系统测试5.3.1上传日志 提前在deeplog-torch2\example\data路径下准备了用于测试的三份日志文件数据:图5.5测试日志文件路径点击上传日志按钮,在目录中选择测试文件:图5.6上传测试日志文件5.3.2结构化日志 点击结构化日志按钮,运行结构化脚本中的函数:图5.7日志结构化过程 经过结构化转为结构化的数据保存在deeplog-torch2\example\data下:图5.8结构化日志目录数据部分内容如下:图5.9teat_1.log标结构化模板部分数据 然后对结构化的数据进行映射使其转为标准化统计值:图5.10teat_1.log标准化统计值 其中每一行包含着一个单位时间(一分钟)内日志记录条目的标准化EventID

温馨提示

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

评论

0/150

提交评论