Moloch: 網路流量收集與分析
*本文原創作者:Shell.,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
背景
本篇文章主要介紹Moloch溯源平臺的部署以及配合Suricata實現對網路流量的監控與檢測, 提取IOC/">IOC的網路行為。
需求
1. 具備NIDS能力; 2. 支援對全量資料包的儲存; 3. 支援快速對多個節點中的資料包進行預覽、下載等操作;
針對以上的需求, 直接部署Suricata基本可以滿足。主要2、3點的需求, 更加偏向溯源的方向, Suricata在這一方面稍顯欠缺。首先, Suricata在觸發了告警之後只會儲存攻擊載荷(Payload)的資料包資訊。但是, 對於一些有趣的事件, 我們很可能會需要檢視整筆會話(Flow)的內容, 這個時候單獨的一個告警資料包並不能起到很好的溯源效果。當然Suricata本身也提供了全資料包捕獲的功能, 但因為沒有Web介面的關係, 實際使用起來並不是很方便。不過我們使用Suricata的實際需求還是看重它的NIDS功能。當然你也可以選擇直接懟一個安全洋蔥(Security Onion), Bro也是個很牛X NIDS。但是這樣一來對於蜜罐的機器配置就有所要求了。
為了滿足2、3點的需求, 我這邊採用的是Moloch。Moloch本身並不具備IDS功能, 好在Moloch-V1.5增加了Suricata的外掛( suricata.so ), 可以直接提取Suricata的告警資訊並Merge到Moloch的資料中。前提是你得安裝Sruciata。
Moloch: Moloch是一個開源,大規模,完整的資料包捕獲,索引和資料庫系統。 Moloch擴充套件了您當前的安全基礎架構,以標準PCAP格式儲存和索引網路流量,提供快速的索引訪問。為PCAP瀏覽,搜尋和匯出提供了直觀簡單的Web介面。 Moloch公開了API,允許直接下載和使用PCAP資料和JSON格式的會話資料。 Moloch以標準PCAP格式儲存和匯出所有資料包,使您在分析工作流程中也可以使用您喜歡的PCAP攝取工具,例如: Wireshark。
Suricata的安裝方法就不闡述了, 網上隨便找一篇即可。這裡主要說下Moloch的安裝以及如何啟用Sruicata外掛的支援。
注: 由於我主要是部署在蜜罐環境的宿主機上, 暫不考慮效能問題。 效能相關可參考: ofollow,noindex" target="_blank">pfring_Settings
宿主機環境: Ubuntu 16.04 x64
1. 下載
2. 安裝
dpkg -i moloch-master_ubuntu16_amd64.deb
3. 配置
3.1 指定捕獲網絡卡
對於情報收集我並不關注宿主機網絡卡的流量, 我只關注Docker上層容器的流量。所以我這裡網絡卡選擇了 docker0 。
這裡會問你是否要安裝ES, 我已經部署好了ES, 所以這裡選擇了NO, 接下來就是讓你寫你ES地址了, ES是儲存SPI資料的, 你就理解成協議解析之後的資料就可以了。
root@hujulongpan:/data/moloch/bin# /data/moloch/bin/Configure
Found interfaces: br-56add4565de5;br-ab64bc2f60bc;br-bb44b4b226cc;br-ff0873fcf29d;docker0;eth0;lo;veth350673b;veth41b53b9;veth6a5150e;veth8cb7c00;veth9d411c1;vethaa368c0;vethe528737;vethf1bf361
Semicolon ';' seperated list of interfaces to monitor [eth1] docker0
Install Elasticsearch server locally for demo, must have at least 3G of memory, NOT recommended for production use (yes or no) [no] no
Elasticsearch server URL [ http://localhost:9200 ] http://es_host:9200
Password to encrypt S2S and other things [no-default] hello_world!
Moloch - Creating configuration files
Not overwriting /data/moloch/etc/config.ini, delete and run again if update required (usually not), or edit by hand
Installing systemd start files, use systemctl
Download GEO files? (yes or no) [yes] yes
Moloch - Downloading GEO files
WARNING: timestamping does nothing in combination with -O. See the manual
for details.
3.2 啟用Suricata.so外掛支援
預設安裝階段不會讓你選擇是否啟用Suricata的外掛支援, 需要單獨修改配置檔案。
vim /data/moloch/etc/config.ini
plugins=suricata.so suricataAlertFile=/var/log/suricata/eve.json # Suricata需開啟eve.json。 suricataExpireMinutes=60
注: 預設會由於許可權問題導致報錯。
Jul 31 13:22:14 suricata.c:395 suricata_open(): ERROR - Permissions problem, can't open suricataAlertFile '/var/log/suricata/eve.json'
解決方法:
– 新增讀取許可權
chmod o+r /var/log/suricata/eve.json
– 修改使用者
vim /data/moloch/etc/config.ini
# User to drop privileges to. The pcapDir must be writable by this user or group below
dropUser=nobod # 指定使用者
外掛請戳: Plugins
3.3 定期刪除PCAP
vim /data/moloch/etc/config.ini
# Delete pcap files when free space is lower then this in gigabytes OR it can be # expressed as a percentage (ex: 5%). This does NOT delete the session records in # the database. It is recommended this value is between 5% and 10% of the disk. # Database deletes are done by the db.pl expire script freeSpaceG = 5%# 根據實際情況進行調整
3.4 bfp過濾無用資料
其實我這邊已經指定抓取了Docker內部的流量, 宿主機本身的流量我是不進行抓取的. 所以基本上沒有”髒”資料.
# bpf=not port 9200
3.5 Moloch Viewer Web User
/data/moloch/bin/moloch_add_user.sh admin "Admin User" THEPASSWORD --admin # 登陸Web的密碼, 溯源的時候用得著。
3.6 初始化Elasticsearch資料庫
/data/moloch/db/db.pl http://ESHOST:9200 init
3.7 啟動程序
systemctl start molochcapture.service# Moloch 採集程序 systemctl start molochviewer.service# Moloch Web程序 (溯源時候用的著)
如果沒啥報錯, 一切就搞定啦, 下面可以看下Moloch的基本功能。
Moloch Viewer
http://x.x.x.x:8005 # Web預設埠 8005
Moloch支援在同一個Web介面上對多個節點的資料包進行檢視以及下載, 可以更加方便的對網路攻擊進行溯源。
Moloch + Suricata的告警
Moloch 協議解析方面也比Suricata強
利用Moloch可以查詢到可疑IP與外網IP的關聯
src -> dst
dst -> src
src -> asn
被解析的協議欄位均可做關聯
SPI Data
Moloch 支援將SPI Data 資料傳送到ES上, 可以看到SPI Data會記錄同一筆會話中共觸發了多少次告警及告警名稱等資訊. Moloch也幫助我們做了一層簡單的聚合.
總結
Moloch是一個很好的開源全流量捕獲平臺, 溯源起來也非常的方便, 我個人覺得從溯源分析的角度來說比洋蔥更加方便。不過在使用的時候也發現了一個問題。 Moloch 貌似暫不支援將SPI Data傳送到Redis或者Kafka, 目前是直接傳送到ES的, 這樣流量一大就擔心丟資料。我翻了一下Wiki並沒有查到相關配置. 不知道是不是我有遺漏, 如果有知道的可以告知我一下, 感謝!
第一次寫文章, 有不對的地方還請各位小夥伴及時指出。不喜勿噴, 謝謝!
*本文原創作者:Shell.,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載