SQL 注入有病,安全專家有何良方?

SQL 注入攻擊現(xiàn)狀

SQL 注入攻擊是一個(gè)非常老的攻擊方式,由于很多應(yīng)用程序都存在 SQL 注入漏洞而且 SQL 注入方式與手段變化多端,盡管大型企業(yè)一般都花巨資購買多種安全保護(hù)系統(tǒng),但是 SQL 注入攻擊導(dǎo)致企業(yè)蒙受損失的新聞還是層出不窮:

  • 香港航空某站 SQL 注入(涉及156萬乘客信息/268萬機(jī)票信息/八千多員工信息)
  • 中石化車 e 族 APP 存在 SQL 注入漏洞之一(可跨9個(gè)庫)
  • 海爾旗下日日順商城 SQL 注入可導(dǎo)致300萬會(huì)員信息泄漏
  • 邯鄲市工信辦漏洞危及大量個(gè)人信息以及金額等數(shù)據(jù),百萬用戶數(shù)據(jù)泄露
  • 中國電信翼支付某系統(tǒng)漏洞泄露400萬用戶信息、支付交易明細(xì)信息(超市購物/加油站加油)以及充值等數(shù)據(jù)

從這些例子可以看出 SQL 注入是當(dāng)前應(yīng)用安全防護(hù)的重點(diǎn)和難點(diǎn),是什么原因?qū)е氯绱斯爬系墓舴绞皆诋?dāng)今安全軟件如此豐富的情況下依舊導(dǎo)致這么大傷害呢? 筆者認(rèn)為有以下幾點(diǎn):

  1. SQL 注入漏洞大面積的存在:當(dāng)今系統(tǒng)越來越復(fù)雜,發(fā)布節(jié)奏越來越快,遺漏代碼非常多。很多公司對安全不夠重視,帶病上線是非常常見的事情。

  2. 關(guān)系型數(shù)據(jù)庫是現(xiàn)在最流行的存儲(chǔ)方式,大多數(shù)有價(jià)值的信息都存在數(shù)據(jù)庫里。這對黑客的誘惑力太大了。

  3. 攻擊方式并不難找,網(wǎng)絡(luò)有大量的 SQL 注入攻擊的方法和手段。黑客很容易找到攻擊的方式。

SQL 注入的原理

SQL 注入:就是通過把 SQL 命令插入到 Web 表單提交或輸入域名或頁面請求的查詢字符串里,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的 SQL 命令。

具體來說,它是利用現(xiàn)有應(yīng)用程序,將(惡意)的 SQL 命令注入到后臺(tái)數(shù)據(jù)庫引擎執(zhí)行的能力,它可以通過在 Web 表單輸入(惡意)SQL 語句得到一個(gè)存在安全漏洞的網(wǎng)站的數(shù)據(jù)庫信息,而不按照設(shè)計(jì)者的意圖執(zhí)行 SQL 語句。

首先讓我們了解下什么時(shí)候可能發(fā)生 SQL 注入:

假設(shè)我們在瀏覽器中輸入 URL: www.sample.com,由于它只是對頁面的簡單請求無需對數(shù)據(jù)庫進(jìn)行動(dòng)態(tài)請求,所以它不存在 SQL 注入,當(dāng)我們輸入 www.sample.com?testid=23 時(shí),我們在 URL 中傳遞了變量 testid,并且提供值為23,由于它是對數(shù)據(jù)庫進(jìn)行動(dòng)態(tài)查詢的請求(其中 ?testid=23 表示數(shù)據(jù)庫查詢變量),所以我們可以在該 URL 中嵌入了惡意 SQL 語句。

具體的例子和詳細(xì)的原理就不在這里贅述了,有興趣的同學(xué)可以去谷歌或者百度搜索,上面會(huì)有大量的例子和攻擊方式。

SQL注入常用保護(hù)方式

最主要的保護(hù)方式有以下幾點(diǎn):

  1. 使用 Prepared Statements(參數(shù)查詢)來代替 Statements — 這要求所有數(shù)據(jù)庫開發(fā)人員在開發(fā) SQL 查詢語句時(shí)將代碼和數(shù)據(jù)分開,先定義查詢語句的結(jié)構(gòu),將數(shù)據(jù)通過參數(shù)的方式出入,這樣輸入的參數(shù)將不會(huì)當(dāng)作 SQL 命令來執(zhí)行,基本上能避免 SQL 注入的攻擊。

  2. 使用存儲(chǔ)過程來操作數(shù)據(jù)庫 — 所有的存儲(chǔ)過程都存放在數(shù)據(jù)庫里面,應(yīng)用程序調(diào)用存儲(chǔ)過程來查詢數(shù)據(jù)。

  3. 轉(zhuǎn)義用戶輸入的所有特殊字符 – 永遠(yuǎn)不要信任用戶的輸入,要對用戶的輸入進(jìn)行校驗(yàn),可以通過正則表達(dá)式,或限制長度,對單引號(hào)和雙"-"進(jìn)行轉(zhuǎn)換等。這些在一定程度可以緩解SQL注入。

還有些輔助的方法:

  • 以最低權(quán)限的數(shù)據(jù)庫連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限與有限的數(shù)據(jù)庫連接。
  • 不要把機(jī)密信息明文存放,加密或者 hash 掉密碼和敏感的信息。
  • 應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯(cuò)誤信息對原始錯(cuò)誤信息進(jìn)行包裝,把異常信息存放在獨(dú)立的表中。

RASP 從根本上解決 SQL 注入攻擊

上面描述的是一些非常有用的 SQL 防護(hù)手段,但是都存在一個(gè)共同的缺點(diǎn)——需要花費(fèi)大量的精力制定代碼規(guī)范,確保每個(gè)程序員都能按照這個(gè)規(guī)范來編寫代碼。但是現(xiàn)在的程序都非常復(fù)雜,代碼量動(dòng)輒百萬行,需要非常多的程序員一起完成,要確保每個(gè)程序員寫出完全符合安全規(guī)范的代碼是完全不可能的。有些公司通過第三方代碼掃描工具對代碼進(jìn)行靜態(tài)和動(dòng)態(tài)掃描,試圖發(fā)現(xiàn)和修復(fù)所有 SQL 注入的漏洞,在實(shí)踐中也非常不理想,以下幾個(gè)方面的約束使這種想法很難實(shí)現(xiàn):

  • 代碼量巨大,完全修復(fù)這些漏洞要花費(fèi)巨大的人力和時(shí)間,在大多數(shù)公司基本不可能實(shí)現(xiàn)。
  • 掃描工具漏洞更新比較滯后,很多漏洞都不能得到及時(shí)更新。即使完全修復(fù),上線后也會(huì)有新的漏洞產(chǎn)生。
  • 一般項(xiàng)目都會(huì)大量使用第三方 API 和框架,這些外部程序的漏洞是不可修改的,即使提供商承諾修改也需要比較長得時(shí)間。

現(xiàn)在有很多的安全產(chǎn)品,包括傳統(tǒng)防火墻,WAF(Web 防火墻)等等,這些安全產(chǎn)品基本上是根據(jù)數(shù)據(jù)流掃描的結(jié)果來提供保護(hù),并不了解應(yīng)用程序的上下文,所以不能精確識(shí)別攻擊行為,更談不上有效的保護(hù),再加之現(xiàn)在云計(jì)算越來越盛行,傳統(tǒng)的有清晰邊界的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)也越來越少,因此這些產(chǎn)品對類似于 SQL 注入等應(yīng)用安全攻擊效果并不好。

那么安全專家有什么好的建議呢?他們推薦了 RASP,這是最近非常流行的應(yīng)用安全保護(hù)方案,它是在應(yīng)用程序運(yùn)行時(shí)進(jìn)行自我保護(hù),它將實(shí)時(shí)代碼漏洞掃描和 Web 防火墻實(shí)時(shí)攔截安全攻擊的能力組合起來,像疫苗一樣將安全保護(hù)代碼注入到應(yīng)用程序中,它無需用戶修改任何代碼,只需要簡單修改 JVM 啟動(dòng)腳本就可以和應(yīng)用程序完美結(jié)合在一起,在應(yīng)用程序運(yùn)行時(shí)一起運(yùn)行,擁有應(yīng)用程序的上下文,可以根據(jù)具體的用戶行為有針對性行的進(jìn)行安全監(jiān)控和保護(hù),既可以精確的識(shí)別和防范安全攻擊,也可以最大限度的降低對性能和用戶體驗(yàn)的影響。

而具體到 SQL 注入保護(hù)方面,RASP 做得非常完美。它就像一個(gè)大的虛擬補(bǔ)丁,將大部分已知的 SQL 注入漏洞進(jìn)行修補(bǔ),確保大部分漏洞得到保護(hù)。這樣大部分的攻擊將無效,目前國內(nèi)已知的僅有 OneRASP 具備這樣的防護(hù)能力。

對于未知漏洞 OneRASP 將建立實(shí)時(shí)漏洞更新系統(tǒng),能及時(shí)更新最新漏洞,在不影響用戶系統(tǒng)的前提下,確保用戶及時(shí)有效地抵御零日攻擊。

對于無法預(yù)知的 SQL 注入方式,OneRASP 也有辦法防御。常見的 SQL 注入保護(hù)方式往往采用通用的方法,而每個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)方式有很大的不同,這些通用的方式必然會(huì)有遺漏之處。對安全來說任何遺漏都是致命的,黑客可以利用任何可乘之機(jī)獲得機(jī)密。OneRASP 對 SQL 注入保護(hù)非常完整,它將保護(hù)代碼植入 SQL 注入攻擊的必經(jīng)點(diǎn):JDBC 的各個(gè)廠家的實(shí)現(xiàn)類 Statement.class 里面,每個(gè)保護(hù)動(dòng)作都是在對數(shù)據(jù)庫 SQL 語言的實(shí)現(xiàn)完全理解的基礎(chǔ)上編寫的,考慮 SQL 注入的每種攻擊可能,實(shí)現(xiàn)從根上對 SQL 注入的完整保護(hù)。

OneRASP 是應(yīng)用性能管理領(lǐng)軍企業(yè) OneAPM 公司最新推出的 RASP(運(yùn)行時(shí)應(yīng)用程序自我保護(hù)系統(tǒng))應(yīng)用程序保護(hù)方案。這是國內(nèi)第一款 RASP 安全產(chǎn)品,其穩(wěn)定性、準(zhǔn)確性、易用性以及對應(yīng)用程序性能和使用影響非常小的這些特點(diǎn),給很多開發(fā)者留下了深刻的印象。但是由于是新推出的產(chǎn)品,還需要時(shí)間的檢驗(yàn),有興趣的同學(xué)可以訪問 OneASP 的官網(wǎng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 隨著當(dāng)今世界網(wǎng)絡(luò)技術(shù)與信息技術(shù)高速發(fā)展,Web應(yīng)用程序具有界面統(tǒng)一,使用簡單,易于維護(hù),擴(kuò)展性好,共享度高等優(yōu)先。...
    高美麗閱讀 4,165評(píng)論 0 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,048評(píng)論 25 709
  • Web安全簡史 在Web1.0時(shí)代,人們更多是關(guān)注服務(wù)器端動(dòng)態(tài)腳本語言的安全問題,比如將一個(gè)可執(zhí)行腳本(俗稱Web...
    潘良虎閱讀 4,026評(píng)論 3 72
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 生活是多姿多彩的,在我的世界中只有好沒有差,雖然這只是12歲以前。人事難料,天事必從。我什么都不信,只信這世界是完...
    墨與時(shí)賽閱讀 348評(píng)論 1 1

友情鏈接更多精彩內(nèi)容