前言
WAF上線之後,處理最多的是誤判消除。
產生誤判有多種原因,比如web應用源碼編寫時允許用戶端提交過多的cookie;比如單個參數提交的數值太大。
把誤判降低到了可接受的範圍後,還要關注漏報。WAF不是神,任何WAF都可能被繞過。所以還需要定位漏過的攻擊,明確漏報的原因,才能update WAF的策略。
要定位漏報,就必須分析Web應用的訪問日誌了。一個網站,每天產生的access日誌大概接近1GB,顯然靠肉眼看是不現實的。這就需要用python協助自動分析。
實現思路
拿我司某Web系統舉例:
apache開啟了access日誌記錄
日誌規則是每小時產生一個記錄檔,以網站名稱為檔案名稱,以日期+時間為尾碼。例如:special.XXXXXX.com.cn.2016101001
要分析這些散碎的記錄檔,我的思路如下:
1、根據使用者命令列輸入擷取記錄檔所在目錄;
2、遍曆目錄下所有檔案,合并到一個檔案;
3、定義web攻擊常見payload的字串:
SQLi的:select、union、+–+;
Struts的:ognl、java
webshell常見的:base64、eval、excute
使用正則逐行匹配,將命中的日誌複製到單獨的檔案。
實現代碼
代碼如下:
# -*-coding: utf-8 -*-import os,re,sysif len(sys.argv) != 2 : print 'Usage : python logaudit.py <path>' sys.exit()logpath = sys.argv[1]#擷取輸入參數的檔案路徑'merge = re.compile(r'.*(\d[10])')for root , dirs , files in os.walk(logpath): for line in files: #遍曆記錄檔夾,合并所有內容到一個檔案 pipei = merge.match(line) if pipei != None: tmppath = root + '\\' +line logread1 = open(tmppath,'r') logread = logread1.read() log2txt = open('.\\log.txt','a') log2txt.write(logread) log2txt.close() logread1.close() else: exitlog = open('.//log.txt','r')logread = log.readlines()auditString = re.compile(r'.*[^_][sS][eE][lL][eE][cC][tT][^.].*|.*[uU][nN][iI][Oo][nN].*|.*[bB][aA][sS][eE][^.].*|.*[oO][gG][nN][lL].*|.*[eE][vV][aA][lL][(].*|.*[eE][xX][cC][uU][tT][eE].*')writelog = open('.//result.txt','a')for lines in logread: auditResult = auditString.match(lines) if auditResult != None: writelog.write(auditResult.group()) writelog.write('\n') else: exitwritelog.close()log.close()
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。