- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- Linux中create_elf_tables函數如何使用
Linux中create_elf_tables函數如何使用,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細講解,有這方面需求的人可以來(lái)學(xué)習下,希望你能有所收獲。
在近期的一次安全分析過(guò)程中,我們在64位Linux系統內核里的create_elf_tables()函數中發(fā)現了一個(gè)整型溢出漏洞,本地攻擊者將可以通過(guò)一份SUID-root代碼來(lái)利用這個(gè)漏洞,并獲取到目標設備的完整root權限。
目前,受該漏洞影響的Linux發(fā)行版有Red Hat Linux企業(yè)版、CentOS和Debian 8。
150#define STACK_ROUND(sp, items) \ 151 (((unsigned long) (sp - items)) &~15UL) ... 165 create_elf_tables(struct linux_binprm*bprm, struct elfhdr *exec, ... 169 int argc = bprm->argc; 170 int envc = bprm->envc; 171 elf_addr_t __user *sp; ... 178 int items; ... 190 p = arch_align_stack(p); ... 287 items = (argc + 1) + (envc + 1) + 1; 288 bprm->p = STACK_ROUND(sp, items); ... 295 sp = (elf_addr_t __user *)bprm->p;
“argc”表示傳遞給execve()系統調用的命令行參數個(gè)數,個(gè)數受fs/exec.c中MAX_ARG_STRINGS的限制;“envc”表示傳遞給execve()的環(huán)境變量個(gè)數,個(gè)數同樣受到MAX_ARG_STRINGS的限制;但是由于MAX_ARG_STRINGS為0x7FFFFFFF,所以我們可以讓整數“items”發(fā)生溢出并讓程序失效。
此時(shí),我們就可以以增加用戶(hù)態(tài)的棧指針,然后將用戶(hù)態(tài)棧指針指向我們的參數和環(huán)境變量字符串,最終在用戶(hù)模式執行SUID-root代碼時(shí)重寫(xiě)這些字符串。
在使用execve()運行SUID-root代碼時(shí),我們的“items”值為0x80000000,參數指針的大小約為0x80000000 * sizeof(char *) = 16GB,參數字符串為16GB,環(huán)境字符串也為16GB,因此我們的漏洞利用環(huán)境“只”需要2 * 16GB = 32GB內存,而并非3 * 16GB = 48GB或者更多,因為我們使用了一些小技巧來(lái)減少內存指紋。
下面這個(gè)圖表代表了SUID-root代碼開(kāi)始執行后,我們的用戶(hù)態(tài)棧結構:
-“A”(“alpha”)為create_elf_tables()分配的??臻g大?。ùa190-287行),大約為512字節。
-“sprand”是create_elf_tables()分配的隨機??臻g大?。ùa190行),大小范圍在0-8192字節之間。
-“protect”參數字符串是一個(gè)非常重要的命令行參數&選項,這個(gè)參數必須不能受到內存崩潰的影響。
-“padding”參數字符串大約需要占用16GB??臻g。
-“protect”環(huán)境字符串是一個(gè)重要的環(huán)境變量,必須必須不能受到內存崩潰的影響。
-“scratch”環(huán)境字符串為1MB。
-“onebyte”環(huán)境字符串為256KB,其部分數據會(huì )被fname[]緩沖區覆蓋。
-“B”(“beta”)為ld.so分配的??臻g數量。
此時(shí),ld.so會(huì )使用handle_ld_preload()中fname[]緩沖區的數據重寫(xiě)“onebyte”環(huán)境變量中的部分數據,并讓process_envvars()中的UNSECURE_ECVVARS等過(guò)濾器失效。
我們的POC代碼能夠利用create_elf_tables()中的這個(gè)整型溢出漏洞,演示樣例如下:
# gcc-O0 -o poc-suidbin poc-suidbin.c#chown root poc-suidbin#chmod 4555 poc-suidbin $ gcc-o poc-exploit poc-exploit.c$time ./poc-exploit...ERROR:ld.so: object 'LD_LIBRARY_PATH=.0LD_LIBRARY_PATH=.0LD_LIBRARY_PATH=.' fromLD_PRELOAD cannot be preloaded:ignored.ERROR:ld.so: object 'LD_LIBRARY_PATH=.0LD_LIBRARY_PATH=.' from LD_PRELOAD cannot bepreloaded: ignored.ERROR:ld.so: object 'LD_LIBRARY_PATH=.' from LD_PRELOAD cannot be preloaded: ignored.argc2147090419stack0x7ffbe115008f < 0x7ffbe1150188 < 0x7fffe0e50128 < 0x7ff7e11503ea <0x7ffbe102cdeagetenv0x7ffbe114d83b .0x7ffbe114d82bLD_LIBRARY_PATH=.0x7ffbe114df60LD_LIBRARY_PATH=.0x7ffbe114df72LD_LIBRARY_PATH=....0x7ffbe114e69eLD_LIBRARY_PATH=.0x7ffbe114e6b0LD_LIBRARY_PATH=.0x7ffbe114e6c2LD_LIBRARY_PATH=. real 5m38.666suser 0m0.049ssys 1m57.828s
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站