企業安全建設之搭建開源SIEM平臺(中)

來源:互聯網
上載者:User
關鍵字 企業安全

企業安全建設之搭建開源SIEM平臺。 SIEM(security information and event management),顧名思義就是針對安全資訊和事件的管理系統,針對大多數企業是不便宜的安全系統,本文結合作者的經驗介紹如何使用開源軟體離線分析資料, 使用攻擊建模的方式識別攻擊行為。


回顧系統架構





 


以資料庫為例,通過logstash搜集mysql的查詢日誌,近即時備份到hdfs集群上,通過hadoop腳本離線分析攻擊行為。


資料庫日誌搜集


常見的資料日誌搜集方式有三種:


鏡像方式


大多數資料庫審計產品都支援這種模式,通過分析資料庫流量,解碼資料庫協定,識別SQL預計,抽取出SQL日誌





 


代理方式


比較典型的就是db-proxy方式,目前百度、搜狐、美團、京東等都有相關開源產品,前端通過db-proxy訪問後端的真實資料庫伺服器。 SQL日誌可以直接在db-proxy上搜集。





 


用戶端方式


通過在資料庫伺服器安裝用戶端搜集SQL日誌,比較典型的方式就是通過logstash來搜集,本文以用戶端方式進行講解,其餘方式本質上也是類似的。


logstash配置


安裝


下載logstash HTTPs://www.elastic.co/downloads/logstash 目前最新版本5.2.1版


開啟mysql查詢日誌





 


mysql查詢日誌





 


配置logstash


input {


file {


 type => "mysql_sql_file"


 path => "/var/log/mysql/mysql.log"


 start_position => "beginning"


 sincedb_path => "/dev/null"


}


}


output {


 kafka { broker_list => "localhost:9092" topic_id => "test" compression_codec => "snappy" # string (optiona l), one of ["none", "gzip", "snappy"], default: "none" }


}


運行logstash


bin/logstash -f mysql.conf


日誌舉例


2017-02-16T23:29:00.813Z localhost 170216 19:10:15 37 Connect


 debian-sys-maint@localhost on


2017-02-16T23:29:00.813Z localhost 37 Quit


2017-02-16T23:29:00.813Z localhost 38 Connect debian-sys-maint@localhost on


2017-02-16T23:29:00.813Z localhost 38 Query SHOW VARIABLES LIKE 'pid_file'


切詞


最簡化操作是不用進行切詞,如果喜歡自動切分出資料庫名,時間等欄位,請參考:


grok語法


HTTPs://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns


grok語法調試


HTTP://grokdebug.herokuapp.com/


常見攻擊特徵


以常見的wavsep搭建靶場環境,請參考我的另外一篇文章《基於WAVSEP的靶場搭建指南》


使用SQL掃描連結





 


分析攻擊特徵,下列列舉兩個,更多攻擊特徵請大家自行總結


特徵一


2017-02-16T23:29:00.993Z localhost 170216 19:19:12   46 Query SELECT username, password FROM users WHERE username='textval ue' UNION ALL SELECT Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null, Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null, Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null, Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null, Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null#' AND password='textvalue2'


使用聯集查詢枚舉資料時會產生大量的Null欄位


特徵二、三


枚舉資料庫結構時會使用INFORMATION_SCHEMA,另外個別掃描器會使用GROUP BY x)a)


2017-02-16T23:29:00.998Z localhost    46 Query SELECT username, password FROM users WHERE username='textvalue' AND (SELECT 7473 FROM(SELECT COUNT(*),CONCAT(0x7171716271,(SELECT (CASE WHEN (8199= 8199) THEN 1 ELSE 0 END)),0x717a627871,FLOOR(RAND (0)*2))x FROM INFORMATION_SCHEMA. PLUGINS GROUP BY x)a)-- LFpQ' AND password='textvalue2'


hadoop離線處理


hadoop是基於map,reduce模型





 


簡化理解就是:


cat data.txt | ./map | ./reduce

最簡化期間,我們可以只開發map程式,在map中逐行處理日誌資料,匹配攻擊行為。


以perl腳本開發,python類似


#!/usr/bin/perl -w


my $rule="(null,){3,}|information_schema| GROUP BY x\\)a\\)";


my $line="";


while($line=)


{


if( $line=~/$rule/i )


{


printf($line);


}


}


在hadoop下運行即可。


生產環境


生產環境中的規則會比這複雜很多,需要你不斷補充,這裡只是舉例;


單純只編寫map會有大量的重複報警,需要開發reduce用於聚合;


應急回應時需要知道SQL注入的是那個庫,使用的是哪個帳戶,這個需要在logstash切割欄位時補充;


應急回應時最好可以知道SQL注入對應的連結,這個需要將web的accesslog與SQL日誌關聯分析,比較成熟的方案是基於機器學習,學習出基於時間的關聯矩陣;


用戶端直接搜集SQL資料要求mysql也開啟查詢日誌,這個對伺服器性能有較大影響,我知道的大型公司以db-prxoy方式接入為主,建議可以在db-proxy上搜集;


基於規則識別SQL注入存在瓶頸,雖然相對web日誌層面以及流量層面有一定進步,SQL語義成為必然之路。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.