防止SQL注入攻擊:網(wǎng)絡(luò)管理員的前景展望
針對(duì)Web應(yīng)用的攻擊——SQL注入為人所熟知,安全專(zhuān)家對(duì)被越來(lái)越多的黑客所利用的這一方式長(zhǎng)期以來(lái)都非常警惕。SQL注入是一種人為向Web表單的輸入框中加入惡意的結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)代碼以試圖獲取資源的訪問(wèn)權(quán)限或是改變數(shù)據(jù)的安全攻擊。
它需要的唯一條件是網(wǎng)絡(luò)端口80處于開(kāi)放狀態(tài)。即使有設(shè)置妥當(dāng)?shù)姆阑饓?,這一端口也是少數(shù)的幾個(gè)允許流量的通道之一。最近發(fā)生的SQL注入案例是Heartland Payment Systems公司的服務(wù)器攻擊事件,它讓網(wǎng)絡(luò)管理人員意識(shí)到SQL注入威脅的嚴(yán)重程度并且開(kāi)始重新審視他們對(duì)這一攻擊的防范措施。
防御SQL注入攻擊的主要方法是使用參數(shù)化的存儲(chǔ)程序。當(dāng)這些程序被使用時(shí),將以參數(shù)和用戶(hù)定義的子程序的形式對(duì)數(shù)據(jù)庫(kù)發(fā)出請(qǐng)求,這就代替了需要用戶(hù)直接提供數(shù)值的命令方式。SQL參數(shù)的優(yōu)勢(shì)不光體現(xiàn)在輸入的安全性上,而且他們還能夠很大程度地減少SQL注入攻擊發(fā)生的成功幾率。
數(shù)據(jù)庫(kù)的開(kāi)發(fā)不在網(wǎng)絡(luò)管理員的職責(zé)范圍之內(nèi),但是你應(yīng)當(dāng)堅(jiān)信只有保障了網(wǎng)絡(luò)上的數(shù)據(jù)安全才能保證遵循了最佳實(shí)踐。
雖然使用存儲(chǔ)程序是必須的,但光這樣做還是不夠的。為了防御潛在的攻擊者,深度防御戰(zhàn)略是必不可少的。否則開(kāi)發(fā)者將會(huì)被要求提供前線(xiàn)安全(front-line security),而從以往經(jīng)驗(yàn)看來(lái)這對(duì)許多的組織來(lái)說(shuō)都是種挑戰(zhàn)。數(shù)據(jù)庫(kù)管理員和應(yīng)用程序開(kāi)發(fā)者應(yīng)當(dāng)遵從最佳實(shí)踐是毫無(wú)疑問(wèn)的,但還是讓我們來(lái)看看你作為一個(gè)網(wǎng)絡(luò)管理員,為數(shù)據(jù)庫(kù)資源提供附加保護(hù)所能做的事情。
應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器很顯然需要加固,并需要定期打補(bǔ)丁,但是由于SQL注入攻擊的對(duì)象是具體的Web應(yīng)用程序——ASP, JSP, PHP等,而不是Web服務(wù)器和SQL注入攻擊運(yùn)行的操作系統(tǒng),因而SQL注入攻擊不能因系統(tǒng)的補(bǔ)丁升級(jí)而得到解決。
靜態(tài)的和網(wǎng)絡(luò)中傳送的敏感信息都需要加密,但作出最大貢獻(xiàn)的可能要數(shù)附加的Web應(yīng)用防火墻或作為附加防御的一些應(yīng)用層防火墻的變種。
Web應(yīng)用防火墻的防護(hù)范圍超越了傳統(tǒng)網(wǎng)絡(luò)防火墻和入侵檢測(cè)/入侵防御系統(tǒng)。許多Web應(yīng)用防火墻,比如由Imperva公司和Barracuda Networks公司開(kāi)發(fā)的產(chǎn)品,能夠幫助防御SQL注入攻擊、跨站腳本攻擊和其他的一些針對(duì)應(yīng)用程序邏輯漏洞或軟件技術(shù)漏洞的攻擊。最新的Web應(yīng)用防火墻能夠識(shí)別由攻擊者使用SQL注入開(kāi)發(fā)的逃逸技術(shù)(evasion techniques)。例如,有一種是通過(guò)對(duì)注入的命令進(jìn)行部分編碼來(lái)達(dá)到攪亂攻擊的目的的。
你所選擇的應(yīng)用層防火墻應(yīng)當(dāng)同時(shí)允許創(chuàng)建過(guò)濾器來(lái)進(jìn)行攔截、分析或者修改僅限于流向該網(wǎng)絡(luò)的流量。大量的請(qǐng)求通常不需要分析,過(guò)濾器通常不應(yīng)當(dāng)去除在SQL注入攻擊中經(jīng)常使用的字符串,例如——and @@version。所有的這些請(qǐng)求都能夠記錄到日志并且其原IP地址也可封閉。更出色的防火墻能夠“學(xué)習(xí)”對(duì)你的特定網(wǎng)絡(luò)來(lái)說(shuō)哪些是正常流量,哪些是異常流量,并且采取各自相應(yīng)的處理方式。
當(dāng)檢測(cè)到異常狀況時(shí),Web應(yīng)用防火墻能夠關(guān)閉正在發(fā)生的潛在攻擊進(jìn)程。而且,由于SQL注入通常通過(guò)URL查詢(xún)字符串來(lái)發(fā)動(dòng)攻擊,對(duì)Web服務(wù)器的日志文件進(jìn)行定期檢查可以發(fā)現(xiàn)可能帶來(lái)注入攻擊的異常查詢(xún)操作。
作為網(wǎng)絡(luò)管理員,有一點(diǎn)很重要,那就是保證Web應(yīng)用程序使用的任何賬戶(hù)的權(quán)限必須被設(shè)置為最低級(jí)別。嚴(yán)格的訪問(wèn)限制將會(huì)降低成功的攻擊所造成的損失。絕對(duì)不要在用戶(hù)使用帶有管理權(quán)限的用戶(hù)名,例如在服務(wù)器層使用“sysadmin”,或者在數(shù)據(jù)庫(kù)層使用“db_owner” 時(shí),連接Web應(yīng)用程序。
例如,微軟建議在安裝SQL Server時(shí),為服務(wù)分配一個(gè)域賬戶(hù),以限制用戶(hù)只能訪問(wèn)必要資源。這樣以來(lái),即使攻擊者攻破了某組織的防線(xiàn),他還會(huì)被訪問(wèn)SQL服務(wù)器的控制集限制住。
由于SQL注入攻擊利用的是寫(xiě)得不夠完美的代碼,完全阻止SQL注入攻擊的唯一方式是解決你的應(yīng)用程序代碼的漏洞問(wèn)題。然而,作為網(wǎng)絡(luò)管理員,你還可以添加附加的防御層,從而使?jié)撛诘墓粽吒y攻克。
【編輯推薦】