溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ELK分析ngx_lua_waf軟件防火墻日志

發(fā)布時間:2020-06-19 11:22:18 來源:網(wǎng)絡 閱讀:1914 作者:三杯水 欄目:安全技術

ELK分析ngx_lua_waf軟件防火墻日志


ngx_lua_waf介紹及部署可以參考

https://github.com/loveshell/ngx_lua_waf

這個一個基于lua-nginx-module的web應用防火墻,作者是張會源(ID : kindle),微博:@神奇的魔法師。

用途:

防止sql注入,本地包含,部分溢出,fuzzing測試,xss,×××F等web***

防止svn/備份之類文件泄漏

防止ApacheBench之類壓力測試工具的***

屏蔽常見的掃描***工具,掃描器

屏蔽異常的網(wǎng)絡請求

屏蔽圖片附件類目錄php執(zhí)行權限

防止webshell上傳


總結(jié):

1,Nginx_lua_waf總體來說功能強大,相比其他軟件防火墻Modsecurity還稍微簡單點。

2,Ngx_lua_waf的bug主要就是防火墻策略寫的不嚴謹導致的,會造成兩種結(jié)果:一是部分***通過偽裝繞過防火墻;二是防火墻策略配置不當會造成誤殺。

3,另外根據(jù)站點的類型需要配置不同的策略,默認配置后全局生效。比如論壇等比較特殊允許很多html插入,這樣的策略需要更寬松。

4,最后生成的hack記錄日志可以通過ELK分析,ELK這邊需要根據(jù)日志格式制作特殊模版,此模版能兼容大部分日志類型,還有少部分完全沒有規(guī)律的日志分析不了。

5,最后ELK能展示日志分析結(jié)果分類,但是還不能區(qū)分各種ruletag類型***屬于哪一種直白的表示出來。

6,最后建議ngx_lua_waf如果真的要用可以考慮在部分源站站點少量試用,前端站點不建議使用,等對該軟件理解深入后才可線上使用。

7,補充:目前對ngx_lua_waf拒絕特定的user agent、拒絕特定后綴文件訪問、防止sql注入三大類比較熟悉。


后續(xù)計劃:

有人(此人人稱趙班長項目地址 https://github.com/unixhot/waf) 對ngx_lua_waf進行了二次重構(gòu),主要功能有:黑白名單、只記錄***日志不限制訪問(日志格式可能更友好點待觀察)、另外使用openresty部署的,后期計劃使用二次重構(gòu)的waf再次測試下。

計劃大概實施步驟:

1,不要一次性部署上線,先部署后,只記錄日志,然后觀察和調(diào)整規(guī)則,保證正常的請求不會被誤防。

2,使用SaltStack管理規(guī)則庫的更新。

3,使用ELKStack進行日志收集和分析,非常方便的可以在Kibana上做出一個漂亮的***統(tǒng)計的餅圖。(目前也能實現(xiàn))



以下是具體操作過程中需要注意的問題點


一,ELK新增針對nginx_lua_waf日志切分策略

1,日志格式

 line = realIp.." ["..time.."] \""..method.." "..servername..url.."\" \""..data.."\"  \""..ua.."\" \""..ruletag.."\"\n"

2,日志內(nèi)容

192.168.200.106 [2016-07-26 16:56:17] "UA i.maicar.com/AuthenService/Frame/login.aspx?ra=0.5440098259132355" "-"  "Baidu-YunGuanCe-ScanBot(ce.baidu.com)" "(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)"


3,logstash 切分策略

最關鍵的還是grok正則表達式的書寫,這里給兩個建議:

1)一是參考系統(tǒng)自帶的              /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/

該目錄下有系統(tǒng)自帶的很多日志格式的grok正則切分語法,如:

aws     bro   firewalls      haproxy  junos         mcollective        mongodb  postgresql  redis   bacula  exim  grok-patterns  java     linux-syslog  mcollective-patterns  nagios   rails       ruby

默認沒有規(guī)律的參考grok-patterns

2)二是網(wǎng)上有兩個grok語法驗證網(wǎng)站(都得×××)

http://grokdebug.herokuapp.com/ 

http://grokconstructor.appspot.com/do/match#result 


也可以手動驗證,舉例如下

[root@elk logstash]# /opt/logstash/bin/logstash -f /etc/logstash/test1.conf 
Settings: Default pipeline workers: 4
Pipeline main started
192.168.200.106 [2016-07-26 16:56:17] "UA i.maicar.com/AuthenService/Frame/login.aspx?ra=0.5440098259132355" "-"  "Baidu-YunGuanCe-ScanBot(ce.baidu.com)" "(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)"
{
       "message" => "192.168.200.106 [2016-07-26 16:56:17] \"UA i.maicar.com/AuthenService/Frame/login.aspx?ra=0.5440098259132355\" \"-\"  \"Baidu-YunGuanCe-ScanBot(ce.baidu.com)\" \"(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)\"",
      "@version" => "1",
    "@timestamp" => "2016-07-28T10:05:43.763Z",
          "host" => "0.0.0.0",
        "realip" => "192.168.200.106",
          "time" => "2016-07-26 16:56:17",
        "method" => "UA",
    "servername" => "i.maicar.com",
           "url" => "/AuthenService/Frame/login.aspx?ra=0.5440098259132355",
          "data" => "-",
     "useragent" => "Baidu-YunGuanCe-ScanBot(ce.baidu.com)",
       "ruletag" => "(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)"
}


其中test1.conf內(nèi)容如下:

input{stdin{}}
filter {
       grok {
           match => {
                       "message" =>"%{IPV4:realip}\s+\[%{TIMESTAMP_ISO8601:time}\]\s+\"%{WORD:method}\s+%{HOSTNAME:servername}(?<url>[^\"]+)\"\s+\"(?<data>[^\"]+)\"\s+\"(?<useragent>[^\"]+)\"\s+\"(?<ruletag>[^\"]+)\""
            }
      }
}
output{stdout{codec=>rubydebug}}


最后線上切分策略如下:

filter {
if [type] == "waf194" {
grok {
      match => [ 
                       "message" , "%{IPV4:realip}\s+\[%{TIMESTAMP_ISO8601:time}\]\s+\"%{WORD:method}\s+%{HOSTNAME:servername}(?<url>[^\"]+)\"\s+\"(?<data>[^\"]+)\"\s+\"(?<useragent>[^\"]+)\"\s+\"(?<ruletag>[^\"]+)\""
]
                remove_field => [ "message" ]
}
       }
}




二,ELK新增針對nginx_lua_waf日志的索引模版

其中最關鍵問題是多個索引模版共存的問題,以前總是后加索引模版會覆蓋原來的,參考http://mojijs.com/2015/08/204352/index.html   設置tempalte_name來區(qū)分不同的索引模版。


輸出模版配置如下:

output {    
  elasticsearch {
    hosts => ["192.168.88.187:9200","192.168.88.188:9200","192.168.88.189:9200"]
    sniffing => false
    manage_template => true
    template => "/opt/logstash/templates/logstashwaf.json"
    template_overwrite => true
    template_name => "logstashwaf.json"
    index => "logstash-%{type}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
    flush_size => 10000
  }
}



具體logstashwaf.json配置如下,這個是直接參考官方的elasticsearch-logstash.json,就修改了template名字,配置里面只要是string類型的都做了不分詞,因為做視圖時不分詞一來可以節(jié)省內(nèi)存,二來向url,agent,ruletag等等長stings只有不分詞才能精確匹配,那種分詞的模糊匹配用不上。另外如果只要某些string字段添加不分詞,也可以修改"match" : "*",為具體的字段,如:

           "match_pattern": "regex",  #此行為新增加
           "match" : "(realip)|(mothod)(servername)|(url)|(data)|(useragent)|(ruletag)",


線上總體配置如下:

{
  "template" : "logstash-waf194*",
  "settings" : {
    "index.refresh_interval" : "5s"
  },
  "mappings" : {
    "_default_" : {
       "_all" : {"enabled" : true, "omit_norms" : true},
       "dynamic_templates" : [ {
         "message_field" : {
           "match" : "message",
           "match_mapping_type" : "string",
           "mapping" : {
             "type" : "string", "index" : "analyzed", "omit_norms" : true
           }
         }
       }, {
         "string_fields" : {
           "match" : "*",
           "match_mapping_type" : "string",
           "mapping" : {
             "type" : "string", "index" : "analyzed", "omit_norms" : true,
               "fields" : {
                 "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256}
               }
           }
         }
       } ],
       "properties" : {
         "@version": { "type": "string", "index": "not_analyzed" },
         "geoip"  : {
           "type" : "object",
             "dynamic": true,
             "properties" : {
               "location" : { "type" : "geo_point" }
             }
         }
       }
    }
  }
}



三,Ngx_lua_waf生成的hack日志ELK上展示如下

其中制作視圖制作模版等都省略

分析小部分日志結(jié)果如下:

 ELK分析ngx_lua_waf軟件防火墻日志


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI