IVRE簡介
IVRE(又名DRUNK)是一款開源的網絡偵查框架工具,IVRE使用Nmap、Zmap進行主動網絡探測、使用Bro、P0f等進行網絡流量被動分析,探測結果存入數據庫中,方便數據的查詢、分類匯總統計。
網上已有部分文章對IVRE的使用做介紹,由於文章時間較早,IVRE的安裝、命令執行等均有所改變,本文使用最新版IVRE做講解,並增加部分其它文章未提及的Nmap模板參數設置、Web界面搜索使用等內容。
IVRE官方網站:https://ivre.rocks
GitHub:https://github.com/cea-sec/ivre
IVRE安裝
使用Docker方式安裝
$ mkdir ivre
$ cd ivre
//拉取Docker鏡像 $ mkdir -m 1777 var_{lib,log}_{mongodb,neo4j} ivre-share $ wget -q https://ivre.rocks/Vagrantfile //啟動Docker $ vagrant up --no-parallel //進入Docker - ivreclient shell $ docker exec -it ivreclient bash root@e809cb41cb9a:/# //查看ivre命令幫助 root@e809cb41cb9a:/#ivre --help
安裝腳本會在ivre
目錄中創建幾個新的文件夾,這些文件夾用於掛載到Docker容器中存放數據庫等信息。ivre-share
會掛載容器ivreclient
的根目錄下,之后的掃描操作我們也在這個目錄下執行,方便主機和容器間的文件交互。
數據庫初始化
第一次使用時,對4個數據庫進行初始化操作(使用過程中,如需完全重新導入數據,也要對相應數據庫做初始化設置):
$ ivre scancli --init
$ ivre ipinfo --init
$ ivre ipdata --init
$ ivre runscansagentdb --init
獲取IP位置數據
ipdata數據包含了IP對應的地理位置信息。
$ ivre ipdata --download
$ ivre ipdata --import-all --no-update-passive-db
安裝缺失Python模塊
執行ivre
命令后,提示部分Python模塊缺失,下面進行這部分模塊的安裝:
apt-get update apt-get install python-pip //Python module PIL: 4.3.0: missing pip install Pillow //Python module krbV: missing apt-get install libkrb5-dev pip install python-krbv //Python module MySQLdb: missing apt-get install python-mysqldb //安裝VIM,方便編輯文件 apt-get install vim
IVRE使用
被動偵查
IVRE可以使用Bro和p0f對流量分析,並將結果導入到數據庫中。
個人感覺網絡流量分析這部分,IVRE所能提供的功能並不實用,略過,感興趣的同學,請參考官方文檔。
需對流量實時或回放分析,Windows平台下推薦使用成都本土科技公司科來的科來網絡分析系統,技術交流版免費使用。
Flow analysis
網絡數據流的圖形展示,這個比較炫酷,簡單介紹下。先在主機上使用Wireshark抓一段時間包,數據包保存為pcap格式,命名為test.pcap
,放入IVRE的共享文件夾ivre-share
中,執行命令處理數據包:
$ cd /ivre-share
//使用Bro對數據包進行處理,完成后再當前文件夾生成.log文件 $ bro -r test.cap //初始化flowcli數據庫 $ ivre flowcli --init //將.log文件導入數據庫 $ ivre bro2db *.log 查看導入的流量統計數據 $ ivre flowcli --count 585 clients 1259 servers 3629 flows
打開瀏覽器,輸入http://your-host-ip/flow.html 查看網絡流量動畫。
主動偵查
主動偵查部分是重點介紹的內容,通常環境下,企業內網環境的網絡流量不可能完全經過安全測試服務器,需要了解內網全部服務器的端口、服務情況,需要使用Nmap、Masscan等工具進行主動探測掃描。
使用Nmap掃描
隨機掃描1000個IP
進入Docker – ivreclient shell后,執行:
$ cd /ivre-share
$ ivre runscans --routable --limit 1000 --country CN --output=XMLFork
這條命令會執行一個隨機掃描,掃描1000個中國地區的IP,默認開啟30個Nmap並行進程。使用ivre help runscans
查看掃描相關的詳細幫助內容。掃描后在/ivre-share
目錄下生成掃描結果文件,包含端口開放、服務信息、網頁截圖等。
掃描后清理緩存文件:
rm -fr /ivre-share/scans/COUNTRY-CN/ current/
導**入掃描結果**
掃描完成后,將掃描結果導入數據庫:
$ cd /ivre-share $ ivre scan2db -c ROUTABLE-CN-001 -s Parrot -r /ivre-share/scans/COUNTRY-CN/up/
這里 ROUTABLE-CN-001
是這次掃描結果的分類名稱,MySource
是掃描來源名稱,方便指揮對掃描結果的分類搜索。
除了在本地執行掃描工作外,IVRE還可以設置多個掃描在代理服務器,在主服務器上執行ivre {runscansagent|runscansagentdb}
命令進行代理服務器的掃描任務下發和結果導入。
命令執行后提示xxx results imported
,則導入成功。
指定掃描IP目標
通過ivre help runscans
命令查看IVRE的幫助文檔,找到兩個指定掃描IP的參數,--range
和--network
,--range
指定掃描IP的起止范圍,--network
參數可指定一個網段。例:
$ ivre runscans --network 45.32.14.0/24 --output=XMLFork
使用--output=CommandLine
參數來看下當前執行的完整命令:
root@67d2aa11797f:/ivre-share# ivre runscans --network 45.32.14.0/24 --output CommandLine Command line to run a scan with template default nmap -A -PS -PE -sS -vv --host-timeout 15m --script-timeout 2m --script '(default or discovery or auth) and not (broadcast or brute or dos or exploit or external or fuzzer or intrusive)'
使用Nmap模板掃描
--nmap-template
參數可指定Nmap掃描模板,在/etc/ivre.conf中添加模板。
Nmap模板參考:
vi /etc/ivre.conf
//創建一個掃描1-65535端口,名稱為`full-port`的Nmap掃描模板,在文件中添加以下內容(復制default模板並修改部分參數) NMAP_SCAN_TEMPLATES["full-ports"] = NMAP_SCAN_TEMPLATES["default"].copy() NMAP_SCAN_TEMPLATES["full-ports"]["ports"] = "1-65535" NMAP_SCAN_TEMPLATES["full-ports"]["scripts_categories"] = ['(default or discovery or auth) and not (broadcast or brute or dos or exploit or external or fuzzer or intrusive)'] NMAP_SCAN_TEMPLATES["full-ports"]["scripts_exclude"] = []
添加模板參數后后再看看掃描命令:
root@67d2aa11797f:/ivre-share# ivre runscans --network 45.32.14.0/24 --output CommandLine --nmap-template full-port Command line to run a scan with template full-port nmap -A -PS -PE -sS -vv -p 1-65535 --host-timeout 15m --script-timeout 2m --script '(default or discovery or auth) and not (broadcast or brute or dos or exploit or external or fuzzer or intrusive)'
相比之前的命令,增加了-p 1-65535
參數,執行全端口掃描。
模板中可以設置的其它參數,我在網上沒找到詳細的官方介紹文檔,可以在IVRE的python文件中查找:/usr/local/lib/python2.7/dist-packages/ivre/nmapopt.py
通過模板,你可以定制你的特定掃描需求。
掃描結果使用
執行掃描並導入數據庫后,有三種方式使用這些內容:
- ivre scancli命令行工具
- Python模塊ivre.db
- IVRE Web界面
CLI: ivre scancli
例:使用命令行查看所有開放了22端口的主機:
$ ivre scancli --port 22 See the output of .
使用ivre help scancli
查看詳細的幫助信息。
Python 模塊
例:
$ python
>>> from ivre.db import db >>> db.nmap.get(db.nmap.flt_empty)[0]
在Python shell執行help(db.nmap)
查看模塊的幫助信息。
Web界面
瀏覽器輸入 http://your-host-ip 訪問IVRE Web界面,
IVRE WEB界面
IVRE提供了WEB界面方便直觀的展示主動掃描(Nmap)結果,通過關鍵字過濾搜索你需要的內容。
網頁菜單欄點擊HTLP
,可以查看搜索過濾的幫助信息,其它菜單項則是在過濾器中快速添加過濾條件。左側顯示RESULTS
、FILTER
、EXPLORE
三部分內容、
-
RESULTS:當前過濾規則的結果總數、顯示頁面控制
-
FILTER:過濾規則,可以填寫服務過濾、結果排序、頁面展示內容三類規則,可以多個規則組合使用
- 一些常用的過濾示例:
- country:CN //過濾國家為中國
- city:Chengdu //過濾城市為成都
- openport //列出至少開放1個端口的IP
- otheropenport:22 //開放22端口
- service:telnet //開放Telnet服務
- !host:218.205.252.70 //不顯示218.205.252.70,部分參數前面加!表示否定
- display:screenshot //結果中顯示截圖
- EXPLORE:將當前的過濾結果生成圖形化展示
Compare Graphs
菜單欄Share→Compare Graphs,圖形比較頁面,可以設定兩個不同的過濾規則,統計過濾后的數據,指定需統計的內容如服務(service)、端口(port)或產品(product)等,生成兩組作比較的條形圖。
Report
菜單欄Share→Report,進入Report頁面,對開發端口、服務、IP地區等進行Top 10統計,生成條形圖,需要寫統計報告的同學,這個功能比較實用。
結語
在復雜的企業內網,定期使用IVRE對內網的端口掃描探測並保存結果,便於安全工作人員及時掌握內網的服務開放、是否存在弱口令等情況。
日常的滲透測試工作中,小規模的IP掃描,建議使用另一款工具——斯巴達(SPARTA,Kali自帶,Github鏈接),輸入IP,自動進行Nmap掃描,根據服務探測結果調用相關工具(如Hydra、Dibuster等)進行下一步的測試。