我們生活在數據的黃金時代。有些公司將其分析為更好的自己,有些公司為了獲利而進行交易,沒有一家公司因其價值而自由放棄 - 對於他們的業務和犯罪分子。
SQL(結構化查詢語言)是一種非常流行的與資料庫通信的方式。雖然許多新資料庫使用非SQL語法,但大多數仍然與SQL兼容。這使得SQL成為任何想要訪問數據的人的便利工具,無論他們的動機如何。
SQL注入(或SQLi)攻擊已經存在了近20年。他們永遠不會停止使用Imperva的Web應用程式防火牆(WAF)。所以我們有豐富的數據和經驗可供分享。在這篇文章中,我們將分享Imperva保護下數千個網站的最新統計數據和圖表,以及攻擊示例以及保護網站的方法。
基於SQL的應用程式的常見攻擊
SQL Injection是一種用於攻擊應用程式的代碼注入技術。攻擊者可以使用工具,腳本甚至瀏覽器將SQL語句插入應用程式欄位。然後由資料庫引擎執行這些語句。此類攻擊通常用於:
- 欺騙身份
- 篡改現有數據
- 竊取數據
- 銷毀數據
- 更改資料庫權限
應用程式背後的數據通常是關鍵任務,這就是SQL注入攻擊被認為非常嚴重的原因。
來自Imperva WAF的統計數據
Imperva的WAF每天都會在我們保護的網站上減少數百萬次SQL注入攻擊。我們保護的網站中至少有80%每個月都會受到攻擊。我們的數百個網站每天都會面臨SQLi攻擊。
您可以在下面找到我們監控的攻擊中使用的國家,行業和工具的統計數據。
圖1:網站行業分布 - 由於BakerHostetler的2018年網絡安全報告指出它是數據泄露最嚴重的行業,因此受攻擊程度最高的行業是健康行業,這一點非常有意思,但並不奇怪。
沒有圖示的是受攻擊最多的資料庫(按遞減順序):Oracle,PostgreSQL,MySQL和MongoDB。 同時,受攻擊最多的平台是WordPress,Drupal,Joomla和Quest。
圖2:受攻擊網站的國家/地區與攻擊來源 - 看到黑客傾向於攻擊自己國家/地區內的網站並不奇怪。 當然,這有可能恰恰相反 - 這些結果可能反映了黑客使用在他們攻擊的國家/地區擁有端點的VPN /代理,以逃避地理阻塞。
每天大量使用SQLi公共漏洞。 例如:CVE-2017-8917和CVE-2015-7858都是Joomla SQLi公共漏洞,這些漏洞在我們監控的66,000個事件中使用。
圖3:頂級漏洞掃描程序 - 由於我們計算事件而非請求,每個掃描程序生成的有效負載數量都沒有影響。 儘管SQLi Dumper取得了成功,但Joomla掃描儀並不落後。
我們每月監控數萬個攻擊性IP,並使用攻擊分析來查找惡意IP並防範它們。 我們通過分析過去幾個月的攻擊IP收集了一些有趣的統計數據:
圖4:日復一日嘗試SQLi攻擊的IP。 藍色:在當天和當天嘗試SQLi攻擊的IP的百分比,在當天嘗試SQLi攻擊的IP中。 橙色:包含由這些攻擊IP發送的SQLi嘗試的請求的百分比,包含SQLi嘗試的總請求數。
令人好奇的是,即使平均每天不到三分之一的IP攻擊(藍線),他們的請求構成了超過80%的SQLi請求(橙色線)。 這可能是由於各種漏洞掃描程序正在進行掃描。 這些工具傾向於轟炸目標以尋找漏洞,這解釋了高IP到請求比率。
圖5:頂級攻擊工具 - 非常通用且廣泛使用,因此cURL占據如此重要的位置並不奇怪。 但是,深入分析顯示,與cURL一起發送的大多數可疑請求實際上是攻擊後檢查,即被阻止的黑客,然後使用cURL來測試他們是否仍然可以訪問該網站。 cURL緊隨其後的是Python - 黑客的首選武器,以及Ruby - 用於編寫Metasploit的語言代碼。
攻擊示例
以下是我們最近一個月跟蹤的一些流行攻擊:
VectorIncidentsDescription1 and 1=2 union select password from qianbo_admin634,566Trying to query passwords1』A=0125,365ProbingN;O=D and 1=1
nessus= or 1=1–
CONCAT(『whs(『,』)SQLi』)
76,155Probing by vulnerability scanners:
Veracode, Nessus and WhiteHat Security, respectively
『 union select unhex(hex(version())) —848,096Attempting to discover database version;WAITFOR DELAY 』00:00:28′;1,226,955Blind probing — testing for delay in response
表1:SQL注入攻擊的示例
如何保護您的應用程式免受SQL注入
有許多方法可以保護您的應用程式免受SQL注入攻擊。有些應該在應用程式開發期間使用,其他應該在部署應用程式後使用。
開發階段:
使用預準備語句 - 一種「模板化」SQL以使其適應SQL注入的方法。只有某些輸入值可以發送到資料庫,因此無法運行模板化語句以外的語句。稍後使用不同協議傳輸的值不像語句模板那樣編譯。因此不能發生SQL注入。
這裡有兩個Python代碼示例,包含和不包含預準備語句。該代碼基於MySQL連接器驅動程序(https://dev.mysql.com/doc/connector-python/en/):
def add_employee(id: int, email: str):
sql = 「」」INSERT INTO employees (id, email)
VALUES (%s, %s)」」」
cursor = connection.cursor(prepared=True)
cursor.execute(sql, (id, email))
cnx.commit()
cursor.close()
句的Python代碼示例。這些值將發送到與SQL文本分開的「執行方法」。
def add_employee(id: int, email: str):
sql = f」」」INSERT INTO employees (id, email)
VALUES ({id}, {email})」」」
cursor = connection.cursor()
cursor.execute(sql)
上面是沒有預準備語句的Python代碼示例。電子郵件可能包含可由資料庫引擎執行的SQL注入語句。
除了預處理語句之外,還有其他方法可以在開發和部署應用程式期間阻止SQL注入:
- 消毒 - 擺脫任何可能是惡意的特殊字符,單詞或短語。例如,刪除保留字SELECT或CONTACT,或刪除短語WAIT FOR DELAY或DROP TABLE。這不是最佳實踐,但在某些情況下它可能很有用。
- 轉義 - 轉義在SQL中具有特殊含義的字符。例如,用兩個單引號替換雙引號。這是一種簡單但易於出錯的方式。
- 轉義和模式檢查 - 可以驗證數字和布爾參數數據類型,而字符串參數可以限制為模式。
- 資料庫權限限制 - 將應用程式用戶的權限限制為僅需要的權限,因為它可能有助於降低攻擊的有效性。
後開發 - 應用程式安全性:
- 漏洞掃描程序 - 這些可以檢測應用程式中的SQL注入漏洞,以後可以由開發團隊修復。請記住,應用程式會不斷變化 - 因此您應定期運行掃描程序。
- Web應用程式防火牆 - WAF還可以檢測和阻止對您的應用程式的攻擊。
總結
保護產品免受SQL注入是必不可少的,以確保其正常運行並防止數據泄露。
當您編寫訪問資料庫的代碼時,考慮從一開始就防止SQL注入是一種很好的做法。這是防止這些漏洞發生的最佳時機,而不是以後修補它們。開發過程應包括針對SQL注入的測試,然後是外部掃描程序。
最後,WAF是您產品保護的重要補充。它可以保護您免受錯過的漏洞,同時讓您有時間儘可能地修補它們。
原文:https://www.imperva.com/blog/sql-injection-attacks-so-old-but-still-so-relevant-heres-why-charts/
本文:http://pub.intelligentx.net/sql-injection-attacks-so-old-still-so-relevant-heres-why-charts
討論:請加入知識星球或者小紅圈【首席架構師圈】