Snort预处理器之`sfPortscan`
文章目录
- 1 sfPortscan 预处理器简介
- 2 sfPortscan 预处理器支持的端口扫描类型
- 2.1 Portscan
- 2.2 Decoy Portscan
- 2.3 Distributed Portscan
- 2.4 Portsweep
- 2.5 Filtered Portscan And Filtered Portsweep
- 3 sfPortscan 预处理器的配置
- 4 sfPortscan 警报输出
- 4.1 Unified Output
- 4.2 Log File Output
- 5 sfPortscan 调优
- 6 sfPortscan 报警
1 sfPortscan 预处理器简介
由 Sourcefire 开发的 sfPortscan 模块,旨在检测网络攻击的第一阶段:侦察(Reconnaissance)。在侦察阶段,攻击者确定主机支持何种类型的网络协议或服务。这个阶段是攻击主机事先不知道目标所支持的协议或服务的情况下,否则,这个阶段就没有必要了。
由于攻击者事先并不知道它的预定目标,因此攻击者发送的大多数查询将是拒绝(negative)的(意味着服务端口被关闭)。在合法的网络通信中,来自主机的拒绝响应是很少见的,而且在给定的时间内出现多次拒绝响应的情况更少见。我们检测端口扫描的主要目的是检测和跟踪这些拒绝响应。
目前使用的最常见的端口扫描工具之一是 Nmap。Nmap 包含许多当前的端口扫描技术。sfPortscan 被设计为能够检测 Nmap 产生的不同类型的扫描。
2 sfPortscan 预处理器支持的端口扫描类型
2.1 Portscan
sfPortscan 当前会对以下类型的 Nmap 扫描发出警告:
- TCP Portscan
- UDP Portscan
- IP Portscan
这些警报是针对一对一端口扫描,这是传统类型的扫描,一台主机扫描另一台主机上的多个端口。
大多数请求都是被拒绝的,因为大多数主机提供的服务相对较少,意味着开放的端口较少。
2.2 Decoy Portscan
sfPortscan 亦会对下列类型的诱骗(decoy)端口扫描进行报警:
- TCP Decoy Portscan
- UDP Decoy Portscan
- IP Decoy Portscan
诱骗端口扫描与上面描述的 Nmap 端口扫描非常相似,只是攻击者拥有一个混合了真实扫描地址的欺骗源地址。这种策略有助于隐藏攻击者的真实身份。
2.3 Distributed Portscan
sfPortscan 也可以针对下列类型的分布式端口扫描发出警报:
- TCP Distributed Portscan
- UDP Distributed Portscan
- IP Distributed Portscan
这是多对一端口扫描。当多个主机查询一个主机以获取打开的服务时,就会发生分布式端口扫描。这是用来逃避 IDS 及混淆命令和控制主机。
注意: 拒绝查询将分布在扫描主机之间,因此我们通过被扫描主机跟踪这种类型的扫描。
2.4 Portsweep
sfPortscan 也可以针对以下类型的 Portsweep 发出警报:
- TCP Portsweep
- UDP Portsweep
- IP Portsweep
- ICMP Portsweep
这些警报是针对一对多端口扫描。一台主机扫描多台主机上的一个端口。这通常发生在出现新漏洞并且攻击者正在寻找特定服务时。
注意: portsweep 扫描的特性可能不会导致许多拒绝响应。例如,如果攻击者对端口80进行端口扫描,我们很可能不会看到很多拒绝响应。
2.5 Filtered Portscan And Filtered Portsweep
sfPortscan 对以下已过滤的 portcans 和 portsweeps 发出警报:
- TCP Filtered Portscan
- UDP Filtered Portscan
- IP Filtered Portscan
- TCP Filtered Decoy Portscan
- UDP Filtered Decoy Portscan
- IP Filtered Decoy Portscan
- TCP Filtered Portsweep
- UDP Filtered Portsweep
- IP Filtered Portsweep
- ICMP Filtered Portsweep
- TCP Filtered Distributed Portscan
- UDP Filtered Distributed Portscan
- IP Filtered Distributed Portscan
“Filtered” 警报表明没有网络错误(ICMP不可达或TCP RSTs),或关闭端口上的响应被抑制。它还可以很好地指示警报是否只是一个非常活跃的合法主机。活动主机,如NATs,可以触发这些警报,因为它们可以在非常短的时间内发送许多连接尝试。在收到来自远程主机的响应之前,过滤后的警报可能会发出(go off)。
sfPortscan 仅在时间窗口内为每个有问题的主机对生成一个警报(下面有更多时间窗口的介绍)。在 TCP 扫描警报中, sfPortscan 还将显示所有已扫描的开放端口。 但是,在 TCP 扫描警报上,sfPortscan 仅在触发警报后才跟踪开放的端口。 开放端口事件不是单个警报,而是基于原始扫描警报的标签。
3 sfPortscan 预处理器的配置
sfPortscan 需要使用 Stream5 预处理器。在无连接协议,如ICMP和UDP,Stream 给 Portscan 指明方向。您应该在 snort.conf 中启用 Stream 预处理器。
可用于配置 portscan 模块的参数有:
proto <protocol>
可用选项:- TCP
- UDP
- ICMP
- ip proto
- all
scan_type <scan type>
可用选项:- portscan
- portsweep
- decoy portscan
- distributed portscan
- all
sense_level <level>
可用选项:- low - “低” 警报仅在从目标主机发送的错误数据包上生成,并且由于错误响应的性质,此设置应该很少出现误报。但是,由于缺少错误响应,此设置将永远不会触发 “Filtered Scan” 警报。 此设置基于60秒的静态时间窗口,此后重置此窗口。
- medium - “中级” 警报跟踪连接计数(connection counts),因此将生成 “Filtered Scan” 警报。 此设置在活动主机(NAT,代理,DNS缓存等)上可能会产生误报,因此用户可能需要使用 “Ignore” 选项来进行调优。
- high - “高” 警报使用时间窗口连续跟踪网络上的主机,以评估该主机的端口扫描统计信息。 该设置会由于持续监控而捕获一些慢速扫描,但对活动主机非常敏感。 这绝对需要用户调优 sfPortscan。
watch_ip <ip1|ip2/cidr[ [port|port2-port3]]>
定义需要监视主机的 ip、网络和端口。该列表是一个逗号分隔的 IP 地址列表,IP地址使用CIDR表示法。端口被指定在IP地址/CIDR之后,可以是单一的端口,也可以是一个破折号连接表示的范围,是可选的。如果使用此选项,不属于此范围的 ip 或网络将被忽略。ignore_scanners <ip1|ip2/cidr[ [port|port2-port3]]>
忽略来自指定地址的扫描警报。参数的格式与 watch_ip 相同。ignore_scanned <ip1|ip2/cidr[ [port|port2-port3]]>
忽略目的地为指定地址的扫描警报。参数的格式与 watch_ip 相同。logfile <file>
此选项将把端口扫描事件输出到指定的文件。如果文件不包含前导斜杠,则该文件将放在 Snort 配置目录中。include_midstream
此选项将包括 Stream 模块在中途拾取的会话。这可能导致错误警报,尤其是在数据包丢失的高负载下。这就是为什么该选项默认关闭的原因。detect_ack_scans
此选项将包括 Stream 模块在中途拾取的会话,这对于检测 ACK 扫描是必需的。 但是,这可能导致错误警报,尤其是在数据包丢失的高负载下。这就是为什么该选项默认关闭的原因。memcap { positive integer }
为端口扫描检测分配的最大字节数。这个数字越高,可以跟踪的节点就越多。disabled
任何策略都允许使用这个可选关键字来避免包处理。此选项禁用预处理器。当预处理器被禁用时,只有 memcap 选项在配置中指定时被应用。其他选项将被解析但不使用。任何有效的配置都可能添加了“禁用”。
格式:
preprocessor sfportscan: proto <protocols> \scan_type <portscan|portsweep|decoy_portscan|distributed_portscan|all> \sense_level <low|medium|high> \watch_ip <IP or IP/CIDR> \ignore_scanners <IP list> \ignore_scanned <IP list> \logfile <path and filename> \disabled
举例:
preprocessor flow: stats_interval 0 hash 2
preprocessor sfportscan:\proto { all } \scan_type { all } \sense_level { low }
4 sfPortscan 警报输出
4.1 Unified Output
为了获取与警报一起记录的所有 portcan 信息,snort 会生成一个伪数据包,并使用有效负载部分来存储额外的 portcan 信息,包括优先级计数,连接计数,IP计数,端口计数,IP范围和端口范围。 数据包的特征是:
Src/Dst MAC Addr == MACDAD
IP Protocol == 255
IP TTL == 0
除此之外,该包看起来像导致生成 portscan 警报的包的 IP 部分。这包括任何 IP 选项,等等。数据包的有效负载和有效负载大小等于记录的附加 portscan 信息的长度。大小一般在100-200字节左右。
开放端口警报不同于其他 portscan 警报,因为开放端口警报利用带标记的包输出系统。这意味着,如果使用了不打印标记包的输出系统,那么用户将看不到开放端口警报。开放端口信息存储在IP负载中,并包含已开放的端口。
sfPortscan 警报输出旨在与 Unified2 数据包日志记录一起使用,因此可以扩展喜欢的 Snort GUI,使用上述数据包特征显示 portscan 警报和 IP 有效负载中的其他信息。
4.2 Log File Output
日志文件输出以以下格式显示,后面将进一步解释:
Time: 09/08-15:07:31.603880
event_id: 2
192.168.169.3 -> 192.168.169.5 (portscan) TCP Filtered Portscan
Priority Count: 0
Connection Count: 200
IP Count: 2
Scanner IP Range: 192.168.169.3:192.168.169.4
Port/Proto Count: 200
Port/Proto Range: 20:47557
如果目标上有开放端口,则将附加一个或多个带标记的数据包:
Time: 09/08-15:07:31.603881
event_ref: 2
192.168.169.3 -> 192.168.169.5 (portscan) Open Port
Open Port: 38458
上述名词解释:
Event id/Event ref
These fields are used to link an alert with the corresponding Open Port tagged packet
这些字段用于将警报与相应的带开放端口标记的包链接起来Priority Count
优先级计数跟踪不良响应(resets, unreachables)。优先级计数越高,收到的不良响应就越多。Connection Count
连接计数列出主机(src or dst)上活动的连接数。这对于基于连接的协议来说是准确的,对于其他协议来说是一个估计值。在此确定是否对端口扫描进行过滤。高连接计数和低优先级计数表明已过滤(没有收到来自目标的响应)。IP Count
IP 计数跟踪与主机联系的最后一个IP,如果下一个IP不同,则增加计数。对于一对一扫描,这是一个小数目。对于活动主机,无论如何这个数字都会很高,并且一对一扫描可能会作为分布式扫描出现。Scanned/Scanner IP Range
此字段根据警报类型而改变。Portsweep (一对多)扫描显示被扫描的IP范围。Portscans (一对一)显示扫描仪的 IP。Port Count
端口计数跟踪最后一个已接触的端口,并在该端口更改时增加该数字。我们使用这个计数(连同IP计数)来确定一对一端口扫描和一对一诱骗端口扫描之间的区别。
5 sfPortscan 调优
在检测端口扫描时,最重要的方面是根据您的网络,调优检测引擎。下面是一些调优技巧:
使用 watch_ip, ignore_scanners, ignore_scanned 选项
正确设置这些选项很重要。watch_ip 选项很容易理解。分析师应该将此选项设置为他们想要观察的 CIDR 区块和 ip 的列表。如果没有定义 watch_ip, sfPortscan 将监视所有网络流量。ignore_scanners 和 ignore_scanned 选项在清除网络上非常活跃的合法主机时起作用。一些最常见的例子是 NAT IPs、DNS 缓存服务器、syslog 服务器和 nfs 服务器。sfPortscan 可能不会为这些类型的主机生成误报,但是在第一次为这些 ip 调优sfPortscan 时要注意。根据主机生成的警报类型,分析人员需要知道忽略哪个警报。如果主机正在生成 portsweep 事件,则将其添加到 ignore_scanners 选项中。如果主机正在生成 portscan 警报(并且是正在被扫描的主机),则将其添加到 ignore_scanned 扫描选项中。
Filtered scan alerts 更容易出现误报
在确定误报时,警报类型非常重要。sfPortscan 生成的大部分误报可能都属于 filtered scan alert 类型。所以要对过滤过的端口扫描多加怀疑。很多时候,这只是表明主机在问题时间段内非常活跃。如果主机持续生成这些类型的警报,请将其添加到 ignore_scanners 或使用较低的灵敏度级别。利用Priority Count, Connection Count, IP Count, Port Count, IP Range, and Port Range来确定误报
Connection Count / IP Count:这个比率表示每个IP的平均连接数。对于portscans,这个比率应该很高,越高越好。对于portsweep,这个比率应该很低
Port Count / IP Count:这个比率表示每个IP连接的端口的估计平均值。对于端口扫描,这个比率应该很高,并表明被扫描主机的端口连接的ip较少。对于portsweep,这个比率应该很低,表明扫描主机连接到很少的端口,但是在很多主机上。
Connection Count / Port Count:这个比率表示每个端口的估计平均连接数。对于端口扫描,这个比率应该很低。这表示每个连接都连接到不同的端口。对于portsweep,这个比率应该很高。这表明同一端口有许多连接。
Priority Count 不包含的原因是,优先级计数包含在连接计数中,上面的比较将其考虑在内。优先级计数在调优中发挥重要作用,因为优先级计数越高,它越有可能是真正的 portscan 或 portsweep (除非主机被防火墙保护)。
如果以上方法都失败,调低 sensitivity_level
如果这些其他调优技术都不起作用,或者分析师没有时间进行调优,那么降低灵敏度级别。敏感性级别越高,您得到的保护就越好。但是 portscan 检测引擎生成的报警,能够给分析师提供有用的信息同样也很重要。低灵敏度级别仅根据错误响应生成警报。这些响应表明 portscan,由低灵敏度级别生成的警报是高度准确的,需要最少的调优。低灵敏度水平不能捕捉 filtered scans,因为这些更容易出现误报。
6 sfPortscan 报警
sfPortscan 使用 GID 122,可以生成如下报警:
SID | Description |
---|---|
1 | TCP Portscan |
2 | TCP Decoy Portscan |
3 | TCP Portsweep |
4 | TCP Distributed Portscan |
5 | TCP Filtered Portscan |
6 | TCP Filtered Decoy Portscan |
7 | TCP Filtered Portsweep |
8 | TCP Filtered Distributed Portscan |
9 | IP Protocol Scan |
10 | IP Decoy Protocol Scan |
11 | IP Protocol Sweep |
12 | IP Distributed Protocol Scan |
13 | IP Filtered Protocol Scan |
14 | IP Filtered Decoy Protocol Scan |
15 | IP Filtered Protocol Sweep |
16 | IP Filtered Distributed Protocol Scan |
17 | UDP Portscan |
18 | UDP Decoy Portscan |
19 | UDP Portsweep |
20 | UDP Distributed Portscan |
21 | UDP Filtered Portscan |
22 | UDP Filtered Decoy Portscan |
23 | UDP Filtered Portsweep |
24 | UDP Filtered Distributed Portscan |
25 | ICMP Sweep |
26 | ICMP Filtered Sweep |
27 | Open Port |
Snort预处理器之`sfPortscan`相关推荐
- CSS预处理器之Sass与Less
本篇内容主要讲述css预编译器sass与less: Sass sass(Syntactically Awesome Stylesheets)是css预处理器,可帮助开发人员复用css代码开发,节省开发 ...
- 丁鹿学堂:css预处理器之less学习(一)
less介绍 less是比较好用的css预处理语言. less增加了很多好用的新特性. 常用的有变量,混入,嵌套,计算等 我们要注意的是,less不管是在服务器还是在浏览器中,都不能直接被使用,而是要 ...
- css预编译其器,CSS预处理器之——Less
Less,顾名思义,少,在我看来,它有着与jQuery一样的思想--Write Less,Do More,尽管实际上这两者是完全不同的两个东西. Less是一个CSS预处理器,先不管人们为何这样命名, ...
- C和指针之预处理器之普通c/c++文件的编译过程
1.简单总结c/c++文件的编译3个过程 1).预处理器进行预编译 比如我们测试这段代码 #include <stdio.h>int main() {printf("hwll ...
- snort:预处理器开发HelloWorld
文章目录 参考 0.开胃菜 1. 预处理器回顾 2. README.PLUGINS 3. spp_template.c 4. spp_template.h 5. 预处理器的Hello World 5. ...
- 您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus
2019独角兽企业重金招聘Python工程师标准>>> CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS ...
- JMM内存模型如何为并发保驾护航
一.为何引入JMM 每个处理器在执行任务时,不可能单靠"计算"就可以完成所有任务,处理器至少需要和内存交互,进行读取运算数据.存储运算结果等,这个I/O操作是很难消除掉的.但由于计 ...
- react中样式冲突_如何通过React中的样式使您的应用漂亮
react中样式冲突 by Vinh Le 由Vinh Le 如何通过React中的样式使您的应用漂亮 (How to make your apps pretty with styling in Re ...
- Sass、Scss、Less和Stylus区别总结
Sass.Scss.Less.Stylus CSS 预处理器技术已经非常的成熟了,而且也涌现出了越来越多的 CSS 的预处理器框架.本文便总结下 Sass.Less CSS.Stylus这三个预处理器 ...
最新文章
- ios 自动布局框架
- Sentinel授权规则及规则持久化
- mapreduce分组统计_Mongodb的分组统计MapReduce
- 英特尔:把基带卖给苹果 完全是高通逼的
- 条码扫描二维码扫描——ZXing android 源码简化
- 后缀转中缀表达式_中缀转后缀表达式代码实现(下)及计算器完整版
- oracle in查询 一直等待,学习笔记:Oracle awr 分析解决inactive transaction branch等待事件...
- 开通博客,记录一下。
- Jeecg框架 修改首页
- 学习笔记-WinRM
- html中th与thead的详细区别
- PHP僵尸网络,byob--建立自己的僵尸网络
- 关于中国教育的一些思考
- wordpress创建_如何在WordPress中创建专业的在线简历
- 网易前端JavaScript编码规范
- node.js - 收藏集
- 【Java接口】限制App登录次数
- 网易电脑版我的世界显示获取服务器列表失败,我的世界网易中国版无法游戏问题汇总[图]...
- 推荐个东西,GPGPU开发
- kerboros协议讲解