抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

ubuntu系统配置相关Blog:

新系统的ubuntu基本配置

snort的安装跳转Blog:

ubuntu【ARM架构】下安装snort2.9【虚拟机版】

ubuntu【x86架构】下搭建snort3【云服务器版】

snort的文件、规则配置跳转Blog:

配置snort以NIDS模式运行【ubuntu-ARM64】

snort定义和使用变量跳转Blog:

snort定义和使用变量

环境配置

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>;
      
      1
      2
      3
      4
      5

      用来识别Snort规则的修订版

      * ```
      flags
      检查TCP flags的值。 这个规则检查tcp标志。在snort中有9个标志变量:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      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
      在这些标志之间还可以使用逻辑操作符: \+ ALL flag, 匹配所有的指定的标志外加一个标志。 \* ANY flag, 匹配指定的任何一个标志。 ! NOT flag, 如果指定的标志不在这个数据包中就匹配成功。 保留位可以用来检测不正常行为,例如IP栈指纹攻击或者其他可疑的行为。
    • classtype:<class name>;
      
      1
      2
      3
      4
      5

      用来作规则分类

      * ```
      priority:<priority integer>;
      用来标识规则的优先等级
    • metadata:key1 value1;
      
      1

      metadata:key1 value1, key2 value2;
      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://gryffinbit-1304014832.cos.ap-chengdu.myqcloud.com/202207122102027.png)
      >
      > 1. 客户端发送SYN,请求建立连接
      > 2. 服务器端收到SYN,发送ACK确认,同时自己发送一个SYN
      > 3. 客户端收到ACK+SYN,回复ACK确认,连接建立完成
      >
      > * 四次握手断开连接
      >
      > ![](https://gryffinbit-1304014832.cos.ap-chengdu.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# NMAP Ping扫描
alert icmp any any -> 192.168.1.6 any (msg: "NMAP ping sweep Scan"; dsize:0;sid:10000001; rev: 1;)

# NMAP TCP扫描
#(能够检测到攻击使用nmap的端口爆破、连接及漏洞利用行为)
alert tcp any any -> 192.168.1.6 any (msg: "NMAP TCP Scan";sid:10000002;rev:2;)

# NMAP UDP扫描
#(能够检测到攻击使用nmap的端口爆破、连接及漏洞利用行为)
alert udp any any -> 192.168.1.6 any ( msg:"Nmap UDP Scan"; sid:10000003; rev:1; )

# NMAP XMAS扫描
# 有时攻击者不适用 TCP 通讯进行扫描,而使用 XMAS 通过 Fin、PSH和URG发送数据包进行扫描
alert tcp any any -> 192.168.1.6 any (msg:"Nmap XMAS Tree Scan"; flags:FPU; sid:1000004; rev:1; )

# 检测FIn扫描
alert tcp any any -> 192.168.1.6 any (msg:"Nmap FIN Scan"; flags:F; sid:1000005; rev:1;)

# 检测NULL扫描
alert tcp any any -> 192.168.1.6 any (msg:"Nmap NULL Scan"; flags:0; sid:1000006; rev:1; )

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
    17
    # Ping
    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
    5
    cd /var/log/snort
    cat alert
    # 或者可以查看日志
    sudo snort -r snort.log.xxx
    # 或者可以wireshark查看

参考文章

检测NAMP扫描

nmap扫描端口常用的几种扫描模式

评论