suricata通過(guò)Unix Socket進(jìn)行交互

1. 介紹

Suricata可以監(jiān)聽(tīng)unix套接字并接受來(lái)自用戶(hù)的命令。交換協(xié)議是基于JSON的,并且消息的格式已經(jīng)完成。

源代碼中提供了一個(gè)名為suricatasc的示例腳本,并在安裝/更新Suricata時(shí)自動(dòng)安裝。

如果libjansson可用,則默認(rèn)啟用unix套接字。

您需要安裝libjansson:

libjansson4 - 用于編碼,解碼和操作JSON數(shù)據(jù)的C庫(kù)

libjansson-dev - 用于編碼,解碼和操作JSON數(shù)據(jù)(dev)的C庫(kù)

python-simplejson - 用于Python的簡(jiǎn)單,快速,可擴(kuò)展的JSON編碼器/解碼器

Debian/Ubuntu:

apt-get install libjansson4 libjansson-dev python-simplejson

如果系統(tǒng)中存在libjansson,則將自動(dòng)編譯unix套接字。

通過(guò)在Suricata YAML配置文件中的unix-command下將enabled設(shè)置為“yes”或“auto”來(lái)管理套接字的創(chuàng)建:

unix-command:

????enabled:yes?

????#filename: custom.socket # use this to specify an alternate file

該filename變量可用于設(shè)置備用套接字文件名。文件名始終相對(duì)于本地狀態(tài)基目錄。

客戶(hù)端是針對(duì)某種語(yǔ)言實(shí)現(xiàn)的,可以用作編寫(xiě)自定義腳本的代碼示例:

Python:https://github.com/inliniac/suricata/blob/master/scripts/suricatasc/suricatasc.in(提供suricata并在本文檔中使用)

Perl:https://github.com/aflab/suricatac(一個(gè)簡(jiǎn)單的Perl客戶(hù)端,具有交互模式)

C:https://github.com/regit/SuricataC?(C語(yǔ)言中沒(méi)有交互模式的Unix套接字模式客戶(hù)端)

2. 標(biāo)準(zhǔn)運(yùn)行模式下的命令

如果尚未安裝suricatasc,則可能需要安裝suricatasc,從scripts / suricatasc運(yùn)行以下命令

sudo python setup.py install

現(xiàn)有命令集如下:

command-list:列出可用命令

shutdown:關(guān)閉Suricata

iface-list:列出Suricata嗅探數(shù)據(jù)包的接口

iface-stat:接口的列表統(tǒng)計(jì)信息

help:命令列表的別名

version:顯示Suricata的版本

uptime:顯示Suricata的正常運(yùn)行時(shí)間

running-mode:顯示運(yùn)行模式(workers,autofp,simple)

capture-mode:使用的顯示捕獲系統(tǒng)

conf-get:獲取配置項(xiàng)(參見(jiàn)下面的示例)

dump-counters:dump Suricata的性能指標(biāo)

reopen-log-files:重新打開(kāi)日志文件(在外部日志輪換后運(yùn)行)

ruleset-reload-rules:重新加載規(guī)則集并等待完成

ruleset-reload-nonblocking:重新加載規(guī)則集,無(wú)需等待即可繼續(xù)

ruleset-reload-time:上次重新加載的返回時(shí)間

ruleset-stats:顯示已加載和失敗的規(guī)則數(shù)

ruleset-failed-rules:顯示失敗規(guī)則列表

memcap-set:更新指定項(xiàng)的memcap值

memcap-show:顯示指定項(xiàng)目的memcap值

memcap-list:列出所有可用的memcap值

您可以使用提供的命名示例腳本訪(fǎng)問(wèn)這些命令suricatasc。典型的會(huì)話(huà)suricatasc將看起來(lái)像:

# 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"

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:~#

注意:?您需要引用涉及多個(gè)參數(shù)的命令:

root@debian64:~# suricatasc -c "iface-stat eth0"

{'message': {'pkts': 5110429, 'drop': 0, 'invalid-checksums': 0}, 'return': 'OK'}

root@debian64:~#

4.Pcap處理模式

此模式是此代碼背后的主要?jiǎng)訖C(jī)之一。我們的想法是能夠要求Suricata處理不同的pcap文件,而無(wú)需在文件之間重新啟動(dòng)Suricata。這為您提供了巨大的時(shí)間收益,因?yàn)槟鸁o(wú)需等待簽名引擎進(jìn)行初始化。

要使用此模式,請(qǐng)使用您首選的YAML文件啟動(dòng)suricata并提供選項(xiàng)--unix-socket作為參數(shù):

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

也可以將套接字文件名指定為參數(shù):

suricata --unix-socket=custom.socket

在最后一種情況下,您需要提供套接字的完整路徑suricatasc。為此,您需要將文件名作為第一個(gè)參數(shù)傳遞suricatasc:

suricatasc custom.socket

啟動(dòng)Suricata后,您可以使用提供的腳本?suricatasc連接到命令套接字并請(qǐng)求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-continuous /home/pcaps /tmp/dirout

Success: Successfully added file to list

您可以在不等待結(jié)果的情況下添加多個(gè)文件:它們將被順序處理,生成的日志/警報(bào)文件將被放入指定為pcap-file命令的第二個(gè)參數(shù)的目錄中。您需要提供文件和目錄的絕對(duì)路徑,因?yàn)镾uricata不知道腳本的運(yùn)行位置。如果傳遞目錄而不是文件,則將處理目錄中的所有文件。如果使用pcap-file-continuous并傳入目錄,則將監(jiān)視目錄以查找要添加的新文件,直到您使用pcap-interrupt或刪除/移動(dòng)目錄為止。

要知道等待處理的文件數(shù)量,您可以:

>>> pcap-file-number

Success: 3

要獲取排隊(duì)文件列表,請(qǐng)執(zhí)行以下操作:

>>> pcap-file-list

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

要獲取當(dāng)前處理的文件:

>>> pcap-current

Success:

"/tmp/test.pcap"

傳入目錄時(shí),您可以看到自epoch以來(lái)的上一個(gè)處理時(shí)間(最后一個(gè)文件的修改時(shí)間),以毫秒為單位:

>>> pcap-last-processed

Success:

1509138964000

要中斷終止當(dāng)前狀態(tài)的目錄處理:

>>> pcap-interrupt

Success:"Interrupted"

5.建立主機(jī)的客戶(hù)端

該協(xié)議記錄在以下頁(yè)面

https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Unix_Socket#Protocol

以下會(huì)話(huà)顯示服務(wù)器發(fā)送(SND)和接收(RCV)的內(nèi)容。初步協(xié)商如下:

# suricatasc

SND: {"version": "0.1"}

RCV: {"return": "OK"}

完成后,可以發(fā)出命令:

>>> 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}

在pcap文件模式下,這給出:

>>> 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']}

>>> pcap-file-continuous /home/eric/git/oisf/benches /tmp/bench 0 true

SND: {"command": "pcap-file", "arguments": {"output-dir": "/tmp/bench", "filename": "/home/eric/git/oisf/benches/sandnet.pcap", "tenant": 0, "delete-when-done": true}}

RCV: {"message": "Successfully added file to list", "return": "OK"}

Success: Successfully added file to list

有一點(diǎn)需要注意:Suricata消息是在多個(gè)發(fā)送操作中發(fā)送的。這導(dǎo)致客戶(hù)端可能不完整的讀取。更糟糕的解決方法是在嘗試接收recv之前先睡一會(huì)兒。另一種解決方案是使用非阻塞套接字,并在前一個(gè)失敗時(shí)重試recv。

Pcap文件json格式是:

{

? "command": "pcap-file",

? "arguments": {

? ? "output-dir": "path to output dir",

? ? "filename": "path to file or directory to run",

? ? "tenant": 0,

? ? "continuous": false,

? ? "delete-when-done": false

? }

}

output-dir和filename是必需的。租戶(hù)是可選的,應(yīng)該是一個(gè)數(shù)字,表示文件或目錄應(yīng)在哪個(gè)租戶(hù)下運(yùn)行。continuous?是可選的,應(yīng)該是true / false,表示應(yīng)該運(yùn)行文件或目錄,直到發(fā)送pcap-interrupt或調(diào)用ctrl-c。delete-when-done是可選的,應(yīng)該是true / false,表示在處理完成時(shí)應(yīng)該刪除filename指定的目錄下的文件。?delete-when-done默認(rèn)為false,表示文件將在處理后保留。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 16.1.介紹 Suricata可以監(jiān)聽(tīng)unix套接字并接受來(lái)自用戶(hù)的命令。 交換協(xié)議是基于JSON的,消息的格式...
    堯字節(jié)閱讀 2,481評(píng)論 4 1
  • 1、suricata命令行選項(xiàng) 命令行選項(xiàng)有兩種方式:-后跟字符,--后跟單詞。 -h :顯示一個(gè)簡(jiǎn)短的使用幫助概...
    lx_jian閱讀 3,012評(píng)論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,723評(píng)論 0 5
  • 1.Libpcap 的工作原理 Libpcap的工作原理可以描述為,當(dāng)一個(gè)數(shù)據(jù)包到達(dá)網(wǎng)卡時(shí),通過(guò)網(wǎng)絡(luò)分接口(即旁路...
    shaarawy18閱讀 19,418評(píng)論 1 15
  • 風(fēng)吹雪 落誰(shuí)身家,血染江山 如畫(huà),有一少年鮮衣怒馬 仗劍天涯 不問(wèn)江湖千軍萬(wàn)馬,故作沉沉,一往而深,只見(jiàn)身影蕭索。
    念微雨闌珊閱讀 191評(píng)論 0 0

友情鏈接更多精彩內(nèi)容