LibcarePlus 用戶態熱補丁作為 openEuler 社區關鍵技術,受到了廣大開發者的關注和討論。openEuler 社區與天翼云基礎架構技術團隊通力合作,共同打造了全面支持 aarch64 及 x86 平臺的 LibcarePlus 熱補丁功能,可以應用于 CVE 漏洞修復,也可應用于不中斷應用服務的緊急 bug 修復。下面我們就來聊聊什么是熱補丁技術。
熱補丁技術背景
當運行的程序存在漏洞的時候,我們一般有以下幾種解決辦法:
替換最新的包含修復補丁的 OS 版本,在有主備倒換能力的組網環境上,可以先將當前運行的程序遷移到備區,待主區升級完后,再將程序遷移到主區;
替換程序的 rpm 包,然后重新運行程序(注意此時需要考慮依賴包的兼容性),對于具備熱替換能力的程序,則可以利用熱替換能力,實現程序運行內容的替換;
直接給運行的程序內容打補丁,替換有問題的代碼,實現程序漏洞的修復;
從補丁粒度上來說,上述技術漏洞修復粒度是從大到小變化的:第一個是系統級的,主要涉及的技術有熱遷移技術;第二個是 rpm 包級的,主要涉及的技術有熱替換;第三個是運行程序級的,主要涉及的技術有熱補丁。從業務中斷時長來說,上述技術的業務中斷時長也是從大到小變化的:第一種技術業務中斷時間一般在分鐘級,且一般涉及整個系統業務的主備倒換,升級周期最長,一般需要幾個月的升級窗口;第二種技術業務中斷時間一般在百毫秒級,且該技術一般不通用,需要侵入式修改和適配大量業務代碼,升級周期相對比較短,一般僅需要一個月的升級窗口;第三種技術業務中斷時間則一般在毫秒級,該技術比較通用,不需要侵入式修改和適配業務代碼,僅需要適配一些通用代碼,適配工作量較小,升級周期相對比較短,一般僅需要一個月的升級窗口。
通過上述分析,我們大概能總結出熱補丁的如下幾個優點:一是熱補丁能夠在不影響現網業務的情況下,完成程序漏洞的修復;二是熱補丁適用于需要快速響應的市場環境,將驗證工作從版本驗證簡化為補丁驗證。總結一句話:熱補丁短小精悍,適合使用在需要快速響應的場景中。
今天,我們就來簡單介紹一下,集萬千寵愛于一身的 LibcarePlus 熱補丁技術。
LibcarePlus 熱補丁技術的基本原理
LibcarePlus 熱補丁技術是基于上游社區 libcare 獨立發展的分支,當前由 openEuler 社區進行自主孵化。相比于上游社區的 libcare,LibcarePlus 支持主流的 x86_64 架構和 aarch64 架構,全面支持 openEuler Qemu 組件,支持函數級過濾,支持增量補丁,支持補丁文件解析等。
我們以 LibcarePlus Qemu 熱補丁技術為例,進行相關介紹。熱補丁的整體架構如下:
LibcarePlus 熱補丁技術主要包括:熱補丁制作、補丁管理和補丁加/卸載。
熱補丁制作
LibcarePlus 制作熱補丁的基本原理是基于匯編級指令比較技術。LibcarePlus 通過比較基線代碼生成的匯編中間文件和打了補丁的基線代碼生成的匯編中間文件,找到兩者之間的差異部分;再基于差異部分,去除冗余段和修復重定位信息,最終得到熱補丁 kpatch 文件。在分析匯編差異的前,LibcarePlus 會基于一些關鍵信息將匯編內容分成函數塊和變量塊,然后通過比較函數塊和變量塊之間的差異,找到差異的函數和變量。補丁制作的大概流程如下圖所示:
Qemu 熱補丁管理
依托于 libvirt 組件對 Qemu 的管理,openEuler 同樣將 Qemu 熱補丁的管理集成到 libvirt 中。通過與虛擬機的生命周期交互,libvirt 能夠更完美地尋找到 Qemu 補丁加載的最佳時機,完成對 Qemu 組件熱補丁的管理。
熱補丁加載/卸載
熱補丁加/卸載的基本原理如下圖所示:
LibcarePlus 熱補丁加/卸載基于內核提供的 ptrace 能力。通過 ptrace 目標進程,將目標進程短暫凍結,隨后進行補丁加載環境的安全校驗,在確保補丁加載環境安全的情況下,以 mmap 映射的方式,將適配好的補丁文件插入到目標進程的內存空洞中。在執行完上述步驟后,通過修改缺陷函數的前面五個字節的代碼,讓缺陷函數在被調用時跳轉到新函數的地址中,從而使熱補丁生效。最后,解凍目標進程,完成熱補丁的加載。
在熱補丁加載過程中,缺陷函數被替換的前五個字節代碼會保存在目標進程的熱補丁的管理結構中,將這五個字節代碼重新寫回原地址處,可使熱補丁回滾到原來狀態,從而實現了熱補丁卸載。
原文標題:LibcarePlus 用戶態熱補丁技術那些事
文章出處:【微信公眾號:openEuler】歡迎添加關注!文章轉載請注明出處。
-
代碼
+關注
關注
30文章
4827瀏覽量
69054 -
BUG
+關注
關注
0文章
155瀏覽量
15723 -
補丁
+關注
關注
0文章
27瀏覽量
8577 -
openEuler
+關注
關注
2文章
319瀏覽量
5939
原文標題:LibcarePlus 用戶態熱補丁技術那些事
文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論