Toc
  1. 前言
  2. 扫描流量分析
    1. 1. nmap
      1. SYN扫描流量
      2. 存活检测
    2. masscan
      1. SYN 扫描流量
      2. 存活检测
    3. GOBY
      1. SYN 扫描流量
      2. 存活检测
    4. gorailgun
      1. SYN 扫描流量
      2. 存活检测
    5. yakit
      1. SYN 扫描流量
      2. 存活检测
    6. fscan
      1. SYN 扫描流量
      2. 存活检测
  • 扫描流量检测
    1. 检测规则编写
      1. iptables 规则(阻断需谨慎 可能有误报)
      2. suricata 检测规则
  • 规则用途
  • Toc
    0 results found
    白帽酱
    常见安全工具的扫描流量特征分析与检测
    2022/11/06

    前言

    端口扫描在红队渗透中是非常重要的一个环,日常使用的很多工具都具有端口扫描功能.
    这篇文章会横向比较不同工具在端口扫描时的流量包特征和扫描器的扫描探活方法.从中提取出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

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