數(shù)字化技術(shù)的應(yīng)用,成為了金融機(jī)構(gòu)良性發(fā)展的驅(qū)動力,卻也在諸多方面留下了安全隱患。近期人民銀行辦公廳聯(lián)合中央網(wǎng)信辦等多家單位聯(lián)合發(fā)布的《關(guān)于規(guī)范金融業(yè)開源技術(shù)應(yīng)用與發(fā)展的意見》(以下簡稱《意見》),再次將金融信息安全的問題放到了輿論的風(fēng)口浪尖。
“鼓勵金融機(jī)構(gòu)將開源技術(shù)應(yīng)用納入自身信息化發(fā)展規(guī)劃,加強(qiáng)對開源技術(shù)應(yīng)用的組織管理和統(tǒng)籌協(xié)調(diào)”,《意見》從政策層面規(guī)范了金融科研機(jī)構(gòu)對于新興數(shù)字化技術(shù)的使用場景和使用模式,而在技術(shù)層面,諸多國內(nèi)技術(shù)團(tuán)隊(duì)也在提供更智能的開源自動化模糊檢測方案,強(qiáng)化我國在相關(guān)技術(shù)方向的自主可控能力。
最近,水木羽林聯(lián)合清華大學(xué)軟件學(xué)院Wingtecher Lab就開源了操作系統(tǒng)模糊測試工具Healer,本文將介紹利用Healer進(jìn)行操作系統(tǒng)安全測試的基礎(chǔ)原理及其使用方法,Healer是一款?高效的內(nèi)核模糊測試工具,由水木羽林與清華大學(xué)軟件學(xué)院Wingtecher Lab聯(lián)合研發(fā),可用于快速挖掘內(nèi)核風(fēng)險(xiǎn)。
Healer項(xiàng)目開源地址:https://github.com/SunHao-0/healer
Healer原理介紹
操作系統(tǒng)內(nèi)核測試需要解決的一個核心問題是高質(zhì)量調(diào)用序列的生成。Healer兼容現(xiàn)有kernel fuzzer的特征,例如, Healer可以直接利用業(yè)界廣泛使用的Google Syzkaller的接口描述,來自動生成滿足結(jié)構(gòu)約束和部分語義約束的系統(tǒng)調(diào)用序列,從而保證生成的每個調(diào)用不被簡單的內(nèi)核參數(shù)檢查拒絕,并通過執(zhí)行生成的調(diào)用序列來觸發(fā)內(nèi)核崩潰、不斷地發(fā)現(xiàn)內(nèi)核漏洞。 但又不同于現(xiàn)有工具,Healer設(shè)計(jì)實(shí)現(xiàn)了高效的算法和框架來優(yōu)化整個Fuzz流程,例如,Healer通過使用系統(tǒng)調(diào)用之間的影響關(guān)系來引導(dǎo)調(diào)用序列的生成與變異,盡可能地保證調(diào)用序列中的前序調(diào)用為后續(xù)調(diào)用設(shè)定需要的內(nèi)核狀態(tài),并通過關(guān)系學(xué)習(xí)算法在運(yùn)行時(shí)不斷精化和發(fā)現(xiàn)新的影響關(guān)系、優(yōu)化整個fuzz過程。如下圖所示,關(guān)系學(xué)習(xí)算法實(shí)際上在推導(dǎo)一個非常復(fù)雜的圖結(jié)構(gòu),其中每個節(jié)點(diǎn)對應(yīng)一個系統(tǒng)調(diào)用,每條邊對應(yīng)調(diào)用之間的影響關(guān)系。 
最終效果上,Healer生成的系統(tǒng)調(diào)用序列步驟更多、更有效,可以提高每個測試用例達(dá)到內(nèi)核深層邏輯、挖掘深層漏洞的效率。 基于標(biāo)準(zhǔn)對比實(shí)驗(yàn)可以發(fā)現(xiàn),相比于Google Syzkaller、Moonshine等同類工具,Healer可以達(dá)到28%以上的覆蓋深度提升、2倍以上的覆蓋速度加速。

關(guān)于Healer的更多信息,可閱讀孫浩、沈煜恒、劉建中及姜宇等人發(fā)表在ACM SOSP 2021的論文《HEALER: Relation Learning Guided Kernel Fuzzing》。 截止目前,Healer已向Linux社區(qū)匯報(bào)了數(shù)百個漏洞,已確認(rèn)并修復(fù)60余個。
Healer使用方式
安裝Healer
除了少部分補(bǔ)丁代碼(Golang,C),Healer是使用高效的系統(tǒng)級編程語言rust從零研發(fā)。 編譯構(gòu)建Healer需要安裝下述依賴:
最新版rust工具鏈
Golang環(huán)境,啟用Go mod
Gcc,1.0版本或更新
Qemu,0版或更新
除了上述工具依賴,一些常見的工具也需要被安裝,例如sha384sum、patch、make工具。
一旦上述工具準(zhǔn)備就緒,Healer可以通過如下命令一鍵構(gòu)建:
> cargo build --release
小提示:使用nightly版本,并設(shè)置構(gòu)建目標(biāo)可獲得進(jìn)一步的性能加速(RUSTFLAGS="-C target-cpu=native")
最終,編譯好的二進(jìn)制可以在項(xiàng)目目錄下的target/release目錄中找到,其中healer為最核心的可執(zhí)行文件,syz-bin下有構(gòu)建好的打過補(bǔ)丁的執(zhí)行器。
Healer基礎(chǔ)用法
使用Healer對Linux內(nèi)核進(jìn)行模糊測試僅需兩個步驟:
(1)構(gòu)建磁盤鏡像與內(nèi)核;
(2)創(chuàng)建工作目錄與啟動Healer。
Healer利用Qemu啟動待測內(nèi)核,因此我們需要準(zhǔn)備一個磁盤鏡像和待測內(nèi)核本身。 磁盤鏡像可以通過兩種方式獲得:第一種是利用完全自動化的腳本來構(gòu)建,例如使用Syzkaller提供的create-image.sh腳本;第二種是使用三方構(gòu)建好的鏡像,例如Linux發(fā)行版提供的鏡像。 得益于Linux內(nèi)核本身優(yōu)秀的構(gòu)建方案,編譯待測內(nèi)核也非常容易。 在獲得Linux內(nèi)核源碼后,我們僅需在內(nèi)核編譯配置文件(.config文件)中添加覆蓋率、sanitizer選項(xiàng),隨后一鍵構(gòu)建即可(make)。 推薦啟用如下配置項(xiàng),更多編譯配置可參考這部分指導(dǎo)。
# 覆蓋率
CONFIG_KCOV=y
# 用于符號化的調(diào)試信息
CONFIG_DEBUG_INFO=y
# 內(nèi)存錯誤檢測器
CONFIG_KASAN=y
CONFIG_KASAN_INLINE=y
# 部分鏡像要求的特性
CONFIG_CONFIGFS_FS=y
CONFIG_SECURITYFS=y
上述步驟結(jié)束后,我們就獲得了stretch鏡像與用于登錄的ssh密鑰文件stretch.id_rsa以及待測內(nèi)核bzImage。
隨后我們可以構(gòu)建一個工作目錄,下面用環(huán)境變量WORK-DIR表示。 把準(zhǔn)備好的鏡像拷貝到工作目錄,并把可執(zhí)行文件拷貝到工作目錄下的bin目錄,最后工作目錄應(yīng)該有如下內(nèi)容:
> cd $WORK_DIR && ls
bin bzImage stretch.id_rsa stretch.img
> ls $WORK_DIR/bin
healer linux_amd64 syz-repro syz-symbolize syz-sysgen
到了這一步,我們的準(zhǔn)備工作就都完成了,我們可以使用如下命令一鍵啟動Healer,開始整個fuzz過程:
> healer -d stretch.img -s stretch.id_rsa -k bzImage
其中,-d、-s、-k分別指定了磁盤鏡像、ssh-key以及待測內(nèi)核,也可以使用默認(rèn)參數(shù)直接啟動Healer,無需提供任何命令行參數(shù)。 如果一切正常,那么如下日志會被打印:

可以看到,Healer會自動加載輸入語料、檢測內(nèi)核特性、預(yù)啟動檢錯,等待初始setup、檢測過程完成,整個fuzz過程就開始了,可以通過日志數(shù)據(jù)、存儲在輸出目錄的數(shù)據(jù)查看內(nèi)核奔潰、覆蓋數(shù)據(jù)等。
Healer進(jìn)階用法
為了支持不同的使用場景,Healer還支持更高級的使用方法,下面將進(jìn)行簡單介紹。
架構(gòu)支持:Healer支持非常多架構(gòu)的運(yùn)行和Fuzz,例如x86/x86_64、arm/arm64、mips、ppc64等架構(gòu),這一特性在編譯時(shí)會自動配置,無需任何手動的配置。
多實(shí)例fuzz:Healer支持并發(fā)多實(shí)例fuzz,通過-j參數(shù)即可指定,每個實(shí)例對應(yīng)一個工作線程,工作線程會單獨(dú)啟動Qemu、執(zhí)行整個fuzz流程,并與其它工作線程共享&同步數(shù)據(jù)。
Fuzz數(shù)據(jù)自動恢復(fù):Healer支持Fuzz數(shù)據(jù)自動恢復(fù)與維護(hù),每次Fuzz的數(shù)據(jù),例如語料輸入、崩潰數(shù)據(jù),都會被Healer用特定的方式寫出到輸出目錄,在每次重新啟動時(shí),用戶無需做任何事,Healer會自動恢復(fù)Fuzz狀態(tài),并維護(hù)歷史數(shù)據(jù),例如為崩潰數(shù)據(jù)打時(shí)間戳,也可以通過-i選項(xiàng)指定新的輸入語料,從而不斷演進(jìn)輸出目錄的語料質(zhì)量。
錯誤注入白名單Healer:在測試時(shí)可以利用內(nèi)核特性自動注入錯誤,從而檢測內(nèi)核魯棒性。但一些內(nèi)核模塊穩(wěn)定性較差,在這種模式下很容易引起重復(fù)崩潰,通過使用白名單、利用正則表達(dá)式可過濾掉對應(yīng)模塊。
黑帽WiKi_黑帽百科(m.790079.com),8年黑帽SEO優(yōu)化技術(shù),黑帽seo快速排名,黑帽SEO技術(shù)培訓(xùn)學(xué)習(xí),黑帽SEO快速排名程序、泛目錄、寄生蟲技術(shù),贈送免費(fèi)黑帽SEO視頻教程
(黑帽seo技術(shù),網(wǎng)站快速排名,蜘蛛池加速收錄,目錄程序定制)
掃一下添加微信:
