使用Suricata和ELK进行网络入侵检测

时间:2024-04-02 10:09:51

数据包捕获是实现网络入侵检测系统(IDS)和执行网络安全监控(NSM)的关键组件。 有几种开源IDS工具可以处理数据包捕获并查找可能的网络入侵和恶意活动的签名。 

其中一个开源工具是Suricata,这是一种IDS引擎,它使用规则集来监控网络流量,并在发生可疑事件时触发警报。 Suricata提供多线程引擎,这意味着它可以以更快的速度和效率执行网络流量分析。 有关Suricata及其功能的更多详细信息,请访问其网站https://suricata-ids.org/。

本文介绍如何使用Network Watcher,Suricata和Elastic Stack设置环境以执行网络入侵检测。 Network Watcher为您提供用于执行网络入侵检测的数据包捕获。 Suricata根据与其给定的威胁规则集匹配的数据包处理数据包捕获并触发警报。 这些警报存储在本地计算机上的日志文件中。 使用Elastic Stack,Suricata生成的日志可以编制索引并用于创建Kibana仪表板,为您提供日志的可视化表示,以及快速获取潜在网络漏洞洞察力的方法。

步骤:

1. 安装Suricata

具体安装过程可参考官方文档 http://suricata.readthedocs.io/en/latest/install.html

在Ubuntu系统上,可以通过以下命令进行安装

sudo add-apt-repository ppa:oisf/suricata-stable

sudo apt-get update

sudo apt-get install suricata

可通过以下命令行检验安装是否完成

suricata -h

在这个阶段,我们没有Suricata运行的任何规则。 如果您希望检测到特定的网络威胁,则可以创建自己的规则,也可以使用来自许多提供程序的开发规则集,例如Emerging Threats或Snort的VRT规则。 我们在此处使用可*访问的Emerging Threats规则集:

wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz

tar zxf emerging.rules.tar.gz

sudo cp -r rules /etc/suricata/

 

2. 安装Elasticsearch

虽然Suricata生成的日志包含有关我们网络上发生的事情的有价值信息,但这些日志文件并不是最容易阅读和理解的。 通过将Suricata与Elastic Stack连接起来,我们可以创建一个Kibana仪表板,使我们能够从日志中搜索,绘图,分析和获取洞察。

版本5.0及更高版本的Elastic Stack需要Java 8.运行命令java -version来检查您的版本。 如果您没有安装java,请参阅Oracle网站上的文档

在ubuntu系统上,可以通过以下命令安装

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.deb

sudo dpkg -i elasticsearch-5.2.0.deb

sudo /etc/init.d/elasticsearch start

其他操作系统可参考官方文档

通过以下命令验证安装

curl http://127.0.0.1:9200

应该返回以下内容:

{
"name" : "Angela Del Toro",
"cluster_name" : "elasticsearch",
"version" : {
    "number" : "5.2.0",
    "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
    "build_timestamp" : "2016-01-27T13:32:39Z",
    "build_snapshot" : false,
    "lucene_version" : "6.1.0"
},
"tagline" : "You Know, for Search"
}

3. 安装Logstash

在ubuntu系统上可通过以下命令安装

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb

sudo dpkg -i logstash-5.2.0.deb

接下来,我们需要配置Logstash以从eve.json文件的输出中读取。 使用以下命令创建logstash.conf文件:

sudo touch /etc/logstash/conf.d/logstash.conf

将以下内容添加到文件中(确保eve.json文件的路径正确):

input {
file {
    path => ["/var/log/suricata/eve.json"]
    codec =>  "json"
    type => "SuricataIDPS"
}

}

filter {
if [type] == "SuricataIDPS" {
    date {
    match => [ "timestamp", "ISO8601" ]
    }
    ruby {
    code => "
        if event.get('[event_type]') == 'fileinfo'
        event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])
        end
    "
    }

    ruby{
    code => "
        if event.get('[event_type]') == 'alert'
        sp = event.get('[alert][signature]').to_s.split(' group ')
        if (sp.length == 2) and /\A\d+\z/.match(sp[1])
            event.set('[alert][signature]', sp[0])
        end
        end
        "
    }
}

if [src_ip]  {
    geoip {
    source => "src_ip"
    target => "geoip"
    #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
    add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
    add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
    convert => [ "[geoip][coordinates]", "float" ]
    }
    if ![geoip.ip] {
    if [dest_ip]  {
        geoip {
        source => "dest_ip"
        target => "geoip"
        #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
        add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
        add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
        }
        mutate {
        convert => [ "[geoip][coordinates]", "float" ]
        }
    }
    }
}
}

output {
elasticsearch {
    hosts => "localhost"
}
}

确保为eve.json文件提供正确的权限,以便Logstash可以提取该文件。

sudo chmod 775 /var/log/suricata/eve.json

通过以下命令启动Logstash

sudo /etc/init.d/logstash start

4. 安装Kibana

在ubuntu系统上可通过以下命令安装

curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-linux-x86_64.tar.gz

tar xzvf kibana-5.2.0-linux-x86_64.tar.gz

cd kibana-5.2.0-linux-x86_64/

./bin/kibana

通过在浏览器输入http://localhost:5601验证安装成功

5. 创建Kibana看板

分别从以下三个链接下载Kibana看板所需的json文件,并添加到Kibana中,具体配置方法请查看官方文档。

在Kibana的“管理”选项卡下,导航到“保存的对象”并导入所有三个文件。 然后,从“仪表板”选项卡中,您可以打开并加载示例仪表板。

https://aka.ms/networkwatchersuricatadashboard

https://aka.ms/networkwatchersuricatavisualization

https://aka.ms/networkwatchersuricatasavedsearch

启动suricata进行网络入侵检测后,生成eve.json文件,使用ELK组件处理该文件,并在Kibana上展示告警,具体界面如下:

使用Suricata和ELK进行网络入侵检测

示例仪表板提供了Suricata警报日志的多个可视化:

GeoIP提醒 - 一张地图,显示基于地理位置的原始国家/地区的警报分布(由IP确定)

使用Suricata和ELK进行网络入侵检测

前10个警报 - 10个最常见的触发警报及其描述的摘要。 单击单个警报会在仪表板中过滤到与该特定警报相关的信息。

使用Suricata和ELK进行网络入侵检测

警报数 - 规则集触发的警报总数

使用Suricata和ELK进行网络入侵检测

前20个源/目标IP /端口 - 显示触发警报的前20个IP和端口的饼图。 您可以过滤特定的IP /端口,以查看触发的警报数量和类型。

使用Suricata和ELK进行网络入侵检测

警报摘要 - 汇总每个警报的具体细节的表格。 您可以自定义此表以显示每个警报的其他感兴趣参数。

使用Suricata和ELK进行网络入侵检测

总结:

通过组合Network Watcher提供的数据包捕获和Suricata等开源IDS工具,您可以针对各种威胁执行网络入侵检测。 这些仪表板使您可以快速发现网络中的趋势和异常,并深入了解数据以发现警报的根本原因,例如恶意用户代理或易受攻击的端口。 利用这些提取的数据,您可以就如何应对和保护网络免受任何有害入侵企图做出明智的决策,并创建规则以防止将来侵入您的网络。