前言
ubuntu系统配置相关Blog:
snort的安装跳转Blog:
ubuntu【ARM架构】下安装snort2.9【虚拟机版】
snort的文件、规则配置跳转Blog:
配置snort以NIDS模式运行【ubuntu-ARM64】
snort定义和使用变量跳转Blog:
环境配置
Ubuntu: Ubuntu 20.04.2 ARM64 【parallel虚拟机】
macOS: macOS Monterey. M1, 2020, ARM64【物理机】
ubuntu操作用户:在parallels普通用户下进行snort部署
snort版本:snort-2.9.20
daq-2.0.7版本:daq-2.0.7
规则集版本: 29200
Tips: 注意!规则集和snort版本要对应上,因为不同版本的可能会有一些新规则不能匹配上,就不能顺利运行。参考官网,每个新版本的说明,包括规则集的说明:
ubuntu源:中科大arm源
规则编写方式
1 | alert<keyword> tcp<protocol> ip port -> ip port (msg:""; dsize:0; sid:10000004;rev:1;) |
keyword:
- alert 报警
- pass 无视
- log 记录
- activate-报警并且激活另一条dynamic规则。
- dynamic-保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行。
protocol(包协议):
- TCP(传输控制协议,传输层,面向连接,可靠传输。用于提供可靠的通信服务)
- UDP(用户数据报协议,传输层,面向无连接,不可靠传输)
- ICMP(控制报文协议,网络层,面向无连接。用于传递控制消息,如网络是否畅、主机是否可达)
- IP
IP PORT: 源IP,源PORT
-> IP PORT:目的IP,目标PORT
()括号里的内容是规则体:
msg:"<message text>"
用这个关键字来引用外部的攻击识别系统1
2
3
4
5
告诉引擎和日志系统包到来时打印的信息
* ```
reference:<id system>,<id>;[reference:<id system>,<id>;];gid:<generator id>;
用来识别不同的规则1
2
3
4
5
用来标识特定规则时,snort的哪部分收到了检测
* ```
sid:<snort rules id>;rev:<revision integer>;
检查TCP flags的值。 这个规则检查tcp标志。在snort中有9个标志变量:1
2
3
4
5
用来识别Snort规则的修订版
* ```
flags在这些标志之间还可以使用逻辑操作符: \+ ALL flag, 匹配所有的指定的标志外加一个标志。 \* ANY flag, 匹配指定的任何一个标志。 ! NOT flag, 如果指定的标志不在这个数据包中就匹配成功。 保留位可以用来检测不正常行为,例如IP栈指纹攻击或者其他可疑的行为。1
2
3
4
5
6
7
8
9F - FIN (LSB in TCP Flags byte)
S - SYN
R - RST
P - PSH
A - ACK
U - URG
2 - Reserved bit 2
1 - Reserved bit 1 (MSB in TCP Flags byte)
0 - No TCP Flags Setclasstype:<class name>;
用来标识规则的优先等级1
2
3
4
5
用来作规则分类
* ```
priority:<priority integer>;metadata:key1 value1;
metadata:key1 value1, key2 value2;1
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
用键值对的形式去嵌套我们的规则
## NMAP几种不同的端口扫描特点
> **TCP/IP中端口建立连接的原则**
>
> TCP提供可靠连接,采用三次握手建立连接,四次握手断开连接。
>
> * 三次握手建立连接
>
> ![](https://blog-1310394682.cos.ap-beijing.myqcloud.com/202207122102027.png)
>
> 1. 客户端发送SYN,请求建立连接
> 2. 服务器端收到SYN,发送ACK确认,同时自己发送一个SYN
> 3. 客户端收到ACK+SYN,回复ACK确认,连接建立完成
>
> * 四次握手断开连接
>
> ![](https://blog-1310394682.cos.ap-beijing.myqcloud.com/202207122110907.png)
>
> 1. 客户端发送FIN,请求释放连接
> 2. 服务器端收到FIN,发送ACK确认
> 3. 服务器端发送FIN,告知释放连接
> 4. 客户端收到FIN,发送ACK
>
> * TCP/IP遵循原则
>
> 1. 发送SYN,LISTEN端口回复ACK,CLOSE端口回复RST
> 2. 发送RST会被直接丢弃
> 3. 发送ACK给LISTEN端口,回复RST
> 4. 发送FIN,LISTEN端口丢弃,CLOSE端口回复RST
---
**NMAP全连接扫描TCP Connect scan**
```shell
nmap -sT
发送SYN
回复ACK则是LISTEN,回复RST是CLOSE
回复ACK
容易被察觉
半开放SYN扫描 TCP SYN Scan
1 | namp -sS |
- 发送SYN
- 回复SYN+ACK则是LISTEN
- 回复RST则CLOSE
- 应用程序没有日志
- 容易被发现
以下是隐蔽扫描
ACK扫描
1 | nmap -sA |
- 发送ACK
- LISTEN端口回复RST
- CLOSE端口丢弃
FIN扫描
1 | nmap -sF |
- 发送FIN
- LISTEN端口丢弃
- CLOSE端口回复RST
- 扫描效率低,需要等待超时
TCP Xmas扫描(同FIN)
1 | nmap -sX |
- 发送FIN+URG+PSH
- LISTEN端口丢弃
- CLOSE端口回复RST
- 扫描效率低,需要等待超时,不能适用所有系统
TCP NULL扫描(同FIN)
1 | nmap -sN |
- 发送NULL
- LISEN端口丢弃
- CLOSE端口回复RST
- 扫描效率低,需要等待超时,不能适用所有系统
UDP扫描
1 | nmap -sU |
- 发送UDP包
- 返回ICMP_PORT_UNREACH为关闭,否则打开
- 不可靠
- 目标可以禁止UDP
检测NMAP扫描
编写规则
在ip部分填写安装snort机器的ip
1 | sudo vim /etc/snort/rules/local.rules |
1 | # NMAP Ping扫描 |
TCP flags的值
F - FIN (LSB in TCP Flags byte)
S - SYN
R - RST
P - PSH
A - ACK
U - URG
2 - Reserved bit 2
1 - Reserved bit 1 (MSB in TCP Flags byte)
0 - No TCP Flags Set
规则检测
snort虚拟机,开启检测模式
1
snort -i eth0 -c /etc/snort/snort.conf -A fast -l /var/log/snort/
物理机,进行攻击
-p1-200
只扫描1-200端口号1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Ping
nmap -sP 192.168.1.6 --disable-arp-ping
TCP
nmap -sT -p1-200 192.168.1.6
UDP
nmap -sU -p1-200 192.168.1.6
XMAS
nmap -sX -p1-200 192.168.1.6
FIN
nmap -sF -p1-200 192.168.1.6
NULL
nmap -sN -p1-200 192.168.1.6在日志中查看检测结果
1
2
3
4
5cd /var/log/snort
cat alert
或者可以查看日志
sudo snort -r snort.log.xxx
或者可以wireshark查看