Suricata 基础使用
编译安装
git clone https://github.com/OISF/suricata cd suricata git clone https://github.com/OISF/libhtp ./autogen.sh ./configure --prefix=/opt/suricata --enable-luajit sudo make install-full
在configure步骤可能会存在一些安装依赖,如libyaml、jansson、libhtp
在这里,使用--prefix来设定安装前缀,也即 Suricata 只会操作/opt/suricata目录,这样可以确保干净安装、卸载。
Suricata 规则集
FTP 文件传输检测
假定场景如下:
商业间谍希望将公司机密文件传输到外部 FTP 服务器。
Suricata 配置
我们希望保存相应的文件及 PCAP 包,作为法律证据。因此需要用到文件截取的功能
alert ftp-data any any -> any any (msg:"SPY!"; filestore; sid:1; rev:1; ftpdata_command:stor;)
还需要配置如下部分
- outputs: - eve-log: # 事件记录 types: - files: force-magic: no force-hash: [md5,sha256] # 其他 eve log 配置 - pcap-log: # pcap 记录 enabled: yes filename: log.pcap # 其他 pcap 配置 - file-store: # 文件存储记录 version: 2 enabled: yes force-filestore: yes
配置好后,运行如下命令
/opt/suricata/bin/suricata \ -i eth0 \ -c /opt/suricata/etc/suricata/suricata.yaml \ -s /opt/suricata/etc/suricata/rules/test.rules
接下来,向服务器上传文件即可。
检测结果
首先,在fast.json中,必然会存在相应的警告
12/02/2020-17:39:48.021760 [**] [1:1:1] SPY! [**] [Classification: (null)] [Priority: 3] {TCP} 172.21.178.223:35552 -> 119.45.6.103:21045
接着,需要在eve.json检查相应的触发事件(这里只提取出文件相关的事件)
{
"timestamp": "2020-12-02T17:39:48.021760+0800",
"flow_id": 1108348001034938,
"parent_id": 1458654122957134,
"in_iface": "eth0",
"event_type": "fileinfo",
"src_ip": "172.21.178.223",
"src_port": 35552,
"dest_ip": "119.45.6.103",
"dest_port": 21045,
"proto": "TCP",
"app_proto": "ftp-data",
"fileinfo": {
"filename": "test",
"sid": [
1
],
"magic": "ASCII text",
"gaps": false,
"state": "CLOSED",
"md5": "020861c8c3fe177da19a7e9539a5dbac",
"sha256": "06577bd4a35a3fb866f891567b5a9ff67223c2f4422fb7629836d0cadb603ed3",
"stored": true,
"file_id": 1,
"size": 8,
"tx_id": 0
}
}
通常,文件传输事件前后往往存在大量其他事件,因此这里可以采用另一种思路来快速检索:直接查看 sha256 值。
> cat eve.json | jq | grep sha256
"sha256": "06577bd4a35a3fb866f891567b5a9ff67223c2f4422fb7629836d0cadb603ed3",
"sha256": "06577bd4a35a3fb866f891567b5a9ff67223c2f4422fb7629836d0cadb603ed3",
在这里,可以看到,被传输的文件的 sha256 值为06577bd4a35a3fb866f891567b5a9ff67223c2f4422fb7629836d0cadb603ed3。在日志目录下的filestore文件夹内,查看06文件夹即可
> cat filestore/06/06577bd4a35a3fb866f891567b5a9ff67223c2f4422fb7629836d0cadb603ed3 abcdefg
而之前用于测试的文件内容,正是abcdefg
Lua 脚本联动
如果在编译过程中添加了--enable-luajit参数,那么就可以在 Suricata 运行中通过 lua 脚本进行一些操作
如下面的脚本(假设位于/etc/suricata/lua-script/test.lua)
function init (args) local needs = {} needs['type'] = 'file' print ("init()") return needs end function setup (args) print ("setup()") end function log(args) http_host = HttpGetRequestHeader('Host') print (http_host) end function deinit (args) print("deinit()") end
在suricata.yaml中按照如下配置
output: - lua: enabled: yes scripts-dir: /etc/suricata/lua-script scripts: - test.lua
在执行命令后,有:
> sudo /opt/suricata/bin/suricata \ -i eth0 \ -c /opt/suricata/etc/suricata/suricata.yaml [21399] 2/12/2020 -- 20:19:25 - (suricata.c:1065) <Notice> (LogVersion) -- This is Suricata version 6.0.1-dev (75c0f9bd0 2020-11-19) running in SYSTEM mode init() setup() [21399] 2/12/2020 -- 20:19:25 - (util-ioctl.c:322) <Warning> (SetEthtoolValue) -- [ERRCODE: SC_ERR_SYSCALL(50)] - Failure when trying to set feature via ioctl for 'eth0': Operation not supported (95) [21400] 2/12/2020 -- 20:19:25 - (log-pcap.c:902) <Notice> (PcapLogInitRingBuffer) -- Ring buffer initialized with 9 files. [21399] 2/12/2020 -- 20:19:25 - (tm-threads.c:1964) <Notice> (TmThreadWaitOnThreadInit) -- all 4 packet processing threads, 4 management threads initialized, engine started. www.oyohyee.com
可以看到,在各个部分,都可以触发 lua 脚本,实现更为精细的操作。

中文博客导航
萌ICP备20213456号