前言
这里介绍一下如何让入侵检测系统识别nmap扫描,nmap的扫描行为很多,这里介绍几个
nmap中文手册
提供两个中文的nmap手册地址,第二个的阅读体验好一点
https://nmap.org/man/zh/
http://www.nmap.com.cn/doc/manual.shtm
ping扫描
简述:
nmap在二层的发现的参数的-sn,即只做ping扫描,不做端口扫描,这么说会让人奇怪,二层哪来的ping包,原因是这样的,-sn参数在扫局域网的时候是arp扫描,跨网段的时候是icmp扫描
命令:
nmap -sn 10.71.35.0/24
根据数据包内容,你会发现一些共同点,我用红框标注了出来
- itype:8
- icode:0
- icmp_seq:0
由于是icmp协议,所以设置协议类型为icmp,所以负载为0。你可以看到这是一个在短时间内发起大量扫描的行为,所以我还可以限制连接频率
注意:频率的控制很重要,不然极有可能无法检测到,我这里出于实验演示,频率控制的比较随意
得到这样的一条规则:
alert icmp any any -> any any (msg:"icmp扫描"; itype:8; icode:0; icmp_seq:0; dsize:0; detection_filter:track by_src,count 60,seconds 3; metadata:service check-ports; sid:1; rev:1;)
使用snort检测一下:
snort -c C:\Snort\etc\snort.conf -l C:\Snort\log -r 文件名
UDP扫描
简述:
扫描UDP端口
命令:
nmap -sU 192.168.239.0/24
根据数据包内容,发现协议类型是UDP,UDP协议的长度是8,然后数据包负载为0,存在高频率扫描行为。但是这些线索还是有些差强人意,有可能引发误报。
得到这样的一条规则:
alert udp any any -> any any (msg:"UDP扫描"; dsize:0; detection_filter:track by_src,count 100,seconds 10; metadata:service check-ports; sid:2; rev:1;)
使用snort检测一下:
snort -c C:\Snort\etc\snort.conf -l C:\Snort\log -r 文件名
SYN扫描
简述:
通过发送SYN标志的数据包来做端口扫描,一旦确定端口开放,nmap就发送RST断开连接
命令:
nmap -sS 192.168.239.131
根据数据包内容,你会发现一些共同点,我用红框标注了出来
- flags:S
- window:1024
- tcp.option:"|02 04 05 b4|"
- dsize:0
协议类型的tcp,存在高频率扫描行为,由于snort不支持tcp.option关键字,所以想让snort告警的话请删除这个关键字,或者换一个支持此关键字的设备,我这里选择后者
规则的主要内容如下:
flags:S; window:1024; tcp.option:"|02 04 05 b4|"; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports;
由于snort不识别tcp.option,这里不做截图
sM扫描
描述:
Maimon扫描是用它的发现者Uriel Maimon命名的。他在 Phrack Magazine issue #49 (November 1996)中描述了这一技术。 Nmap在两期后加入了这一技术。 这项技术和Null,FIN,以及Xmas扫描完全一样,除了探测报文是FIN/ACK。 根据RFC 793 (TCP),无论端口开放或者关闭,都应该对这样的探测响应RST报文。 然而,Uriel注意到如果端口开放,许多基于BSD的系统只是丢弃该探测报文
命令
nmap -sM 192.168.56.102
根据数据包内容,你会发现一些共同点:
- nmap使用标志位AF进行扫描
- 序列号seq都是0
- windows的窗口大小都是1024
- 紧急指针( Urgent Pointer)都是0
- 负载是0,得出dsize=0
- tcp头部长度是20
- 存在高频率扫描行为
得出规则
alert tcp any any -> any any (msg:"sM扫描"; flags:AF; seq:0; window:1024; dsize:0; tcp.urgent:=0; tcp.header_len:=20; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:4; rev:1;)
由于snort不支持tcp.urgent
和tcp.header_len
关键字,这里剔除这两个关键字,得出
alert tcp any any -> any any (msg:"sM扫描"; flags:AF; seq:0; window:1024; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:4; rev:1;)
使用snort检测一下:
snort -c C:\Snort\etc\snort.conf -l C:\Snort\log -r 文件名
sX扫描
命令
nmap -sX 192.168.56.102
根据数据包内容,你会发现一些共同点,我用红框标注了出来
- tcp的标志位是FUP
- tcp 应答号(acknowledge)的值是0.
- 窗口大小( Window size)是1024
- 紧急指针( Urgent Pointer)都是0
- 负载是0,得出dsize=0
- tcp头部长度是20
- 存在高频率扫描行为
得出规则
alert tcp any any -> any any (msg:"sX扫描"; flags:FUP; ack:0; window:1024; tcp.urgent:0; tcp.header_len:=20; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:5; rev:1;)
由于snort不支持tcp.urgent
和tcp.header_len
关键字,这里剔除这两个关键字,得出
alert tcp any any -> any any (msg:"sX扫描"; flags:FUP; ack:0; window:1024; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:5; rev:1;)
使用snort检测一下:
snort -c C:\Snort\etc\snort.conf -l C:\Snort\log -r 文件名
sF扫描
命令
nmap -sF 192.168.56.102
根据数据包内容,你会发现一些共同点,我用红框标注了出来
- tcp的标志位是F
- tcp 应答号(acknowledge)的值是0.
- 窗口大小( Window size)是1024
- 紧急指针( Urgent Pointer)都是0
- 负载是0,得出dsize=0
- tcp头部长度是20
- 存在高频率扫描行为
得出规则
alert tcp any any -> any any (msg:"sF扫描"; flags:F; ack:0; window:1024; tcp.urgent:0; tcp.header_len:=20; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:6; rev:1;)
由于snort不支持tcp.urgent
和tcp.header_len
关键字,这里剔除这两个关键字,得出
alert tcp any any -> any any (msg:"sF扫描"; flags:F; ack:0; window:1024; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:6; rev:1;)
使用snort检测一下:
snort -c C:\Snort\etc\snort.conf -l C:\Snort\log -r 文件名
sN扫描
命令
nmap -sN 192.168.56.102
根据数据包内容,你会发现一些共同点,我用红框标注了出来
- tcp的标志位是0
- tcp 应答号(acknowledge)的值是0.
- 窗口大小( Window size)是1024
- 紧急指针( Urgent Pointer)都是0
- 负载是0,得出dsize=0
- tcp头部长度是20
- 存在高频率扫描行为
得出规则
alert tcp any any -> any any (msg:"sN扫描"; flags:0; ack:0; window:1024; tcp.urgent:0; tcp.header_len:=20; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:7; rev:1;)
由于snort不支持tcp.urgent
和tcp.header_len
关键字,这里剔除这两个关键字,得出
alert tcp any any -> any any (msg:"sN扫描"; flags:0; ack:0; window:1024; dsize:0; detection_filter:track by_src,count 100,seconds 5; metadata:service check-ports; sid:7; rev:1;)
使用snort检测一下:
snort -c C:\Snort\etc\snort.conf -l C:\Snort\log -r 文件名