作者:
winsyk
·
2014/08/15 10:58
0x00 前言:
對於大資料我相信大多數人都不陌生,特別現在是在大資料時代,當下流行的技術很多人都可以朗朗上口比如hadoop、hbase、spark、storm,那麼在資料收集中,是否有好的解決辦法來幫助企業進行安全管理及策略分析呢,筆者搜尋了很多資料,透過自己的實踐分享一篇我對大資料日誌分析及處理的見解,本篇技術是基於logstash elasticsearch、redis結合ossec來做的開源方案。 在《無處可藏》中斯諾登提到NSA對網路及資料收集的原則是收集一切,在企業安全上也需要做到如此,眾所周知安全的風險來自於邊界,駭客也會挑一些比較邊緣的業務進行入侵,但這些東西我們都沒記錄但對於後續的應急響應和入侵檢測來說就無從談起,所以在企業內做大資料的原則也是“收集一切”。 開篇提到的這些主要是為了下文做鋪墊,本文基於系統安全日誌來做收集及處理,希望能給大家提供一些思路,整體為開源技術,屌絲安全的本質是“快”,當前社會唯快不破。
0x01: 技術架構: 使用到的工具如下:
Ossec(事件源、alert源)
Logstash (日誌收集、分割日誌)
Elasticsearch (全文搜尋)
Kibana3 (日誌展現)
Redis(用於資料儲存,防止資料丟失)
使用該方案好處:opensource, 不方便處:資料較少,尤其是對Kibana
0x02:實施方案:
關於如何安裝,請參考: https://app.yinxiang.com/shard/s21/sh/f4e62686-16ef-4549-beb1-c5124b232df6/f538a1ea304ff4191acf494a1a1bd4f9
0x03:技術實踐:
1、 系統日誌收集:
作業系統日誌收集可以採取syslog、rsyslog等技術,本文使用syslog主要對於收集日誌安全日誌,日誌內容範圍為/var/log/secure,、/var/log/lastlog等,/var/log/secure內基於使用者的登入失敗、登入異常、是否從白名單ip登入等都可以審計到,然後來做關聯分析,更多的維度需要各位看官自己去發現和探索,本文不深入講解。
日誌收集作用: 應用場景:系統安全日誌薄弱在駭客防禦過程中,如果日誌被刪除,syslog服務被暫停,這些都會對系統入侵分析造成麻煩,難以追溯。
2、 入侵檢測系統ossec:
Syslog日誌進來後不能不做分析,如果不分析,資料就不會被用活只是死資料,這裡用到開源ids系統,Ossec,Ossec大家或許並不陌生,ossec 支援2種模式:1、ossec agent; 2、基於syslog方式對日誌做收集,透過客戶端配置syslog將日誌傳送到ossec server,然後ossec server會透過對分析日誌進格式化處理規則解析,判斷異常並且對其做處理,比如寫入資料庫,觸發告警,如圖1為處理日誌過程。
如圖2為ossec整個工作過程:
3、 日誌集中化管理 logstash:
Logstash是一個完全開源的工具,他可以對你的日誌進行收集、分析,並將其儲存供以後使用(如,搜尋),您可以使用它。說到搜尋,logstash帶有一個web介面,搜尋和展示所有日誌,但因為logstash的管理介面不如kibana美觀,這裡使用Kibana做日誌展現。 我安裝的logstash版本為:logstash-1.2.2-flatjar.jar,透過命令:
java -jar logstash-1.2.2-flatjar.jar agent -f logstash_agent.conf
將logstash啟動,logstash_agent.conf內容如下圖:
對上圖logstash內容進行分解,它一共做了這些事。
- 透過讀取ossec alert log,將資料讀取到logstash agent。
- Logstash判斷事件源是否為ossec,如果是則對其進行分割欄位;
- 將處理後的logstash日誌寫入到redis;
- 使用redis的目的是為了將logstash讀取的日誌快取到redis內,防止資料丟失。
4、 全文檢索 elasticsearch:
ElasticSearch是一個基於Lucene構建的開源,分散式,RESTful搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。 在本文中ElasticSearch主要的作用,透過es讀取logstash內ossec日誌進行全文檢索,方便後續日誌展現及搜尋,es預設埠為9200,成功開啟es後會提示如下:
ElasticSearch啟動後可以透過訪問http://127.0.0.1:9200來檢視es工作是否正常,出現如下資料證明es正常工作 9300埠主要用於和es叢集通訊發資料。
{
"status" : 200,
"name" : "N'Gabthoth",
"version" : {
"number" : "1.2.2",
"build_hash" : "9902f08efc3ad14ce27882b991c4c56b920c9872",
"build_timestamp" : "2014-07-09T12:02:32Z",
"build_snapshot" : false,
"lucene_version" : "4.8"
},
"tagline" : "You Know, for Search"
}
透過讀取之前寫入到redis裡的資料,將redis內資料寫入到es裡,如下配置實現:
input {
redis
{
host => "127.0.0.1"
data_type =>"list"
port => "6379"
key => "logstash"
type => "ossec"
}
}
output {
stdout { codec => rubydebug }
if [type] == "ossec" {
elasticsearch {
host => "127.0.0.1"
port => "9300"
#cluster => "ossec"
index => "logstash-ossec-%{+YYYY.MM.dd}"
index_type => "ossec"
template_name => "template-ossec"
template => "/usr/local/share/logstash/elasticsearch_template.json"
template_overwrite => true
}
}
}
5、 日誌展現:
既然已經將上述工作都做到位了,那麼需要有介面來展現勞動成果及後續進行日誌分析,這裡使用kibana來做展現,關於kibana各位請自行搜尋,我只簡單說下我的理解,它的資料很少,筆者在學習過程中也是一路摸索,推薦大家使用這個dashboard來展現日誌,下載地址:https://github.com/magenx/Logstash/blob/master/kibana/kibana_dashboard.json 6、 結果展現:
6.1、 結合Ossec應用場景:
舉例,我們在日常的運維環境中會有常見的登入事件,並且也會限制一些ip是否能登入該主機,在ossec內我們定製一條規則來判斷是否有入侵者使用其他ip進行登入。 在ossec裡我們可以定製一條規則在sshd_rules.xml中,規則如下:
<rule id="5739" level="10">
<if_sid>5700</if_sid>
<group>authentication_failure</group>
<srcip>!10.10.2.1</srcip>
<description>not come from 10.10.2.1</description>
</rule>
</group>
if_sid是匹配syslog,sshd,如下規則:
<!-- SSHD messages -->
<group name="syslog,sshd,">
<rule id="5700" level="0" noalert="1">
<decoded_as>sshd</decoded_as>
<description>SSHD messages grouped.</description>
</rule>
如果有使用者觸發到該規則,kibana會展現告警如下:
0x04:
借用一句話,安全這個東西就是這樣的,你遇到的我沒遇到過,我遇到的你可能也沒有遇到過,其實只要一說,大家就都明白了。 ” 希望此文對你有幫助,謝謝!
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!