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 脚本,实现更为精细的操作。