LibcarePlus 用戶態(tài)熱補(bǔ)丁作為 openEuler 社區(qū)關(guān)鍵技術(shù),受到了廣大開(kāi)發(fā)者的關(guān)注和討論。openEuler 社區(qū)與天翼云基礎(chǔ)架構(gòu)技術(shù)團(tuán)隊(duì)通力合作,共同打造了全面支持 aarch64 及 x86 平臺(tái)的 LibcarePlus 熱補(bǔ)丁功能,可以應(yīng)用于 CVE 漏洞修復(fù),也可應(yīng)用于不中斷應(yīng)用服務(wù)的緊急 bug 修復(fù)。下面我們就來(lái)聊聊什么是熱補(bǔ)丁技術(shù)。
熱補(bǔ)丁技術(shù)背景
當(dāng)運(yùn)行的程序存在漏洞的時(shí)候,我們一般有以下幾種解決辦法:
替換最新的包含修復(fù)補(bǔ)丁的 OS 版本,在有主備倒換能力的組網(wǎng)環(huán)境上,可以先將當(dāng)前運(yùn)行的程序遷移到備區(qū),待主區(qū)升級(jí)完后,再將程序遷移到主區(qū);
替換程序的 rpm 包,然后重新運(yùn)行程序(注意此時(shí)需要考慮依賴包的兼容性),對(duì)于具備熱替換能力的程序,則可以利用熱替換能力,實(shí)現(xiàn)程序運(yùn)行內(nèi)容的替換;
直接給運(yùn)行的程序內(nèi)容打補(bǔ)丁,替換有問(wèn)題的代碼,實(shí)現(xiàn)程序漏洞的修復(fù);
從補(bǔ)丁粒度上來(lái)說(shuō),上述技術(shù)漏洞修復(fù)粒度是從大到小變化的:第一個(gè)是系統(tǒng)級(jí)的,主要涉及的技術(shù)有熱遷移技術(shù);第二個(gè)是 rpm 包級(jí)的,主要涉及的技術(shù)有熱替換;第三個(gè)是運(yùn)行程序級(jí)的,主要涉及的技術(shù)有熱補(bǔ)丁。從業(yè)務(wù)中斷時(shí)長(zhǎng)來(lái)說(shuō),上述技術(shù)的業(yè)務(wù)中斷時(shí)長(zhǎng)也是從大到小變化的:第一種技術(shù)業(yè)務(wù)中斷時(shí)間一般在分鐘級(jí),且一般涉及整個(gè)系統(tǒng)業(yè)務(wù)的主備倒換,升級(jí)周期最長(zhǎng),一般需要幾個(gè)月的升級(jí)窗口;第二種技術(shù)業(yè)務(wù)中斷時(shí)間一般在百毫秒級(jí),且該技術(shù)一般不通用,需要侵入式修改和適配大量業(yè)務(wù)代碼,升級(jí)周期相對(duì)比較短,一般僅需要一個(gè)月的升級(jí)窗口;第三種技術(shù)業(yè)務(wù)中斷時(shí)間則一般在毫秒級(jí),該技術(shù)比較通用,不需要侵入式修改和適配業(yè)務(wù)代碼,僅需要適配一些通用代碼,適配工作量較小,升級(jí)周期相對(duì)比較短,一般僅需要一個(gè)月的升級(jí)窗口。
通過(guò)上述分析,我們大概能總結(jié)出熱補(bǔ)丁的如下幾個(gè)優(yōu)點(diǎn):一是熱補(bǔ)丁能夠在不影響現(xiàn)網(wǎng)業(yè)務(wù)的情況下,完成程序漏洞的修復(fù);二是熱補(bǔ)丁適用于需要快速響應(yīng)的市場(chǎng)環(huán)境,將驗(yàn)證工作從版本驗(yàn)證簡(jiǎn)化為補(bǔ)丁驗(yàn)證。總結(jié)一句話:熱補(bǔ)丁短小精悍,適合使用在需要快速響應(yīng)的場(chǎng)景中。
今天,我們就來(lái)簡(jiǎn)單介紹一下,集萬(wàn)千寵愛(ài)于一身的 LibcarePlus 熱補(bǔ)丁技術(shù)。
LibcarePlus 熱補(bǔ)丁技術(shù)的基本原理
LibcarePlus 熱補(bǔ)丁技術(shù)是基于上游社區(qū) libcare 獨(dú)立發(fā)展的分支,當(dāng)前由 openEuler 社區(qū)進(jìn)行自主孵化。相比于上游社區(qū)的 libcare,LibcarePlus 支持主流的 x86_64 架構(gòu)和 aarch64 架構(gòu),全面支持 openEuler Qemu 組件,支持函數(shù)級(jí)過(guò)濾,支持增量補(bǔ)丁,支持補(bǔ)丁文件解析等。
我們以 LibcarePlus Qemu 熱補(bǔ)丁技術(shù)為例,進(jìn)行相關(guān)介紹。熱補(bǔ)丁的整體架構(gòu)如下:
LibcarePlus 熱補(bǔ)丁技術(shù)主要包括:熱補(bǔ)丁制作、補(bǔ)丁管理和補(bǔ)丁加/卸載。
熱補(bǔ)丁制作
LibcarePlus 制作熱補(bǔ)丁的基本原理是基于匯編級(jí)指令比較技術(shù)。LibcarePlus 通過(guò)比較基線代碼生成的匯編中間文件和打了補(bǔ)丁的基線代碼生成的匯編中間文件,找到兩者之間的差異部分;再基于差異部分,去除冗余段和修復(fù)重定位信息,最終得到熱補(bǔ)丁 kpatch 文件。在分析匯編差異的前,LibcarePlus 會(huì)基于一些關(guān)鍵信息將匯編內(nèi)容分成函數(shù)塊和變量塊,然后通過(guò)比較函數(shù)塊和變量塊之間的差異,找到差異的函數(shù)和變量。補(bǔ)丁制作的大概流程如下圖所示:
Qemu 熱補(bǔ)丁管理
依托于 libvirt 組件對(duì) Qemu 的管理,openEuler 同樣將 Qemu 熱補(bǔ)丁的管理集成到 libvirt 中。通過(guò)與虛擬機(jī)的生命周期交互,libvirt 能夠更完美地尋找到 Qemu 補(bǔ)丁加載的最佳時(shí)機(jī),完成對(duì) Qemu 組件熱補(bǔ)丁的管理。
熱補(bǔ)丁加載/卸載
熱補(bǔ)丁加/卸載的基本原理如下圖所示:
LibcarePlus 熱補(bǔ)丁加/卸載基于內(nèi)核提供的 ptrace 能力。通過(guò) ptrace 目標(biāo)進(jìn)程,將目標(biāo)進(jìn)程短暫凍結(jié),隨后進(jìn)行補(bǔ)丁加載環(huán)境的安全校驗(yàn),在確保補(bǔ)丁加載環(huán)境安全的情況下,以 mmap 映射的方式,將適配好的補(bǔ)丁文件插入到目標(biāo)進(jìn)程的內(nèi)存空洞中。在執(zhí)行完上述步驟后,通過(guò)修改缺陷函數(shù)的前面五個(gè)字節(jié)的代碼,讓缺陷函數(shù)在被調(diào)用時(shí)跳轉(zhuǎn)到新函數(shù)的地址中,從而使熱補(bǔ)丁生效。最后,解凍目標(biāo)進(jìn)程,完成熱補(bǔ)丁的加載。
在熱補(bǔ)丁加載過(guò)程中,缺陷函數(shù)被替換的前五個(gè)字節(jié)代碼會(huì)保存在目標(biāo)進(jìn)程的熱補(bǔ)丁的管理結(jié)構(gòu)中,將這五個(gè)字節(jié)代碼重新寫(xiě)回原地址處,可使熱補(bǔ)丁回滾到原來(lái)狀態(tài),從而實(shí)現(xiàn)了熱補(bǔ)丁卸載。
原文標(biāo)題:LibcarePlus 用戶態(tài)熱補(bǔ)丁技術(shù)那些事
文章出處:【微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70175 -
BUG
+關(guān)注
關(guān)注
0文章
156瀏覽量
15923 -
補(bǔ)丁
+關(guān)注
關(guān)注
0文章
27瀏覽量
8643 -
openEuler
+關(guān)注
關(guān)注
2文章
325瀏覽量
6226
原文標(biāo)題:LibcarePlus 用戶態(tài)熱補(bǔ)丁技術(shù)那些事
文章出處:【微信號(hào):openEulercommunity,微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
用DevEco Studio增量補(bǔ)丁修復(fù)功能,讓鴻蒙應(yīng)用的調(diào)試效率大增
用DevEco Studio增量補(bǔ)丁修復(fù)功能,讓鴻蒙應(yīng)用的調(diào)試效率大增
Siemens PADS Standard 標(biāo)準(zhǔn)版 VX.2.15 最新下載與詳細(xì)安裝教程
南亞科技與補(bǔ)丁科技攜手開(kāi)發(fā)定制超高帶寬內(nèi)存
FLIR Ex Pro熱像儀的OTA無(wú)線更新技術(shù)
OTA無(wú)線更新技術(shù):一鍵升級(jí)系統(tǒng),隨時(shí)暢享FLIR最新技術(shù)!

求助大佬們,裝了補(bǔ)丁的pads9.5,頁(yè)面還是有這種問(wèn)題怎么辦?
TVP5150AM1補(bǔ)丁代碼下載指南

TVP5147M1補(bǔ)丁代碼下載指南

TVP5160補(bǔ)丁代碼下載指南

TVP5158補(bǔ)丁代碼下載指南

TVP5151補(bǔ)丁代碼下載指南

Intel:13/14代酷睿補(bǔ)丁幾乎無(wú)損性能!未來(lái)所有產(chǎn)品都安全

新手工程師必看:如何正確使用Android SDK補(bǔ)丁包?

評(píng)論