KeyFrame內部研究專用

Black Hat USA 2001 - Fnord: A Loadable Kernel Module for Defense and Honeypots

YouTube Creator·10月2日週三·89 min英文

三句話摘要

Fnord 核心模組監控系統:在核心層隱形部署的入侵偵測工具,透過監控系統呼叫表與核心資料結構變化來檢測並警報核心型 rootkit 攻擊。 Fnord 展示了核心層防禦的可行性邊界:不追求百分百防止,而是透過隱形監控與靜默記錄來保證最小警報與取證能力,這種設計在大規模已部署系統中兼顧了安全與營運穩定性。 核心模組型 rootkit 的根本威脅在於它運作在最高權限層級,傳統用戶層防禦工具(如 tripwire)因系統呼叫本身都被篡改而無法偵測。Fnord 的創新在於將監控工具也放入核心層,直接比對系統呼叫表項與匯出核心符號,監控 insmod/rmmod 系統呼叫的返回值,並使用定時檢查抓住任何變化。實現隱形的關鍵是:用 dev/inode 對而非檔案名稱隱藏物件(避免字串碰撞)、透過修改 /proc 檔案內容讓攻擊者看到虛假資訊、用環境變數密碼(儲存 MD5 雜湊)區分授權與未授權進程、建立平行於系統日誌且攻擊者看不到的獨立日誌機制。部署策略上,必須在系統初始構建時預載 Fnord,才能在攻擊者進入前佔據優勢。

重點整理

重點
  • 1

    核心模組型 rootkit 的根本威脅在於它運作在最高權限層級,傳統用戶層防禦工具(如 tripwire)因系統呼叫本身都被篡改而無法偵測。Fnord 的創新在於將監控工具也放入核心層,直接比對系統呼叫表項與匯出核心符號,監控 insmod/rmmod 系統呼叫的返回值,並使用定時檢查抓住任何變化。實現隱形的關鍵是:用 dev/inode 對而非檔案名稱隱藏物件(避免字串碰撞)、透過修改 /proc 檔案內容讓攻擊者看到虛假資訊、用環境變數密碼(儲存 MD5 雜湊)區分授權與未授權進程、建立平行於系統日誌且攻擊者看不到的獨立日誌機制。部署策略上,必須在系統初始構建時預載 Fnord,才能在攻擊者進入前佔據優勢。

實用技巧與重點

乾貨
  • 工具與人物
  • Fnord(自製核心模組)、Kstat(核心 rootkit 偵測工具)、strace(系統呼叫追蹤)
  • 已知公開 rootkit:Adore、Kmod(Job DeHaus 於同會議去年發表的 Solaris 版)
  • 演講者:Todd McDermid、Eric Brandwein(UNET ISP)
  • 系統呼叫攔截機制
  • 系統呼叫表:256 個條目(包括 191 個在用的)
  • 攔截方式:用自訂函數(如 hacked_open)替換系統呼叫表項
  • LIFO 順序:多個模組疊疊時按後進先出順序呼叫
  • 隱形實現
  • 字元設備編號:256 個,動態註冊/註銷(監聽 /proc 中名為 "S-pipe" 的建立事件)
  • 檔案隱藏:dev/inode 對清單比對
  • 隱藏的檔案清單:/proc/modules、/proc/net/udp、/proc/net/tcp、/proc/devices、/proc/[pid]/environ、/dev/kmem
  • 環境變數認證:LEET_VAR=密碼,存儲 MD5 雜湊值
  • 檔案篡改緩衝:4KB(恰好小於一個記憶體頁面),搭配滑動視窗技術
  • 日誌系統
  • /proc/sk_message:16KB 環形緩衝區,平行於 /proc/kmessage
  • 日誌層級:0-6(與標準 syslog 相同)
  • 內容:模組載入卸載、系統呼叫被攔截、檔案被修改、開啟 /dev/kmem、訪問原始磁碟
  • 核心空間占用
  • Fnord 模組大小:約 60KB
  • 偵測指標(應觸發警報)
  • 系統呼叫表項不匹配匯出符號
  • 開啟 /dev/kmem
  • 開啟原始磁碟設備
  • 嘗試修改日誌檔案(記錄但不阻止)

結論

結論

Fnord 展示了核心層防禦的可行性邊界:不追求百分百防止,而是透過隱形監控與靜默記錄來保證最小警報與取證能力,這種設計在大規模已部署系統中兼顧了安全與營運穩定性。

完整解析

詳細

UNET 是一家中等規模網際網路服務提供商,擁有大量分散在外地的主機。Todd 和 Eric 的團隊開始陸續發現某些主機上出現核心模組型 rootkit。這問題的嚴重性在於:核心模組成為作業系統的一部分,享有無限權限,且可在系統運行時動態載入,系統管理員可能毫無察覺。更糟的是,傳統安全工具(如 tripwire 或 ps 指令)本身依賴系統呼叫,而 rootkit 已經修改了系統呼叫表,導致這些工具回報虛假資訊。用戶層工具基本上無能為力,除非 rootkit 作者留下破綻。

為了解決這個困境,團隊開發了 Fnord。其核心理念是將監控工具也置於核心層,從而獲得比 rootkit 更高的「視野」。Fnord 運作的方式如下:監控系統呼叫表。當 insmod 或 rmmod 執行時,Fnord 會在系統呼叫返回後立即檢查表項是否與匯出的核心符號(如 sys_open)相符;此外,Fnord 也會每秒定時檢查一次,捕捉任何透過不同管道載入的核心模組。任何不匹配都會觸發警報。

但光有偵測還不夠,Fnord 必須對攻擊者完全隱形。其隱形設計層次分明。首先,字元設備介面(用於管理員與 Fnord 通訊)不是常駐的,而是動態的——Fnord 監聽 /proc,當偵測到建立名為 "S-pipe" 的字元設備檔案時,才在對應編號上註冊自己;當檔案被刪除時,它立即註銷。這樣,攻擊者掃描所有 256 個設備編號時根本找不到它,除非在管理員實際操作時的一瞬間。其次,Fnord 透過記錄檔案的 dev/inode 對(而非檔案路徑或名稱)來隱藏檔案與進程,這樣即使攻擊者建立同名檔案也不會被誤隱藏。第三,檔案內容的篡改技術應用了 4KB 滑動緩衝區:Fnord 不知道檔案實際長度(因為它修改了內容),但透過每次讀取時重新處理一份 4KB 緩衝、修改其內容、然後分次返回給使用者,可以在緩衝邊界落在隱藏記錄上時仍正確處理。第四,環境變數密碼機制:只有設定 LEET_VAR 環境變數的進程才能看到隱藏的檔案和進程,而且 Fnord 儲存的只是該變數的 MD5 雜湊,無法反推密碼。環境變數本身也會被隱藏,使用者進程查看其他進程的環境變數時看不到它。

日誌機制是另一個巧妙的設計。Fnord 不依賴標準 syslog,而是建立平行的 /proc/sk_message 介面,同樣有 16KB 環形緩衝區。所有可疑活動都被靜默記錄到此:模組載入卸載、系統呼叫被攔截、檔案被修改、開啟敏感裝置。攻擊者完全看不到這份日誌,也無法刪除它(因為刪除本身也會被記錄,而且刪除操作會失敗)。他們被帶入一種虛假的安全感——認為自己成功清除了痕跡,殊不知所有行動早已被記錄。這給了運維團隊寶貴的情報蒐集機會。

演講中也展示了 Fnord 對其他防禦工具的保護。企業可以在 Fnord 隱藏的掩護下運行 Tripwire、主機型防火牆或蜜罐監控腳本,攻擊者即使取得 root 權限也無法發現這些工具的存在。更進一步,Fnord 會嘗試欺騙偵測工具如 Kstat:Kstat 透過比對系統呼叫位址與符號來發現 rootkit,但當 Kstat 試圖讀取 /dev/kmem 時,Fnord 會回傳虛假的系統呼叫表位址,讓 Kstat 看到一個「乾淨」的系統。

當然,Fnord 也有其局限性。如果攻擊者在 Fnord 載入之前就已入侵系統,或者攻擊者具備充分的核心知識,他們可以採取反制措施——例如在系統呼叫表重新封裝前後交替修改、偽造系統呼叫表位址、甚至在核心記憶體中尋找並刪除 Fnord 的程式碼段。然而這些都需要高度的技術知識。更根本的限制是:一旦允許攻擊者在核心層執行程式碼,防禦就變成了攻防遊戲。Fnord 選擇的「軟性」防禦策略(允許入侵換取隱形與情報)在這個約束下是實用的折衷。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web2 安全」的內容

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car
7 min
Web2 安全英文PODCAST8月25日

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car

SANS Stormcast

  • PNG 容器攻擊的簡易性設計:Double Cup 不依賴複雜的 Exif 或隱寫技術,只用 PNG 副檔名和檔頭來偽裝,核心是利用 findstr 指令的常見可用性讓執行變得無需額外工具。
  • Web Audio API 的隱密指紋識別:音訊於增益零的無聲狀態下播放,使用者完全無感,但錄製波形足以建立裝置特徵,在瀏覽器原生功能層面難以區分是反詐欺還是過度追蹤。
  • 域名過期引發的串聯漏洞:DMARC 報告端點使用過期域名是常見疏漏,允許攻擊者透過簡單的域名註冊取得他人的 SPF/DKIM 錯誤報告,進而收集目標系統配置情報。
Risky Bulletin: Expired credit cards can be used for malicious transactions
5 min
Web2 安全英文PODCAST8月24日

Risky Bulletin: Expired credit cards can be used for malicious transactions

Risky Business

  • 支付安全的非對稱風險:Visa卡利用未加密的卡片資料與NFC通訊,攻擊者可藉由中間人技術竄改過期日期進行交易,但MasterCard、美運卡與Discover的防護更完善,顯示不同發卡機構的安全架構存在明顯差異。
  • 國家級駭客活動的連鎖延伸:北韓Lazarus集團在2月單一事件已累積100名受害者,涵蓋大學、警察部門、媒體與醫療機構,伊朗駭客則針對基礎建設如電力系統發動破壞性攻擊,反映地緣政治在網路戰爭中的升溫。
  • AI加速漏洞生態的雙面刃:AI工具催生近2萬份漏洞概念驗證代碼發布,但同時也導致大量失效漏洞代碼氾濫,增加資安團隊甄別真實威脅的難度;Mayer Protocol遭攻擊事件中,駭客用AI鏈接六個無關的小漏洞完成盜竊170萬美元的攻擊。
SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware
5 min
Web2 安全英文PODCAST8月24日

SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware

SANS Stormcast

  • Microsoft EntraID 的遠端代碼執行漏洞已由微軟修補,初期報告顯示已遭利用但後來更正為未遭利用。這反映 Microsoft 在雲端軟體安全上的透明度提升,對漏洞採用與內部軟體相同的 CVE 編號和公告流程。
  • PowerShell 指令碼可用於驗證 MFA 部署完整性,特別是找出未啟用 MFA 的遺漏帳號。同時可以分析 EntraID 登入日誌中的異常行為,如風險係數評估和地理位置檢測,幫助組織快速識別可疑登入。
  • GitLab 的 GraphQL 代碼注入漏洞允許未認證攻擊者刪除或修改儲存庫,潛在導致供應鏈攻擊。已有公開概念驗證 (PoC) 存在,使用內部部署 GitLab 的組織必須立即修補。