要把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报告。