首先非常感謝在這裡能為你解答這個問題,讓我帶領你們一起走進這個問題,現在讓我們一起探討一下。
日前由安華金和攻防實驗室發現並提交的中國產資料庫漏洞,獲國家資訊保安漏洞平臺CNVD確認,編號CNVD-2017-17486。
CNVD-2017-17486
漏洞型別:緩衝區溢位漏洞
威脅程度:中危
漏洞描述:允許攻擊者利用漏洞,透過程式建立表空間檔案時,指定路徑名過長導致資料庫崩潰。
漏洞危害:一旦被利用,將可能導致資料庫宕機,或被攻擊者取得資料庫作業系統的使用者許可權,從而對系統所在的網路發起攻擊。
CNVD-2017-17486是一個標準的堆疊溢位漏洞,屬於緩衝區溢位漏洞的重要分支,此類漏洞比較常見,影響範圍和危害也會比較廣泛,如果出現在資料庫等基礎應用中,導致資料庫服務中斷,將引發整個業務的癱瘓。
由於此類漏洞的出現範圍較廣,我們除了及時發現漏洞,更應該透過分析漏洞形成原理、作用機制及可能引發的風險,找到可行的防範手段。
緩衝區溢位有多大危害
緩衝區溢位漏洞是一種古老、危害範圍大、常見於c程式碼中的軟體漏洞,在各種作業系統、應用軟體中廣泛存在,資料庫系統中同樣常見。利用緩衝區溢位攻擊,可以導致程式執行失敗、系統宕機、重新啟動等後果。更為嚴重的是,攻擊者可以利用它執行非授權指令,甚至取得系統特權,進而實行攻擊行為。
緩衝區溢位漏洞最早在20世紀80年代初被發現,第一次重大事件是1988年爆發的Morris蠕蟲。該蠕蟲病毒利用fingerd的緩衝區溢位漏洞進行攻擊,最終導致6000多臺機器被感染,造成直接經濟損失100萬美金。隨後,衍生而出的Ramen 蠕蟲、sircam蠕蟲、sql slammer蠕蟲等品種逐漸出現,每一類蠕蟲都對整個網際網路造成了嚴重的安全影響,造成高額的經濟損失。
堆疊溢位是如何形成的?
簡單來說,堆疊溢位就是把大緩衝區中的資料向小緩衝區中複製,由於沒有關注小緩衝區的邊界,“撐爆”了較小的緩衝區,從而沖掉了小緩衝區和鄰內區域的其他資料而引起的記憶體問題。在具體描述堆疊溢位之前我們先來了解一下Linux程式在記憶體中的結構:
其中共享區也稱為data區,用來儲存可執行程式碼;.text和.bss均用來儲存程式的全域性變數和初始化變數;堆則不隨函式消亡而消亡,而是直到程式消亡或手動釋放才會消亡;堆疊是隨著函式分配並消亡的,堆疊溢位就是出現在堆疊區中的緩衝區安全問題。
堆疊是一個後進先出(LIFO)資料結構,往低地址增長,它儲存本地變數、函式呼叫等資訊。隨著函式呼叫層數的增加,棧幀會向低地址方向延伸;隨著程序中函式呼叫層數的減少,即各函式的返回,棧幀會一塊一塊地被遺棄而向記憶體的高地址方向回縮。各函式的棧幀大小隨著函式的性質不同而不等。
堆疊這種資料結構,常見操作有壓棧(PUSH)、彈棧(POP);用於標識棧的屬性有:棧頂(TOP)、棧底(BASE)。其中:
PUSH:為棧增加一個元素的操作叫做PUSH,相當於插入一塊;
POP:從棧中取出一個元素的操作叫做POP;
TOP:TOP標識棧頂的位置,且是動態變化的,每做一次PUSH操作,它會自+1;每做一次POP操作,它會自-1;
BASE:BASE標識棧底位置,用於防止棧空後繼續彈棧,一般來說BASE位置不發生改變。
下面以mian函式疊加A和B函式為例說明整個壓棧和彈棧過程:
Main函式呼叫A函式,把A函式中的變數新增到堆疊區內,開闢大小和變數指定大小相關。同樣B函式在被呼叫後也會把變數新增到堆疊區內,開闢指定大小空間給B區域變數使用。
l 如果其中任意一個變數存入的值超過設計的界定,就會導致值覆蓋其他變數的區域最終汙染到函式返回地址區域。一旦函式的返回地址被汙染,在進行彈棧的過程中會最終把跳轉的地址指向駭客所指定的區域,或根本不存在的區域。
l 如果覆蓋函式返回地址的是一組隨機值,則程式會跳轉到未知位置,這種情況往往最終會導致整個程式崩潰。
l 如果駭客構造足夠精細的shellcode,把跳轉地址指向駭客自己注入的程式碼,則很可能會利用該漏洞獲得當前使用者的控制權限。
幾個可行的防護建議
堆疊溢位漏洞是c 程式碼的一種常見安全漏洞。防護的方法可以從多個角度來加強。
1) 使用自動化工具進行掃描檢測,排查是否存在緩衝區溢位漏洞;但需要注意的是需要使用面向不同系統的掃描工具,沒有一個檢查工具可以支援所有基礎應用的掃描。
2) 加強相關程式設計師的程式碼能力,做好相應的長度限制工作,從程式碼級別進行防範。
3)避免使用原C庫中那些可能存在緩衝區溢位隱患的函式,使用增強後的函式,這樣此漏洞出現的機率會相對低一些。
首先非常感謝在這裡能為你解答這個問題,讓我帶領你們一起走進這個問題,現在讓我們一起探討一下。
日前由安華金和攻防實驗室發現並提交的中國產資料庫漏洞,獲國家資訊保安漏洞平臺CNVD確認,編號CNVD-2017-17486。
CNVD-2017-17486
漏洞型別:緩衝區溢位漏洞
威脅程度:中危
漏洞描述:允許攻擊者利用漏洞,透過程式建立表空間檔案時,指定路徑名過長導致資料庫崩潰。
漏洞危害:一旦被利用,將可能導致資料庫宕機,或被攻擊者取得資料庫作業系統的使用者許可權,從而對系統所在的網路發起攻擊。
CNVD-2017-17486是一個標準的堆疊溢位漏洞,屬於緩衝區溢位漏洞的重要分支,此類漏洞比較常見,影響範圍和危害也會比較廣泛,如果出現在資料庫等基礎應用中,導致資料庫服務中斷,將引發整個業務的癱瘓。
由於此類漏洞的出現範圍較廣,我們除了及時發現漏洞,更應該透過分析漏洞形成原理、作用機制及可能引發的風險,找到可行的防範手段。
緩衝區溢位有多大危害
緩衝區溢位漏洞是一種古老、危害範圍大、常見於c程式碼中的軟體漏洞,在各種作業系統、應用軟體中廣泛存在,資料庫系統中同樣常見。利用緩衝區溢位攻擊,可以導致程式執行失敗、系統宕機、重新啟動等後果。更為嚴重的是,攻擊者可以利用它執行非授權指令,甚至取得系統特權,進而實行攻擊行為。
緩衝區溢位漏洞最早在20世紀80年代初被發現,第一次重大事件是1988年爆發的Morris蠕蟲。該蠕蟲病毒利用fingerd的緩衝區溢位漏洞進行攻擊,最終導致6000多臺機器被感染,造成直接經濟損失100萬美金。隨後,衍生而出的Ramen 蠕蟲、sircam蠕蟲、sql slammer蠕蟲等品種逐漸出現,每一類蠕蟲都對整個網際網路造成了嚴重的安全影響,造成高額的經濟損失。
堆疊溢位是如何形成的?
簡單來說,堆疊溢位就是把大緩衝區中的資料向小緩衝區中複製,由於沒有關注小緩衝區的邊界,“撐爆”了較小的緩衝區,從而沖掉了小緩衝區和鄰內區域的其他資料而引起的記憶體問題。在具體描述堆疊溢位之前我們先來了解一下Linux程式在記憶體中的結構:
其中共享區也稱為data區,用來儲存可執行程式碼;.text和.bss均用來儲存程式的全域性變數和初始化變數;堆則不隨函式消亡而消亡,而是直到程式消亡或手動釋放才會消亡;堆疊是隨著函式分配並消亡的,堆疊溢位就是出現在堆疊區中的緩衝區安全問題。
堆疊是一個後進先出(LIFO)資料結構,往低地址增長,它儲存本地變數、函式呼叫等資訊。隨著函式呼叫層數的增加,棧幀會向低地址方向延伸;隨著程序中函式呼叫層數的減少,即各函式的返回,棧幀會一塊一塊地被遺棄而向記憶體的高地址方向回縮。各函式的棧幀大小隨著函式的性質不同而不等。
堆疊這種資料結構,常見操作有壓棧(PUSH)、彈棧(POP);用於標識棧的屬性有:棧頂(TOP)、棧底(BASE)。其中:
PUSH:為棧增加一個元素的操作叫做PUSH,相當於插入一塊;
POP:從棧中取出一個元素的操作叫做POP;
TOP:TOP標識棧頂的位置,且是動態變化的,每做一次PUSH操作,它會自+1;每做一次POP操作,它會自-1;
BASE:BASE標識棧底位置,用於防止棧空後繼續彈棧,一般來說BASE位置不發生改變。
下面以mian函式疊加A和B函式為例說明整個壓棧和彈棧過程:
Main函式呼叫A函式,把A函式中的變數新增到堆疊區內,開闢大小和變數指定大小相關。同樣B函式在被呼叫後也會把變數新增到堆疊區內,開闢指定大小空間給B區域變數使用。
l 如果其中任意一個變數存入的值超過設計的界定,就會導致值覆蓋其他變數的區域最終汙染到函式返回地址區域。一旦函式的返回地址被汙染,在進行彈棧的過程中會最終把跳轉的地址指向駭客所指定的區域,或根本不存在的區域。
l 如果覆蓋函式返回地址的是一組隨機值,則程式會跳轉到未知位置,這種情況往往最終會導致整個程式崩潰。
l 如果駭客構造足夠精細的shellcode,把跳轉地址指向駭客自己注入的程式碼,則很可能會利用該漏洞獲得當前使用者的控制權限。
幾個可行的防護建議
堆疊溢位漏洞是c 程式碼的一種常見安全漏洞。防護的方法可以從多個角度來加強。
1) 使用自動化工具進行掃描檢測,排查是否存在緩衝區溢位漏洞;但需要注意的是需要使用面向不同系統的掃描工具,沒有一個檢查工具可以支援所有基礎應用的掃描。
2) 加強相關程式設計師的程式碼能力,做好相應的長度限制工作,從程式碼級別進行防範。
3)避免使用原C庫中那些可能存在緩衝區溢位隱患的函式,使用增強後的函式,這樣此漏洞出現的機率會相對低一些。