主流防火墻策略繞過漏洞的修復方案與加固實踐

主流防火墻策略繞過漏洞的修復方案與加固實踐

流量關鍵點分析(攻擊手法)

攻擊者通過精心構造的TCP序列號攻擊惡意標志組合繞過防火墻DPI檢測,核心手法如下:

  1. TCP連接建立(正常握手)

    • 1049:客戶端 SYN(seq=x)
      45 00 00 34 d5 f8 40 00 40 06 00 00 c0 a8 00 18 ac fd 72 5a
      
    • 1053:服務端 SYN-ACK(seq=y, ack=x+1)
      45 00 00 34 a0 8a 00 00 32 06 08 22 ac fd 72 5a c0 a8 00 18
      
    • 1054:客戶端 ACK(seq=x+1, ack=y+1)
      45 00 00 28 d5 fa 40 00 40 06 00 00 c0 a8 00 18 ac fd 72 5a
      
  2. TLS握手拆分攻擊

    • 1055:發送 TLS ClientHello頭部(4字節)

      • 標志:PUSH+ACK
      • 數據:16 03 01 02(TLS握手頭,版本TLS1.0,長度512字節)
      45 00 00 2c d5 fb 40 00 40 06 00 00 c0 a8 00 18 ac fd 72 5a
      
    • 1056:插入 惡意MD5-SIG報文

      • 大包(557字節)含TCP MD5選項
      • 標志:PUSH+ACK → 強制DPI流控重置狀態
      45 00 02 2d d5 fb 40 00 40 06 00 00 c0 a8 00 18 ac fd 72 5a
      
    • 1057:發送 ClientHello主體(130字節)

      • 標志:ACK(無PUSH)→ 偽裝控制包
      • 包含SNI字段起始部分 77 77 77 2e 67 6f 6f(“www.goo”)
      45 00 00 aa d5 fb 40 00 40 06 00 00 c0 a8 00 18 ac fd 72 5a
      00 01 00 01 fc 03 03 fc 9e d4 bd e7 e3 e2 90 12 79 b7 4b 68...
      
    • 1058:重傳 1056惡意包

      • 觸發防火墻"連續大包阻斷"規則
      45 00 02 2d d5 fb 40 00 40 06 00 00 c0 a8 00 18 ac fd 72 5a
      
    • 1059:發送 ClientHello剩余部分(383字節)

      • 完成SNI字段 67 6c 65 2e 63 6f 6d(“gle.com” → “www.google.com”)
      45 00 01 a7 d5 fb 40 00 40 06 00 00 c0 a8 00 18 ac fd 72 5a
      67 6c 65 2e 63 6f 6d 00 17 00 00 ff 01 00 01 00...
      
  3. 攻擊原理

    1055: 合法TLS頭部
    1056: 惡意MD5-SIG
    1057: 偽裝ACK包
    1058: 重傳惡意包
    1059: 剩余TLS數據
    防火墻狀態混亂
    SNI提取失敗/連接阻斷
  • DPI繞過:利用ACK without PUSH(1057)偽裝控制包
  • 流控觸發:惡意包(1056/1058)觸發防火墻阻斷規則
  • SNI隱藏:拆分SNI字段(1057+1059)使DPI無法提取域名

防火墻漏洞根源

  1. TCP流控缺陷

    • 依賴PUSH標志判斷數據邊界 → 被 ACK without PUSH(1057)繞過
    • 未驗證序列號連續性 → 允許惡意包(1056)插入合法流
  2. 重組機制缺失

    • 未緩沖分片TLS消息 → 無法重組ClientHello(1055+1057+1059)
    • 未使用TLS長度字段(02 00=512字節)驗證完整性
  3. 協議處理漏洞

    • 未過濾異常TCP選項(MD5-SIG)→ 被用作攻擊載體
    • 未實現應用層超時機制 → 惡意包阻塞重組緩沖區
  4. IF (TCP.FLAGS & TCP_PUSH) do…; PSH-only 漏洞

錯誤處理PSH-only包
協議棧丟棄
未記錄
攻擊者
發送PSH-only惡意包
有漏洞的防火墻
內部網絡
無響應
審計遺漏

防火墻修復方案

1. TCP層強化
模塊修復措施防御目標
流重組引擎實現狀態化TCP重組防止序列號跳躍攻擊(1056插入)
- 緩沖數據直到應用層消息完整重組被拆分的ClientHello
- 嚴格驗證SEQ/ACK連續性
標志處理取消對PUSH標志的依賴防御1057幀偽裝控制包
- 基于應用層長度判斷消息邊界
- 驗證標志組合合理性
選項過濾默認丟棄MD5-SIG選項包阻止1056/1058攻擊載體
if (tcp.option == MD5-SIG) DROP
2. TCP標志位處理優化
關于TCP PUSH標志的澄清

在TCP協議中:

  1. PUSH標志(PSH) 用于指示接收方應立即將數據傳遞給應用層
  2. ACK標志 是大多數數據包的默認標志
  3. 合法標志組合
    • ACK (最常見)
    • PSH|ACK (帶數據的推送)
    • RST|ACK (連接重置)
    • FIN|ACK (連接終止)
異常標志處理規則
  1. 丟棄規則:

    • 所有 PSH-only 包 (無ACK標志) → 立即丟棄
    • 所有 non-ACK 數據包 (已建立連接中) → 丟棄
  2. 驗證邏輯偽代碼:

   if (tcp.flags == PSH && !(tcp.flags & ACK)) {log("Invalid PSH-only packet", packet);DROP;}if (connection_state == ESTABLISHED && !(tcp.flags & ACK)) {log("Non-ACK packet in established connection", packet);DROP;}

標志位處理增強方案

異常標志處理規則
異常標志組合風險等級處理措施攻擊防護目標
PSH-only高危立即丟棄防止強制刷新攻擊
Non-ACK高危丟棄并記錄日志防止狀態機污染
**SYNPSH**中危丟棄
FIN-only中危丟棄防止連接異常終止
RST-only高危丟棄并生成警報防止拒絕服務攻擊
ACK-only低危SEQ驗證+流重組防止偽裝控制包(如1057)
PSH/ACK正常延遲處理至應用層消息完整防TLS拆分繞過
PSH-only 攻擊漏洞修復測試矩陣
測試用例測試場景測試包構造預期結果驗證指標
PSH-only攻擊基本漏洞驗證flags=PSH
無負載
立即丟棄1. 防火墻丟棄計數增加
2. 無審計日志記錄
3. 目標主機無接收
合法PSH+ACK正常業務驗證flags=PSH+ACK
含TLS ClientHello
正常處理1. SNI成功提取
2. 審計日志完整記錄
3. 應用層正常響應
混合標志攻擊高級繞過嘗試flags=PSH+URG
flags=PSH+SYN
立即丟棄1. 異常標志告警觸發
2. 連接成功率=0%
3. CPU占用<5%
洪水攻擊壓力測試1000+ PSH-only包
10Gbps速率
全部丟棄1. 吞吐量保持>9.5Gbps
2. 內存波動<2%
3. 無漏包
滲透測試真實攻擊模擬使用Metasploit模塊:
auxiliary/scanner/portscan/tcp_psh
完全阻斷1. IDS告警率100%
2. 掃描成功率=0%
3. 無異常連接
處理邏輯偽代碼
def handle_tcp_packet(packet):# 丟棄所有PSH-only包if packet.flags == TCP.PSH:log("Invalid PSH-only packet", packet)return DROP# 在已建立連接中丟棄所有non-ACK包if connection.state == ESTABLISHED and not (packet.flags & TCP.ACK):log("Non-ACK packet in established connection", packet)return DROP# 特殊標志組合處理if packet.flags & TCP.SYN and packet.flags & TCP.PSH:log("Suspicious SYN|PSH packet", packet)return DROP# ACK-only包需要嚴格SEQ驗證if packet.flags == TCP.ACK:if not validate_seq(packet.seq, expected_seq):return handle_out_of_order(packet)# PSH|ACK包進入重組緩沖區if packet.flags == (TCP.PSH | TCP.ACK):buffer_packet(packet)if is_application_message_complete():process_application_layer()return PROCESS
TCP 狀態機加固實現
flags=PSH
established & !ACK
flags=SYN|PSH
valid flags
flags=ACK
flags=PSH|ACK
seq==expected
seq!=expected
msg complete
msg incomplete
FlagCheck
PSHonly
NonACK
SYNPSH
Normal
Drop
ACKonly
PSHACK
SeqCheck
Valid
Invalid
Process
ReassemblyBuffer
Wait
操作系統對TCP標志的標準處理
PSH-only
flags=0x08
ACK-only
flags=0x10
PSH+ACK
flags=0x18
其他組合
合規
違規
接收TCP包
標志位檢查
立即丟棄
正常處理
正常處理
RFC合規性檢查
處理
RFC 793 明確要求

“The ACK bit MUST be set in all packets after the initial SYN packet, unless the RST bit is set.”
(在初始SYN包之后的所有數據包中,除非設置了RST位,否則必須設置ACK位)

3. TLS深度檢測增強
# TLS重組偽代碼
def handle_tls_packet(packet):session = get_session(packet.stream_id)# 驗證SEQ連續性(防御1056插入)if packet.seq != session.expected_seq:if not is_valid_tls_header(packet.data):  # 檢查0x16握手標識return DROP  # 丟棄插入包session.buffer += packet.data# 檢查TLS頭完整性(前5字節)if len(session.buffer) >= 5:tls_len = (session.buffer[3] << 8) + session.buffer[4] + 5# 緩沖完整消息(防御1055/1057/1059拆分)if len(session.buffer) >= tls_len:process_clienthello(session.buffer[:tls_len])  # 提取SNIsession.buffer = session.buffer[tls_len:]# 設置超時(防御阻塞攻擊)session.timer = set_timeout(500ms, flush_buffer)
4. 流控機制加固
序列號連續性引擎
class SeqTracker:def __init__(self):self.expected_seq = None  # 預期序列號self.reassembly_buffer = []  # 重組緩沖區self.max_gap = 8192  # 最大允許序列號間隔def process_packet(self, packet):# 初始序列號設置if self.expected_seq is None:self.expected_seq = packet.seq + len(payload)return PROCESS# 計算序列號差距seq_gap = packet.seq - self.expected_seq# 完美連續包if seq_gap == 0:self.expected_seq += len(packet.payload)return PROCESS# 可接受范圍內的亂序包if 0 < seq_gap <= self.max_gap:self._buffer_packet(packet)return BUFFERED# 惡意序列號跳躍 (如1056插入)if seq_gap > self.max_gap:log_alert(f"Sequence jump attack detected: gap={seq_gap}")return DROP# 重復或舊包 (如1058重傳)if seq_gap < 0:return DUPdef _buffer_packet(self, packet):# 按序列號插入緩沖區bisect.insort(self.reassembly_buffer, packet, key=lambda p: p.seq)# 檢查連續性self._check_continuity()def _check_continuity(self):# 嘗試重組連續數據next_seq = self.expected_seqfor p in sorted(self.reassembly_buffer, key=lambda x: x.seq):if p.seq == next_seq:self.reassembly_buffer.remove(p)next_seq += len(p.payload)else:break# 更新預期序列號if next_seq > self.expected_seq:self.expected_seq = next_seq
應用層感知流控
TLS
HTTP
未知
超時500ms
收到數據包
應用層協議識別
啟動TLS狀態跟蹤
啟動HTTP狀態跟蹤
通用流控
檢測ClientHello
SNI提取成功?
執行SNI策略
緩沖至完整消息
檢測Host頭
執行URL過濾
允許/阻斷連接
終止連接
惡意重傳防御系統
  1. 重傳檢測矩陣:

    特征正常重傳惡意重傳處理方式
    SEQ差異=0=0需進一步檢查
    有效負載相同不同標記惡意
    時間間隔>RTO<最小閾值(10ms)標記惡意
    標志位相同異常組合丟棄
  2. 防御規則:

    • IF 重傳包.有效負載 != 原始包.有效負載 THEN DROP
    • IF 重傳間隔 < 10ms AND 重傳次數 > 3 THEN BLOCK_SESSION
    • IF 重傳包.flags 包含非常規標志(如URG) THEN DROP

以下為本文捕獲的漏洞利用的IP報文數據:在這里插入圖片描述
WireShark 抓包數據:
1049:
0000   45 00 00 34 d5 f8 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1053:
0000   45 00 00 34 a0 8a 00 00 32 06 08 22 ac fd 72 5a
0010   c0 a8 00 181054:
0000   45 00 00 28 d5 fa 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1055:
0000   45 00 00 2c d5 fb 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1056:
0000   45 00 02 2d d5 fb 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1057:
0000   45 00 00 aa d5 fb 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1058:
0000   45 00 02 2d d5 fb 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1059:
0000   45 00 01 a7 d5 fb 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1067:
0000   01 bb 05 ea b3 21 4d 70 f2 2a 75 ec 80 12 ff ff
0010   1e b8 00 00 02 04 05 96 01 01 04 02 01 03 03 081068:
0000   01 bb 05 ea b3 21 4d 70 f2 2a 75 ec 80 12 ff ff
0010   1e b8 00 00 02 04 05 96 01 01 04 02 01 03 03 081069:
0000   45 00 00 34 d5 fe 40 00 40 06 00 00 c0 a8 00 18
0010   ac fd 72 5a1070:
0000   45 00 00 28 a1 39 00 00 32 06 07 7f ac fd 72 5a
0010   c0 a8 00 181071:
0000   45 00 00 28 a1 3a 00 00 32 06 07 7e ac fd 72 5a
0010   c0 a8 00 181072:
0000   45 00 00 28 a1 3b 00 00 32 06 07 7d ac fd 72 5a
0010   c0 a8 00 181073:
0000   01 bb 05 ea b3 21 4d 71 f2 2a 77 f1 50 10 01 09
0010   dc 87 00 001074:
0000   45 00 05 be a1 3d 00 00 32 06 01 e5 ac fd 72 5a
0010   c0 a8 00 18

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87545.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87545.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87545.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

泛微OAe9-后端二開常見數據庫操作

泛微OAe9-后端二開常見數據庫操作 文章目錄 泛微OAe9-后端二開常見數據庫操作一、RecordSet1 RecordSet 操作OA本身的表2 RecordSet 操作OA 本身的存儲過程 二、RecordSetTrans三、RecordSetDataSource四、原生 jdbc 一、RecordSet RecordSet 適用于操作 OA 自己的庫。OA 數據庫…

【數據分析八:hypothesis testing】假設檢驗

本節我們講述假設檢驗和抽樣方法 有關假設檢驗的詳細內容&#xff0c;可以參考我以往的博客 概率論與數理統計總復習_概率論與數理統計復習-CSDN博客文章瀏覽閱讀1.5k次&#xff0c;點贊33次&#xff0c;收藏23次。中科大使用的教輔《概率論和數理統計》&#xff0c;帶大家復…

AI免費工具:promptpilot、今天學點啥、中英文翻譯

promptpilot 激發模型潛能&#xff0c;輕松優化 Prompt https://promptpilot.volcengine.com/startup 今天學點啥 https://metaso.cn/study 能生成網頁和語音播報 中英文翻譯 沉浸式翻譯&#xff0c;瀏覽器插件&#xff0c;ai翻譯

計算機網絡學習筆記:TCP三報文握手、四報文揮手

文章目錄 前言一、TCP三報文握手二、TCP四報文揮手三、TCP保活計時器 前言 TCP通信&#xff0c;通常需要經歷三個階段&#xff1a;三報文握手->發送&#xff0c;接收數據->四報文揮手。 一、TCP三報文握手 三報文握手處于TCP的連接建立階段&#xff0c;主要解決了以下的…

kafka部署和基本操作

一、部署kafka 解壓 tar xzvf kafka_2.12-3.9.1.tgz tar -zxf kafka_2.12-3.9.1.tgz 1.修改config/server.properties # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # …

Bootstrap 5學習教程,從入門到精通,Bootstrap 5 導航語法知識點及案例代碼(17)

Bootstrap 5 導航語法知識點及案例代碼 Bootstrap 5 提供了強大的導航組件&#xff0c;幫助開發者快速構建響應式且美觀的導航欄。 一、Bootstrap 5 導航組件概述 Bootstrap 5 提供了多種導航組件&#xff0c;主要包括&#xff1a; 導航欄&#xff08;Navbar&#xff09;&am…

清除 docker 無用的 鏡像/容器

清除 docker 無用的 鏡像/容器 刪除 <none> 的 docker 鏡像 使用以下命令刪除所有 的 Docker 鏡像&#xff08;即懸空鏡像 / dangling images&#xff09;&#xff1a; docker image prune -f這會自動刪除所有沒有 tag 的鏡像&#xff08;&#xff09;&#xff0c;不會…

使用Charles抓包工具提升API調試與性能優化效率

在軟件開發過程中&#xff0c;網絡請求調試和性能優化往往成為開發者遇到的挑戰&#xff0c;尤其是在進行API接口調試時。開發者需要確保網絡請求的正確性、響應時間以及系統的整體性能。然而&#xff0c;傳統的調試方法常常無法提供足夠的細節來深入分析問題&#xff0c;進而影…

如何協調各項目關鍵節點的沖突與依賴

在多項目并行的環境下&#xff0c;關鍵節點間的沖突與依賴是導致項目延期、資源浪費和溝通誤解的主要根源。要高效協調此類問題&#xff0c;企業應重點從建立透明的進度依賴圖、使用項目管理工具對齊節點、推動跨部門協同機制入手。其中&#xff0c;通過Gantt圖或關鍵路徑法實現…

mongodb單節點改副本集模式

前一陣將三節點的副本集改成了單節點&#xff0c;但后面業務代碼出現問題&#xff1a;無法使用事務&#xff0c;因為事務只有在副本集上能用&#xff0c;單節點無法使用&#xff0c;故需要改回副本集模式&#xff0c;而我目前僅有一臺服務器&#xff0c;所以考慮在一臺服務器上…

Android 修改了頁面的xml布局,使用了databinding,這時候編譯時需要用到apt嗎

deepseek回答&#xff1a; 在 Android 開發中使用 DataBinding 時&#xff0c;不需要顯式使用 apt&#xff08;Annotation Processing Tool&#xff09;。以下是詳細說明&#xff1a; 1. DataBinding 的編譯機制 DataBinding 是 Android Gradle 插件原生支持的功能&#xff…

服務器如何從http升級到https(nginx)

1.證書申請 可以到阿里云或者華為云去申請證書&#xff0c;申請完下載證書是個壓縮包&#xff0c;然后解壓 可以到到幾個文件夾&#xff0c;找到 .Nginx 文件夾打開 會有兩個文件&#xff0c;將這兩個文件上傳至nginx/conf/cert文件夾下&#xff08;cert需要手…

6.19_JAVA_微服務

1、跑后端的時候要把數據庫跑起來&#xff0c;否則會報錯。 2、predicate斷言&#xff1a; 預言&#xff1a;predict 3、gateway&#xff1a;出路口 4、API&#xff1a;List.of("a", "b", "c");把abc編程一個集合。 5、 6、shortcutFieldOrd…

Linux 基礎命令:`ls`、`cd`、`du` 快速入門

在 Linux 系統中&#xff0c;ls、cd 和 du 是日常操作中最常用的三個命令。掌握它們能大幅提升文件管理效率。 1. ls&#xff1a;查看目錄內容 用途&#xff1a;列出當前或指定目錄下的文件和子目錄。 常用命令&#xff1a; ls -l # 詳細列表&#xff08;權限、大…

408第一季 - 數據結構 - 散列表

散列表 概念 散列表本身就是為了查找 原始人思想 散列表思想 6%5 是 1 1%5 也是1 沖突 沖突怎么辦&#xff1f; 線性探測法 就往后找&#xff0c;1跑到索引為2 然后查找&#xff0c;可以發現&#xff0c;只要沒沖突就只用查找1次 然后你想找10的話&#xff0c;發現索引為0…

Spring Boot 集成 Elasticsearch(含 ElasticsearchRestTemplate 示例)

Elasticsearch 是一個基于 Lucene 的分布式搜索服務器&#xff0c;具有高效的全文檢索能力。在現代應用中&#xff0c;尤其是需要強大搜索功能的系統中&#xff0c;Elasticsearch 被廣泛使用。 Spring Boot 提供了對 Elasticsearch 的集成支持&#xff0c;使得開發者可以輕松地…

CMake實踐:指定gcc版本編譯和交叉編譯

目錄 1.指定gcc版本編譯 1.1.通過CMake參數來實現 1.2.使用 RPATH/RUNPATH 直接指定庫路徑 1.3.使用符號鏈接和 LD_LIBRARY_PATH 1.4.使用 wrapper 腳本封裝 LD_LIBRARY_PATH 2.交叉編譯 2.1.基本用法 2.2.工具鏈文件關鍵配置 2.3.多平臺工具鏈示例 2.4.注意事項 2.…

詳解鴻蒙Next倉頡開發語言中的全屏模式

大家好&#xff0c;今天跟大家分享一下倉頡開發語言中的全屏模式。 和ArkTS一樣&#xff0c;倉頡的新建項目默認是非全屏模式的&#xff0c;如果你的應用顏色比較豐富&#xff0c;就會發現屏幕上方和底部的留白&#xff0c;這是應用自動避讓了屏幕上方攝像頭區域和底部的導航條…

LoRA 淺析

1. 核心思想 LoRA 是一種參數高效的微調方法&#xff0c;旨在減少微調大型語言模型 (LLMs) 所需的計算資源和存儲空間。其核心思想是&#xff1a; 凍結預訓練模型權重&#xff1a; 在微調過程中&#xff0c;保持預訓練 LLM 的原始權重不變。引入低秩矩陣&#xff1a; 對于 LL…

軟件范式正在經歷第三次革命

核心主題&#xff1a;軟件范式正在經歷第三次根本性革命&#xff08;軟件3.0&#xff09;&#xff0c;其核心是“智能體”&#xff08;Agent&#xff09;&#xff0c;未來十年將是“智能體的十年”。 邏輯模塊解析&#xff1a; 軟件的三次重生革命 軟件1.0&#xff1a; 傳統編…