程式碼安全測試第一期:什麼是SQL隱碼攻擊漏洞?

zktq2021發表於2021-05-18

一、什麼是SQL隱碼攻擊:

SQL是運算元據庫資料的結構化查詢語言,網頁的應用資料和後臺資料庫中的資料進行互動時會採用SQL。

SQL隱碼攻擊,就是透過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。它是利用現有應用程式,將(惡意)的SQL命令注入到後臺資料庫引擎執行的能力,它可以透過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。如Web應用程式的開發人員對使用者所輸入的資料或cookie等內容不進行過濾或驗證(即存在注入點)就直接傳輸給資料庫,就可能導致拼接的SQL被執行,獲取對資料庫的資訊以及提權,發生SQL隱碼攻擊。

二、SQL隱碼攻擊的特點:

1、廣泛性

任何一個基於SQL語言的資料庫都可能被攻擊,很多開發人員在編寫Web應用程式時未對從輸入引數、Web表單、cookie等接受到的值進行規範性驗證和檢測,通常會出現SQL隱碼攻擊漏洞。

2、隱蔽性

SQL隱碼攻擊語句一般都嵌入在普通的HTTP請求中,很難與正常語句區分開,所以當前許多防火牆都無法識別予以警告,而且SQL隱碼攻擊變種極多,攻擊者可以調整攻擊的引數,所以使用傳統的方法防禦SQL隱碼攻擊效果非常不理想。

3、危害大

攻擊者透過SQL隱碼攻擊獲取到伺服器的庫名、表名、欄位名,從而獲取到整個伺服器中的資料,對網站使用者的資料安全有極大的威脅。攻擊者也可以透過獲取到的資料,得到後臺管理員的密碼,然後對網頁頁面進行惡意篡改。這樣不僅對資料庫資訊保安造成嚴重威脅,對整個資料庫系統安全也影響重大。

4、操作方便

網際網路上有很多SQL隱碼攻擊工具,簡單易學,攻擊過程簡單,不需要專業知識也能自如運用。

三、SQL隱碼攻擊的檢測描述:

滿足以下條件,就構成了一個該型別的 安全漏洞

1.資料從不可靠來源(包括但不侷限於不可靠使用者的輸入資訊或是不可靠使用者可能更改的檔案)進入應用程式;

2.外部輸入資料未經驗證直接用於構造SQL語句並執行。

四、SQL隱碼攻擊的常見後果:

關鍵詞:敏感資訊洩露;繞過保護;修改應用資料。

由於SQL資料庫通常包含敏感資料,SQL隱碼攻擊漏洞可能導致丟失機密性資訊,或者進行更改甚至刪除此資訊。

如果使用惡意的SQL命令來檢查使用者名稱和密碼,則可以作為另一個沒有密碼的使用者連線到系統。

如果授權資訊儲存在SQL資料庫中,則可以透過利用SQL隱碼攻擊漏洞來更改此資訊。

五、SQL隱碼攻擊的案例:

但凡使用資料庫開發的應用系統,就可能存在SQL隱碼攻擊的媒介。自1999年起, SQL隱碼攻擊漏洞就成了常見安全漏洞之一。至今SQL隱碼攻擊漏洞仍然在CWE列表中排前10。

2011年美國國土安全域性,Mitre和SANA研究所將SQL隱碼攻擊作為第一危險的安全漏洞。至今,SQL隱碼攻擊仍然是首要的難以修復的安全威脅漏洞(資料庫生產廠商難以透過維護資料庫自身功能或提高資料庫安全策略來防範SQL隱碼攻擊)。

2012年,Barclaycard的一個代表聲稱97%的資料洩露都是由SQL隱碼攻擊引起的。

2014年一個叫“TeamDigi7al”的駭客組織攻擊了美國海軍的一個名為“Smart Web Move”的web應用。此次事件直接造成美國海軍資料庫超過22萬服役人員的個人資訊被洩露。而事後,美國海軍動用了超過50萬美元來彌補此次的資料洩密事故。

在日本電話電報公司集團(NTT)釋出的2014全球威脅情報的報告中提出了一個驚人的數字——“企業對一次小規模SQL隱碼攻擊的平均善後開支,通常超過19.6萬美元。”

隨著Web安全事件的不斷頻發,我們不得不思考SQL隱碼攻擊的代價。顯然,SQL隱碼攻擊不是一個過期的安全問題,恰恰相反,它是一種非常容易被使用的攻擊方式,SQL隱碼攻擊並不需要高深的攻擊手段便可以輕易使敏感的資料庫資訊被非法瀏覽或刪除。事實上,由於SQL隱碼攻擊簡單而又非常高效,高階駭客們已開始採用某些軟體自動搜尋web應用程式的SQL漏洞,並利用SQL隱碼攻擊自動化工具來製造殭屍,並建立可自動攻擊的殭屍網路。

SQL隱碼攻擊並不會在短時間內消失,而其所造成影響更是一個刻不容緩、代價不菲的重大威脅,處理一次web應用安全事故幾乎要花掉20萬美元。網路安全工程師們務必要意識到,研究與防範SQL隱碼攻擊是必要的,也是首要的安全任務。

六、防範和修補SQL隱碼攻擊的一些建議:

1.輸入:使用嚴格符合規範的可接受輸入的白名單。拒絕任何不嚴格符合規範的輸入,或將其轉換為具有相應規格的輸入;

2.輸出:最保守的方法是轉義或過濾所有未透過極其嚴格的白名單的字元(例如不是字母數字或空格的所有內容);

3.如果可以,請使用自動強制執行資料和程式碼分離的結構化機制。這些機制可能能夠自動提供相關的引用,編碼和驗證,而不是依賴開發人員在生成輸出的每個點提供此功能;

4.使用預準備語句,引數化查詢或儲存過程處理SQL查詢。

樣例:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2772814/,如需轉載,請註明出處,否則將追究法律責任。

相關文章