美文网首页开源入侵检测系统之Suricata
Suricata文档——第16章 通过UnixSocket交互

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

作者: 明翼 | 来源:发表于2017-12-07 11:35 被阅读224次

    16.1.介绍

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

    • libjansson4 - C library for encoding, decoding and manipulating JSON data
    • libjansson-dev - C library for encoding, decoding and manipulating JSON data (dev)
    • python-simplejson - simple, fast, extensible JSON encoder/decoder for Python

    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:

    • command-list: list available commands
    • shutdown: this shutdown suricata
    • iface-list: list interfaces where Suricata is sniffing packets
    • iface-stat: list statistic for an interface
    • help: alias of command-list
    • version: display Suricata’s version
    • uptime: display Suricata’s uptime
    • running-mode: display running mode (workers, autofp, simple)
    • capture-mode: display capture system used
    • conf-get: get configuration item (see example below)
    • dump-counters: dump Suricata’s performance counter
      您可以使用提供的名为suricatasc的示例脚本访问这些命令。 与suricatasc典型的会议将如下所示:
    # 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

    相关文章

      网友评论

        本文标题:Suricata文档——第16章 通过UnixSocket交互

        本文链接:https://www.haomeiwen.com/subject/dihdixtx.html