常见安全工具的扫描流量特征分析与检测
端口扫描在红队渗透中是非常重要的一个环,日常使用的很多工具都具有端口扫描功能.这篇文章会横向比较不同工具在端口扫描时的流量包特征和扫描器的扫描探活方法.从中提取出IDS和防火墙规则 2022-11-6 20:36:56 Author: rce.moe(查看原文) 阅读量:1 收藏

端口扫描在红队渗透中是非常重要的一个环,日常使用的很多工具都具有端口扫描功能.
这篇文章会横向比较不同工具在端口扫描时的流量包特征和扫描器的扫描探活方法.从中提取出IDS和防火墙规则,达到拦截或检测网络中的扫描流量的目的.
*本文不讨论高频发包和异常连接等行为上的检测.

1. nmap

SYN扫描流量

nmap 默认使用TCP 半连接扫描方法

发送一个SYN包 如果端口开放则回返回ACK
如果收到RST则端口没有开放 (间接证明主机存活)
这种扫描方法没有阻塞,速度快. 只需要发syn包之后等待返回包即可 不需要建立会话
且因为没有建立完整连接,扫描不会被记录连接日志.

图片.png
NMAP 使用了固定的窗口大小(1024)
同时也使用了固定的TCP OPTIONS (02 04 05 b4 TCP中最短的OPTIONS长度)
这种短OPTIONS 在日常使用的操作系统并不常见
猜测nmap可能是为了尽量减少包的大小才设置为最短options
https://github.com/nmap/nmap/blob/master/nmap.h#L165
图片.png
注: nmap在收到SYN ACK后,会立即发送RST 重置连接.

存活检测

在大规模扫描中 存活检测也是一个非常重要的技术
在面对大量主机扫描时如果事先探测存活主机 之后仅对存活主机扫描 就防止在非存活主机上消耗不必要的探测时间

nmap 默认使用了4种存活探测方法
图片.png

  1. ICMP ECHO 请求

这就是常见的ping 请求
特征: nmap为了减少包大小 icmp请求没有额外的数据负载
横向比较下 各个系统ICMP 负载

windows系统 icmp echo
图片.png
linux icmp
图片.png
nmap的icmp请求
图片.png

  1. ICMP 时间戳 请求

图片.png注意: 上面这两个ICMP 包的类型不一样 配置防火墙时要同时丢弃两种请求

  1. ACK 诱导 RST

发送ACK数据包到服务器后,如果连接被重置或者连接会话不存在时会返回RST数据包
这个过程是由操作系统处理的 所以一般情况下返回RST就说明主机存活

  1. 常见端口 SYN ACK or RST

nmap默认会在80和443端口尝试SYN半连接
以是否有返回包判断主机存活

masscan

SYN 扫描流量

同nmap
SYN包模板位置
https://github.com/robertdavidgraham/masscan/blob/144c527ed55275ee9fbb80bb14fbb5e3fcff3b7e/src/templ-pkt.c#L51
图片.png

存活检测

MASSCAN默认没有存活检测

GOBY

测试版本 goby 2.0.5 beta 企业版 默认配置

SYN 扫描流量

同NMAP MASSCAN
图片.png

存活检测

UDP 探活
发送数据到不存在的端口 返回一个端口不可达的ICMP包
固定端口 数据 去特征
图片.png

gorailgun

SYN 扫描流量

tcp 全连接扫描 无特征
会主动发起http探测
UA “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36”
Accept “text/html, image/gif, image/jpeg, *; q=.2, /; q=.2”

存活检测

只有ICMP ECHO
图片.png
强特征
476f20476f204761646765742050696e67212121476f20476f204761646765742050696e67212121476f20476f204761646765742050696e67212121

yakit

SYN 扫描流量

操作系统TCP 全连接 非半连接
图片.png

存活检测

ICMP ECHO + TCP 扫描(80 22 443)
图片.png
icmp 随机填充定长数据

fscan

SYN 扫描流量

操作系统 TCP 全连接 非半连接

存活检测

ICMP ECHO
无负载 同nmap

检测窗口 大小是否为1024
TCP OPTIONS 长度是否为4 (02 04 05 b4)

检测规则编写

iptables 规则(阻断需谨慎 可能有误报)

iptables -I INPUT -p tcp –syn -m length –length 44 -j REJECT –reject-with tcp-reset
阻断 TCP OPTIONS 长度为4 的syn 包 IP 固定 20 + TCP 固定 20+OPTIONS 4

suricata 检测规则

匹配结尾为02 04 05 b4 的TCP SYN包
alert tcp any any -> any any (msg:”SYN PORT SCAN (nmap masscan like)”;lags:S;tcp.hdr;content:”|02 04 05 b4|”; endswith; rev:1; sid:23330001; metadata:by burpheart;)
匹配长度为24 的TCP SYN包 (20+4)
alert tcp any any -> any any (msg:”SYN PORT SCAN nmap masscan like”;flags:S;tcp.hdr;bsize:24;rev:1; sid:23330002; metadata:by burpheart;)
有时间可能会写一篇 suricata 安装和检测规则编写的教程 x)

内网扫描流量感知 对匹配到的扫描流量发出告警 (IDS)
图片.png

公网扫描流量分析 收集攻击IP 统计公网扫描信息 作为威胁情报&防火墙黑名单使用
做了一个简易公网探针用来收集扫描信息
探针 suricata 检测流量生成日志->探针 Filebeat 收集日志->rabbit MQ 暂存->数据分析机 Filebeat 消费日志 ->ES ->KIBANA展示
图片.png
下面这张图是几个公网流量探针最近收集到的告警数据
图片.png由于探针较少 所以数据量也非常少
参考 360 NATLAB 的监控数据
果然23端口扫的最多 )
图片.png

版权声明:本文首发于白帽酱的博客,转载请注明出处!


文章来源: https://rce.moe/2022/11/06/portscantoolsanalyse/
如有侵权请联系:admin#unsafe.sh