前言

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源

规则编写方式

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>"
      

      告诉引擎和日志系统包到来时打印的信息

    • reference:<id system>,<id>;[reference:<id system>,<id>;];
      

      用这个关键字来引用外部的攻击识别系统

    • gid:<generator id>;    
      

      用来标识特定规则时,snort的哪部分收到了检测

    • sid:<snort rules id>;
      

      用来识别不同的规则

    • rev:<revision integer>;
      

      用来识别Snort规则的修订版

    • flags
      

      检查TCP flags的值。

      这个规则检查tcp标志。在snort中有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>;
      

      用来作规则分类

    • priority:<priority integer>;
      

      用来标识规则的优先等级

    • metadata:key1 value1;
      
      metadata:key1 value1, key2 value2;
      

      用键值对的形式去嵌套我们的规则

NMAP几种不同的端口扫描特点

TCP/IP中端口建立连接的原则

TCP提供可靠连接,采用三次握手建立连接,四次握手断开连接。

  • 三次握手建立连接

    1. 客户端发送SYN,请求建立连接
    2. 服务器端收到SYN,发送ACK确认,同时自己发送一个SYN
    3. 客户端收到ACK+SYN,回复ACK确认,连接建立完成
  • 四次握手断开连接

    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

nmap -sT
  • 发送SYN
  • 回复ACK则是LISTEN,回复RST是CLOSE
  • 回复ACK
  • 容易被察觉

半开放SYN扫描 TCP SYN Scan

namp -sS
  • 发送SYN
  • 回复SYN+ACK则是LISTEN
  • 回复RST则CLOSE
  • 应用程序没有日志
  • 容易被发现

以下是隐蔽扫描

ACK扫描

nmap -sA
  • 发送ACK
  • LISTEN端口回复RST
  • CLOSE端口丢弃

FIN扫描

nmap -sF
  • 发送FIN
  • LISTEN端口丢弃
  • CLOSE端口回复RST
  • 扫描效率低,需要等待超时

TCP Xmas扫描(同FIN)

nmap -sX
  • 发送FIN+URG+PSH
  • LISTEN端口丢弃
  • CLOSE端口回复RST
  • 扫描效率低,需要等待超时,不能适用所有系统

TCP NULL扫描(同FIN)

nmap -sN
  • 发送NULL
  • LISEN端口丢弃
  • CLOSE端口回复RST
  • 扫描效率低,需要等待超时,不能适用所有系统

UDP扫描

nmap -sU
  • 发送UDP包
  • 返回ICMP_PORT_UNREACH为关闭,否则打开
  • 不可靠
  • 目标可以禁止UDP

检测NMAP扫描

编写规则

在ip部分填写安装snort机器的ip

sudo vim /etc/snort/rules/local.rules
# 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虚拟机,开启检测模式

    snort -i eth0 -c /etc/snort/snort.conf -A fast -l /var/log/snort/
    

  • 物理机,进行攻击

    -p1-200 只扫描1-200端口号

    # 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
    
  • 在日志中查看检测结果

     cd /var/log/snort
     cat alert
     # 或者可以查看日志
     sudo snort -r snort.log.xxx
     # 或者可以wireshark查看
    

参考文章

检测NAMP扫描

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

评论