本篇內(nèi)容介紹了“Linux系統(tǒng)systemd-journald服務(wù)本地提權(quán)漏洞怎么修復(fù)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括雞東網(wǎng)站建設(shè)、雞東網(wǎng)站制作、雞東網(wǎng)頁(yè)制作以及雞東網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,雞東網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到雞東省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Qualys安全公司在systemd-journald中發(fā)現(xiàn)了3個(gè)漏洞
CVE-2018-16864、CVE-2018-16865:內(nèi)存破壞
CVE-2018-16866:信息泄露(越界讀)
Qualys安全公司表示,利用CVE-2018-16865 和 CVE-2018-16866 ,在10分鐘左右獲取了運(yùn)行在i386體系結(jié)構(gòu)上的Linux的root權(quán)限,在70分鐘左右獲取了運(yùn)行在amd64體系結(jié)構(gòu)上的Linux的root權(quán)限(該EXP未發(fā)布)。如果systemd以-fstack-clash-protection標(biāo)志編譯,則漏洞無(wú)法利用(因?yàn)榉乐沽硕褩_突,通過(guò)下面的分析。就可以知道,漏洞利用的核心就是堆棧沖突)。
systemd-journald 是一個(gè)收集并存儲(chǔ)各類日志數(shù)據(jù)的系統(tǒng)服務(wù)。 它創(chuàng)建并維護(hù)一個(gè)帶有索引的、結(jié)構(gòu)化的日志數(shù)據(jù)庫(kù), 并可以收集來(lái)自各種不同渠道的日志:
通過(guò) kmsg 收集內(nèi)核日志
通過(guò) libc 的 syslog接口收集系統(tǒng)日志
通過(guò)本地日志接口 sd_journal_print 收集結(jié)構(gòu)化的系統(tǒng)日志
捕獲服務(wù)單元的標(biāo)準(zhǔn)輸出(STDOUT)與標(biāo)準(zhǔn)錯(cuò)誤(STDERR)
通過(guò)內(nèi)核審計(jì)子系統(tǒng)收集審計(jì)記錄
函數(shù)
dispatch_message_real()(journal/journald-server.c)通過(guò)將每個(gè)字段轉(zhuǎn)換為格式為“
如果攻擊者能夠通過(guò)構(gòu)造較長(zhǎng)的字符串,來(lái)使得棧與其他內(nèi)存區(qū)域產(chǎn)生沖突,那么就有可能覆蓋其他區(qū)域的數(shù)據(jù),導(dǎo)致崩潰或代碼執(zhí)行。
在特殊的情況下,一個(gè)程序可能有一個(gè)很大的cmdline(可以通過(guò)/proc/
首先,從一個(gè)cmdline小的進(jìn)程,發(fā)送一個(gè)大的、優(yōu)先級(jí)高的消息給journald。這個(gè)消息強(qiáng)制一個(gè)大的寫 /var/log/journal/的操作(1MB與2MB之間),并強(qiáng)制創(chuàng)建一個(gè)短暫的線程調(diào)用fsync等待從內(nèi)存寫入磁盤的操作完成(重點(diǎn):該線程的棧區(qū)域是在mmap區(qū)域中分配)
接下來(lái),創(chuàng)建一些進(jìn)程(32到64個(gè))寫大文件(1MB -- 8MB)到 /var/tmp/中.這些進(jìn)程使得journald中調(diào)用fsync的線程能夠存活更久,讓我們更能容易利用該漏洞。
最后,通過(guò)一個(gè)進(jìn)程發(fā)送一個(gè)小的,低優(yōu)先級(jí)的消息到j(luò)ournald。其cmdline非常大的(128MB左右,為棧區(qū)與 mmap 區(qū)域的距離),使得調(diào)用alloca()函數(shù)時(shí),能夠覆蓋掉journald中調(diào)用fsync()線程的??臻g,從而造成代碼執(zhí)行。
journal-file.c中的journal_file_append_entry()函數(shù)通過(guò)alloca()分配一個(gè)EntryItem結(jié)構(gòu)數(shù)組,其條目數(shù)可以由本地攻擊者控制。
通過(guò)直接訪問UNIX域套接字(默認(rèn)位于/run/systemd/journal/socket),攻擊者可以向套接字發(fā)送許多條目,從而使得 alloca() 函數(shù)分配EntryItem結(jié)構(gòu)數(shù)組覆蓋其他內(nèi)存區(qū)域。進(jìn)而造成systemd-journald崩潰或權(quán)限提升。
首先跳躍到libc的讀寫段并覆蓋一個(gè)函數(shù)指針。但是這并不簡(jiǎn)單,從“for”循環(huán)(在journal_file_append_entry()中)調(diào)用的函數(shù)可能會(huì)破壞掉在目標(biāo)函數(shù)指針下方的字節(jié), 因此會(huì)覆蓋可能崩潰或死鎖的重要libc變量。因此,我們有時(shí)必須稍微改變我們的alloca()跳躍,以避免覆蓋這些重要變量。
我們想用另一個(gè)函數(shù)或ROP鏈的地址覆蓋我們的目標(biāo)函數(shù)指針,但不幸的是,在“for”循環(huán)中調(diào)用的函數(shù)的棧幀(在journal_file_append_entry()中)不包含我們控制的任何數(shù)據(jù)。但是,寫入alloca()ted“items”的64位“哈希”值是由jenkins_hashlittle2()生成的,這是一個(gè)非加密哈希函數(shù):我們可以很容易地找到一個(gè)短字符串哈希到指定值(將覆蓋我們的目標(biāo)函數(shù)指針的地址),也是valid_user_field()(或journal_field_valid())。
為了完成我們的利用,我們需要journald的棧指針,以及l(fā)ibc讀寫段中目標(biāo)函數(shù)指針的地址,因此我們需要一個(gè)信息泄露漏洞。
journald-syslog.c中的syslog_parse_identifier()函數(shù)沒有正確解析以":"結(jié)尾的日志字符串,返回超出原始字符串限制的指針。從而使得攻擊者可以利用該漏洞泄露systemd-journal進(jìn)程的內(nèi)存地址。
從journald泄漏堆棧地址或mmap地址:
首先,發(fā)送一個(gè)較大的本地消息到/run/systemd/journal/socket中;journald會(huì)調(diào)用mmap(),將我們的消息映射到內(nèi)存,然后調(diào)用malloc()分配大量的iovec結(jié)構(gòu):大多數(shù)結(jié)構(gòu)指向我們已經(jīng)mmap()的消息,但是有少數(shù)指向棧(在 dispatch_message_real()).iovec數(shù)組的內(nèi)容在調(diào)用free()由heap hole保存(在journald 中處理完我們的消息后)
接下來(lái),發(fā)送大量的syslog信息到/run/systemd/journal/dev-log;journald為了接受我們的大量消息,會(huì)調(diào)用realloc()從而獲取剛剛保存iovec數(shù)組的heap hole(其中仍然保存著mmap和棧指針)
最后,我們發(fā)送一個(gè)利用CVE-2018-16866的大型syslog消息: journald在其服務(wù)器緩沖區(qū)(在先前包含iovec數(shù)組的堆塊中)接收到大型消息,如果我們仔細(xì)選擇消息的大小,并將其結(jié)束符“:”放置在剩余的mmap或堆棧指針前面,然后我們可以泄漏這個(gè)指針(它被錯(cuò)誤地解讀為我們信息的正文)
通過(guò) CVE-2018-16866 我們可以獲得libc的地址,然后利用CVE-2018-16865我們可以改寫libc中的__free_hook函數(shù)指針為system函數(shù)的地址,從而造成任意代碼執(zhí)行。
詳細(xì)過(guò)程參考資料4
CVE-2018-16864 于 2013 年 4 月引入(systemd v203),并在 2016 年 2 月可利用(systemd v230)。
CVE-2018-16865 于 2011 年 12 月引入(systemd v38),在 2013 年 4 月可利用(systemd v201)。
CVE-2018-16866 于 2015 年 6 月引入(systemd v221),于 2018 年 8 月無(wú)意中被修復(fù)。
已知受影響的Linux 發(fā)行版有:Debian,Red Hat,Ubuntu。請(qǐng)自行查看自己系統(tǒng)中的systemd版本是否受影響。
“Linux系統(tǒng)systemd-journald服務(wù)本地提權(quán)漏洞怎么修復(fù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!