精华内容
下载资源
问答
  • 一款简单好用的Web日志分析工具,可以大大提升效率,目前业内日志分析工具比较多,今天推荐十个比较好用的Web日志安全分析工具。感兴趣的同学可以收藏一下
  • web日志分析工具,支持IIS,nginx, httpd等,将日志从服务器下载,填入路径,即可进行自动化分析
  • 基于Python3的Web日志分析小工具
  • 该实验数据主要用于Hive进行Apache Web日志的统计分析学习使用,数据量不是大。
  • web日志信息文件

    热门讨论 2015-12-02 14:28:28
    文件是web日志,记录了一个网站(粉丝日志网站)一天内的访问记录的日志信息。 我的博客:http://blog.csdn.net/u010156024/article/details/50147697 详细应用了该日志文件进行hadoop下的挖掘分析。欢迎访问。
  • web日志分析总结

    2015-07-21 11:00:12
    面对大量日志时,我们该如何处理分析日志的一个大体思路
  • Web日志微服务 该项目实现了基于 Akka Remoting 的微服务,因此可以轻松集成到任何基于 Akka 的松耦合环境中。 这种架构方法为分布式数据处理系统带来了 Spark 的强大功能。 Akka 是一个使用构建并发可扩展应用程序...
  • 基于Hadoop/Hive的web日志分析系统的设计,为广大大数据爱好者提供更好的帮助,喜欢可以下载
  • Web日志目录及日志分析

    千次阅读 2019-11-07 15:36:00
    Web日志的分析 在很多时候,我们经常需要分析网站的日志,以此来查看网站运行的各种情况。比如说如果网站被攻击,我们可以通过查看日志来溯源攻击者。 Apache 日志目录:/Apache/logs/ logs目录下有两个文件...

    目录

    Apache

    Nginx

    Tomcat

    Web日志的分析


    在很多时候,我们经常需要分析网站的日志,以此来查看网站运行的各种情况。比如说如果网站被攻击,我们可以通过查看日志来溯源攻击者。

    Apache

    日志目录:/Apache/logs/

    logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这个是apache运行时的错误日志。

    Nginx

    日志目录:/Nginx/logs/

    logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这个是apache运行时的错误日志。

    Tomcat

    日志目录:/Tomcat/logs/

    logs目录下有五类文件:

    • catalina.日期.log:这个主要是记录tomcat启动时候的信息,类似于我们在eclipse中启动服务的时候在控制台看到的信息
    • host-manager.日期.log:这个是放tomcat的自带的manager项目的日志信息的,也没有看到有什么重要的日志信息
    • localhost.日期.log:这个类似于catalina日志,可是信息没有第一种全
    • localhost_access_log.日期.txt:这个是存放访问tomcat的请求的所有地址以及请求的路径、时间,请求协议以及返回码等信息(重要)
    • manager.日志.log:这个估计是manager项目专有的日志文件

    Web日志的分析

    如下,我们分析日志中第8条的更个部分的含义

    • 访问者ip:127.0.0.1
    • 访问日期:07/Nov/2019:18:11:54 +0800
    • 请求方式:GET
    • 请求链接:/dvwa/phpinfo.php
    • 请求参数:PHPE9568F34-D428-11d2-A769-00AA001ACF42
    • HTTP协议:HTTP/1.1
    • 返回转态码:200
    • 返回包的长度:2536
    • 请求包的Referer:http://127.0.0.1/dvwa/phpinfo.php
    • 访问者的浏览器信息:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

    展开全文
  • Web日志安全分析系统实践

    千次阅读 2018-03-13 21:45:39
    isappinstalled=0零、前言在社区看到了这篇日志分析的文章--《Web日志安全分析浅谈》,文章整体写的非常棒,对日志分析的作用、难点、工程化建设和攻击溯源等方面进行了全面的描述。去年的毕设我也做了相关的研究,...

    本文转自:https://xianzhi.aliyun.com/forum/topic/2136?from=timeline&isappinstalled=0

    零、前言

    在社区看到了这篇日志分析的文章--《Web日志安全分析浅谈》,文章整体写的非常棒,对日志分析的作用、难点、工程化建设和攻击溯源等方面进行了全面的描述。去年的毕设我也做了相关的研究,主要是去实现一个日志分析系统,算是一个更加的完整的工程化建设,这里把一些关键的过程与大家分享。

    一、系统设计

    在开发一个项目之前当然要先做好设计,明白自己想要的是一个什么系统,可以使用哪些技术、算法和硬件设备。我们分成功能设计、数据库设计、算法结构设计、硬件拓扑设计、前端界面设计、主框架设计6个部分。

    1.1功能设计

    系统应包括系统监控、用户管理(系统使用人员)、日志管理、实时分析、离线分析等功能,并为用户提供可视化的操作、分析与结果展示界面。功能结构图如图所示:

    1.2数据设计

    系统使用MySQL数据库,库中需要建立logmanagement数据库,拥有user、offline、online三个数据表,分别为用户表、离线数据表、在线数据表。数据库中的数据表如下:

    offline数据表用于存储离线日志的分析结果,每一个上传的日志文件对应一条记录,包括名称、大小、类型、起止日期、访问量最高的前10个IP地址、访问量最高的前10个URL、10大攻击类型的攻击次数、以及攻击者和被攻击者的地理位置信息。数据表结构如下:

    online数据表用于存储实时分析的中间结果,数据表的结构如下:

    user表是管理员的用户表,用来存储管理员的个人信息。

    1.3算法结构设计

    系统使用了三种机器学习算法进行恶意攻击的识别:逻辑回归、支持向量机和朴素贝叶斯。同时包含了传统的正则匹配算法,正则虽然无法识别未知攻击,但是在已知攻击的识别上误报率相对机器学习是比较低的。为了能够识别爆破、目录扫描等与时序有关的攻击,还应设计数值统计模块进行恶意ip访问频率的计算。此外,多种算法如何结合需要进行足够的实验,谁的权重(对结果的影响)更大?并行还是串行?本系统中对正则匹配、数值统计和机器学习(三种机器学习算法两两取交集,即实行投票机制,三种中两者检测出异常则认为异常)进行串行处理,得出一条日志的识别结果--正常或恶意(具体到攻击类型),然后检测结果(而非日志)存储到数据库中,算法结构如图所示:

    1.4硬件拓扑设计

    为了实现系统对日志的高效收集,使用了Flume框架;为了具有大数据的处理能力,使用了Spark和HDFS做计算和存储。其中Flume与HDFS是完美兼容的,可以很方便的实现实时日志收集。这几个框架都是分布式的,结构大概如下所示

    1.5前端界面设计

    为了提供一个良好的用户交互性能,需要一个便捷的可视化界面,这里选用Flask框架开发一个Web管理平台,包含对服务器状态的监控、日志的管理以及分析结果的可视化等。

    1.6主框架设计

    主框架要能够说明系统的总体功能及数据流走向,其中,日志获取有两种途径,Web界面负责接收用户的离线上传,Flume负责实时获取;HDFS负责日志存储,自动将获取(离线和实时)的日志备份到各个节点上;Spark负责日志处理,运行特征匹配、数值统计和机器学习算法对其进行识别和分类;MySQL负责结果存储,根据日志获取途径,存储到不同的表中;Flask和Echarts负责界面展示与操作,使用多种图表样式,形象化地展示分析结果。如图所示:

    离线分析就是用户通过Web界面将文本日志文件上传进行分析,相对简单,实时分析就需要严格控制数据流的走向。这里就像一个生产者与消费者的模型,Flume不断收集日志(生产)存储到HDFS,Spark Streaming不断的从HDFS读取日志(消费),实时结构如下:

    二、系统实现

    2.1日志预处理

    我们知道一条日志大概是这样的

    115.28.44.151 - - [28/Mar/2014:00:26:10 +0800] "GET /manager/html HTTP/1.1" 404 162 "-" "Mozilla/3.0 (compatible; Indy Library)"
    

    字段含义为:远程IP - 用户名 时间 请求主体 响应码 请求字节 请求来源 客户端信息
    想要对日志进行识别分析,首先要对各字段进行提取,其中攻击识别主要依靠“请求主体”,我们可以如下正则进行提取

    log_Pattern = r'^(?P<remote_addr>.*?) - (?P<remote_user>.*) \[(?P<time_local>.*?)\] "(?P<request>.*?)" '\
            '(?P<status>.*?) (?P<body_bytes_sent>.*?) "(?P<http_referer>.*?)" "(?P<http_user_agent>.*?)"$'
    

    2.2正则匹配

    算法的匹配正则来自与网络和一些CMS厂商的的正则代码,经过多次修改测试可以识别常见的已知的Web攻击,包括SQL注入、XSS攻击、命令执行等常见Web漏洞。比如部分正则如下所示:

    self.SQL_pattern = """/select(\s)+|insert(\s)+|update(\s)+|(\s)+and(\s)+|(\s)+or(\s)+|delete(\s)+|\'|\/\*|\*|\.\.\/
            |\.\/|union(\s)+|into(\s)+|load_file(\s)+|outfile(\s)+"""
    self.Webshell_pattern = """(preg_replace.*\/e|`.*?\$.*?`|\bcreate_function\b|\bpassthru\b|\bshell_exec\b|\bexec\b|
            \bbase64_decode\b|\bedoced_46esab\b|\beval\b|\bsystem\b|\bproc_open\b|\bpopen\b|\bcurl_exec\b|\bcurl_multi_exec\b|
            \bparse_ini_file\b|\bshow_source\b|cmd\.exe|KAdot@ngs\.ru|小组专用大马|提权|木马|PHP\s?反弹|shell\s?加强版|
            WScript\.shell|PHP\s?Shell|Eval\sPHP\sCode|Udp1-fsockopen|xxddos|Send\sFlow|fsockopen\('(udp|tcp)|SYN\sFlood)|
            z0|z1|z2|z9|caidao"""
    self.XSS_pattern = """xss|javascript|vbscript|expression|applet|meta|xml|blink|link|style|script|embed|object|
            iframe|frame|frameset|ilayer|layer|bgsound|title|base|onabort|onactivate|onafterprint|onafterupdate|
            onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|
            onbeforeunload|onbeforeupdate|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|
            oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|
            ondragenter|ondragleave|ondragover|ondragstart|ondrop|onerror|onerrorupdate|onfilterchange|onfinish|onfocus|
            onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmousedown|
            onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|
            onpaste|onpropertychange|onreadystatechange|onreset|onresize|onresizeend|onresizestart|onrowenter|onrowexit|
            onrowsdelete|onrowsinserted|onscroll|onselect|onselectionchange|onselectstart|onstart|onstop|onsubmit|
            onunload(\s)+"""
    

    所有的攻击类型如下所示

    2.3数值统计

    在所采集海量日志文本中,包含了大量用户行为、交互IP、访问次数等信息,这些信息所表现出的统计特征可以明确地表达一个网络动作,而有些动作通过传统的规则匹配、黑白名单、策略控制等方式是很难发现的。比如在一段时间内访问目标网站的Agent连接数、不同域名下出现同一URL的次数、访问应答结果中非200的请求比例等,所有这些统计结果都表达了某种特定的网络行为,而这一行为如果符合网络攻击的行为,则通过数值统计的方法就能发现。比如下表中列举的常用的基于数值统计的方式发现潜在异常行为的一些统计方法。

    在实现中只进行了一定时间内某ip访问频率的计算

    def check(self,dataRDD,sc):
        """按分钟切割日志,以判断访问频率"""
        data_Memory = dataRDD.collect()
        start = data_Memory[0]
        temp_Time = time.strptime(start[2], "%d/%m/%Y:%H:%M:%S")
        start_Time = datetime.datetime(temp_Time[0],temp_Time[1],temp_Time[2],temp_Time[3],temp_Time[4],temp_Time[5])
        data_Min = [] #用来存储一分钟内切割的数据
        data_Result = []
        label = self.label
        for line in data_Memory:
            temp_Time = time.strptime(line[2], "%d/%m/%Y:%H:%M:%S")
            end_Time = datetime.datetime(temp_Time[0],temp_Time[1],temp_Time[2],temp_Time[3],temp_Time[4],temp_Time[5])
            if (end_Time-start_Time).seconds <= 10:
                data_Min.append(line)
            else:
                data_Result += label(data_Min)
                start_Time = end_Time
                data_Min = []
                data_Min.append(line)
        tempRDD = sc.parallelize(data_Result)
        return tempRDD
    

    2.4特征向量

    使用机器学习算法的前提是构造好的特征向量,日志的识别主要是针对日志记录中的request、referer和user-agent。request、referer都是URL路径,user-agent是浏览器名称,这三部分是用户可控且可能注入payload的地方。向量的构造方法主要参考用机器学习玩转恶意URL检测 和基于机器学习的web异常检测,训练集分为两个部分,一个是恶意的在URL请求,主要收集于github中知名的payload仓库,大约有30000条数据,其中包括SQL注入、Traversal(目录遍历)、XSS(跨站脚本攻击)、LFI(本地文件包含)、XML注入、SSI注入、XPATH注入、Webshell攻击。恶意请求部分样例如下:

    二是正常的URL请求,测试部分包括日志中的request、referer和user-agent,其中request和referer的正常样本基本一致,都是URL请求地址,user-agent虽然并不是URL但在受到攻击时仍和request、referer这两处相似,都是注入相关漏洞的payload,所以这三处在分类的可以使用相同模型。其中正常的URL取自国外的日志网站SecRepo的正常Web日志,正常请求部分样例如下:

    User-agent是指了各大浏览器厂商正常的名称,训练集中正常请求部分样例如下:

    将上述的训练集一分为二,90%作为训练集集,10%作为测试集并进行打标用于测试。在真正分类的时候,将所有的日志依据request、referer和user-agent这三个部分进行二分类。向量构造首先通过N-Gram将文本数据向量化,比如对于下面的例子:

    首先通过长度为N的滑动窗口将文本分割为N-Gram序列,例子中,N取2,窗口滑动步长为1,可以得到如下N-Gram序列:

    其中N的取值需要进行多次试验,不同的算法最佳值不同。然后声明一个长度为10000的特征向量,将这些序列映射到特征向量中,并使用TF-IDF生成特征向量的值。词频—逆文档频率(简称TF-IDF)是一种用来从文本文档(例如URL)中生成特征向量的简单方法。它为文档中的每个词计算两个统计值:一个是词频(TF),也就是每个词在文档中出现的频率,另一个是逆文档频率(IDF),用来衡量一个词在整个文档语料库中出现的(逆)频繁程度。这两个值的积,也就是TF×IDF,展示了一个词与特定文档的相关程度(比如这个词在某文档中很常见,但在整个语料库中却很少见)。

    def TFIDF(self,badData,goodData,distance,step):
        '''IT-IDF函数,根据不同的分词方法生成TF-IDF向量'''
        tf = self.tf
        badFeatures = badData.map(lambda line: tf.transform(split2(line,distance,step)))
        goodFeatures = goodData.map(lambda line: tf.transform(split2(line,distance,step)))
        badFeatures.cache()
        goodFeatures.cache()
        idf = IDF()
        idfModel = idf.fit(badFeatures)
        badVectors = idfModel.transform(badFeatures)
        idfModel = idf.fit(goodFeatures)
        goodVectors = idfModel.transform(goodFeatures)
        badExamples = badVectors.map(lambda features: LabeledPoint(1, features))
        goodExamples = goodVectors.map(lambda features: LabeledPoint(0, features))
        dataAll = badExamples.union(goodExamples)
        return dataAll
    

    一个TF-IDF向量如下所示:

    其中第一项0.0是向量的标签,表示这是一条恶意的请求,后面是各个分词序列在投影后的坐标及其TF×IDF值。

    2.5机器学习算法

    三种算法训练完毕后以后的检测只需从本地加载模型即可

    def train(self,sc):
        # #生成Logistic和SVMWithSGD算法数据
        # dataLogistic = self.TFIDF(bad,good,3,1)
        # #生成SVMWithSGD算法数据
        # dataSVMWithSGD = self.TFIDF(bad,good,3,1)
        # #生成NaiveBayes算法数据
        # dataNaiveBayes = self.TFIDF(bad,good,2,1)
        # 使用分类算法进行训练,iterations位迭代次数,step为迭代步长
        # modelLogistic = LogisticRegressionWithSGD.train(data=dataLogistic,iterations=10000,step=6) 
        # print "train success1"
        # modelLogistic.save(sc,"model/modelLogistic")
        # modelSVMWithSGD = SVMWithSGD.train(data=dataSVMWithSGD,iterations=10000,step=5) 
        # print "train success2"
        # modelSVMWithSGD.save(sc,"model/modelSVMWithSGD")
        # modelNaiveBayes = NaiveBayes.train(data=dataNaiveBayes,lambda_=0.1) 
        # print "train success3"
        # modelNaiveBayes.save(sc,"model/modelNaiveBayes")
        self.modelLogistic = LogisticRegressionModel.load(sc,"modelLogistic")
        self.modelSVMWithSGD = SVMModel.load(sc,"modelSVMWithSGD")
        self.modelNaiveBayes = NaiveBayesModel.load(sc,"modelNaiveBayes")
    
    def check_Line(self,line,algorithm):
        """元素检测"""
        tf = self.tf
        request_url = line
        check_Result = 0
        if "Logistic" in algorithm:
            check_Result += self.modelLogistic.predict(tf.transform(split2(request_url,3,1)))
        if "SVM" in algorithm:
            check_Result += self.modelSVMWithSGD.predict(tf.transform(split2(request_url,3,1)))
        if "NaiveBayes" in algorithm:
            check_Result += self.modelNaiveBayes.predict(tf.transform(split2(request_url,2,1)))
        print check_Result
        print "model check  :  "+str(check_Result)
        if check_Result>2:
            line.append([-1])
        else:
            line.append([])
        return line
    
    def check(self,test,sc,algorithm="Logistic,SVM,NaiveBayes"):
        """执行模型检测"""
        self.train(sc)
        check_Line = self.check_Line
        temp1 = test.map(lambda line: check_Line(line,algorithm))
        return temp1.collect()
    

    三、系统展示

    离线日志分析
    离线分析包括分析报表和日志管理两个子功能,用户需要在日志管理处上传日志才可通过分析报表查看分析结果(如果直接点击分析报表界面则默认显示最近一次的分析结果),日志在上传的过程中就会完成数据分析,分析结果会在分析报表界面显示并同时写入数据库。同理,用户也可以在日志管理处删除已上传的日志,但同时也会删除存在数据库中的分析结果。日志管理界面如图所示:

    点击每一条记录右侧的查看按钮,即可跳到相应的分析报表界面,分析报表界面包含5个部分,分别为基本信息、访问次数最高的前10个IP、访问次数最高的前10个URL、攻击次数统计、攻击源地图。具体如图所示:





    实时日志分析
    实时分析部分包含两个显示界面,一个是访问次数(蓝色)与攻击次数(黑色)的双曲线图表,表示当前时间访问的次数以及当中可能包含的攻击次数,两者同时显示,相互对比;另一个是百度地图实时地理位置的世界地图图表。显示界面如下:

    四、一些问题

    1、程序运行起来虽然看起来还可以,但是识别率其实比较一般,一是正则写的不够完善;二是机器学习误报有点高,如果把判别条件放太宽,会出现一些低级分类错误。
    2、算法中机器学习其实只是一个二分类,具体的攻击类别要靠正则识别,正则识别不出来而算法识别出来的则为未知攻击类型。
    3、这里的实时其实是伪实时。

    五、参考文献

    http://www.freebuf.com/articles/web/126543.html
    http://www.freebuf.com/articles/web/134334.html
    http://www.freebuf.com/sectool/126698.html
    http://blog.csdn.net/xnby/article/details/50782913


    展开全文
  • Web日志挖掘数据预处理技术的研究与实现
  • Web日志安全分析浅谈

    千次阅读 2018-10-18 14:07:52
    随着Web技术不断发展,Web被应用得越来越广泛,所谓有价值的地方就有江湖,网站被恶意黑客攻击的频率和网站的价值一般成正比趋势,即使网站价值相对较小,也会面对“脚本小子”的恶意测试攻击或者躺枪于各种大范围...

    一、为什么需要对日志进行分析?

    随着Web技术不断发展,Web被应用得越来越广泛,所谓有价值的地方就有江湖,网站被恶意黑客攻击的频率和网站的价值一般成正比趋势,即使网站价值相对较小,也会面对“脚本小子”的恶意测试攻击或者躺枪于各种大范围漏洞扫描器,正如安全行业的一句话:“世界上只有两种人,一种是知道自己被黑了的,另外一种是被黑了还不知道的”

    此时对网站的日志分析就显得特别重要,作为网站管理运维等人员如不能实时的了解服务器的安全状况,则必定会成为“被黑了还不知道的”那一类人,从而造成损失,当然还有一个场景是已经因为黑客攻击造成经济损失,此时我们也会进行日志分析等各种应急措施尽量挽回损失,简而言之日志分析最直接明显的两个目的,一为网站安全自检查,了解服务器上正在发生的安全事件,二为应急事件中的分析取证。

    二、如何进行日志分析?

    在说如何进行分析之前,我们先来了解一下Web服务器中产生的日志是什么样子.我们以Nginx容器为例:

    随机抽取一条日志:

    61.144.119.65 - - [29/May/2017:22:01:32 +0800] "GET /page/1 HTTP/1.1" 200 6403 "http://www.baidu.com" "Scrapy/1.1.2 (+http://scrapy.org)"

    作为Web开发或者运维人员,可能对图中的日志信息比较熟悉,如果对日志不那么熟悉也没关系,我们可以查看Nginx中关于日志格式的配置,查看nginx.conf配置文件:

    可以看到日志格式为:

    remote_addr - remote_user [time_local] "request" 'status body_bytes_sent "http_referer" 'http_user_agent" "$http_x_forwarded_for"';

    翻译过来即为:远程IP – 远程用户  服务器时间 请求主体 响应状态 响应体大小 请求来源 客户端信息 客户端代理IP

    通过以上信息,我们可以得知服务器会记录来自客户端的每一个请求,其中有大量来自正常用户的请求,当然也包括来自恶意攻击者的请求,那么我们如何区分正常请求和恶意攻击请求呢?站在攻击者的角度,攻击者对网站进行渗透时,其中包含大量的扫描请求和执行恶意操作的请求,而这两者在日志中都有各自的特征,如扫描请求会访问大量不存在的地址,在日志中体现则为大量的响应状态码为404,而不同的恶意请求都有各自相应的特征,如当有人对服务器进行SQL注入漏洞探测时:

                                                                                                                       (图中以"select"为关键字进行过滤)

    聪明的你肯定想到了,如果此时加上时间条件,状态码等条件就能查询到最近可能成功的SQL注入攻击了,当然实际情况中,仅仅只依靠状态码来判断攻击是否成功是不可行的,因为很多时候请求的确成功了,但并不能代表攻击也成功了,如请求一个静态页面或者图片,会产生这样一个请求:/logo.png?attack=test';select//1//from/**/1,此时请求状态码为200,但是此注入攻击并没有得到执行,实际情况中,还会有更多情况导致产生此类的噪声数据。

    抛开这类情况不谈,我们来说说在一般应急响应场景中我们分析日志的常规办法。

    在常规应急响应常见中,一般客户会有这几种被黑情况:

    1.带宽被占满,导致网站响应速度变慢,用户无法正常访问

    2.造成已知经济损失,客户被恶意转账、对账发现金额无端流失

    3.网站被篡改或者添加暗链,常见为黑客黑页、博彩链接等

    ..........

    对于这些情况,按照经验,我们会先建议对已知被黑的服务器进行断网,然后开始进行日志分析操作。假设我们面对的是一个相对初级的黑客,一般我们直接到服务器检查是否存有明显的webshell即可。检查方式也很简单:

    1.搜索最近一周被创建、更新的脚本文件
    2.根据网站所用语言,搜索对应webshell文件常见的关键字

    找到webshell后门文件后,通过查看日志中谁访问了webshell,然后得出攻击者IP,再通过IP提取出攻击者所有请求进行分析

    如果不出意外,可能我们得到类似这样一个日志结果:(为清晰呈现攻击路径,此日志为人工撰造)

    eg:

    00:01  GET http://localhost/index.php 9.9.9.9  200  [正常请求]
    00:02  GET http://localhost/index.php?id=1' 9.9.9.9 500  [疑似攻击]
    00:05  GET http://localhost/index.php?id=1' and 1=user() or ''=' 9.9.9.9  500  [确认攻击] 00:07 GET http://localhost/index.php?id=1' and 1=(select top 1 name from userinfo) or ''=' 9.9.9.9 500 [确认攻击] 00:09 GET http://localhost/index.php?id=1' and 1=(select top 1 pass from userinfo) or ''=' 9.9.9.9 500 [确认攻击] 00:10  GET http://localhost/admin/ 9.9.9.9 404 [疑似攻击]
    00:12  GET http://localhost/login.php 9.9.9.9 404 [疑似攻击] 00:13  GET http://localhost/admin.php 9.9.9.9 404 [疑似攻击]
    00:14  GET http://localhost/manager/ 9.9.9.9  404 [疑似攻击]
    00:15  GET http://localhost/admin_login.php 9.9.9.9 404 [疑似攻击]
    00:15  GET http://localhost/guanli/ 9.9.9.9 200 [疑似攻击]
    00:18  POST http://localhost/guanli/ 9.9.9.9 200 [疑似攻击]
    00:20  GET http://localhost/main.php 9.9.9.9 200 [疑似攻击]
    00:20  POST http://localhost/upload.php 9.9.9.9 200 [疑似攻击]
    00:23  POST http://localhost/webshell.php 9.9.9.9 200 [确认攻击] 00:25  POST http://localhost/webshell.php 9.9.9.9 200 [确认攻击] 00:26  POST http://localhost/webshell.php 9.9.9.9 200 [确认攻击]

    首先我们通过找到后门文件“webshell.php”,得知攻击者IP为9.9.9.9,然后提取了此IP所有请求,从这些请求可以清楚看出攻击者从00:01访问网站首页,然后使用了单引号对网站进行SQL注入探测,然后利用报错注入的方式得到了用户名和密码,随后扫描到了管理后台进入了登录进了网站后台上传了webshell文件进行了一些恶意操作。

    从以上分析我们可以得出,/index.php这个页面存在SQL注入漏洞,后台地址为/guanli.php,/upload.php可直接上传webshell
    那么很容易就能得出补救方法,修复注入漏洞、更改管理员密码、对文件上传进行限制、限制上传目录的执行权限、删除webshell。

    三、日志分析中存在的难题

    看完上一节可能大家会觉得原来日志分析这么简单,不过熟悉Web安全的人可能会知道,关于日志的安全分析如果真有如此简单那就太轻松了。其实实际情况中的日志分析,需要分析人员有大量的安全经验,即使是刚才上节中简单的日志分析,可能存在各种多变的情况导致提高我们分析溯源的难度。

    对于日志的安全分析,可能会有如下几个问题,不知道各位可否想过。

    1.日志中POST数据是不记录的,所以攻击者如果找到的漏洞点为POST请求,那么刚刚上面的注入请求就不会在日志中体现

    2.状态码虽然表示了响应状态,但是存在多种不可信情况,如服务器配置自定义状态码。
    如在我经验中,客户服务器配置网站应用所有页面状态码皆为200,用页面内容来决定响应,或者说服务器配置了302跳转,用302到一个内容为“不存在页面”(你可以尝试用curl访问http://www.baidu.com/test.php看看响应体)

    3.攻击者可能使用多个代理IP,假如我是一个恶意攻击者,为了避免日后攻击被溯源、IP被定位,会使用大量的代理IP从而增加分析的难度(淘宝上,一万代理IP才不到10块钱,就不说代理IP可以采集免费的了)
    如果一个攻击者使用了大量不同的IP进行攻击,那么使用上面的方法可能就无法进行攻击行为溯源了

    4.无恶意webshell访问记录,刚才我们采用的方法是通过“webshell”这个文件名从日志中找到恶意行为,如果分析过程中我们没有找到这么一个恶意webshell访问,又该从何入手寻找攻击者的攻击路径呢?

    5.分析过程中我们还使用恶意行为关键字来对日志进行匹配,假设攻击者避开了我们的关键字进行攻击?比如使用了各种编码,16进制、Base64等等编码,再加上攻击者使用了代理IP使我们漏掉了分析中攻击者发起的比较重要的攻击请求

    6.APT攻击,攻击者分不同时间段进行攻击,导致时间上无法对应出整个攻击行为

    7.日志数据噪声(这词我也不知道用得对不对)上文提到过,攻击者可能会使用扫描器进行大量的扫描,此时日志中存在大量扫描行为,此类行为同样会被恶意行为关键字匹配出,但是此类请求我们无法得知是否成功扫描到漏洞,可能也无法得知这些请求是扫描器发出的,扫描器可使用代理IP、可进行分时策略、可伪造客户端特征、可伪造请求来源或伪造成爬虫。此时我们从匹配出的海量恶意请求中很难得出哪些请求攻击成功了

    四、日志分析工程化之路 [探索篇]

    (上一节留下的坑我们留到最后讨论[因为我也觉得比较头疼],我们现在来讨论一点让人轻松的~)

    曾经有运维的人员问我们公司的大神,该如何分析日志?

    大神回答了三个字:“用命令”

    因为站在安全经验丰富的人角度来看,的确用命令足矣,可是对于安全经验不那么丰富的人来说,可能就不知道从何入手了。但是即使身为一个安全从业人员,我也觉得用命令太过耗时耗力(还有那么多有趣的事情和伟大的事情没做呐,当然还要节约出一点时光来嗨嗨嗨呀,难道每次分析日志我们都用命令一个个给一点点分析?)

    于是,聪明的黑客们就想到了,将这些步骤流程写成工具,让工具来帮我们分析日志,当然我也想到了,可是在我造这么一个轮子之前,我习惯性的到各大网站上先翻一翻,看看有没有人实现过,还真让我找到一些,见FAQ区域。

    我以“Web安全日志分析”为关键字,百度&Google了一番,发现并没有找到自己觉得不错的日志分析工具,难道安全行业就没有大牛写个优秀的日志分析工具出来?年轻时的我如此想到,后来我发现并非如此,而是稍微优秀一点的都跑去做产品了,于是我转战搜寻关于日志安全分析产品,通过各种方式也让我找到了几个,如下:

    1. 首先是推广做得比较好的:日志易

     

    日志易确实像它推广视频里所说的:“国内领先的海量日志搜索分析产品”

    前段时间,有客户联系到我们,说他们买了日志易的产品,但是其中对安全的监控比较缺乏,让我们能不能在日志易的基础上添加一些安全规则,建立安全告警,他们要投放到大屏幕,然后来实时监控各个服务器的安全状态。然后我就大概看了一遍日志易的产品,安全方面的分析,基本为0.

    但是日志易确实有几个优点:

    1.日志采集方面相对成熟,已经能针对多种日志格式解析并结构化,还支持用户自定义日志格的辅助解析

    2.海量日志存储相对完善,可接收来自各个客户端的日志,Saas服务成熟,能对接各大云主机

    3.搜索方面技术优秀,千亿级别数据索引只需60秒(但是,我要的安全分析啊,其他的再成熟,也始终是个不错的日志分析平台而已,我要的是安全分析、安全分析、安全分析[重要的话说三遍])

    补:(后来我发现,日志易其实有在安全方面进行分析,但是这个如图这个结果,并没有让我觉得眼前一亮,而且其中还有大量的误报)

    2. 看到一个稍微像那么回事的产品:安全易

    他们推广做得不那么好,所以在我一开始的搜索中,并没有从搜索引擎找到它,这个产品是可以免费注册并试用的,于是我迫不及待注册了一个账号进去看看,如图:

    当我试用过安全易这个产品之后,提取出了他们在关于安全方面所做的统计列表,如下:

    1.威胁时序图

    2.疑似威胁分析

    3.疑似威胁漏报分析

    4.威胁访问流量

    5.威胁流量占比

    6.境外威胁来源国家(地区)统计

    7.境内威胁来源城市统计

    8.威胁严重度

    9.威胁响应分析

    10.恶意IP

    11.恶意URL分析

    12.威胁类型分析 

    13.威胁类型分布

    14.威胁分类计数

    15.威胁来源热力图

    16.威胁总数

    17.威胁日志占比

    结果似乎挺丰富,至少比我们开始使用命令和工具得到的结果更为丰富,其实在看到这个产品之前,我们内部就尝试使用过各种方法实现过其中大部分视图结果,但是似乎还是缺少点什么 —— 攻击行为溯源,也就是我们在第二节中对日志进行简单的分析的过程,得到攻击者的整个攻击路径已经攻击者执行的恶意操作。不过想要将这个过程工程化,难度可比如上17个统计视图大多了,难在哪里?请回看第三节..
    虽然安全易的产品并没有满足我对日志分析中的想法,但是也不能说它毫无价值,相反这款产品能辅助运维人员更有效率的监控、检查服务器上的安全事件,甚至他们不用懂得太多的安全知识也能帮助企业更有效率的发现、解决安全问题

     

    五、日志分析工程化之路 [实践篇]

     

    在了解了很多分析日志的工具后,也尝试过自己折腾出一个方便分析日志的工具,以便以日常工作中的应急响应场景

    记得是在半年前左右,我的思路是这样的:

    1.首先确认日志结构

    我在Mysql中建立了如下结构的一张表来存储日志:

    日志字段

    请求时间

    服务器名称

    客户端IP

    请求方法

    请求资源

    服务器端口

    服务器IP

    浏览器信息

    响应状态码

    请求来源

    响应长度

    请求协议

    2.给Web攻击进行分类

    攻击类型表

    攻击类型名称

    危险等级

    攻击/扫描

    3.建立攻击规则表对应不同的攻击类型

    攻击规则表

    攻击规则正则表达式

    攻击发生的位置

    攻击规则对应的攻击类型ID

    此时不得不说一下当时日志是怎么入库的,不知道大家是否知道awk命令

    echo "aa bb cc" | awk -F '{print $1}'

    我们对日志采用了类似的方式,通过空格分割,然后生成出Mysql中可用的insert语句

    大约为:INSERT INTO web_log VALUES ($1,$3,$4,…),至于你说其中列数是如何对应到Mysql里的表结构的,我们当时是人工核对的,为每一个不同的日志文件进行人工对应..(可想而知这活工作量多大)

    扯回正题,当我们入库完毕后有了这么三张数据表,聪明的童鞋可能已经知道下一步要干什么的,那就是拿着安全规则正则表达式去逐条匹配日志表里面的日志

    然后得到结果:

    攻击日志ID

    攻击类型ID

    攻击规则ID

    最后我们只需要写SQL语句,就能轻松统计各个攻击类型都分别有多少攻击请求了,如图:

    最后我们思考了从各个角度来进行查询,得到了如下以下列表中的结果:

     

    1.网站受攻击次数排名

    2.网站高危请求排名

    3.网站攻击者数量排名

    4.网站受攻击页面排名

    5.可疑文件排行

    6.被攻击时间统计

    7.攻击来源分布

    8.高危攻击者排行

    9.攻击者攻击次数排行

    10.网站危险系数排行

    11.攻击者数量统计

    12.各站点攻击者数量统计

    13.各扫描器占比

    14.使用扫描器攻击者统计

    由于这是一次针对多个(70+)站点的分析,所以只需突显安全趋势即可,在此次日志分析中,还并未涉及到溯源取证

    记得当时我们是用SQL语句查询出结果,然后将数据填入Execl,然后进行图标生成,整个日志分析的过程,从日志原文件到入库到匹配到统计到出数据最后到Execl出统计图表基本都需要人工参与

    对了,上几张图瞧瞧吧

     

    (篇幅原因,其他统计图不贴上来了)

    可以看出,我们仅仅只是采用了一些安全攻击规则来对日志进行匹配就已经得到了不错的结果,虽然整个过程有点漫长,但是得到的这一份日志分析报告是具有实际意义和价值的,它可以帮我们发现哪些站点受到的攻击行为最多,那一类攻击最为频繁,哪些站点风险系数较高,网站管理和运维人员可以通过这份报告,来着重检查危险系数较高的请求和危险系数较高的站点,从而大大提高效率。

    但是日志分析工(lan)程(duo)化(hua)之路到此结束了吗?不,远远没有。

     

    六、日志分析工程化之路 [进阶篇]

     

    有没有觉得像上面那样折腾太累了,虽然确实能得到一个还不错的结果。于是开始找寻一个较好的日志分析方案,最后采用了开源日志分析平台ELK,ELK分别为:

    Elasticsearch 开源分布式搜索引擎

    Logstash 对日志进行收集、过滤并存储到Elasticsearch或其他数据库

    Kibana 对日志分析友好的Web界面,可对Elasticsearch中的数据进行汇总、分析、查询

    因为它开源、免费、高可配,所以是很多初创企业作为日志分析使用率最高的日志分析平台

    当理清楚ELK的搭建方式和使用流程后,我们用ELK实现了一遍第五节中的日志分析

    流程大概如下:

    1.编写Logstash配置文件

    2.将攻击规则应用于logstash的filter插件

    3.利用载入了安全分析插件后的logstash进行日志导入

    4.查询分析结果

    5.利用Kibana进行统计、可视化

    到这里,所得结果已经比“HanSight瀚思”安全易这个产品的结果更为丰富了~ ,但是日志安全分析之路远远没有结束,最重要也最具有价值的那部分还没有得到实现 —— 攻击行为溯源。

    七、日志安全分析攻击溯源之路 [探索篇]

    故技重施,我搜寻了和攻击溯源有关的相关信息,发现国内基本寥寥无几。

    最后发现其实现难度较大,倒是听说过某些甲方内部安全团队有尝试实现过,但至今未要到产品实现的效果图,不过最后倒是被我找到某安全公司有一个类似的产品,虽然是以硬件方式实现的流量监控,从而获取到日志进行分析。这里提一句,通过硬件方式获取流量从而可以记录并分析整个请求包和响应包,这可比从日志文件中拿到的信息全面多了,从而将日志溯源分析降低了一个难度,不过某些优秀的分析思路还是值得学习的,先上几张产品效果图:

    (图1)

    (图2)

    (图3)

    由于图1中的分析已经实现,这里暂且不谈。我们看图2中的攻击溯源,这好像正是我们需要的效果。
    第一个信息不难理解,三个中国的IP发起了含有攻击特征的请求,他们的客户端信息(userAgent)分别为Linux/Win7/MacOs

    第二个信息据我经验应该是他们内部有一个IP库,每个IP是否为代理IP,所处什么机房都有相应的记录,或者调用了IP位置查询接口,从而判断IP是否为代理IP、机房IP、个人上网出口IP,继而判定未使用跳板主机

    第三个信息为攻击者第一次访问站点,从图中却到看到jsky的字样,竭思为一款Web漏洞扫描器,而根据我的经验来看,扫描器第一个请求不应该是访问一个txt文件而是应该请求主页从而判断网站是否能正常请求,所以这里我猜测应该是从时间链或者IP上断掉的线索,从而导致对攻击者的入站第一个请求误判,不过误判入站请求这个倒是对分析的影响不是特别大

    第四、第五、第六个信息应该分别为访问了后台地址、对后台进行了爆破攻击、使用常见漏洞或CMS等通用漏洞对应用进行了攻击,除了后台访问成功之外,爆破攻击、应用攻击均为成功。因为此攻击溯源分析通过硬件方式实现,猜想应该是判断了响应体中是否包含各种登录成功的迹象,而应用攻击则判断响应中是否存在关于数据库、服务器的敏感信息,如不存在则视为攻击未成功

    第七个信息展示出了攻击者总共发起了79166次注入攻击,且对服务器已经造成了影响,但是从效果图中看来,此溯源并没有具体展示对哪台哪个应用攻击成功造成了影响,故断定为综合判断,可能存在一定误报率,判断方式可通过响应体中的敏感信息、响应平均大小等方式判断已攻击成功的概率

    对于图3中的效果,开始觉得结果丰富,意义深远,但是细看发现结果丰富大多来源于相关数据丰富。

    综上所诉,此攻击溯源产品利用了两个优势得出了比常规分析日志方法中更有价值的结果

    1.请求和响应数据完整,能进行更大维度的日志分析

    2.安全关联库较多,能关联出更为丰富的信息

    如下为产品中引用的关联库:

    1. 全球IPV4信息知识库,包括该IP对应的国家地区、对应的操作系统详情、浏览器信息、电话、域名等等。并对全球IP地址实时监控,通过开放的端口、协议以及其历史记录,作为数据模型进行预处理。

    2. 全球虚拟空间商的IP地址库,如果访问者属于该范围内,则初步可以判定为跳板IP。

    3. 全球域名库,包括两亿多个域名的详细信息,并且实时监控域名动向,包括域名对应的IP地址和端口变化情况,打造即时的基于域名与IP的新型判断技术,通过该方式可以初步判断是否为C&C服务器、黑客跳板服务器。

    4. 黑客互联网信息库,全球部署了几千台蜜罐系统,实时收集互联网上全球黑客动向。

    5.独有的黑客IP库,对黑客经常登录的网站进行监控、对全球的恶意IP实时获取。

    6. 黑客工具指纹库,收集了所有公开的(部分私有的)黑客工具指纹,当攻击者对网站进行攻击时,可以根据使用的黑客工具对黑客的地区、组织做初步判断。

    7. 黑客攻击手法库,收集了大量黑客攻击手法,以此来定位对应的黑客或组织。

    8. 其他互联网安全厂商资源,该系统会充分利用互联网各种资源,比如联动50余款杀毒软件,共同检测服务器木马程序。

    9. 永久记录黑客攻击的所有日志,为攻击取证溯源提供详细依据。

     

    八、日志安全分析攻击溯源之路 [构想篇]

     

    我也希望我在这一节能写出关于溯源的实践篇,然而事实是到目前为止,我也没有太好的办法来解决在传统日志分析中第三节中提到的问题,期间也做过一些尝试,得到的结果并不怎么尽人意,当然之后也会不断尝试利用优秀的思路来尝试进行攻击溯源分析。由于还并未很好的实现攻击溯源分析,下面只讨论一些可行思路(部分思路来源于行业大牛、国内外论文资料)

    通过前几节,我们已经知道了我们分析日志的目的,攻击溯源的目的和其意义与价值

    这里简短概括一下:

    一、实时监控正在发生的安全事件、安全趋势

    二、还原攻击者行为

          1.从何时开始攻击

          2.攻击所利用的工具、手法、漏洞

          3.攻击是否成功,是否已经造成损失和危害

    三、发现风险、捕获漏洞、修复漏洞、恶意行为取证

    在传统日志分析过程中,想要实现以上效果,那么就不得不面对第三节中提到的问题,这里回顾一下:

    1.POST数据不记录导致分析结果不准确

    其实在服务器端,运维管理人员可自行配置记录POST数据,但是这里说的是默认不记录的情况,所以配置记录POST数据暂且不提。

    其实我觉得要从不完整的信息中,分析得到一个肯定的答案,我觉得这从逻辑上就不可行。但是我们可以折中实现,尽量向肯定的答案靠近,即使得到一个90%肯定的答案,那也合乎我们想要的结果。

    在常规日志分析中,虽然POST数据不被记录,但是这些“不完整信息”依然能给我们我们提供线索。

    如通过响应大小、响应时间、前后请求关联、POST地址词义分析、状态码等等依然能为我们的分析提供依据,如某个请求在日志中的出现次数占访问总数30%以上,且响应大小平均值为2kb,突然某一天这个请求的响应值为10kb,且发起请求的IP曾被攻击特征匹配出过,那么可以80%的怀疑此请求可能存在异常,如攻击者使用了联合注入查询了大量数据到页面,当然这里只是举例,实际情况可能存在误报。

    2.状态码不可信

    对于那些自行设置响应状态的,明明404却302的,明明500却要200的(~~我能说这种我想拖出去打死么- -,~~) PS:其实设置自定义状态码是别人的正常需求。

     因为状态码不可信了,我们必须从其他方面入手来获取可信线索,虽然要付出点代价。

     我的思路是,对于不同的攻击行为,我们应该定义不同的响应规则,如攻击规则命中的为网站备份文件,那么应该判断请求大小必须超过1k-5k,如攻击者发起/wwwroot.rar这种攻击请求,按照常理如果状态码为200,那么本来应该被定性为成功的攻击行为,但是因为状态码不可信,我们可以转而通过响应大小来判断,因为按照常规逻辑,备份文件一般都不止只有几kb大小,如攻击者发起Bool注入请求则应该通过判断多个注入攻击请求的规律,Bool注入通常页面是一大一小一大一小这种规律,如攻击者发起联合注入攻击,则页面响应大小会异常于多部分正常页面响应大小,如果攻击者发起延时注入请求,则页面响应时间则会和延时注入payload中的响应相近,但是这需要分析攻击payload并提取其中的延时秒数来和日志中的响应时间进行比较误差值,当然,这里只是尝试思路,实际可行率有待实践。

    3.攻击者使用多个代理IP导致无法构成整个攻击路径

    假设同一攻击者发起的每个请求都来自不同的IP,此时即使攻击规则命中了攻击者所有请求,也无法还原攻击者的攻击路径,此时我们只能另寻他法。虽然攻击者使用了多个IP,但是假设攻击者不足够心细,此时你可以通过攻击时间段、请求频率、客户端信息(Ua)、攻击手法、攻击工具(请求主体和请求来源和客户端信息中可能暴露工具特征。如sqlmap注入时留下的referer)

    4.无恶意webshell访问记录

    常规分析中,我们通过找到后门文件,从而利用这一线索得知攻击者IP继而得知攻击者所有请求,但是如果我们并没有找到webshell,又该用什么作为分析的入口线索呢?

    利用尽可能全面的攻击规则对日志进行匹配,通过IP分组聚合,提取发起过攻击请求的所有IP,再通过得到的IP反查所有请求,再配合其他方法检测提取出的所有请求中的可疑请求

    5.编码避开关键字匹配

    关于编码、加密问题,我也曾尝试过,但是实际最后发现除了URL编码以外,其他的编码是无法随意使用的,因为一个被加密或编码后的请求,服务器是无法正确接收和处理的,除非应用本身请求就是加密或编码的。且一般加密或编码出现在日志里通常都是配合其他函数实现的,如Char()、toHexString()、Ascii()..

    6.APT分时段攻击

    如果同一攻击者的攻击行为分别来源不同的时间,比如攻击者花一周时间进行“踩点”,然后他就停止了行为,过了一周后再继续利用所得信息进行攻击行为,此时因为行为链被断开了一周,我们可能无法很明显的通过时间维度来定位攻击者的攻击路径。我目前的想法是,给攻击力路径定义模型,就拿在前面讲到的常规日志分析举例,那么攻击路径模型可定义为:访问主页>探测注入>利用注入>扫描后台>进入后台>上传webshell>通过webshell执行恶意操作。

    其中每一个都可以理解一种行为,而每种行为都有相应的特征或者规则。比如主页链接一般在日志中占比较大,且通常路径为index.html、index.php、index.aspx,那么符合这两个规则则视为访问主页,而在探测注入行为中,一般会出现探测的payload,如时间注入会匹配以下规则:

    .(BENCHMARK(.)).*.(WAITFOR.DELAY).*.(SLEEP(.).*.(THENDBMS_PIPE.RECEIVE_MESSAGE).

    Bool注入

    .*and.*(>|=|<).*
    .*or.*(>|=|<).*
    .*xor.*(>|=|<).*

    联合注入:

    .*(order.*by).*
    .*(union.*select).*
    .*(union.*all.*select).*
    .*(union.*select.*from).*

    显错注入:

    .*('|"|\)).*
    .*(extractvalue\(.*\)).*
    .*(floor\(.*\)).*
    .*(updatexml\(.*\)).*

    利用注入则会体现出更完整,带有目的性的攻击请求,我们以同理制定规则即可,如查询当前数据库名、查询版本信息、查询数据库表名、列名则会出现database、version、table_name、column_nam(不同数据库存在不同差异,这里仅举例)。

    扫描后台则会产生大量的404请求,且请求较为频繁,请求特征通常为/admin、/guanli、/login.php、/administrator。

    对于是否进入后台,我认为假如一个疑似后台访问的链接被频繁请求,且每次响应大小都不相同,我则认为这是已经进入了后台,但是也有可能是网站管理员正在后台进行操作的,这暂且不谈。

    关于上传webshell,这个比较难得到较准确的信息,因为我们没有POST数据,无法知道上传的内容是什么,但是我们可以通过反推法,先利用webshell访问特征进行匹配,找到可能为webshell的访问地址,然后以时间为条件往前匹配包含上传特征的请求,如果成功匹配到了存在上传特征,那么可将其视为攻击路径中的“上传webshell”行为。

    至于“通过webshell执行恶意操作”,可以简单定义为webshell地址被请求多次,且响应大小大多数都不相同,当我们对以上每种行为都建立对应的规则之后,然后按照攻击路径模型到日志中进行匹配,攻击路径模型可能有多个

    这是一个相对常规的攻击路径:

    访问主页>探测注入>利用注入>扫描后台>进入后台>上传webshell>通过webshell执行恶意操作

    可能还会有:

    访问主页>爬虫特征>扫描敏感信息>扫描识别CMS特征>利用已知组件漏洞进行攻击>执行恶意代码>获取webshell>通过webshell执行恶意操作。

    扫描路径>扫描到后台>疑似进入后台>上传webshell>通过webshell执行恶意操作。

    ..

    当我们用多个类似这样的攻击路径模型对日志进行匹配时,可能在同一个模型中可能会命中多次相同的行为特征,此时我需要做一个排查工作,通过IP、客户端特征、攻击手法、攻击payload相似度等等进行排除掉非同一攻击者的行为,尽可能得到一条准确的攻击路径。

    我们通过一整个攻击路径来定义攻击,从而即使攻击者分时段进行攻击,行为也会被列入到攻击路径中

    通过这样方式,也许能实现自动化展示出攻击者的攻击路径,但是具体可行率、准确度还有待进一步实践后确认。

    7.日志噪声数据

    通常,除了攻击者恶意构造的攻击之外,日志中还包含大量的扫描器发出的请求,此类请求同样包含一些攻击特征,但是多半都为无效的攻击,那么我们如何从大量的扫描攻击请求中判断出哪些请求较为可疑,可能攻击已经成功呢?我所认为的方法目前有两种,一种是给每种攻击方法定义成功的特征,如延时注入可通过判断日志中的响应时间,联合注入可通过与正常请求比较响应大小,Bool注入可通过页面响应大小的规律,当然实际情况中,这种做法得到的结果可能是存在误报的。第二种办法就是通过二次请求,通过重放攻击者的请求,定义攻击payload可能会返回的结果,通过重放攻击请求获取响应之后进行判断,其实这里已经类似扫描器,只是攻击请求来自于日志,这种方法可能对服务器造成二次伤害,一般情况下不可取,且已经脱离日志分析的范畴。

    九、日志安全分析之更好的选择

    回到那个最基本的问题,如何从日志中区分正常请求和攻击请求?

    可能做过安全的人都会想到:用关键字匹配呀。

    对,关键字匹配,因为这的确是简单直接可见的办法,用我们已知的安全知识,把每一种攻击手法定义出对应的攻击规则,然而对日志进行匹配,但Web技术更新速度飞快,可能某一天就出现了规则之外的攻击手法,导致我们无法从日志中分析出这些行为。

    其实从接触日志分析这个领域开始,我就想过一个问题?有没有一种算法,可以自动的计算哪些是正常的,哪些是不正常的呢?然而思索很久,也尝试过一些办法,比如尝试过使用统计,按照请求的相似度进行归并,统计出一些“冷门”请求,后来发现其实这样做虽然有点效果,但是还是会漏掉很多请求,且存在大量无用请求。
    后来又思索了一种办法,能不能对用户的网站产生的请求建立一个白名单,然后不在白名单内的请求皆为异常请求。这种做法效果倒是更好了一点,可是如何自动化建立白名单又成为了一个问题?如果我们手动对网站请求建立一个单独的白名单,那么一旦站点较多,建立白名单这个工作量又会巨大,但是如果只有单个站点,手工建立这样一个白名单是有意义的,因为这样就能统计所有的异常请求甚至未知的攻击行为。

    后来我发现其实我最初的想法其实是一个正确的思路,用统计的方法来区分正常和异常请求,只不过我在最开始实现的时候认为的是:某个URL被访问的次数越少,那么次请求为可疑。

    更好的思路是:正常总是基本相似 异常却各有各的异常(来源:http://www.91ri.org/16614.html

    文中关于此理论已经讲得很详细,这里简单描述一下实现方法:

    搜集大量正常请求,为每个请求的所有参数的值定义正常模型
          通过Waf或者攻击规则来剔除所有发起过攻击请求的IP,从而得到所有来自用户的正常请求,将每个正常请求构造出对应的正常模型,比如:
          http://test.com/index.php?id=123
          http://test.com/index.php?id=124
          http://test.com/index.php?id=125
          那么关于此请求的正常模型则为 [N,N,N],不匹配此模型的请求则为异常请求。

    当对日志中的请求建立完正常的模型,通过正常模型来匹配找出所有不符合模型的请求时,发现效果的确不错,漏报较少,不过实践中发现另一个问题,那便是数据的清洗,我们能否建立对应的模型,取决于对日志数据的理解,如果在数据前期提取时,我们无法准确的提取哪些是请求地址那些为请求参数可能无法对某个请求建立正常模型

    关于此理论已经有人写出了Demo实现,地址:https://github.com/SparkSharly/Sharly

     

    十、日志安全分析总结问答

    1.日志分析有哪些用途?

    感知可能正在发生的攻击,从而规避存在的安全风险

    应急响应,还原攻击者的攻击路径,从而挽回已经造成的损失

    分析安全趋势,从较大的角度观察攻击者更“关心”哪些系统

    分析安全漏洞,发现已知或位置攻击方法,从日志中发现应用0day、Nday

    ..

    2.有哪些方法可找出日志中的攻击行为?

    攻击规则匹配,通过正则匹配日志中的攻击请求

    统计方法,统计请求出现次数,次数少于同类请求平均次数则为异常请求

    白名单模式,为正常请求建立白名单,不在名单范围内则为异常请求

    HMM模型,类似于白名单,不同点在于可对正常请求自动化建立模型,从而通过正常模型找出不匹配者则为异常请求

    3.日志分析有哪些商业和非商业工具/平台?

    工具:

    LogForensics 腾讯实验室

    https://security.tencent.com/index.php/opensource/detail/15

    北风飘然@金乌网络安全实验室

    http://www.freebuf.com/sectool/126698.html

    网络ID为piaox的安全从业人员:

    http://www.freebuf.com/sectool/110644.html

    网络ID:SecSky

    http://www.freebuf.com/sectool/8982.html

    网络ID:鬼魅羊羔    

    http://www.freebuf.com/articles/web/96675.html

     

    平台(商业项目):

    Splunk  >> 机器数据引擎 

    赛克蓝德 >> SeciLog

    优特捷信息技术 >> 日志易

    HanSight瀚思 >> 安全易

    百泉众合数据科技 >>LogInsight

    江南天安 >> 彩虹WEB攻击溯源平台

    开源项目:

    elk :   https://www.elastic.co

    scribe :https://github.com/facebook/scribe

    chukwa:http://incubator.apache.org/chukwa/

    kafka:http://sna-projects.com/kafka/

    Flume:https://github.com/cloudera/flume/

    4.有哪些方法适合分析攻击是否成功?

    Kill Chain Model

     

    十一、扩展阅读

    http://netsecurity.51cto.com/art/201506/478622.htm

    http://www.freebuf.com/articles/web/86406.html

    https://wenku.baidu.com/view/f41356138bd63186bdebbca8.html

    http://www.freebuf.com/articles/web/96675.html

    http://dongxicheng.org/search-engine/log-systems/

    http://www.361way.com/scribe-chukwa-kafka-flume/4119.html

    http://www.jianshu.com/p/942d1beb7fdd

    https://xianzhi.aliyun.com/forum/attachment/big_size/WAF%E6%98%AF%E6%97%B6%E5%80%99%E8%B7%9F%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%AF%B4%E5%86%8D%E8%A7%81.pdf

    http://techshow.ctrip.com/archives/1042.html

    http://www.ixueshu.com/document/b33cf4addda2a27e318947a18e7f9386.html

    http://www.ixueshu.com/document/602ef355997f4aec.html

    http://xueshu.baidu.com/s?wd=paperuri%3A%288b49643ad2a4ba7ea2d4cf46e366188d%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Fwww.doc88.com%2Fp-0157694572004.html&ie=utf-8&sc_us=16365123920770356600    ;

    十二、结束语

    在安全领域中,防护为一个体系,感知风险和应急响应仅仅只算安全体系中的两个环节。而想要尽可能更好的实现这两个环节,单凭从日志中分析数据是远远不够的。

    至于未来或许我们可以将日志分析和Waf、RASP、等其他安全产品进行联动,还可以将Web日志、系统日志、数据库日志等各种其他日志进行关联从而分析更准确、更具有价值的信息。

    日志分析本质为数据分析,而数据驱动安全必定是未来的趋势。

    关于日志分析还有很远的路要走,目前国内还并没有发现较为优秀的产品,日志数据中存在的价值还有待进一步挖掘。

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Web日志安全分析设备;下一代安全威胁发展;Web日志安全分析设备介绍;Web日志安全分析设备功能;Web日志安全分析设备特点灵活的数据采集;Web日志安全分析设备特点智能的行为识别;Web日志安全分析设备应用模型;Web日志...
  • Web日志安全分析工具

    2018-12-12 10:07:39
    Web日志安全分析工具能够对Web日志进行安全分析,可快速从Web日志中发现可疑的恶意攻击行为,并自动识别攻击者IP所在物理位置,最后生成可读性好的安全分析报告,便于安全人员分析攻击者的入侵过程。
  • 用spark做web日志分析

    千次阅读 2018-01-04 15:36:02
    本文以服务器日志分析为例,给大家展示真实场景中,怎么用pySpark去完成大数据的处理和分析的。总述这里的应用主要包括...Part 4: 对返回404的结果做分析part 1 Apache Web服务器日志格式这里用到的服务器日志格式是 Ap

    本文以服务器日志分析为例,给大家展示真实场景中,怎么用pySpark去完成大数据的处理和分析的。

    总述

    这里的应用主要包括4部分:
    Part 1: Apache Web服务器日志格式
    Part 2: web服务器日志初步解析
    Part 3: web服务器日志进一步解析和可视化
    Part 4: 对返回404的结果做分析

    part 1 Apache Web服务器日志格式

    这里用到的服务器日志格式是 Apache Common Log Format (CLF)。简单数来,你看到的每一行都是如下的样式:
    127.0.0.1 - - [01/Aug/1995:00:00:01 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1839

    一个详细一些的字段说明如下:

    • 127.0.0.1
      第一项 ,发起请求的客户端IP地址。

    • -
      第二项 ,空白,用占位符“-”替代,表示所请求的信息(来自远程机器的用户身份),不可用。

    • -
      第三项,空白,表示所请求的信息(来自本地登录的用户身份),不可用。

    • [01/Aug/1995:00:00:01 -0400]

    展开全文
  • Web日志挖掘就是通过对Web日志记录的挖掘,发现用户访问的 Web页面的浏览模式,从而进一步分析和研究 Web日志记录中的规律,改进Web站点的性能和组织结构,提供个性化服务。本文首先分析了 Web日志的分布和特点,再对 Web...
  • web 日志 服务器 分析 web 日志 服务器 分析 web 日志 服务器 分析 web 日志 服务器 分析
  • 摘 要 运用数据仓库技术分析Web日志是目前Web使用挖掘的研究热点本文从Web日志数据库设计数据预处理和逻辑建模三个阶段阐述了Web日志数据仓库系统的整体实现文章详细论述了将Web日志导入数据库中的方法给出了具体的...
  • 日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等。日志的内容、规模和用途也各不相同,很难一概而论。 本文讨论的日志处理方法中的日志,...在Web日志
  • 定时web 日志收集

    2011-03-31 09:08:34
    当今社会是一个信息高度发达的社会,互联网公司每天都会有大量web 日志需要收 集。如何从分布在各地的前端机上快速有效的收集到日志,是进行web 日志分析的首要步 骤。本文基于Hadoop 的HDFS 分布式文件系统,提出了...
  • WEB日志格式

    千次阅读 2018-06-03 21:34:02
    WEB日志格式 日志格式类型: 常见日志格式: 参考: WEB日志格式 Custom Log Formats:普通日志格式 日志格式类型: 目前常见的WEB日志格式主要由两类 Apache的NCSA日志格式,NCSA格式分为 NCSA普通...
  • 下面小编就为大家分享一篇基于web项目log日志指定输出文件位置配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • LINUX日志系统之WEB日志(一)

    万次阅读 2016-06-04 22:07:42
    linux日志系统的重要性想必大家都非常...下面就来认识下web系统中的各种常用的日志文件: 一、linux系统日志:centos6上的日志系统是rsyslog 启动进程是rsyslogd 1、查看日志系统启动情况; #chkconfig --list r
  • Web日志安全分析技巧

    千次阅读 2019-06-24 08:20:22
    ox01 Web日志Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还...
  • Web日志挖掘在电子商务中的应用研究,曾希君,于博,文章介绍了Web日志挖掘的基本概念,并对Web挖掘进行了分类,即包括内容挖掘、结构挖掘、日志挖掘,给出了Web日志挖掘的步骤和过程,
  • Web服务器日志取证分析的方法和工具技巧,入侵检测和证据固定的方法
  • 10个好用的Web日志安全分析工具 经常听到有朋友问,有没有比较好用的web日志安全分析工具?首先,我们应该清楚,日志文件不但可以帮助我们溯源,找到入侵者攻击路径,而且在平常的运维中,日志也可以反应出很多的...
  • 云计算技术在web日志挖掘中的应用研究pdf,提供“云计算技术在web日志挖掘中的应用研究”免费资料下载,主要包括云计算技术及 web 日志挖掘概述、基于云计算的 web 日志挖掘系统设计、基于云计算的 web 日志挖掘算法...
  • 其中面向服务器Web日志Web日志挖掘尤其得到了研究者的关注本文在Web日志挖掘技术方面开展了一些研究工作。首先系统地介绍了数据挖掘和Web数据挖掘的基本概念和方法。然后针对Web日志挖掘,重点研究了Web日志数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 569,419
精华内容 227,767
关键字:

web日志