你是否曾經(jīng)進(jìn)行過網(wǎng)絡(luò)滲透測(cè)試,其范圍如此之大,以至于最終會(huì)得到包含Nmap掃描結(jié)果在內(nèi)的數(shù)十個(gè)文件,而每個(gè)文件又包含多個(gè)主機(jī)? 如果答案是肯定的,那你應(yīng)該會(huì)對(duì)這篇博文感興趣。
創(chuàng)新互聯(lián)專注于芒康企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城建設(shè)。芒康網(wǎng)站建設(shè)公司,為芒康等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)以下是我最近進(jìn)行的一個(gè)工作,旨在找到一種方法來對(duì)滲透測(cè)試的結(jié)果進(jìn)行分類,同時(shí)實(shí)現(xiàn)團(tuán)隊(duì)成員之間的并發(fā)協(xié)作。 我們將會(huì)看到,在解析和分析數(shù)據(jù)時(shí),使用傳統(tǒng)的“防御性”工具進(jìn)行攻擊性安全數(shù)據(jù)分析比傳統(tǒng)的grep更具優(yōu)勢(shì)。
最后,這個(gè)工程的所有源代碼大家可以在github上下載,我也希望這能夠給后面將和我有一個(gè)需求的老哥們有所幫助: https://github.com/marco-lancini/docker_offensive_elk .
如果你還在閱讀這篇文章,說明你想要摒棄原來基于grep的方法,但是我們有什么替代品嗎?
我首先瀏覽了我一直忽略的東西:Nmap HTML報(bào)告。 我不知道有多少人知道并實(shí)際使用它,但確實(shí)可以從Nmap獲取XML輸出文件并將其傳遞給XML處理器(如xsltproc),將其轉(zhuǎn)換為HTML文件,如下圖所示:
如果對(duì)此感興趣,可以在Nmap網(wǎng)站上找到獲取此信息的完整流程。 但是,我認(rèn)為這種方法有一些缺陷。 首先,除非使用—webxml開關(guān)啟動(dòng)Nmap,否則必須拋出每個(gè)輸出文件以替換XSL樣式表引用,以使其指向當(dāng)前計(jì)算機(jī)上nmap.xsl文件的確切位置。 其次,更重要的是,這沒有擴(kuò)展。
放棄了HTML的辦法后,我想起來我的前同事Vincent Yiu的一篇博客,利用Splunk進(jìn)行攻擊性操作。 這是一個(gè)有趣的想法,因?yàn)槲覀冊(cè)絹碓蕉嗟乜吹饺藗円彩褂盟^的“防御”工具進(jìn)行攻擊。 Splunk絕對(duì)不適合我(因?yàn)槲覜]有l(wèi)icense),但經(jīng)過一些研究后我終于偶然發(fā)現(xiàn)了這篇博客文章:“ Nmap + Logstash to Gain Insight Into Your Network ”。
我之前聽說過ELK(下面有更多內(nèi)容介紹ELK),但我從未真正了解過它,可能是因?yàn)槲野阉鼩w類為主要由SOC分析師使用的“防御”工具。 而它引起我注意的是上面的博客文章解釋了如何:
“直接將Nmap掃描結(jié)果導(dǎo)入Elasticsearch,然后您可以使用Kibana將其可視化”。
那么,ELK Stack是什么? “ELK”是三個(gè)開源項(xiàng)目的首字母縮寫:Elasticsearch,Logstash和Kibana。 Elasticsearch是一個(gè)搜索和分析引擎。 Logstash是一個(gè)服務(wù)器端數(shù)據(jù)處理管道,它同時(shí)從多個(gè)源中提取數(shù)據(jù),對(duì)其進(jìn)行轉(zhuǎn)換,然后將其發(fā)送到像Elasticsearch這樣的“存儲(chǔ)”。 Kibana允許用戶使用Elasticsearch中的圖表和圖形可視化數(shù)據(jù)。
我不會(huì)詳細(xì)解釋這個(gè)堆棧的不同組件,但對(duì)于有興趣的人我強(qiáng)烈推薦 “ The Complete Guide to the ELK Stack ”,它給出了堆棧及其三個(gè)主要組件的非常好的概述(可以跳過“安裝ELK”部分,因?yàn)槲覀儗⒉扇〔煌姆椒ǎ?/p>
我感興趣的部分是Elasticsearch如何不僅可以用于檢測(cè)(防御),還可以用于進(jìn)攻。
以下是一個(gè)完整的演示,一直到最后安裝成功。對(duì)這個(gè)不感興趣的同學(xué)可以直接跳到“操作數(shù)據(jù)”部分。
首先我們將使用由
@deviantony
完成的一個(gè)很棒的存儲(chǔ)庫(kù),這將允許我們?cè)趲酌腌妰?nèi)啟動(dòng)完整的ELK堆棧,這要?dú)w功于docker-compose:
克隆存儲(chǔ)庫(kù)后,我們可以從docker-compose.yml文件中看到將啟動(dòng)三個(gè)服務(wù)。 這是修改后的docker-compose.yml文件,我在其中添加了容器名稱(為了清楚起見)和一種Elasticsearch存儲(chǔ)數(shù)據(jù)的方式,即使在刪除其容器之后,通過在主機(jī)上安裝卷來保存數(shù)據(jù)(./_data/elasticsearch:/USR/共享/ elasticsearch/數(shù)據(jù)):
docker-elk ? cat docker-compose.yml
version: ‘2’
services:
# -------------------------------------------------------------------# ELASTICSEARCH# ------------------------------------------------------------------- elasticsearch: container_name: elk_elasticsearch build: elasticsearch/ volumes: - ./elasticsearch/config/elasticsearch.yml: /usr/share/elasticsearch/config/elasticsearch.yml:ro - ./_data/elasticsearch:/usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" environment: ES_JAVA_OPTS: "-Xmx256m -Xms256m" networks: - elk# -------------------------------------------------------------------# LOGSTASH# -------------------------------------------------------------------logstash: container_name: elk_logstash build: logstash/ volumes: - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro - ./logstash/pipeline:/usr/share/logstash/pipeline:ro ports: - "5000:5000" environment: LS_JAVA_OPTS: "-Xmx256m -Xms256m" networks: - elk depends_on: - elasticsearch# -------------------------------------------------------------------# KIBANA# ------------------------------------------------------------------- kibana: container_name: elk_kibana build: kibana/ volumes: - ./kibana/config/:/usr/share/kibana/config:ro ports: - "5601:5601" networks: - elk depends_on: - elasticsearchnetworks: elk: driver: bridge
默認(rèn)情況下,堆棧開放以下端口:
5000:Logstash TCP輸入
9200:Elasticsearch HTTP
9300:Elasticsearch TCP傳輸
5601:Kibana
用幾秒鐘時(shí)間來安裝Kibana,然后在web頁(yè)面上訪問它: http://localhost:5601 .
對(duì)于一個(gè)完整的ELK新手來說,這是一個(gè)挑戰(zhàn),直到我找到以下帖子:“
How to Index NMAP Port Scan Results into Elasticsearch
”。 這不是一個(gè)完整的解決方案,而是一個(gè)很好的起點(diǎn)。 讓我們從那里開始并以此為基礎(chǔ)。
首先,我們需要Logstash Nmap編解碼器插件。 Logstash編解碼器簡(jiǎn)單地提供了一種指定原始數(shù)據(jù)應(yīng)如何解碼的方法,而不管源是什么。 這意味著我們可以使用Nmap編解碼器從各種輸入中讀取Nmap XML。 在將數(shù)據(jù)傳遞給Nmap編解碼器之前,我們可以從消息隊(duì)列或通過syslog讀取它。 幸運(yùn)的是,添加它就像修改位于logstash / Dockerfile的Logstash Dockerfile一樣簡(jiǎn)單:
docker-elk ? cat logstash/Dockerfile
# https://github.com/elastic/logstash-docker FROM docker.elastic.co/logstash/logstash-oss:6.3.0 # Add your logstash plugins setup here # Example: RUN logstash-plugin install logstash-filter-json RUN logstash-plugin install logstash-codec-nmap
接下來,要將其放入Elasticsearch,我們需要?jiǎng)?chuàng)建一個(gè)映射。 可以從Logstash Nmap編解碼器的Github存儲(chǔ)庫(kù)獲得映射模板。 我們可以下載它并將其放在logstash / pipeline / elasticsearch_nmap_template.json中:
最后,我們需要修改位于logstash / pipeline / logstash.conf的logstash配置文件,以便為新的Nmap插件添加過濾器和輸出選項(xiàng):
我們將使用修改后的VulntoES版本來獲取結(jié)果并將它們導(dǎo)入Elasticsearch。 為了做到這一點(diǎn),我創(chuàng)建了一個(gè)新的文件夾攝取器,用于實(shí)際攝取數(shù)據(jù)的新服務(wù)。
在上面的清單中,文件夾攝取器包含:
? VulntoES,原始腳本的修改版本,修復(fù)了一些解析錯(cuò)誤
? 腳本提取將為放置在容器的/ data文件夾中的每個(gè)XML文件運(yùn)行VulntoES.py(更多內(nèi)容見下文)
? Dockerfile將修改后的VulntoES導(dǎo)入到python:2.7-stretch圖像中
我們現(xiàn)在只需要將這個(gè)新容器添加到docker-compose.yml文件中:
請(qǐng)注意我們?nèi)绾卧诼窂? data /下的容器中映射本地文件夾./_data/nmap。 我們將使用此“共享”文件夾來傳遞Nmap結(jié)果。
在所有這些修改之后,這就是您的項(xiàng)目文件夾的樣子:
完成后,請(qǐng)確保使用docker-compose build命令重建圖像。
最后一步是創(chuàng)建一個(gè)索引,用于將數(shù)據(jù)索引到:
1、使用curl創(chuàng)建nmap-vuln-to-es索引:
curl -XPUT ‘localhost:9200/nmap-vuln-to-es’
2、在瀏覽器中打開Kibana(http:// localhost:5601),您將看到以下屏幕:
3、插入nmap *作為索引模式,然后按“下一步”:
選擇“I don’t want to use the Time Filter”, 然后點(diǎn)擊 “Create Index Pattern”:
如果一切順利,您應(yīng)該看到一個(gè)頁(yè)面,其中列出了nmap *索引中的每個(gè)字段以及Elasticsearch記錄的字段的相關(guān)核心類型。
Elk正確配置完后,我們可以用它來玩玩處理數(shù)據(jù)了。
為了能夠獲取我們的Nmap掃描,我們必須以XML格式的報(bào)告(-oX)輸出結(jié)果,該報(bào)告可以由Elasticsearch解析。 完成掃描后,將報(bào)告放在./_data/nmap/文件夾中并運(yùn)行攝取器:
現(xiàn)在我們已經(jīng)導(dǎo)入了一些數(shù)據(jù),現(xiàn)在是時(shí)候開始研究一下Kibana的功能了。
“dicover”視圖將索引中的所有數(shù)據(jù)顯示為文檔表,并允許以交互方式瀏覽數(shù)據(jù):我們可以訪問與所選索引模式匹配的每個(gè)索引中的每個(gè)文檔。 你可以提交搜索查詢,過濾搜索結(jié)果以及查看文檔數(shù)據(jù)。 還可以查看與搜索查詢匹配的文檔數(shù)量并獲取字段值統(tǒng)計(jì)信息。 通過過濾(例如,通過開放端口或服務(wù))來對(duì)目標(biāo)進(jìn)行分類是很好的。
相反,“Dashboard”視圖顯示可視化和搜索的集合。 您可以排版,調(diào)整大小和編輯儀表板內(nèi)容,然后保存儀表板以便共享。 這可用于創(chuàng)建高度自定義的數(shù)據(jù)概覽。
儀表板本身是交互式的:您可以應(yīng)用過濾器來查看實(shí)時(shí)更新的可視化以反映查詢的內(nèi)容(在下面的示例中,我按端口22過濾)。
對(duì)這個(gè)感興趣的同學(xué),我將我的示例儀表板導(dǎo)出到一個(gè)易于重新導(dǎo)入的json文件中:
?
https://raw.githubusercontent.com/marco-lancini/docker_offensive_elk/master/kibana/dashboard.json
傳統(tǒng)的“防御性”工具可以有效地用于攻擊性安全數(shù)據(jù)分析,幫助您的團(tuán)隊(duì)協(xié)作并對(duì)掃描結(jié)果進(jìn)行分類。
特別的,Elasticsearch提供了聚合不同數(shù)據(jù)源的數(shù)量的機(jī)會(huì),使用統(tǒng)一的接口進(jìn)行查詢,目的是從大量未分類的數(shù)據(jù)中提取可操作的知識(shí)。
本文轉(zhuǎn)載自“安全客”翻譯文章,原文來源:marcolancini.it ,原文編輯:邊邊