久久天天躁狠狠躁夜夜av,国产脚交足免费视频,亚洲小说乱欧美另类,五月天国产亚洲av麻豆

918搏天堂

?
產(chǎn)品咨詢:4000 258 365 | 申請產(chǎn)品演示 | 渠道合作 | English
內(nèi)容中心
按關(guān)鍵字查找
Informix和DB2符號鏈接攻擊解析
作者:思成 發(fā)布時間:2018-12-27

前言

IBM下有兩款大型關(guān)系型數(shù)據(jù)庫,分別是Informix和DB2。早在2001年和2003年兩款數(shù)據(jù)庫就被爆出存在符號鏈攻擊提權(quán)的問題。尤其2003年Snosoft一口氣發(fā)布了DB2數(shù)個關(guān)鍵工具存在符號鏈接攻擊提權(quán)的問題。

符號鏈攻擊雖然是一種本地攻擊,但符號鏈攻擊會造成非常嚴重的安全問題。例如:替換SSH公鑰文件、操作系統(tǒng)敏感信息泄露甚至直接奪取操作系統(tǒng)root權(quán)限。

經(jīng)過十余年的發(fā)展IBM本應(yīng)該消滅了符號鏈攻擊問題。但根據(jù)我們918搏天堂攻防實驗室研究,發(fā)現(xiàn)各種“姿勢”的IBM數(shù)據(jù)庫符號鏈接漏洞。我們發(fā)現(xiàn)的典型漏洞分別是CVE-2017-1508、CVE-2018-1799、CVE-2018-1780、CVE-2018-1781和CVE-2018-1784

1、符號鏈接簡介

符號鏈接最早出現(xiàn)在4.2的BSD版本中,發(fā)展至今日,基本所有的主流操作系統(tǒng)都在某種程度上支持符號鏈接。符號鏈接(也稱為軟鏈接)是用來讓用戶創(chuàng)建指向另一個文件或目錄的文件或目錄。例如管理員可以創(chuàng)建一個名為test的符號鏈指向系統(tǒng)文件/etc/hosts文件。管理員訪問test,等于訪問/etc/hosts文件。

符號鏈接文件實際上是一種文件系統(tǒng)中的特殊小文件。他們的inode(簡單可以認為是linux系統(tǒng)中文件的唯一編號)被標為符號鏈接類型。他們的實際文件內(nèi)容其實是文件路徑。當內(nèi)核解析路徑名時,如果遇到符號鏈接文件,他會讀取符號鏈接中的文件路徑,跟隨一層一層的符號鏈接文件路徑,最終到達文件。從而獲得到目標文件的路徑。

整個符號鏈接流程如下圖所示:第一步訪問符號鏈接test.txt。第二步從符號鏈接中讀取到文件的路徑。第三步基于第二步拿到的路徑訪問下一個軟鏈接或文件。第四步經(jīng)過層層抽絲剝繭最終獲得真實路徑。第五步在獲得真實路徑后根據(jù)真實路徑跳轉(zhuǎn)到上級目錄。第六步再從上層目錄跳入下層目錄訪問到要訪問的真實文件。

 01.jpg

2、符號鏈接攻擊

符號鏈接攻擊的本質(zhì)就是欺騙程序訪問不應(yīng)該訪問的文件。最常見的是用來獲取敏感信息。有時候經(jīng)過精妙的設(shè)計可以突破權(quán)限的限制,最終達到覆蓋文件或奪取更高權(quán)限的效果。

假設(shè)有如下一段代碼,此代碼是用來在主目錄中查看該用戶是否有.optconfig文件。如果文件存在,程序?qū)⒋蜷_該文件并讀入配置條目。大多數(shù)程序員會認為只要parse_opt_file()的文件解析功能是安全的,這種行為就是安全可靠的

02.jpg

但如果攻擊者在. Optconfig上做一些手腳。使用命令建立到/etc/shadow(存操作系統(tǒng)密碼的文件) 的軟鏈接(ln -s /etc/shadow ~/.optconfig)。此時攻擊者在使用上述程序。程序會去解析. Optconfig文件。由于. Optconfig是一個符號鏈接,所以最終文件解析的是存有密碼hash值的/etc/shadow文件。攻擊者很容易通過這種手段拿到密碼的hash值。威脅整個操作系統(tǒng)的安全。

3、提權(quán)C位-粘滯位

一次完美的符號鏈接攻擊,除了必須有符號鏈接外,更重要的是要有提權(quán)的渠道。利用程序的粘滯位,是常見的提權(quán)方法。粘滯位加符號鏈接有機會造成一次本地提權(quán)攻擊。

要解釋清楚懂粘滯位。首先簡單介紹幾個linux權(quán)限。SUID 是 Set User ID,作用是讓程序執(zhí)行者具有該程序所有者的權(quán)限;如果沒有設(shè)置,程序執(zhí)行者具有執(zhí)行用戶的權(quán)限。SUID 位可以通過 chmod u+s 設(shè)置。

舉個例子,在Linux中,所有賬號的密碼記錄在 /etc/shadow文件中,并且只有root可以讀寫這個文件。那么,一個普通用戶通過命令 passwd 修改自己密碼的過程中肯定就需要寫 /etc/shadow這個文件,之所以能這么做是因為 /usr/bin/passwd 設(shè)置了SUID位:

-rwsr-xr-x. 1 root root 30768 Feb 22  2012 /usr/bin/passwd

Linux 內(nèi)核主要是根據(jù) EUID(effective user id) 和 EGID(effective group id) 來確定進程對資源的訪問權(quán)限。 如果進程對應(yīng)的程序沒有設(shè)置 SUID 或 SGID 位,則 euid=uid egid=gid,分別是執(zhí)行這個程序的用戶的 uid 和 gid;反之,則 euid 和 egid 變?yōu)槌绦蛩姓叩?uid和 gid。

因此如果能攔截有粘滯位的程序在降低權(quán)限之前,實施越權(quán)訪問或操作,就很有可能最終獲得root權(quán)限或以root身份進行越權(quán)操作。

4、經(jīng)典案例剖析(CVE-2017-1508)

理解了粘滯位和符號鏈接攻擊的原理后,咱們剖析一個informix的符號鏈接漏洞,來深入理解下這類漏洞的利用“姿勢”。CVE-2017-1508是一個標準的,通過低權(quán)限用戶越權(quán)非法寫文件,最終奪取操作系統(tǒng)root權(quán)限例子。

Informix中使用oninit程序可以啟動數(shù)據(jù)庫。Oninit啟動數(shù)據(jù)庫的時候會打開一個固定名稱為/tmp/jvp.log的文件。如果在這個被我們用符號鏈替換,就可能造成一次符號鏈接攻擊。更關(guān)鍵的是這個程序有粘滯位(下圖中權(quán)限S)。粘滯位是為了幫助程序在啟動時可以使用root權(quán)限完成一些操作。

 03.jpg

除了上述兩點外最重要的是oninit在訪問/tmp/jvp.log時。并未進行降權(quán)處理。于是基于粘滯位、符號鏈接攻擊和未及時降權(quán)。我們可以對oninit實施符號鏈接攻擊。

根據(jù)逆向結(jié)果,可以看到訪問/tmp/jvp.log需要開啟環(huán)境變量GLSLOG = “on”。同時在打開fopen的時候未做符號鏈接文件的判斷。通過符號鏈接攻擊我們可以以root權(quán)限讀取或?qū)懭肴我馕募?/p>

 04.jpg

5、符號鏈接攻擊提權(quán)

至此符號鏈接攻擊主要還停留在創(chuàng)建、讀取和替換文件內(nèi)容階段。雖然符號鏈接可以通過讀取/etc/shadow獲得hash值。再嘗試通過字典來破解root密碼,但這種方法極不穩(wěn)定又麻煩。這里我給大家演示一種穩(wěn)定提權(quán)到root的方法。

Linux 系統(tǒng)有一個特點,為了方便的給基礎(chǔ)庫或函快速修改的機會。所以在加載器上開了一個后門。加載器除了加載一個程序的動態(tài)庫外還會額外加載系統(tǒng)文件/etc/ld.so.preload 中的動態(tài)庫。而如果在額外加載動態(tài)庫中寫入和系統(tǒng)函數(shù)同名的函數(shù)。又會因為ld.so.preload比其他庫早加載,最終導致ld.so.preload中庫的同名函數(shù)函數(shù)覆蓋真正系統(tǒng)上的同名函數(shù)。

05.jpg

由于可以覆蓋同名庫函數(shù),所以我們就可以實現(xiàn)自己想要實現(xiàn)的任意功能。有粘滯位的程序基本都會使用geteuid獲取當前euid值。我們只要替換掉系統(tǒng)的geteuid。就可以在系統(tǒng)中實現(xiàn)自己想要執(zhí)行的任意代碼。

如下例利用geteuid實現(xiàn)一個永久的bash_shell

06.jpg

6、符號鏈接攻擊的防護手段

從符號鏈接漏洞到最終獲得root shell。經(jīng)歷了兩個關(guān)鍵點:1.存在粘滯位。2.訪問文件前,未檢查是否是符號鏈接。

第一點:粘滯位的問題主要看是否存在必要性如果無必要性就不要使用。SUID尤其是 SUID Root 程序是存在很大風險的。如果程序確實需要設(shè)置 SUID 位,代碼中不再需要高權(quán)限時盡快通過調(diào)用 setuid() 降低權(quán)限,也就是使 euid=uid egid=gid。盡量縮短,危險代碼的時間。

第二點:在需要寫文件時,應(yīng)該先判斷要寫的文件是否是已經(jīng)存在的符號鏈接或硬鏈接文件。如果使用open() 函數(shù),oflag 設(shè)置成O_NOFOLLOW。可以保證如果是符號鏈接文件,函數(shù)就會返回失敗。防止被符號鏈接攻擊。如果使用fopen()函數(shù)就必須在使用之前利用lstat() 判斷文件的類型。防止被符號鏈接攻擊。

做到上述兩點檢查,可以完全避免符號鏈接的攻擊。至少也能把符號鏈接攻擊限定在一個非常有限的范圍內(nèi)。


?
918搏天堂 ©2021 版權(quán)所有 京ICP備10053980號-1