WAF学习之日志搭建——基于Logstash的正则处理

文章目录

    • 背景
    • Logstash

背景

对于modsecurity在Nginx下输出的日志:

107:2020/03/05 18:07:13 [error] 3613#0: [client 127.0.0.1] ModSecurity: Warning. detected SQLi using 
libinjection with fingerprint 'X' [file "/usr/local/nginx/conf/gap-nginx/rules/REQUEST-942-APPLICATION-ATTACK-
SQLI.conf"] [line "67"] [id "942100"] [msg "SQL Injection Attack Detected via libinjection"] [data "Matched 
Data: X found within ARGS_NAMES:select /*!12345 1234*/ /*!99999 1234*/ from test: select /*!12345 1234*/ 
/*!99999 1234*/ from test"] [severity "CRITICAL"] [ver "OWASP_CRS/3.2.0"] [tag "application-multi"] [tag 
"language-multi"] [tag "platform-multi"] [tag "attack-sqli"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK
/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] 
[hostname ""] [uri "/index.html"] [unique_id "acAc0cdcWcAzUcAcwccMAcAc"]

108:2020/03/05 18:07:13 [error] 3613#0: [client 127.0.0.1] ModSecurity: Warning. Pattern match "(?i:/\\*[!+](?:
[\\w\\s=_\\-()]+)?\\*/)" at ARGS_NAMES:select /*!12345 1234*/ /*!99999 1234*/ from test. [file "/usr/local/nginx
/conf/gap-nginx/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf"] [line "509"] [id "942500"] [msg "MySQL in-line 
comment detected."] [data "Matched Data: /*!12345 1234*/ found within ARGS_NAMES:select /*!12345 1234*/ /*!99999 
1234*/ from test: select /*!12345 1234*/ /*!99999 1234*/ from test"] [severity "CRITICAL"] [ver "OWASP_CRS/3.2.0"] 
[tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-sqli"] [tag "OWASP_CRS"] 
[tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag 
"OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] [hostname ""] [uri "/index.html"] [unique_id 
"acAc0cdcWcAzUcAcwccMAcAc"]

对于上面这样的日志,想将抽出有用的信息,并输出成表格形式

Logstash

Logstash日志分析的配置和使用
grok正则匹配检测网站:可以用来验证你写的grok的正则是否匹配想处理的日志
Logstash配置详解
Logstash的filter使用
Logstash使用grok进行日志处理
Logstash+Kibana日志系统

  • 简单来说,Logstash可以输入制定的日志/文件,通过内置的规则,或者自定义规则,匹配后,输出到你想要的指定位置。
  • 安装玩Logstash后:
  • vanlyy@vanlyy-PC:/usr/local/logstash-7.6.1$ vim logstash-nginx-modsec.conf
input {
       # file {
       #        path => "/usr/local/nginx/logs/error.log"
       #       start_position => "beginning" #从文件开始处读写
       # }
         stdin {}  #可以从标准输入读数据
}

filter {

  #定义数据的格式
  grok {
    patterns_dir => ["./patterns"]
    match => { "message" => "%{DATA:timestamp}%{BEFORE_ModSecurity:beforemod}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"}
 }

}
output {

   #输出到stdout
  stdout { codec => rubydebug }

   #定义访问数据的用户名和密码
#  user => webService
#  password => 1q2w3e4r
}

  • input{}处理输入
  • filter{} 可以利用gork插件进行正则的匹配,其中本身提供一些模式,如IP,对于%{DATA:timestamp} 表示利用Date的模式,将匹配的字符存储在timestamp变量中,在输出时可以直接用;
  • 也可以通过pattern_dir 标签,配置自己自定义的正则匹配
  • ouput处理输出的位置,可以标准输出,也可以数据库,或者输出到一些日志展示系统
  • root@vanlyy-PC:/usr/local/logstash-7.6.1$ ./bin/logstash -f ./logstash-nginx-modsec.confsudo下 启动logstash,
  • 在这里插入图片描述
  • conf中的输入是标准输入,所以将待处理文件输入:

WAF学习之日志搭建——基于Logstash的正则处理_第1张图片- 可以发现,输入,输出成功,但是filter的grok匹配没写好

  • 修改匹配规则

你可能感兴趣的:(WAF学习之日志搭建——基于Logstash的正则处理)