如何把NMAP扫描结果同步到Elasticsearch?, 如果您对信息安全感兴趣,那么您可能熟悉端口扫描工具nmap。扫描器是用于网络发现和安全审计的免费和开源(许可证)实用程序。许多网络管理员也会使用它发现网络以及监视主机或服务正常运行时间等任务。



要把nmap的扫描存储到Elasticsearch必须按照Elasticsearch的格式存储。Nmap有一个命令行参数,它允许您以xml格式化的报告输出nmap结果。比如我们要扫描scanme.nmap.org,这是一个经常用来测试nmap的主机。任何人都可以扫描scanme.nmap.org。

$ nmap -T5 -Pn -A -oX report.xml scanme.nmap.org

这将结果输出到report.xml当前目录中。您可以通过以下方式检查扫描结果:

$ cat report.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE nmaprun> 
<?xml-stylesheet href="file:///usr/bin/../share/nmap/nmap.xsl" type="text/xsl"?> 
<!-- Nmap 7.01 scan initiated Mon Jul 18 16:26:06 2016 as: nmap -T5 -Pn -A -oX report.xml scanme.nmap.org --> 
...

现在,我们需要收集这份报告。对于本教程,我们创建了一个目录“nmap”存储报告和配置。我们将假设有多个报告要解析。

$ mkdir nmap 
$ cd nmap

我正在修改logstash-nmap插件的github页面上的一个配置。为了能够使用我的配置,您需要从配置文件中引用的github页面下载一个模板。

$ wget https://raw.githubusercontent.com/logstash-plugins/logstash-codec-nmap/master/examples/elasticsearch/elasticsearch_nmap_template.json

启动Elasticsearch及Kibana,然手在自己的窗口中打开Kibana。

$ sudo service elasticsearch start 
$ cd〜/ kibana- * 
$ cd bin / 
$ ./kibana&

现在回到nmap目录。您现在应该只有这个目录中有两个文件。

$ cd ~/nmap 
$ ls elasticsearch_nmap_template.json report.xml

将您的logstash配置添加到目录。我将它添加到一个名为的文件中nmap-logstash.conf。

要使用logstash nmap编解码器插件,您需要安装它。导航到您的logstash目录。在我的服务器上,该目录位于/opt/logstash。

$ cd/ opt /logstash 
$ sudo bin /logstash-plugin install logstash-codec-nmap

您可能需要安装ruby-nmap才能安装此插件。在您这样做之前,请确保安装:

$ sudo apt-get install ruby-dev

这是你应该在你的nmap-logstash.conf文件中:

input { file { path => "$HOME/nmap/*.xml" start_position => "beginning" sincedb_path => "/dev/null" codec => nmap tags => [nmap] } } filter { if "nmap" in [tags] { # Don't emit documents for 'down' hosts if [status][state] == "down" { drop {} } mutate { # Drop HTTP headers and logstash server hostname remove_field => ["headers", "hostname"] } if "nmap_traceroute_link" == [type] { geoip { source => "[to][address]" target => "[to][geoip]" } geoip { source => "[from][address]" target => "[from][geoip]" } } if [ipv4] { geoip { source => ipv4 target => geoip } } } } output { if "nmap" in [tags] { elasticsearch { document_type => "nmap-reports" document_id => "%{[id]}" # Nmap data usually isn't too bad, so monthly rotation should be fine index => "nmap-logstash-%{+YYYY.MM}" template => "./elasticsearch_nmap_template.json" template_name => "logstash_nmap" } stdout { codec => json_lines } } }

现在你可以在你的配置上运行logstash。确保你有最新版本的logstash,特别是如果你无法安装logstash-codec-nmap插件。

$/opt/logstash/bin/logstash - f nmap -logstash.CONF

如果你在使用OpenVas或Nessus。有一个脚本叫做VulnToE可以使用,可用于将Nessus,OpenVas,Nikto和Nmap同步到Elasticsearch中。该脚本使用了Elasticsearch的Python API。

$git clone https//github.com/ChrisRimondi/VulntoES 
$cd VulntoEs/
$sudo pip install elasticsearch

在es中,创建要将数据索引到的索引。或者,您可以使用curl从服务器的命令行创建索引。

$curl -XPUT'localhost:9200/ nmap-vuln-to-es'

现在,索引你的nmap报告。

$python VulntoES.py -i ~/report.xml -e 127.0.0.1 -r nmap -I nmap-vuln-to-es

您可以创建Kibana中nmap数据的可视化,并最终从这些可视化创建仪表板。

结论

我们已将我们的nmap报告同步到Elasticsearch。使用VulnToE脚本也可以用于Nessus,OpenVas和Nikto报告。



原文发布时间为:2017年7月4日


本文作者:愣娃