Post

suricata学习

suricata学习

快速入门指南

本指南将让您快速开始运行suricata,并且仅关注基础知识。需要更多详细信息,可能查阅更具体地章节。

安装

要安装最新稳定的suricata版本,请按照以下步骤操作:

1
2
3
4
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install suricata jq

jq工具对于显示来自suricata json输出的信息

安装suricata后,您可以检查您拥有的suricata版本以及状态:

1
2
sudo suricata --build-info
sudo systemctl status suricata

基本设置

首先,确认suricata要检查的网卡的ip地址

1
ip addr

然后,使用对应的信息配置suricata:

1
sudo vim /etc/suricata/suricata.yml

其中有很多可能的配置选项,我们专注于设置其中的一些变量和网络接口。

1
2
3
4
5
6
af-packet:
    - interface: eth0
      cluster-id: 99
      cluster-type: cluster_flow
      defrag: yes
      tpacket-v3: yes

此配置是最新的默认配置。其他还有许多可能的配置选项,这些将会在专门的章节中进行描述,比如高性能设置。

signatures

suricata使用签名来触发告警,因此有必要安装这些告警签名并让它们保持更新。签名也称为规则。使用suricata-update可以获取 更新规则并为suricata提供。

在本指南中,我们只运行并获取ET Open规则集的默认模式:

1
sudo suricata-update

执行完命令后,规则将被安装在/var/lib/suricata/rules/suricata.rules

运行suricata

安装规则后,我们重新启动它

1
sudo systemctl restart suricata

通过检查suricata日志来确保suricata正在运行。

1
sudo tail /var/log/suricata/suricata.log

要查看统计信息,请检查文件stats.log

1
sudo tail -f /var/log/suricata/stats.log

默认情况下,它每8秒更新一次,以显示当前状态。

警报

要测试suricata的IDS功能,最好使用签名进行测试。

ET Open规则中的ID 2100498是专门针对此类测试用例编写的。

alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)

签名背后的语法和逻辑将在其他章节中介绍。这将对其有效载荷中包含内容的任何IP流量发出警报。我们可以手动触发并查看日志中的更新。

1
2
curl http://testmynids.org/uid/index.html
sudo tail -f /var/log/suricata/fast.log

现在应该在日志中看到以下输出:

1
[**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 18.64.122.124:80 -> 172.20.225.138:36848

EVE Json

比起日子来说,更高级的输出是EVE Json输出,对应章节有详细说明。可以用jq工具进行jSON解析。

1
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'

这将显示有关警告的更多详细信息,包括元数据。

1
2
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")|.stats.capture.kernel_packets'
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")'

第一个示例显示内核捕获的数据包数,第二个示例显示了所有统计信息。

安全考虑

suricata是一种安全工具,用于处理不受信任的网络数据,而需要提升系统权限才能获得对应的数据。这需要我们采取额外的安全预防措施。

以root之外的用户身份运行

许多suricata示例显示suricata以root用户身份运行,特别是在实时流量上运行时。suricata需要对底层网络访问,因此需要suricata以root身份启动,但suricata也能够在启动后下拉到非root用户,这会减小suricata中安全漏洞的影响。

创建用户

在以非root用户身份运行之前,你需要创建对应的用户和组。

1
useradd --no-create-home --system --shell /sbin/nologin suricata

文件系统权限

在以非root运行之前,一些目录需要更新权限以允许读取和写入访问权限

1
2
3
4
5
6
7
8
chgrp -R suricata /etc/suricata
chmod -R g+r /etc/suricata
chgrp -R suricata /var/log/suricata
chmod -R g+rw /var/log/suricata
chgrp -R suricata /var/lib/suricata
chmod -R g+srw /var/lib/suricata
chgrp -R suricata /var/run/suricata
chmod -R g+srw /var/run/suricata

将suricata配置为用户suricata

1
2
3
run-as:
  user: suricata
  group: suricata

启动suricata

在大部分情况下suricata仍然是通过root权限启动。并且在运行时切换到配置的用户。

命令行选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
-h
  显示简要的使用概述
-V
  显示suricata的版本
-c
  配置文件的路径
--include <path>
  要包含的其他配置文件,可以指定多个配置文件。"--include xxx --include xxxx"
-T
  测试配置文件
-v
  通过以下的方式增加suricata应用程序日志记录的详细程度 -v INFO -vv PERF -vvv CONF =vvvv DEBUG
-r <path>
  运行pcap离线模式。<path>指定一个目录,该目录中的所有文件都会被处理,按照修改时间的顺序
--pcap-file-continuous
  当使用-r命令时,指示应该保持活动状态,直到打断。当你在向-r对应路径新增文件时,suricata会继续处理
--pcap-file-recursive
  使用-r命令时,允许便利到子目录,最大深度为255。不能与continuous一起使用
--pcap-file-delete
  使用-r命令时,指示pcap文件处理后应该删除
--pcap-file-buffer-size <value>
  设置读取缓冲区大小,以加快pcap读取速度
-i <interface>
  设置你想要嗅探数据包的网卡,可以用于嗅探多个接口
--pcap[=<device>]
  运行在pcap模式,如果没有提供设备名,则将从配置文件的pcap部分中读取
--af-packet[=<device>]
  使用AF_PACKET捕获数据包
--af-xdp[=<device>]
  使用AF_XDP捕获数据包
-q <queue_id>
  内敛运行提供的NFQUEUE队列ID
-s <filename.rules>
  指定签名文件,这将会和yaml中设置的规则一起加载
-S <filename.rules>
  指定签名文件,加载签名时,将会只是用这里指定的文件
-l <directory>
  设置默认的日志目录
-D
  后台运行模式
--runmode <runmode>
  运行模式:workers、autofp和single
-F <bpf filter file>
  使用BPF filter
-k [all|none]
  启用校验或者禁用校验
--user=<user>
  设置初始化后切换的用户
--group=<group>
  设置初始化后切换的用户组
--pidfile <file>
  将pid写入对应的文件中
--init-errors-fatal
  当加载签名遇到错误时,退出失败
--strict-rule-keywords[all|<keyword>|<keywords>]
  配置解析规则时哪些类型的校验警告将被设置未错误
--disable-detection
  禁用检测引擎
--disable-hashing
  禁用hash算法
--dump-config
  转储已经打开的配置
--dump-features
  转储提供的特性
--build-info
  显示构建信息
--list-app-layer-protos
  列出支持的应用层协议
--list-keywords=[all|csv|<kword>]
  列出支持的规则关键字
--list-runmodes
  列出支持的运行模式
--set <key>=<value>
  设置配置值,用于覆盖基本的配置参数
--reject-dev=<device>
  发送RST/ICMP的设备
--netmap[=<device>]
  使用NETMAP捕获数据包
--pfring[=<device>]
  使用PF_RING捕获数据包

This post is licensed under CC BY 4.0 by the author.