开源入侵检测系统之Suricata

Suricata文档——第16章 通过UnixSocket交互

2017-12-07  本文已影响224人  明翼

16.1.介绍

Suricata可以监听unix套接字并接受来自用户的命令。 交换协议是基于JSON的,消息的格式是通用的。
源代码中提供了一个名为suricatasc的示例脚本,并在安装/更新Suricata时自动安装。
如果libjansson可用,则默认启用unix套接字。
你需要安装libjansson:

Debian/Ubuntu:

apt-get install libjansson4 libjansson-dev python-simplejson
如果系统上存在libjansson,则会自动编译unix套接字。
在Suricata YAML配置文件中,通过在unix-command下启用“yes”或“auto”来管理套接字的创建:

unix-command:
enabled: yes
////filename: custom.socket # use this to specify an alternate file

filename变量可以用来设置一个备用的套接字文件名。 文件名总是相对于本地状态的基本目录。
客户端是为某种语言实现的,可以用作编写自定义脚本的代码示例:

16.2.在标准运行模式下的命令

he set of existing commands is the following:

# suricatasc
Command list: shutdown, command-list, help, version, uptime, running-mode, capture-mode, conf-get, dump-counters, iface-stat, iface-list, quit
>>> iface-list
Success: {'count': 2, 'ifaces': ['eth0', 'eth1']}
>>> iface-stat eth0
Success: {'pkts': 378, 'drop': 0, 'invalid-checksums': 0}
>>> conf-get unix-command.enabled
Success:
"yes"

16.3 cmd提示符下的命令

您可以直接在命令提示符下使用suricatasc:

root@debian64:~# suricatasc -c version
{'message': '2.1beta2 RELEASE', 'return': 'OK'}
root@debian64:~#
root@debian64:~# suricatasc -c uptime
{'message': 35264, 'return': 'OK'}
root@debian64:~#

注意:您需要引用涉及多个参数的命令:

root@debian64:~# suricatasc -c "iface-stat eth0"
{'message': {'pkts': 5110429, 'drop': 0, 'invalid-checksums': 0}, 'return': 'OK'}
root@debian64:~#

16.4 Pcap处理模式

这个模式是这个代码背后的主要动机之一。 这个想法是能够要求Suricata处理不同的pcap文件,而不必在文件之间重新启动Suricata。 由于您不需要等待签名引擎初始化,因此这可以为您提供巨大的收益。

要使用此模式,请使用您的首选YAML文件启动suricata,并提供选项--unix-socket作为参数:

suricata -c /etc/suricata-full-sigs.yaml --unix-socket

也可以将套接字文件名指定为参数:

suricata --unix-socket=custom.socket

在最后一种情况下,您将需要提供suricatasc套接字的完整路径。 为此,您需要传递文件名作为suricatasc的第一个参数:

suricatasc custom.socket

一旦Suricata启动,您可以使用提供的脚本suricatasc连接到命令套接字并要求pcap处理:

root@tiger:~# suricatasc
>>> pcap-file /home/benches/file1.pcap /tmp/file1
Success: Successfully added file to list
>>> pcap-file /home/benches/file2.pcap /tmp/file2
Success: Successfully added file to list

您可以在不等待结果的情况下添加多个文件:它们将被顺序处理,生成的日志/警报文件将被放入作为pcap-file命令的第二个参数指定的目录中。 您需要提供文件和目录的绝对路径,因为suricata不知道脚本的运行位置。

要知道有多少文件正在等待处理,您可以执行以下操作:

>>> pcap-file-number
Success: 3

要获得排队文件列表,请执行以下操作:

>>> pcap-file-list
Success: {'count': 2, 'files': ['/home/benches/file1.pcap', '/home/benches/file2.pcap']}

To get current processed file:

>>> pcap-current
Success:
"/tmp/test.pcap"

16.5. 构建你自己的客户端

该协议记录在以下页面https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Unix_Socket#Protocol
以下会话显示服务器发送(SND)和接收(RCV)的内容。 初步谈判如下:

# suricatasc
SND: {"version": "0.1"}
RCV: {"return": "OK"}

一旦完成,命令可以发出:

>>> iface-list
SND: {"command": "iface-list"}
RCV: {"message": {"count": 1, "ifaces": ["wlan0"]}, "return": "OK"}
Success: {'count': 1, 'ifaces': ['wlan0']}
>>> iface-stat wlan0
SND: {"command": "iface-stat", "arguments": {"iface": "wlan0"}}
RCV: {"message": {"pkts": 41508, "drop": 0, "invalid-checksums": 0}, "return": "OK"}
Success: {'pkts': 41508, 'drop': 0, 'invalid-checksums': 0}

In pcap-file mode, this gives:

>>> pcap-file /home/eric/git/oisf/benches/sandnet.pcap /tmp/bench
SND: {"command": "pcap-file", "arguments": {"output-dir": "/tmp/bench", "filename": "/home/eric/git/oisf/benches/sandnet.pcap"}}
RCV: {"message": "Successfully added file to list", "return": "OK"}
Success: Successfully added file to list
>>> pcap-file-number
SND: {"command": "pcap-file-number"}
RCV: {"message": 1, "return": "OK"}
>>> pcap-file-list
SND: {"command": "pcap-file-list"}
RCV: {"message": {"count": 1, "files": ["/home/eric/git/oisf/benches/sandnet.pcap"]}, "return": "OK"}
Success: {'count': 1, 'files': ['/home/eric/git/oisf/benches/sandnet.pcap']}

有一点需要注意:在多个发送操作中发送一个suricata消息。 这导致客户端可能不完整的读取。 更糟的解决方法是在尝试recv呼叫之前睡一会儿。 另一种解决方案是使用非阻塞套接字,如果前一个失败,则重试一个recv。 这里使用这个方法:source:scripts / suricatasc / suricatasc.in#L43

上一篇 下一篇

猜你喜欢

热点阅读