緩沖區(qū)溢出攻擊利用了目標程序的緩沖區(qū)溢出漏洞,通過操作目標程序堆棧并暴力改寫其返回地址,從而獲得目標控制權(quán)。它的原理是:向一個有限空間的緩沖區(qū)中拷貝過長的字符串,這帶來兩種后果,一是過長的字符串覆蓋了相臨的存儲單元而造成程序癱瘓,甚至造成宕機、系統(tǒng)或進程重啟等;二是可讓攻擊者運行惡意代碼,執(zhí)行任意指令,甚至獲得超級權(quán)限等。
事實上,在網(wǎng)絡(luò)空間中利用這種緩沖區(qū)溢出漏洞而發(fā)起的攻擊屢見不鮮。早在1988年,美國康奈爾大學的計算機科學系研究生,23歲的莫里斯利用Unix fingered程序不限制輸入長度的漏洞,輸入512個字符后使緩沖器溢出。莫里斯又寫了一段特別大的程序使他的惡意程序能以root(根)身份執(zhí)行,并感染到其他機器上。年初名燥一時的“SQL Slammer”蠕蟲王的發(fā)作原理,就是利用未及時更新補丁的MS SQL Server數(shù)據(jù)庫緩沖區(qū)溢出漏洞,采用不正確的方式將數(shù)據(jù)發(fā)到MS SQL Server的監(jiān)聽端口,這個錯誤可以引起緩沖溢出攻擊。攻擊代碼通過緩沖溢出獲得非法權(quán)限后,被攻擊主機上的Sqlserver.exe進程會嘗試向隨機的IP地址不斷發(fā)送攻擊代碼,感染其他機器,最終形成UDP Flood,造成網(wǎng)絡(luò)堵塞甚至癱瘓。
由上可知,緩沖區(qū)溢出攻擊通常是在一個字符串里綜合了代碼植入和激活紀錄。如攻擊者將目標定為具有溢出漏洞的自動變量,然后向程序傳遞超長的字符串,進而引發(fā)緩沖區(qū)溢出。經(jīng)過精巧設(shè)計的攻擊代碼以一定的權(quán)限運行漏洞程序,獲得目標主機的控制權(quán)。這種攻擊手段屢次得逞主要是利用了程序中邊境條件、函數(shù)指針等設(shè)計不當問題,即利用了C程序本身的不安全性。大多數(shù)Windows、Linux、Unix系列的開發(fā)都依賴于C語言,所以緩沖區(qū)溢出攻擊成為操作系統(tǒng)、數(shù)據(jù)庫等應(yīng)用程序最普遍的漏洞之一。
值得關(guān)注的是,防火墻對這種攻擊方式無能為力,因為攻擊者傳輸?shù)臄?shù)據(jù)分組并無異常特征,沒有任何欺騙(這就是Nimda、SQL Slammer可以順利穿透防火墻的原因)。另外可以用來實施緩沖區(qū)溢出攻擊的字符串非常多樣化,無法與正常數(shù)據(jù)有效進行區(qū)分。緩沖區(qū)溢出攻擊不是一種竊密和欺騙的手段,而是從計算機系統(tǒng)的最底層發(fā)起攻擊,因此在它的攻擊下系統(tǒng)的身份驗證和訪問權(quán)限等安全策略形同虛設(shè)。
用戶及開發(fā)者該如何降低因緩沖區(qū)溢出而造成的攻擊損失呢?首先,編程人員可以使用具有類型安全的語言 Java以避免C的缺陷;產(chǎn)品發(fā)布前仔細檢查程序溢出情況;使用檢查堆棧溢出的編譯器等。作為普通用戶或系統(tǒng)管理員,應(yīng)及時為自己的操作系統(tǒng)和應(yīng)用程序更新補丁;減少不必要的開放服務(wù)端口等,合理配置您的系統(tǒng)。更重要的是,還應(yīng)注重P2DR模型的作用,即增加Policy(安全策略)、Protection(防護)、Detection(檢測)和Response(響應(yīng))的能力,如提高系統(tǒng)的防護時間Pt,降低檢測時間Dt和響應(yīng)時間Rt,完善應(yīng)急響應(yīng)機制和安全風險管理等,才能為自己的網(wǎng)絡(luò)系統(tǒng)構(gòu)建動態(tài)積極的安全防御體系。
事實上,在網(wǎng)絡(luò)空間中利用這種緩沖區(qū)溢出漏洞而發(fā)起的攻擊屢見不鮮。早在1988年,美國康奈爾大學的計算機科學系研究生,23歲的莫里斯利用Unix fingered程序不限制輸入長度的漏洞,輸入512個字符后使緩沖器溢出。莫里斯又寫了一段特別大的程序使他的惡意程序能以root(根)身份執(zhí)行,并感染到其他機器上。年初名燥一時的“SQL Slammer”蠕蟲王的發(fā)作原理,就是利用未及時更新補丁的MS SQL Server數(shù)據(jù)庫緩沖區(qū)溢出漏洞,采用不正確的方式將數(shù)據(jù)發(fā)到MS SQL Server的監(jiān)聽端口,這個錯誤可以引起緩沖溢出攻擊。攻擊代碼通過緩沖溢出獲得非法權(quán)限后,被攻擊主機上的Sqlserver.exe進程會嘗試向隨機的IP地址不斷發(fā)送攻擊代碼,感染其他機器,最終形成UDP Flood,造成網(wǎng)絡(luò)堵塞甚至癱瘓。
由上可知,緩沖區(qū)溢出攻擊通常是在一個字符串里綜合了代碼植入和激活紀錄。如攻擊者將目標定為具有溢出漏洞的自動變量,然后向程序傳遞超長的字符串,進而引發(fā)緩沖區(qū)溢出。經(jīng)過精巧設(shè)計的攻擊代碼以一定的權(quán)限運行漏洞程序,獲得目標主機的控制權(quán)。這種攻擊手段屢次得逞主要是利用了程序中邊境條件、函數(shù)指針等設(shè)計不當問題,即利用了C程序本身的不安全性。大多數(shù)Windows、Linux、Unix系列的開發(fā)都依賴于C語言,所以緩沖區(qū)溢出攻擊成為操作系統(tǒng)、數(shù)據(jù)庫等應(yīng)用程序最普遍的漏洞之一。
值得關(guān)注的是,防火墻對這種攻擊方式無能為力,因為攻擊者傳輸?shù)臄?shù)據(jù)分組并無異常特征,沒有任何欺騙(這就是Nimda、SQL Slammer可以順利穿透防火墻的原因)。另外可以用來實施緩沖區(qū)溢出攻擊的字符串非常多樣化,無法與正常數(shù)據(jù)有效進行區(qū)分。緩沖區(qū)溢出攻擊不是一種竊密和欺騙的手段,而是從計算機系統(tǒng)的最底層發(fā)起攻擊,因此在它的攻擊下系統(tǒng)的身份驗證和訪問權(quán)限等安全策略形同虛設(shè)。
用戶及開發(fā)者該如何降低因緩沖區(qū)溢出而造成的攻擊損失呢?首先,編程人員可以使用具有類型安全的語言 Java以避免C的缺陷;產(chǎn)品發(fā)布前仔細檢查程序溢出情況;使用檢查堆棧溢出的編譯器等。作為普通用戶或系統(tǒng)管理員,應(yīng)及時為自己的操作系統(tǒng)和應(yīng)用程序更新補丁;減少不必要的開放服務(wù)端口等,合理配置您的系統(tǒng)。更重要的是,還應(yīng)注重P2DR模型的作用,即增加Policy(安全策略)、Protection(防護)、Detection(檢測)和Response(響應(yīng))的能力,如提高系統(tǒng)的防護時間Pt,降低檢測時間Dt和響應(yīng)時間Rt,完善應(yīng)急響應(yīng)機制和安全風險管理等,才能為自己的網(wǎng)絡(luò)系統(tǒng)構(gòu)建動態(tài)積極的安全防御體系。