一种用于实时 TCP-SYN 扫描检测的高吞吐量 FPGA 架构
大家读完觉得有帮助记得关注和点赞摘要——TCP-SYN 端口扫描通常先于网络攻击发生早期检测数据包头部中嵌入的扫描器指纹可以提供及时的入侵警报。现有方法要么计算成本过高无法在线速下运行要么仅限于离线分析。本文提出一种轻量级 FPGA 架构用于可重构的线速指纹检测其中每个指纹被编译成浅层布尔 LUT 树从而实现并行评估无论指纹数量多少延迟恒定为两个周期而资源成本随指纹数量线性增长。该检测核心与 MAC 层前端解耦前端执行流式字段提取无需帧缓冲或更高层状态允许通过仅修改前端即可部署在不同线速下。一个 Python 框架自动将布尔表达式编译为可综合的 HDL无需手动修改 RTL。对于 TCP-SYN 端口扫描指纹检测该架构在 Versal VCK190 上以 10Gbps 运行时对于 18 个部署的指纹使用约 0.5% 的 LUT容量超过 2,000 个并发指纹在 Virtex-6 上以 1Gbps 运行时使用不到 2.5%两种速率下检测延迟均为 10ns比软件入侵检测系统中典型的每包处理延迟低三到四个数量级。该系统在 8 小时生产数据包跟踪上与软件重新实现进行了交叉验证确认检测正确性零假阳性/假阴性。索引词——FPGA入侵检测端口扫描。I. 引言端口扫描是网络攻击的常见前兆用于识别易受攻击的服务。TCP-SYN 扫描占主导地位因为 SYN 数据包不需要会话状态能够快速扫描大地址范围。早期检测此类活动可以在攻击推进之前揭示恶意意图但在当代数据速率下检测必须在线速线速下运行才能保持有效。现代扫描器如 Masscan 和 ZMap 限制每个目的地的探测并随机化目标顺序使基于行为的检测无效 [1], [2]异常检测无法将这种稀疏扫描与合法 SYN 流量隔离载荷检查不适用因为 SYN 数据包不携带载荷。在检测信号中指纹最具可操作性扫描器在头部字段中嵌入确定性关系例如 Masscan 中的 tcp_seqip_dst [3]ZMap 中的固定 tcp_window [4]因为该公式让攻击者无需按目的地记账即可识别返回的 ACK使此类模式成为无状态扫描不可避免的产物。这促使直接在硬件中实现基于指纹的检测方法。图 1. 所提出 FPGA-IDS 在网络拓扑中的部署。因为每个指纹是一组有界头部字段的固定布尔函数它自然编译到浅层组合 LUT查找表树上。我们利用这一点设计了一种 FPGA 架构其中每个部署的指纹并行评估因此检测延迟与活跃指纹数量无关而资源成本仅随指纹数量线性增长与软件规则引擎相反后者随指纹添加而每包处理时间线性增长。与 ASIC 不同FPGA 实现还可以在扫描器演变其指纹以规避检测时重新配置无需制造周期。本工作做出以下贡献。(i) 我们提出一种用于指纹特定 TCP-SYN 扫描检测的 FPGA 架构其检测延迟Tdet与指纹数量无关完全在 MAC 接口处运行并在下一帧头部到达之前完成检测在 1 Gbps 和 10Gbps 下均如此。(ii) 我们开发了一个基于 Python 的 RTL 生成框架具有定义的布尔指纹语法无需手动修改 RTL 即可生成可综合 HDL。(iii) 我们通过在同一指纹检测器上复用而不改变跨越 XGMII10 Gbps和 GMII1 Gbps前端仅修改接口适配层展示了架构模块化。我们在 Versal VCK190 上实现 10 Gbps 变体在 Virtex-6 上实现 1 Gbps 变体。图 1 总结部署。II. 相关工作软件中的扫描检测。 基于行为的检测器使用每源阈值或失败计数标记扫描器 [5]但现代扫描器通过将探测稀疏分散到许多源来规避 [1]。即使是阈值随机游走TRW式遏制 [6] 的硬件实现也需要按源跟踪连接状态这是无缓冲线速管道无法维持的。基于指纹的方法则恢复头部字段之间的确定性关系但仅离线Griffioen 等人 [2] 对来自网络望远镜¹的数据使用图聚类Tanaka 等人 [7], [8] 对同类数据使用遗传搜索。两者都依赖从空闲地址范围记录的流量那里扫描流量容易隔离在真实网络中相同扫描流量与普通流混合分离难度大得多。基于 FPGA 的方法分为两类载荷匹配和头部匹配。载荷检查引擎以高速匹配 Snort 风格字节模式但消耗大量内存经典字符串匹配电路需要每个模式字符 4–5 个逻辑单元 [9]Kim 等人 [10] 需要每个模式一个片上存储块上限 265 条规则1.06GbpsPigasus [11] 仅在 SmartNIC 级 FPGA 资源下达到 100Gbps用于数据包重组和多模式匹配。仅头部检测器使用更少资源但要么慢要么非指纹特定Dakhil 等人 [12] 使用状态机以 100Mbps 匹配存储规则Kang 等人 [13] 以 100Mbps 构建 7 个预期头部字段的白名单Das 等人 [14] 和 Farooq 等人 [15] 针对通用异常或神经网络分类而非显式指纹。P4-to-FPGA 编译器 [16] 和 Corundum [17] 等平台也在 10–100Gbps 解析头部但针对通用数据包处理使用数万逻辑单元。与先前工作不同我们的检测器是指纹特定的、在线的、线速的无内容可寻址存储器、每规则存储或缓冲可作为预过滤阶段添加到任何这些管道中。表 I 总结该图景。表 I 现有技术概览参考类型†方法局限[5]B目的端口/IP 阈值≥5 扫描器/小时离线[6]BTRW 遏制每源状态[2]F图聚类XOR/移位≤131K 比较离线[7], [8]F遗传演化指纹标记数据离线[14]HPCA 异常检测非指纹特定[12]HFSM 匹配 vs. ROM≤100MbpsROM 受限[13]H白名单 7 元组匹配100Mbps 原型[15]HLUT 映射 NN原始字节非指纹特定[10]HShift-And, IEC61850≤265 规则1 BRAM/规则[11]HFPGA-first Snort DPI载荷SmartNIC 级成本† 类型 — B行为F指纹HFPGA/硬件。DPI深度包检测NN神经网络。¹ 网络望远镜被动监控一大块未使用 IP 地址仅捕获未经请求的流量如扫描和反向散射。III. 提出的方法我们提出一种 FPGA 架构实时检测 TCP-SYN 端口扫描流量中的指纹围绕一个约束协同设计检测必须在帧间间隔内完成仅使用 TCP-SYN 头部字段无帧缓冲或更高层状态。这将设计分为检测核心指纹检测器和 TCP-SYN 验证跨线速不变以及可互换前端仅 MAC从物理编码子层PCS恢复字节对齐头部字段随接口变化跨越 MII媒体独立接口家族XGMII10Gbps、GMII1Gbps和 MII/RMII10/100Mbps。这种分离驱动三个选择MAC 充当流式字段提取器随着字节到达将头部字段注册到命名槽中消除 BRAM 存储和接收后延迟每个签名使用统一的两级管道这是在最小帧的帧间间隔内仍能完成的最大深度Python 生成器图 2A将 TCP-SYN 解析逻辑与可重构指纹阵列分离因此新签名可以重新生成而不修改周围检测核心。完整 RTL 和框架可用 [18]。A. 基线前端GMII 及以下1Gbps 及更慢1 Gbps 及以下接口是变速的低于 1Gbps 时是子字节宽需要链路速度检测器和累加器在到达共享检测核心之前归一化传入数据图 2B。链路速度检测器 为区分 10/100/1000Mbps使用基于时间的频率方法图 2D。未知接收时钟驱动慢计数器而稳定的 200MHz 参考递增 16 位参考计数器饱和时采样较慢计数器并通过 2-FF 同步器交叉 [19]。观察窗口为 2^16 / (200×10^6) ≈ 327.68µs。累加器 因为子字节接口传递窄字4 位 MII 半字节、RMII 双位累加器将传入数据归一化为字节对齐图 2C在 FIFO 前对齐连续字并管理控制信号。在 1Gbps 时字节宽 GMII 数据通过对齐已满足。异步 FIFO FIFO 在 200MHz 系统时钟和 125MHz/25MHz/2.5MHz 接收时钟域之间交叉使用 Cummings 和 Alfke [20] 的格雷码指针设计。读使能永久置位FIFO 保持近空从不缓冲完整帧与流式设计理念一致。写入随线速扩展在 10/100Mbps 每两个半字节一次在 1Gbps 每周期一次。数据包处理器 处理器按字节串行解析检测前导码0x55和 SFD帧起始定界符0xD5有 64 位时间裕量图 2E。检测完成后提取头部字段。有效 TCP-SYN 数据包必须满足 EtherType 0x0800、IPv4 version4、互联网头部长度IHL5、Protocol6、SYN 置位、数据偏移DO5 和有效校验和这些检查在注册值上组合评估只有合规数据包被转发。限制为 IHL5/DO5 消除可变长度解析的需要匹配 Masscan 和 ZMap 等无状态扫描器的默认操作 [3], [4]。不读取、存储或处理字节 53 之外的载荷。在 1Gbps 时 96ns 帧间间隔IFG提供 200MHz 下 19 个周期足以完成所有验证和匹配。图 2. A所提出的指纹检测工具流程。B系统架构。C累加器。D链路速度检测器。E数据包处理器。MAC 状态机 复位后状态机等待链路激活。一旦激活触发链路速度检测器并将子模块保持在复位中直到速度确定327.68 µs。一旦链路速度已知激活所有子模块。B. 10Gbps XGMII固定速度简化XGMII 消除链路速度检测器因为它是固定速度且字节对齐接收时钟以单一 156.25MHz 运行无自动协商每个周期传递 64 位8 字节已字节对齐。累加器 尽管数据字节对齐到达仍需要残余字内对齐因为 Start 控制字符可以在 64 位字内的字节 0 或字节 4 开始。累加器从接收块中移除空闲字符并在 Start 控制字符从字节 4 开始时将其与前导码其余部分对齐。异步 FIFO FIFO 加宽到 72 位64 数据 8 控制在 156.25MHz 接收时钟和 200MHz 系统时钟之间交叉。数据包处理器和 MAC 状态机 数据包处理器一次消耗 64 位字而非按字节串行图 2E在单个字内定位前导码/SFD 模式从固定字位置提取头部字段以太网14B在字 0–1IPv420B在字 1–4TCP20B在字 4–6。状态机简化为两个状态IDLE 和 ENABLE链路建立时释放子模块复位无 327.68 µs 等待。C. 指纹检测器和 RTL 生成器每个指纹是两级管道一个周期注册头部向量 h一个周期评估 match_i f_i(h)。顶层模块断言 FP_DET ⋁_{i1}^N match_i每个签名一个 16 位计数器。因为检测器 RTL 复用不变只有前端在不同接口间不同每个接口仍综合到自己的比特流因为前端和检测器集成到单个顶层设计。指纹将其头部关系简化为一个匹配位match_i实现为 6 输入 LUT 的浅树在 Virtex-6 和 Versal 上相同。n 位与常数相等其中 n 是涉及的头部字段的组合宽度使用 ⌈n/6⌉ 个比较 LUT 加一个归约树tcp_window14600n16需要 3 个比较 1 个归约 4 个 LUT。双字段关系如 ip_dst⊕tcp_seq0n32将 3 个位对相等检查折叠到每个 LUT6 的单个输出中给出 ⌈32/3⌉ 11 个比较 LUT 和两级归约⌈11/6⌉ 1 3 个 LUT共 14 个 LUT。这些是解析上界综合通常通过 LUT 合并做得更好测量最坏情况为 71 LUT / 130 寄存器Virtex-6和 26 LUT / 130 寄存器Versal。因为所有 N 个子模块并行评估Tdet 2 周期与 N 无关而 LUT 面积随 N 线性增长。RTL 生成器接受命名头部字段上的受限布尔表达式语言设计使每个表达式简化为单个组合匹配位可在一个时钟周期内评估fingerprint : relation {(’’|’||’) relation}relation : term (’’|’!’|’’|’’|’’|’’) termterm : factor {(’’|’|’|’^’) factor}factor : field | field’[’msb’:’lsb’]’ | const| factor(’’|’’)const | ’~’factor| ’(’term’)’field : ip_src | ip_dst | ip_id | ip_ttl| ip_proto | tcp_sport | tcp_dport | tcp_seq| tcp_ack | tcp_window | tcp_flagsconst : decimal | ’0x’ hex按位运算符, |, ⊕, ∼和常数移位≪, ≫构建比较值移位和掩码是免费重布线或单 LUT 操作。比较运算符支持相等、不等和大小测试后者综合为组合大小比较器。关系用逻辑 /|| 组合。排除乘法和除法因为它们会破坏单周期评估。框架图 3从固定模板为每个表达式发出一个子模块仅变化端口列表和 f_i更新需要重新生成 HDL 并重新编程比特流。D. 威胁模型假设头部字段否则随机良性数据包匹配 k 位指纹的概率为 2^−k例如 tcp_seqip_dst 为 2^−32在 N18 个指纹中任何意外匹配的组合概率至多为 N/2^kmin 18/2^16 ≈ 2.7×10^−4其中 kmin16 是最窄字段。该界是保守的而非代表性的真实 SYN 流量不是字段随机的围绕常见 OS/栈默认值聚集。指纹可靠性不在此重新推导Tanaka 等人 [7], [8] 针对记录的扫描流量独立验证了该集。规避指纹 i 需要破坏操作上必需的关系例如无状态序列种子这会改变扫描器的可观察模式通常产生新的、可检测的指纹一旦识别可在几分钟内编译为比特流完全随机化规避所有固定签名但放弃使高速扫描可行的无状态生成。图 3. 自动 RTL 生成。一行 Python 表达式产生完整的两级子模块只有高亮区域变化。图 4. 10 GbpsXGMII下指纹检测的时序图IV. 实现与结果部署了十八个知名扫描器指纹包括 Masscan 和 ZMap 的签名以及 [7], [8] 中验证的其他指纹。10Gbps XGMII 设计包括可移植性和扩展测试在 Versal VCK190 上实现而 1Gbps GMII 设计在 Virtex-6XC6VLX240T上实现。UART 将标记的数据包记录到主机 PC 仅用于评估不是部署管道的一部分匹配时54 字节头部加 3 字节元数据被流式传输并解析为 .pcap。A. 按线速的时序预算两周期检测器在最终 TCP 头部字节注册后固定两个周期200 MHz 下 10 ns断言 FP_DET。可用于此的窗口因线速而异。在 10 Gbps 时 IFG 缩小到 9.6 ns低于两个 200 MHz 周期因此两周期检测器单独不能在 IFG 内完成相反因为 54 字节头部在最小帧结束前几个字就被注册前导码、帧尾和 IFG 共同为最小尺寸帧提供裕量这代表最坏情况。头部在第 7 周期完成FP_DET 在第 11 周期断言在下一帧第一个头部字在第 12 周期到达之前图 4。在 1 Gbps 时 96 ns IFG 跨越 200MHz 下 19 个周期因此检测严格在 IFG 内完成。图 5. 所提出架构的可扩展性。A每指纹资源消耗。Bfmax 和 LUT 利用率与指纹数量。表 II 资源利用率UART 排除PCS/PMA¹ 包括模块LUTFFLUTRAMfmaxVersal VCK190 (10G XGMII)指纹检测器51812730MAC830138286PCS/PMA¹3165621848总计4513 (0.50%)8873 (0.49%)134385MHzVirtex-6 (1G GMII)指纹检测器80813490MAC787167523总计1595 (1.06%)3024 (1.00%)23357MHz动态功耗布局后无向量Versal检测逻辑检测器 MAC16mWVersal完整数据通路²0.34WVirtex-6完整设计0.734W¹ Xilinx 10G Ethernet PCS/PMA物理介质附加负责与 MAC 接口包含在利用率结果中因为硬件实现必需。² 检测器、MAC、PCS/PMA、收发器和时钟排除评估平台的 Versal 处理系统不是检测管道的一部分。B. 资源和功耗利用率表 II 报告实现后利用率排除评估 UART。表 III 将资源使用与先前基于 FPGA 的检测器比较。Versal VCK190 上的 10Gbps XGMII 变体使用 4,513 LUT0.50%、8,873 FF0.49%和 134 LUTRAM 单元仅时钟域交叉 FIFO。图 5A 显示每个指纹的资源利用率。布局后原语计数与映射一致LUT6 主导检测器逻辑进位链LUTCY归因于大小比较器和每签名匹配计数器。在 Virtex-6 上部署设计使用 1,595 LUT1.06%和 3,024 FF检测器单独为 808 LUT0.54%无 DSP 或 BRAM。布局后无向量功耗分析将 16 mW 动态功耗归因于检测逻辑本身7 mW 指纹检测器9 mW MAC 前端完整 10 Gbps 数据通路包括 PCS/PMA、收发器和时钟约 0.34 W。表 III 与先前架构比较参考器件LUTFF速度Kim 等人 [10]Zynq-703043,080–1.06GbpsKang 等人 [13]Zynq-70302,4683,379100MbpsDakhil 等人 [12]Artix-711972100Mbps本文Virtex-61,5953,0241Gbps本文Versal VCK1901,3482,65510Gbps所有本文设计数据排除 UART 和 10G PCS/PMA。Kim 等人达到 Zynq-7030 BRAM 限制先前工作数据从数据手册转换。表 IV 检测验证结果场景设置总包数TCP-SYN检测实时流量8 小时镜像链路172,800,000396,528113望远镜重放~65K 未使用 IPv4批量重放500,000500,00026,555压力测试背靠背指纹包1,0001,0001,000C. 扩展和延迟在测量最坏情况每指纹 71 LUTVirtex-6下Virtex-6 支持约 2,100 个指纹然后耗尽 LUT 资源。外推 Versal 最坏情况成本每指纹约 26 LUT 和约 130 FF表明在触发器成为限制之前容量约 13,500 个指纹尽管时序收敛仅验证到 2,000 个指纹fmax212.5MHz超过 200MHz 目标见图 5B。这些估计是保守的因为扩展研究仅使用最坏情况模拟指纹每个 26 LUT130 FF实际部署混合简单和复杂指纹因此预期至少同样好。操作相关指标是吞吐量零丢弃10ns 延迟来自零缓冲设计并为自动响应例如 RST 注入留下裕量。软件 IDS 无法维持可比速率即使无限快正则匹配Snort3 每核处理约 400Mbps [11]每包延迟比此处实现的 10ns 高三到四个数量级。D. 检测验证系统在三个设置中验证表 IV。在被动镜像部门上行链路上8 小时窗口内所有 396,528 个 TCP SYN 数据包都携带 IHL5/DO5其中 113 个匹配部署指纹。在捕获的 .pcap 上用软件重新评估相同布尔函数给出相同结果建立精确硬件软件等价这验证实现正确性。从监控约 65,000 个未使用 IPv4 地址的网络望远镜重放 500,000 个数据包产生 26,555 个检测完全一致1,000 个背靠背指纹数据包全部在线速下检测确认最坏情况匹配密度下的持续吞吐量。按设计系统仅检测部署的指纹使用其他模式的未检测流量在此无法与良性数据包区分。V. 结论本文提出一种轻量级 FPGA 架构用于 TCP-SYN 端口扫描的实时、基于指纹的检测。在 MAC 层执行所有检测并在后续帧头部之前完成实现线速处理和 10ns 延迟比软件 IDS 低三到四个数量级。每个指纹是头部字段的并行布尔函数因此检测延迟与签名数量无关而资源成本线性增长扩展到超过 2,000 个指纹硬件软件等价在生产流量和望远镜流量上确认。相同指纹检测器跨接口复用从 GMII/MII1Gbps 及以下到 XGMII10Gbps仅适配物理接口前端设计在 Virtex-6 上以 1Gbps 使用 1.06% LUT在 Versal VCK190 上以 10Gbps 使用 0.5%。具有定义指纹语法的 Python 框架自动生成 HDL。