本文作者:Cherishao(信安之路作者团队成员 & 应急响应小组小组长) 成员招募:信安之路应急响应小组寻找志同道合的朋友
谈及 Moloch, 想必大家都知道” moloch 是一个开源的、大规模的 IPv4 数据包捕获(PCAP),索引数据库系统。“ 它以标准 pcap 格式存储和索引网络流量提供快速的索引访问,从而减少可疑事件的分析时间。
1、moloch 公开了API ,允许 pcap 数据和 json 格式的会话数据直接下载和使用。
2、提供直观的Web界面,用于 PCAP 浏览、搜索、分析,Moloch 以标准 PCAP 格式存储和导出所有数据包。
3、可扩展性:Moloch 旨在部署在多个集群系统中,提供扩展可以处理多个千兆位/秒的流量。PCAP保留基于可用的传感器磁盘空间,而元数据保留基于 Elasticsearch 集群的规模。 两种保留大小都可以随时增加。
4、安全: 通过使用具有摘要密码的 HTTPS 或使用提供 Web 服务器代理的身份验证来保护对 Moloch 的访问。 PCAP 都存储在已安装的 Moloch 传感器上,只能通过 Moloch 接口或API访问。 Moloch 支持在静止时加密 PCAP 文件。
简而言之: Moloch 可以保存所有原始数据流量,基于 elasticsearch 及 PCAP 的存储形式使它得以对通信数据流中的元数据进行快速检索。相对来说是一个比较好用的回溯分析系统。
流量回溯系统通常都会面临这样几个问题:
1、数据包的存取和协议的分析;
2、数据量很大的时候检索的速度。
我们设想一下使用 tshark 、Wireshark 对一个 几十 GB 的数据包进行分析时,包的加载都会是一个很头疼的问题,更不用说过滤表达式的应用。而 Moloch 在这方面就具备了独特的优势,我们来看看它的构成。
数据的来源是交换机的镜像端口,moloch 系统主要涉及三个组件 Capture,elasticsearch 和 Viewer
Capture (绑定 interface 运行的单线程 C 语言应用 )用来抓取流量并以 pcap 的格式存储到硬盘上面,还会存一份对应关系到 elasticsearch (moloch 的数据检索驱动)中,Viewer(运行在 capture 主机上的 node.js web应用 ) 提供 web 界面,以下为 Moloch 的单个主机部署架构图。
由上图中的架构可知,部署 Moloch ,我们需要安装 elasticsearch 及 Moloch (集成了Capture 与Viewer),存储数据包对机器的性能要求 moloch 提供了评估页面 Moloch Estimators:
https://molo.ch/#estimators)
可根据 PCAP 包的存储天数、TLS (加密数据包保存的百分比)、每台机器的处理能力;ES 日志的存储天数、机器节点等选择适合自己的硬件资源。Moloch 的每个节点需要 64GB - 128GB 内存:ES 为 30GB,OS 磁盘缓存为 34-96GB。对于大型计算机,计划为每个主机运行多个节点。
笔者部署的硬件资源如下:
上图新增 2 张网卡,是将交换机镜像过来的流量镜像到虚拟机的网卡。
虚拟机情况:
# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
# uname -r
3.10.0-862.11.6.el7.x86_64
在安装 Moloch 之前,我们需要先安装配置好 elasticsearch,由官网的 CHANGELOG
可知,elasticsearch 的版本应该大于等于 5.5.0, 这里我们安装的版本为 elasticsearch-6.4.0
。
有两种安装方式:
1)yum 安装
$ yum install java-1.8.0-openjdk
$ java -version
2)手动安装
从 oracle 官网下载 jdk-8u 的安装包进行安装,笔者采用的是手动安装的方式
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载 Linux 版 elasticsearch ( 下载地址https://www.elastic.co/downloads/elasticsearch )
1 )elasticsearch.yml
修改以下三个部分,network.host 为指定的 IP 地址,可以是多个。
# ---------------------------------- Cluster --------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: elasticsearch
#
# ------------------------------------ Node ---------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
node.master: true
node.data: true
# ---------------------------------- Network --------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 10.0.10.207
#
# Set a custom port for HTTP:
#
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
# For more information, consult the network module documentation.
2)为了预防文件描述符太低,在配置文件 limits.conf
中新增
$ vim /etc/security/limits.conf
* soft nofile 65526
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
3)为了预防一个进程最多可用于的内存映射区太低,在配置文件 sysctl.conf
中新增
vim /etc/sysctl.conf
vm.max_map_count=655360
4) 重新加载系统参数使配置生效
sysctl -p
1)elasticsearch 不能使用 root 用户启动,创建组及用户
$ groupadd elasticsearch
$ useradd elasticsearch -g elasticsearch -p elasticsearch
$ chown -R elasticsearch /opt/elasticsearch-6.4.0
2)切换用户启动 elasticsearch
$ su elasticsearch
$ ./elasticsearch -d # -d 参数代表后台启动
3) 关闭防火墙
$ systemctl stop firewalld
访问:http://10.0.10.207:9200 或 curl http://10.0.10.207:9200
返回如下 json 信息,表示配置成功
{
"name": "node-1",
"cluster_name": "elasticsearch",
"cluster_uuid": "9-dyTdtYTHmX7frIGWzIgw",
"version": {
"number": "6.4.0",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "595516e",
"build_date": "2018-08-17T23:18:47.308994Z",
"build_snapshot": false,
"lucene_version": "7.4.0",
"minimum_wire_compatibility_version": "5.6.0",
"minimum_index_compatibility_version": "5.0.0"
},
"tagline": "You Know, for Search"
}
检查 ES 的健康状态
访问:http://10.0.10.207:9200/_cat/health 或 curl http://10.0.10.207:9200/_cat/health
返回
1548230399 15:59:59 elasticsearch green 1 1 22 22 0 0 0 0 - 100.0%
表示健康
从官网下载适合自己的 Moloch 版本 ( 下载地址:https://www.molo.ch/#downloads ) ,笔者这里为 Centos 7 的 Moloch.1.6.2, 更多支持的版本如下:
5)初始化/升级 Elasticsearch Moloch 配置
第一次安装或者要清除数据可以运用如下命令
$ /data/moloch/db/db.pl http://ESHOST:9200 init
moloch 的包更新, 由CHANGELOG
知 1.6.2
版本的包是需要更新的
6)新安装或 init 后添加管理员用户
$ /data/moloch/bin/moloch_add_user.sh admin "Admin User" THEPASSWORD --admin
7)启动 moloch
访问 http:// MOLOCHHOST:8005
user: admin
password: THEPASSWORD from step #6
1) 回溯分析
检索局域内的指定源 IP ip.src== host
目的 IP ip.dst == host
ip.src == 10.0.3.36
检索局域网内的指定 dns host.dns== dns
host.dns== music.163.com
上图中的 Action 支持将检索到的数据流以 PCAP 形式导出及 打上标签;对于数据流可以 natural 、ascill、utf8 等多种编码形式展示,流可以以 image 格式保存,对于简单的 Xor 及 base64 能进行解码。
检索局域网内利用 3389 端口进行通信的连接: port.dst == port
port.dst == 3389
利用表达式进行过滤后,在 Connections 中,可以看到与之节点的相关连接统计信息(一个华而不实的功能 :)..
更多 Search Expression 的运用,这里就不介绍了,Know it then do it。
1)修改 moloch 的 config.ini
配置文件,在 High Performance settings
进行如下修改,降低丢包现象。
### High Performance settings
magicMode=basic
pcapReadMethod=tpacketv3
tpacketv3BlockSize=8388608
tpacketv3NumThreads=4
# tpacketv3NumThreads=2
pcapWriteMethod=simple
pcapWriteSize =2560000
packetThreads=5
dbBulkSize=4000000
compressES=true
maxPacketsInQueue =300000
2) pfring 安装
moloch 的 Capture 默认使用 libpcap 后面我们会用 pfring 提升抓包性能
3) 指定一个 PCAP 包目录
$ mkdir/data/moloch/pcap
$ vim/data/moloch/etc/config.ini #进行如下配置
# The directory to save raw pcap files to
pcapDir =/data/moloch/pcap
4)考虑数据的删除保留问题
$ vim /data/moloch/etc/config.ini
freeSpaceG =10% #
如没有正常启动,需切换到用户elasticsearch
启动
$ cd /opt/ES6/elasticsearch-6.4.0/bin
$ ./elasticsearch -d #-d 后台启动
$ kill -9 4153
这里也提供一些检查的清单:
elasticsearch 中存储的 SPI 数据删除
/data/moloch/db/db.pl ESHOST:ESPORT wipe #相对于init 不会删除用户
PCAP 包删除
rm -rf /data/moloch/pcap #pcap 存储目录根据 config.ini 来确定,我这里是自己新建的 pcap
$ systemctl restart molochcapture.service
$ systemctl stop molochcapture.service
$ systemctl start molochcapture.service
$ systemctl status molochcapture.service
$ systemctl restart molochviewer.service
$ systemctl stop molochviewer.service
$ systemctl start molochviewer.service
$ systemctl stop firewalld
$ echo "" > capture.log #清除日志内容
$ cat /data/moloch/logs/viewer.log
$ cat /data/moloch/logs/capture.log
ethtool -G ens38 rx 4096 tx 4096 #设置环形缓冲区大小
ethtool -K ens38 rx off tx off gs off tso off gso off #关闭功能,查看 ens38 的可用功能
https://github.com/aol/moloch/wiki/FAQ
https://github.com/aol/moloch/wiki/Settings