您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么通過Kibana、Wazuh和Bro IDS提高中小企業的威脅檢測能力,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
近來,我們一直都在通過一些開源免費的工具,來幫助中小企業提升其網絡威脅檢測能力。我們將手把手的教大家通過Kibana,Wazuh和Bro IDS來提高自身企業的威脅檢測能力。
什么是Wazuh?
Wazuh是一款以OSSEC作為引擎的基于主機的入侵檢測系統。通過與ELK的結合,便于管理員通過日志平臺查看系統日志信息,告警信息,規則配置信息等。
這里有份非常詳細的Wazuh官方文檔,你可以參考該文檔進行安裝。安裝成功后,你可以通過http://your_server:5601訪問Kibana和Wazuh。
BRO是一個開源的IDS項目。它的安裝相對容易,但使用Kibana進行設置就會復雜許多。我們嘗試了好幾個網上的安裝教程,但都沒有成功。所以,我們創建了我們自己的安裝指南,你只需重復我們的安裝步驟即可(避免在此過程浪費時間)。
默認情況下,Ubuntu上已安裝了Git。因此,你可以使用以下命令克隆存儲庫。這些文件將被放入名為bro的目錄中。
git clone --recursive git://git.bro.org/bro
切換到項目目錄
cd bro
運行Bro的配置(這個過程應該不到一分鐘就能完成)。
./configure make
在運行時,你會在大多數輸出行的開頭看到完成百分比。
完成后,安裝Bro(這也應該用不到一分鐘的時間)。
sudo make install
Bro將被安裝在/usr/local/bro目錄中。
現在我們需要將/usr/local/bro目錄添加到$PATH中。要確保它在全局可用,最好的方法是在/etc/profile.d目錄下指定文件中的路徑。我們將該文件稱為3rd-party.sh。
export PATH=$PATH:/usr/local/bro/bin
現在,我們已經安裝了Bro,接下來我們還需要對它進行一些配置更改才能正常運行。
這里我們需要對一些Bro的配置文件進行修改。這些文件都位于/usr/local/bro/etc目錄中,主要包含以下三個文件:
node.cfg,用于配置要監視的節點。
networks.cfg,包含節點本地的CIDR表示法網絡列表。
broctl.cfg,郵件,日志記錄和其他設置的全局BroControl配置文件。
讓我們看看每個文件中需要修改的地方。
要配置Bro的監視節點,我們需要修改node.cfg文件。
開箱即用,Bro被配置為在獨立模式下運行。因為這是獨立安裝的,所以你不需要修改此文件,但最好是檢查下其中的值是否正確。
打開文件進行編輯。
sudo nano /usr/local/bro/etc/node.cfg
在bro部分,我們找到interface參數。這里的默認值為eth0,這應該與你的Ubuntu 16.04服務器的公共接口相匹配。如果不一致的話,你就要進行修改。
/usr/local/bro/etc/node.cfg
[bro] type=standalone host=localhost interface=eth0
完成后保存并關閉文件。接下來,我們將配置該節點所屬的專用網絡。
你可以在networks.cfg文件中,配置節點所屬的IP網絡(即你希望監視的服務器接口的IP網絡)。
我們打開該文件。
sudo nano /usr/local/bro/etc/networks.cfg
默認情況下,該文件附帶三個專用IP地址塊示例。
/usr/local/bro/etc/networks.cfg # List of local networks in CIDR notation, optionally followed by a # descriptive tag. # For example, "10.0.0.0/8" or "fe80::/64" are valid prefixes. 10.0.0.0/8 Private IP space 172.16.0.0/12 Private IP space 192.168.0.0/16 Private IP space
刪除現有的三個條目,然后添加我們自己的條目。你可以通過ip addr show命令來檢查服務器接口的網絡地址。你的networks.cfg文件最終應該看起來像下面這樣:
示例 /usr/local/bro/etc/networks.cfg
192.168.1.0/24 Public IP space 172.16.100.0/24 Private IP space
完成編輯后保存并關閉文件。接下來,我們將配置郵件和日志記錄設置。
BroControl用于管理Bro的安裝 - 啟動和停止服務,部署Bro以及執行其他管理任務。它既是命令行工具又是一個交互式的shell。
如果使用sudo /usr/local/bro/bin/broctl調用broctl,它將啟動一個交互式shell:
Welcome to BroControl 1.5-21 Type "help" for help. [BroControl] >
你也可以使用exit命令退出交互式shell。
在shell中,你可以運行任何有效的Bro命令。你也可以直接從命令行運行相同的命令,而無需調用shell。在命令行運行命令的一大優勢就是,允許你將broctl命令的輸出通過管道,傳輸到標準Linux命令中。在接下來的部分,我們都將在命令行中調用broctl命令。
首先,我們使用broctl deploy啟動Bro。
sudo /usr/local/bro/bin/broctl deploy
默認情況下,Bro日志是TSV(制表符分隔值)文件! 但對于ElasticSearch而言,使用JSON文件可以更高效地運行。
我們只需在/usr/share/bro/share/site/bro.local文件的末尾添加以下內容即可:
@load tuning/json-logs redef LogAscii::json_timestamps = JSON::TS_ISO8601; redef LogAscii::use_json = T;
接著,我們重啟Bro。現在,我們所有的日志文件都應該已經轉換為了JSON格式。
sudo /usr/local/bro/bin/broctl restart
首先,我們將原始的wazuh filebeat配置移動到一個新創建的目錄conf.d。你只需復制以下命令即可:
cd /etc/filebeat mkdir conf.d mv filebeat.yml conf.d/ cat << EOF > filebeat.yml filebeat: config_dir: /etc/filebeat/conf.d output: logstash: # The Logstash hosts hosts: ["127.0.0.1:5000"] EOF
然后,在/etc/filebeat/conf.d/filebeat_bro.yml中創建我們的bro filebeat配置:
filebeat: prospectors: - input_type: log paths: - "/usr/local/bro/spool/bro/conn.log" document_type: json json.message_key: log json.keys_under_root: true json.overwrite_keys: true - input_type: log paths: - "/usr/local/bro/spool/bro/dns.log" document_type: json json.message_key: log json.keys_under_root: true json.overwrite_keys: true - input_type: log paths: - "/usr/local/bro/spool/bro/http.log" document_type: json json.message_key: log json.keys_under_root: true json.overwrite_keys: true - input_type: log paths: - "/usr/local/bro/spool/bro/intel.log" document_type: json json.message_key: log json.keys_under_root: true json.overwrite_keys: true # copy inputs to add additional bro logs as needed output: logstash: # The Logstash hosts hosts: ["127.0.0.1:5001"]
我們的Logstash配置/etc/logstash/conf.d/bro.conf:
input { beats { port => 5001 codec => "json_lines" } } filter { #Let's get rid of those header lines; they begin with a hash if [message] =~ /^#/ { drop { } } #Now, using the csv filter, we can define the Bro log fields if [type] == "bro-conn_log" { csv { columns => ["ts","uid","id.orig_h","id.orig_p","id.resp_h","id.resp_p","proto","service","duration","orig_bytes","resp_bytes","conn_state","local_orig","missed_bytes","history","orig_pkts","orig_ip_bytes","resp_pkts","resp_ip_bytes","tunnel_parents"] #If you use a custom delimiter, change the following value in between the quotes to your delimiter. Otherwise, insert a literal <tab> in between the two quotes on your logstash system, use a text editor like nano that doesn't convert tabs to spaces. separator => " " } #Let's convert our timestamp into the 'ts' field, so we can use Kibana features natively date { match => [ "ts", "UNIX" ] } # add geoip attributes geoip { source => "id.orig_h" target => "orig_geoip" } geoip { source => "id.resp_h" target => "resp_geoip" } #The following makes use of the translate filter (logstash contrib) to convert conn_state into human text. Saves having to look up values for packet introspection translate { field => "conn_state" destination => "conn_state_full" dictionary => [ "S0", "Connection attempt seen, no reply", "S1", "Connection established, not terminated", "S2", "Connection established and close attempt by originator seen (but no reply from responder)", "S3", "Connection established and close attempt by responder seen (but no reply from originator)", "SF", "Normal SYN/FIN completion", "REJ", "Connection attempt rejected", "RSTO", "Connection established, originator aborted (sent a RST)", "RSTR", "Established, responder aborted", "RSTOS0", "Originator sent a SYN followed by a RST, we never saw a SYN-ACK from the responder", "RSTRH", "Responder sent a SYN ACK followed by a RST, we never saw a SYN from the (purported) originator", "SH", "Originator sent a SYN followed by a FIN, we never saw a SYN ACK from the responder (hence the connection was 'half' open)", "SHR", "Responder sent a SYN ACK followed by a FIN, we never saw a SYN from the originator", "OTH", "No SYN seen, just midstream traffic (a 'partial connection' that was not later closed)" ] } mutate { convert => [ "id.orig_p", "integer" ] convert => [ "id.resp_p", "integer" ] convert => [ "orig_bytes", "integer" ] convert => [ "duration", "float" ] convert => [ "resp_bytes", "integer" ] convert => [ "missed_bytes", "integer" ] convert => [ "orig_pkts", "integer" ] convert => [ "orig_ip_bytes", "integer" ] convert => [ "resp_pkts", "integer" ] convert => [ "resp_ip_bytes", "integer" ] rename => [ "id.orig_h", "id_orig_host" ] rename => [ "id.orig_p", "id_orig_port" ] rename => [ "id.resp_h", "id_resp_host" ] rename => [ "id.resp_p", "id_resp_port" ] } } } output { #stdout { codec => rubydebug } elasticsearch { hosts => ["localhost:9200"] index => "bro-conn-%{+YYYY.MM.dd}" document_type => "bro" template => "/etc/logstash/bro.json" template_name => "bro" template_overwrite => true } }
我們的bro.json文件你可以在這里獲取到:https://gist.github.com/netscylla/27ac9e1472d89dffa5a8267a6af9c9be
最后,我們重啟logstash。
systemctl restart logstash
并檢查你的Kibana儀表板:
首先,我們轉到管理面板,然后單擊索引模式(index patterns),這將告訴kibana你的bro文件的位置,如下所示:
然后回到discover,你應該能夠看到你的bro日志!
首先,我們在這里進行注冊以獲取免費威脅情報源。
選擇你的Container,feeds 和 sensor(見以下的feeds截圖)。
你將看到一個api code,我們將其復制到剪貼板或記事本中。
遵循critical-stack-intel二進制文件的客戶端安裝說明進行安裝:
然后使用api code(需要聯網)將二進制文件連接到feed,此時它應該下載已訂閱的威脅情報源。
critical-stack-intel api [api_code_here]
并重啟bro
sudo /usr/local/bro/bin/broctl restart
使用以下命令列出feeds:
critical-stack-intel list
關于怎么通過Kibana、Wazuh和Bro IDS提高中小企業的威脅檢測能力就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。