0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是熱補(bǔ)丁技術(shù)

openEuler ? 來源:openEuler ? 作者:openEuler ? 2022-07-08 11:22 ? 次閱讀

LibcarePlus 用戶態(tài)熱補(bǔ)丁作為 openEuler 社區(qū)關(guān)鍵技術(shù),受到了廣大開發(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ù)。下面我們就來聊聊什么是熱補(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ǔ)丁,替換有問題的代碼,實(shí)現(xiàn)程序漏洞的修復(fù);

從補(bǔ)丁粒度上來說,上述技術(shù)漏洞修復(fù)粒度是從大到小變化的:第一個(gè)是系統(tǒng)級(jí)的,主要涉及的技術(shù)有熱遷移技術(shù);第二個(gè)是 rpm 包級(jí)的,主要涉及的技術(shù)有熱替換;第三個(gè)是運(yùn)行程序級(jí)的,主要涉及的技術(shù)有熱補(bǔ)丁。從業(yè)務(wù)中斷時(shí)長來說,上述技術(shù)的業(yè)務(wù)中斷時(shí)長也是從大到小變化的:第一種技術(shù)業(yè)務(wù)中斷時(shí)間一般在分鐘級(jí),且一般涉及整個(gè)系統(tǒng)業(yè)務(wù)的主備倒換,升級(jí)周期最長,一般需要幾個(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í)窗口。

通過上述分析,我們大概能總結(jié)出熱補(bǔ)丁的如下幾個(gè)優(yōu)點(diǎn):一是熱補(bǔ)丁能夠在不影響現(xiàn)網(wǎng)業(yè)務(wù)的情況下,完成程序漏洞的修復(fù);二是熱補(bǔ)丁適用于需要快速響應(yīng)的市場環(huán)境,將驗(yàn)證工作從版本驗(yàn)證簡化為補(bǔ)丁驗(yàn)證??偨Y(jié)一句話:熱補(bǔ)丁短小精悍,適合使用在需要快速響應(yīng)的場景中。

今天,我們就來簡單介紹一下,集萬千寵愛于一身的 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í)過濾,支持增量補(bǔ)丁,支持補(bǔ)丁文件解析等。

我們以 LibcarePlus Qemu 熱補(bǔ)丁技術(shù)為例,進(jìn)行相關(guān)介紹。熱補(bǔ)丁的整體架構(gòu)如下:

c00289be-fde5-11ec-ba43-dac502259ad0.png

LibcarePlus 熱補(bǔ)丁技術(shù)主要包括:熱補(bǔ)丁制作、補(bǔ)丁管理和補(bǔ)丁加/卸載。

熱補(bǔ)丁制作

LibcarePlus 制作熱補(bǔ)丁的基本原理是基于匯編級(jí)指令比較技術(shù)。LibcarePlus 通過比較基線代碼生成的匯編中間文件和打了補(bǔ)丁的基線代碼生成的匯編中間文件,找到兩者之間的差異部分;再基于差異部分,去除冗余段和修復(fù)重定位信息,最終得到熱補(bǔ)丁 kpatch 文件。在分析匯編差異的前,LibcarePlus 會(huì)基于一些關(guān)鍵信息將匯編內(nèi)容分成函數(shù)塊和變量塊,然后通過比較函數(shù)塊和變量塊之間的差異,找到差異的函數(shù)和變量。補(bǔ)丁制作的大概流程如下圖所示:

c034497c-fde5-11ec-ba43-dac502259ad0.png

Qemu 熱補(bǔ)丁管理

依托于 libvirt 組件對(duì) Qemu 的管理,openEuler 同樣將 Qemu 熱補(bǔ)丁的管理集成到 libvirt 中。通過與虛擬機(jī)的生命周期交互,libvirt 能夠更完美地尋找到 Qemu 補(bǔ)丁加載的最佳時(shí)機(jī),完成對(duì) Qemu 組件熱補(bǔ)丁的管理。

熱補(bǔ)丁加載/卸載

熱補(bǔ)丁加/卸載的基本原理如下圖所示:

c0551076-fde5-11ec-ba43-dac502259ad0.png

LibcarePlus 熱補(bǔ)丁加/卸載基于內(nèi)核提供的 ptrace 能力。通過 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í)行完上述步驟后,通過修改缺陷函數(shù)的前面五個(gè)字節(jié)的代碼,讓缺陷函數(shù)在被調(diào)用時(shí)跳轉(zhuǎn)到新函數(shù)的地址中,從而使熱補(bǔ)丁生效。最后,解凍目標(biāo)進(jìn)程,完成熱補(bǔ)丁的加載。

在熱補(bǔ)丁加載過程中,缺陷函數(shù)被替換的前五個(gè)字節(jié)代碼會(huì)保存在目標(biāo)進(jìn)程的熱補(bǔ)丁的管理結(jié)構(gòu)中,將這五個(gè)字節(jié)代碼重新寫回原地址處,可使熱補(bǔ)丁回滾到原來狀態(tài),從而實(shí)現(xiàn)了熱補(bǔ)丁卸載。

原文標(biāo)題:LibcarePlus 用戶態(tài)熱補(bǔ)丁技術(shù)那些事

文章出處:【微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67771
  • BUG
    BUG
    +關(guān)注

    關(guān)注

    0

    文章

    155

    瀏覽量

    15628
  • 補(bǔ)丁
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8484
  • openEuler
    +關(guān)注

    關(guān)注

    2

    文章

    299

    瀏覽量

    5784

原文標(biāo)題:LibcarePlus 用戶態(tài)熱補(bǔ)丁技術(shù)那些事

文章出處:【微信號(hào):openEulercommunity,微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    英特爾終止SVT-HEVC開源視頻編碼器項(xiàng)目,引領(lǐng)技術(shù)新方向

    在科技日新月異的8月23日,英特爾公司宣布了一項(xiàng)重要決定:正式停止對(duì)其可擴(kuò)展視頻技術(shù)(SVT)計(jì)劃中的SVT-HEVC開源視頻編碼器項(xiàng)目的進(jìn)一步開發(fā)和貢獻(xiàn)。這一決策意味著SVT-HEVC項(xiàng)目將不再接受維護(hù)、錯(cuò)誤修復(fù)、新版本發(fā)布或更新,同時(shí),該項(xiàng)目的補(bǔ)丁提交通道也被關(guān)閉。
    的頭像 發(fā)表于 08-23 15:57 ?196次閱讀

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

    快科技8月9日消息,Intel官方宣布,正在向各大OEM、ODM廠商發(fā)放0x129版本的微代碼補(bǔ)丁,解決在13/14代酷睿臺(tái)式機(jī)處理器平臺(tái)微代碼發(fā)送錯(cuò)誤請(qǐng)求導(dǎo)致電壓升高繼而不穩(wěn)定的問題,可顯著改善K
    的頭像 發(fā)表于 08-12 10:37 ?249次閱讀
    Intel:13/14代酷睿<b class='flag-5'>補(bǔ)丁</b>幾乎無損性能!未來所有產(chǎn)品都安全

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

    開源鴻蒙硬件方案領(lǐng)跑者觸覺智能本文內(nèi)容適用于觸覺智能多數(shù)開發(fā)板的SDK補(bǔ)丁包的使用。這次給大家介紹的是觸覺智能的PurplePiOH鴻蒙開源主板,是華為Laval官方社區(qū)主薦的一款鴻蒙開發(fā)主板。該
    的頭像 發(fā)表于 07-23 18:00 ?214次閱讀
    新手工程師必看:如何正確使用Android SDK<b class='flag-5'>補(bǔ)丁</b>包?

    NONOS_SDK 1.5.4.1導(dǎo)致致命錯(cuò)誤的補(bǔ)丁怎么處理?

    將 1.5.4.1 補(bǔ)丁文件應(yīng)用到我的穩(wěn)定 1.5.4 代碼庫后,閃爍我的eagle.flash.bin和eagle.irom0text.bin時(shí),我的ESP8266模塊(ESP-12 或
    發(fā)表于 07-11 07:57

    Efinity軟件安裝教程與Efinity入門使用教程 大牛手把手教程

    ,軟件安裝時(shí)會(huì)自己安裝python3.8,也不需要下載。 step2 :安裝efinity。該步驟比較簡單,一路選擇Next,或者勾選同意。 stpe3:安裝補(bǔ)丁。如果所選擇的版本有補(bǔ)丁則安裝補(bǔ)丁,如果
    的頭像 發(fā)表于 05-20 17:10 ?1470次閱讀
    Efinity軟件安裝教程與Efinity入門使用教程 大牛手把手教程

    微軟五月補(bǔ)丁修復(fù)61個(gè)安全漏洞,含3個(gè)零日漏洞

    值得注意的是,此次修復(fù)并不包含5月2日修復(fù)的2個(gè)微軟Edge漏洞以及5月10日修復(fù)的4個(gè)漏洞。此外,本月的“補(bǔ)丁星期二”活動(dòng)還修復(fù)了3個(gè)零日漏洞,其中2個(gè)已被證實(shí)被黑客利用進(jìn)行攻擊,另一個(gè)則是公開披露的。
    的頭像 發(fā)表于 05-15 14:45 ?560次閱讀

    Radeon Vulkan RADV驅(qū)動(dòng)新增支持H.264/H.265編碼

    去年5月,David Airlie提出并實(shí)現(xiàn)了H.264 / H.265 Vulkan Video編碼補(bǔ)丁集,現(xiàn)已融入Mesa 24.1版本之中。針對(duì)此次Git主線合并請(qǐng)求,Airlie簡短評(píng)論道:“此補(bǔ)丁旨在拓展Vulkan,為RADV驅(qū)動(dòng)增加對(duì)vulkan video
    的頭像 發(fā)表于 04-12 14:59 ?481次閱讀

    微軟發(fā)布Linux內(nèi)核Rust模塊優(yōu)化補(bǔ)丁

    在此之前,Linux 內(nèi)核中要想實(shí)現(xiàn)模塊初始化,必須先創(chuàng)建一個(gè)實(shí)例,再將其移至特定內(nèi)存空間。然而,經(jīng)過新補(bǔ)丁調(diào)整后,各模塊可直接在預(yù)設(shè)定好的內(nèi)存地址上完成初始化工作。
    的頭像 發(fā)表于 04-02 15:11 ?372次閱讀

    三星將Galaxy S20和Note 20軟件更新頻率降低至每季更新

     目前,Galaxy S20系列已接收到2024年3月份的最新安全補(bǔ)丁,所以在短時(shí)間內(nèi)消費(fèi)者可以放心使用。然而,該系列設(shè)備將無法獲取4月份的補(bǔ)丁,下一輪更新預(yù)計(jì)將于今年6月份開始。
    的頭像 發(fā)表于 04-02 14:59 ?663次閱讀

    Efinity軟件安裝-v3

    安裝python了,軟件安裝時(shí)會(huì)自己安裝python3.8,也不需要下載。 step2 :安裝efinity。該步驟比較簡單,一路選擇Next,或者勾選同意。 stpe3:安裝補(bǔ)丁。如果所選擇的版本有
    的頭像 發(fā)表于 03-29 08:38 ?217次閱讀

    請(qǐng)問如何給STM32MP157上Linux5.4.31打?qū)崟r(shí)內(nèi)核補(bǔ)丁

    我這邊想給STM32MP157芯片A7上面的Linux打?qū)崟r(shí)內(nèi)核補(bǔ)丁,從而運(yùn)行一些對(duì)實(shí)時(shí)性要求較高的應(yīng)用程序。我看到我的Linux內(nèi)核版本是5.4.31的。然而,Linux內(nèi)核官方網(wǎng)站上面找不到這個(gè)
    發(fā)表于 03-11 06:09

    LineageOS 18.1停更在即,后續(xù)更新將不再提供

    谷歌每年定期提供最新Android安全補(bǔ)丁,至2024年2月已發(fā)布適配安卓11的終極安全補(bǔ)丁。鑒于此種情況,基于安卓11的LineageOS 18.1版本不得不停更。
    的頭像 發(fā)表于 03-08 14:18 ?963次閱讀

    索尼新型掌機(jī)與PS5游戲兼容性:18個(gè)CU單元或&quot;補(bǔ)丁&quot;支持

    它兼容PlayStation 4和PS5平臺(tái),為兼顧PS4游戲的兼容性,可能內(nèi)置18個(gè)CU單元。開發(fā)者需準(zhǔn)備相關(guān)補(bǔ)丁以確保PS5游戲在掌機(jī)上順暢運(yùn)行。
    的頭像 發(fā)表于 02-02 11:39 ?614次閱讀

    兆芯正引入Linux首選內(nèi)核調(diào)度技術(shù),優(yōu)化性能

    近期,兆芯工程團(tuán)隊(duì)亦在致力于將首選內(nèi)核調(diào)度技術(shù)引進(jìn)Linux系統(tǒng)中。他們?cè)噲D通過提議的Linux內(nèi)核補(bǔ)丁,利用已有的ACPI功能來辨別每個(gè)核心的特性。這項(xiàng)補(bǔ)丁將在ACPI CPUFreq驅(qū)動(dòng)程序中體現(xiàn)。這意味著調(diào)度程序能自動(dòng)在首
    的頭像 發(fā)表于 12-29 14:30 ?440次閱讀
    兆芯正引入Linux首選內(nèi)核調(diào)度<b class='flag-5'>技術(shù)</b>,優(yōu)化性能

    CredSSP遠(yuǎn)程執(zhí)行代碼漏洞CVE-2018-0886漏洞的修復(fù)

    實(shí)際上,如果你下載的補(bǔ)丁版本和操作系統(tǒng)是對(duì)應(yīng)的,但是還是無法安裝,當(dāng)安裝補(bǔ)丁提示“此更新不適用于你的計(jì)算機(jī)”時(shí),可以首先查看操作系統(tǒng)是否已經(jīng)升級(jí)到最新SP版本。
    的頭像 發(fā)表于 11-29 16:04 ?5197次閱讀
    CredSSP遠(yuǎn)程執(zhí)行代碼漏洞CVE-2018-0886漏洞的修復(fù)