怎么通过Kibana、Wazuh和Bro IDS提高中小企业的威胁检测能力

怎么通过Kibana、Wazuh和Bro IDS提高中小企业的威胁检测能力

这篇文章给大家介绍怎么通过Kibana、Wazuh和Bro IDS提高中小企业的威胁检测能力,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

近来,我们一直都在通过一些开源免费的工具,来帮助中小企业提升其网络威胁检测能力。我们将手把手的教大家通过Kibana,Wazuh和Bro IDS来提高自身企业的威胁检测能力。

什么是Wazuh?

Wazuh是一款以OSSEC作为引擎的基于主机的入侵检测系统。通过与ELK的结合,便于管理员通过日志平台查看系统日志信息,告警信息,规则配置信息等。

安装ELK & Wazuh

这里有份非常详细的Wazuh官方文档,你可以参考该文档进行安装。安装成功后,你可以通过http://your_server:5601访问Kibana和Wazuh。

安装Bro

BRO是一个开源的IDS项目。它的安装相对容易,但使用Kibana进行设置就会复杂许多。我们尝试了好几个网上的安装教程,但都没有成功。所以,我们创建了我们自己的安装指南,你只需重复我们的安装步骤即可(避免在此过程浪费时间)。

Ubuntu 安装

默认情况下,Ubuntu上已安装了Git。因此,你可以使用以下命令克隆存储库。这些文件将被放入名为bro的目录中。

gitclone--recursivegit://git.bro.org/bro

切换到项目目录

cdbro

运行Bro的配置(这个过程应该不到一分钟就能完成)。

./configuremake

在运行时,你会在大多数输出行的开头看到完成百分比。

完成后,安装Bro(这也应该用不到一分钟的时间)。

sudomakeinstall

Bro将被安装在/usr/local/bro目录中。

现在我们需要将/usr/local/bro目录添加到$PATH中。要确保它在全局可用,最好的方法是在/etc/profile.d目录下指定文件中的路径。我们将该文件称为3rd-party.sh。

exportPATH=$PATH:/usr/local/bro/bin

现在,我们已经安装了Bro,接下来我们还需要对它进行一些配置更改才能正常运行。

配置Bro

这里我们需要对一些Bro的配置文件进行修改。这些文件都位于/usr/local/bro/etc目录中,主要包含以下三个文件:

node.cfg,用于配置要监视的节点。

networks.cfg,包含节点本地的CIDR表示法网络列表。

broctl.cfg,邮件,日志记录和其他设置的全局BroControl配置文件。

让我们看看每个文件中需要修改的地方。

配置要监控的节点

要配置Bro的监视节点,我们需要修改node.cfg文件。

开箱即用,Bro被配置为在独立模式下运行。因为这是独立安装的,所以你不需要修改此文件,但最好是检查下其中的值是否正确。

打开文件进行编辑。

sudonano/usr/local/bro/etc/node.cfg

在bro部分,我们找到interface参数。这里的默认值为eth0,这应该与你的Ubuntu 16.04服务器的公共接口相匹配。如果不一致的话,你就要进行修改。

/usr/local/bro/etc/node.cfg

[bro]type=standalonehost=localhostinterface=eth0

完成后保存并关闭文件。接下来,我们将配置该节点所属的专用网络。

你可以在networks.cfg文件中,配置节点所属的IP网络(即你希望监视的服务器接口的IP网络)。

我们打开该文件。

sudonano/usr/local/bro/etc/networks.cfg

默认情况下,该文件附带三个专用IP地址块示例。

/usr/local/bro/etc/networks.cfg#ListoflocalnetworksinCIDRnotation,optionallyfollowedbya#descriptivetag.#Forexample,"10.0.0.0/8"or"fe80::/64"arevalidprefixes.10.0.0.0/8PrivateIPspace172.16.0.0/12PrivateIPspace192.168.0.0/16PrivateIPspace

删除现有的三个条目,然后添加我们自己的条目。你可以通过ip addr show命令来检查服务器接口的网络地址。你的networks.cfg文件最终应该看起来像下面这样:

示例/usr/local/bro/etc/networks.cfg

192.168.1.0/24PublicIPspace172.16.100.0/24PrivateIPspace

完成编辑后保存并关闭文件。接下来,我们将配置邮件和日志记录设置。

使用BroControl管理Bro

BroControl用于管理Bro的安装 - 启动和停止服务,部署Bro以及执行其他管理任务。它既是命令行工具又是一个交互式的shell。

如果使用sudo /usr/local/bro/bin/broctl调用broctl,它将启动一个交互式shell:

WelcometoBroControl1.5-21Type"help"forhelp.[BroControl]>

你也可以使用exit命令退出交互式shell。

在shell中,你可以运行任何有效的Bro命令。你也可以直接从命令行运行相同的命令,而无需调用shell。在命令行运行命令的一大优势就是,允许你将broctl命令的输出通过管道,传输到标准Linux命令中。在接下来的部分,我们都将在命令行中调用broctl命令。

首先,我们使用broctl deploy启动Bro。

sudo/usr/local/bro/bin/broctldeploy

将Bro日志转换为JSON

默认情况下,Bro日志是TSV(制表符分隔值)文件! 但对于ElasticSearch而言,使用JSON文件可以更高效地运行。

我们只需在/usr/share/bro/share/site/bro.local文件的末尾添加以下内容即可:

@loadtuning/json-logsredefLogAscii::json_timestamps=JSON::TS_ISO8601;redefLogAscii::use_json=T;

接着,我们重启Bro。现在,我们所有的日志文件都应该已经转换为了JSON格式。

sudo/usr/local/bro/bin/broctlrestart

Filebeat

首先,我们将原始的wazuh filebeat配置移动到一个新创建的目录conf.d。你只需复制以下命令即可:

cd/etc/filebeatmkdirconf.dmvfilebeat.ymlconf.d/cat<<EOF>filebeat.ymlfilebeat:config_dir:/etc/filebeat/conf.doutput:logstash:#TheLogstashhostshosts:["127.0.0.1:5000"]EOF

然后,在/etc/filebeat/conf.d/filebeat_bro.yml中创建我们的bro filebeat配置:

filebeat:prospectors:-input_type:logpaths:-"/usr/local/bro/spool/bro/conn.log"document_type:jsonjson.message_key:logjson.keys_under_root:truejson.overwrite_keys:true-input_type:logpaths:-"/usr/local/bro/spool/bro/dns.log"document_type:jsonjson.message_key:logjson.keys_under_root:truejson.overwrite_keys:true-input_type:logpaths:-"/usr/local/bro/spool/bro/http.log"document_type:jsonjson.message_key:logjson.keys_under_root:truejson.overwrite_keys:true-input_type:logpaths:-"/usr/local/bro/spool/bro/intel.log"document_type:jsonjson.message_key:logjson.keys_under_root:truejson.overwrite_keys:true#copyinputstoaddadditionalbrologsasneededoutput:logstash:#TheLogstashhostshosts:["127.0.0.1:5001"]

Logstash

我们的Logstash配置/etc/logstash/conf.d/bro.conf:

input{beats{port=>5001codec=>"json_lines"}}filter{#Let'sgetridofthoseheaderlines;theybeginwithahashif[message]=~/^#/{drop{}}#Now,usingthecsvfilter,wecandefinetheBrologfieldsif[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"]#Ifyouuseacustomdelimiter,changethefollowingvalueinbetweenthequotestoyourdelimiter.Otherwise,insertaliteral<tab>inbetweenthetwoquotesonyourlogstashsystem,useatexteditorlikenanothatdoesn'tconverttabstospaces.separator=>""}#Let'sconvertourtimestampintothe'ts'field,sowecanuseKibanafeaturesnativelydate{match=>["ts","UNIX"]}#addgeoipattributesgeoip{source=>"id.orig_h"target=>"orig_geoip"}geoip{source=>"id.resp_h"target=>"resp_geoip"}#Thefollowingmakesuseofthetranslatefilter(logstashcontrib)toconvertconn_stateintohumantext.Saveshavingtolookupvaluesforpacketintrospectiontranslate{field=>"conn_state"destination=>"conn_state_full"dictionary=>["S0","Connectionattemptseen,noreply","S1","Connectionestablished,notterminated","S2","Connectionestablishedandcloseattemptbyoriginatorseen(butnoreplyfromresponder)","S3","Connectionestablishedandcloseattemptbyresponderseen(butnoreplyfromoriginator)","SF","NormalSYN/FINcompletion","REJ","Connectionattemptrejected","RSTO","Connectionestablished,originatoraborted(sentaRST)","RSTR","Established,responderaborted","RSTOS0","OriginatorsentaSYNfollowedbyaRST,weneversawaSYN-ACKfromtheresponder","RSTRH","RespondersentaSYNACKfollowedbyaRST,weneversawaSYNfromthe(purported)originator","SH","OriginatorsentaSYNfollowedbyaFIN,weneversawaSYNACKfromtheresponder(hencetheconnectionwas'half'open)","SHR","RespondersentaSYNACKfollowedbyaFIN,weneversawaSYNfromtheoriginator","OTH","NoSYNseen,justmidstreamtraffic(a'partialconnection'thatwasnotlaterclosed)"]}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。

systemctlrestartlogstash

并检查你的Kibana仪表板:

首先,我们转到管理面板,然后单击索引模式(index patterns),这将告诉kibana你的bro文件的位置,如下所示:

然后回到discover,你应该能够看到你的bro日志!

提取 - Bro和威胁情报

首先,我们在这里进行注册以获取免费威胁情报源。

选择你的Container,feeds 和 sensor(见以下的feeds截图)。

你将看到一个api code,我们将其复制到剪贴板或记事本中。

遵循critical-stack-intel二进制文件的客户端安装说明进行安装:

然后使用api code(需要联网)将二进制文件连接到feed,此时它应该下载已订阅的威胁情报源。

critical-stack-intelapi[api_code_here]

并重启bro

sudo/usr/local/bro/bin/broctlrestart

使用以下命令列出feeds:

critical-stack-intellist

关于怎么通过Kibana、Wazuh和Bro IDS提高中小企业的威胁检测能力就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-12-23 21:14:27
收藏
分享
海报
0 条评论
37
上一篇:如何识别恶意Cobalt Strike服务器 下一篇:怎样利用欺骗防御技术应对APT检测
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码