SQL 注入,永不過時的黑客技術

趙榮發表於2016-03-23

TalkTalk的資訊洩漏事件導致約15萬人的敏感資訊被暴露,涉嫌造成這一事件的其中一名黑客使用的並不是很新的技術。事實上,該技術的「年紀」比這名15歲黑客還要大兩歲。

[譯註:TalkTalk是英國電話和寬頻供應商,這件資訊保安事故發生在2015年10月份,當時這件事情還挺轟動的,上了新聞頭條,其中一名黑客年僅15歲。]

這項技術就是大名鼎鼎的SQL隱碼攻擊,所謂SQL隱碼攻擊就是黑客在網站的提交表單資料中輸入惡意命令從而獲取資料的方法。它曾經被用來竊取世界衛生組織員工的資訊,偷過華爾街日報資料,甚至還攻擊過美國聯邦政府機構。

“這是最簡單的黑客技術”,w0rm 告訴 Motherboard[譯者注:Motherboard就是這篇文章原文所在網站],他是一名匿名黑客,聲稱對華爾街日報的攻擊負責。整個攻擊過程只用了幾個小時。

但是,正因為它是比較簡單的技術,同時經常被用來從公司或者政府機構竊取數字資訊,所以SQL隱碼攻擊應該相對來說比較容易防範才對。

但為何到了2015年,SQL隱碼攻擊仍然能導致最大規模的資訊洩漏事件呢?

有跡可循的最早SQL隱碼攻擊的記錄大概是Jeff Forristal在黑客雜誌Phrack上發表的文章。Forristal當時是rain.forest.puppy的掌舵人[譯者注:rain.forest.puppy是一個安全諮詢組織,或者說,是個黑客團隊?:)],他目前在網路安全公司Bluebox,負責移動安全方面的CTO。

“微軟聲稱,你看到的都不是問題,所以不用費心去處理它”

[譯者注:這是有人給微軟報告SQL server這個漏洞時,微軟的回覆]

SQL, 全稱為結構化查詢語言,是一種用來管理資料庫的程式語言。本質上說,他就是被網站用來從資料庫中提取一些資料來處理或者展示給使用者的。

但是Forristal發現,當輸入特定的命令時,會導致伺服器洩漏資訊。“使用者可能捎帶一些自己的SQL語句”,他寫道。

在Phrack的1998年12月份期刊上,Forristal發表了微軟的SQL server的一系列SQL隱碼攻擊的問題。當Forristal的同事們向微軟反饋此問題時,“他們的回答是:好了,別鬧了”,他寫道,“他們說,你看到的都不是問題,所依別費心去處理了”

SQL隱碼攻擊發展到今天,已經過去了15年,在OWASP組織每三年發表一次的OWASP的Top 10問題上,SQL隱碼攻擊經常坐上榜首的位置。OWSAP全稱是開放式Web應用程式安全專案(Open Web Application Security Project),它是一個監控網站面臨哪些安全威脅的非盈利性組織。

Phrack現在的logo

“SQL隱碼攻擊經常是第一威脅,主要反映在相關攻擊事件的數量上,同時還有一些其他因素導致它如此頻發,” Troy Hunt在Motherboard的一次電話採訪中如是說道,Troy Hunt是攻擊檢測網站haveibeenpwned.com的創始人[譯者注:感覺像是一個社工庫]

“當你訪問一個網頁時,你發出一個請求,然後渲染伺服器返回的資料”, Hunt介紹,“舉個例子,你看一篇新聞,在位址列上使用id=‘1’來發出請求時,伺服器返回編號為1的文章,把id改成2的時候,伺服器返回編號為2的文章”

但是,“使用SQL隱碼攻擊,攻擊者可能會將ID欄位改成一個其他什麼東西,導致伺服器做一些意料之外的事情”,Hunt繼續說到,比如返回一些隱私資料。

一次攻擊也許只返回一條或者一段資訊,於是攻擊者就“不斷重複攻擊,一次又一次,想幹幾次幹幾次,直到他們獲取到所有資料為止”,Hunt說。

顯然,這需要一段比較長的時間,所以,黑客一般會使用自動化工具。其中比較具有代表性的事Havij,“這是最流行的指令碼小工具,因為它支援Windows作業系統,而且還有個圖形介面”, Mustafa AI-Bassam通過線上聊天工具和Motherboard如此描述,他是一名安全研究員,同時還是一名LulzSec黑客組織的前成員。

另一個經常被用到的工具是 sqlmap 。“它可以爬取網站的頁面,就像搜尋引擎的爬蟲,尋找網站中所有輸入表單,然後提交一些可能導致MySQL語法錯誤的資料”, AI-Bassam繼續介紹。

當攻擊者找到一個攻擊點,接下來就很容易自動化開搞了。

sqlmap的介面

“他們會使用Google來搜尋那些典型的容易受到SQL隱碼攻擊指令碼攻擊的URL”, AI-Bassam說。“他們還經常使用指令碼來檢查所有URL,用自動化的方法來試探是否存在漏洞”

“你甚至可以教一個4歲的孩子來做這種事情[譯者注:汗~~我還不如個4歲的孩子]”, AI-Bassam補充道,強調這整個過程簡單到令人髮指的地步。確實,Hunt就曾經上傳過一個視訊,視訊上顯示他是怎麼教他3歲的兒子用Havij來實施SQL隱碼攻擊的[譯者注:這是真愛啊,我堅決不會讓我女兒走上計算機這條不歸路]

“你把要攻擊的URL輸入進來,然後所有資料就出來了”,Hunt向Motherboard介紹道。在YouTube上有太多教程來介紹如何實施SQL隱碼攻擊了。

事實上,已經有很多解決方案被網站開發人員用來防止SQL隱碼攻擊了和避免客戶資訊或者公司資訊洩漏了。而且那些解決方案一經存在好幾年了。

所有這些解決方案的核心都是採用“prepared statments” (預編譯宣告?): 當SQL語句在資料庫中執行是,絕對不能直接執行使用者的輸入。

如果這些解決方案直接有效,那為何SQL隱碼攻擊還是這麼猖獗呢?

“使用prepared staement的好處是它們可以從語義層面上杜絕任何在開發者意料之外的輸入,這些輸入可以通過構造一些SQL語法,讓資料庫查詢語句從任意一張資料表中獲取一條額外的資料”,Mike Schema在給Motherboard的一封email中如此說導,他是雅虎的一名高階經理、軟體工程師。

另外一種做法是“使用SQL庫對使用者輸入做一些淨化操作”,AI-Bassam建議。簡而言之,就是將輸入中任何潛在的惡意部分去除掉。

那麼,如果SQL隱碼攻擊如此簡單,以至於小孩子都能用,而且解決方案又這麼直接有效,為什麼SQL隱碼攻擊還這麼猖獗呢?

“任何一名嚴謹的程式設計師都應該知道SQL隱碼攻擊,但是仍然有大量的程式設計師缺乏經驗,所以公司在僱傭某人的是偶,他可能沒有受到過任何關於如何消除風險的訓練”, AI-Bassam指出。除此之外,“他們的經理們往往只要求開發出能用的軟體,而不是安全的軟體”。

來自雅虎的Schema也認同這一點,並且補充“有些時候,一些小應用功能有限,要求很快就把東西做出來”,導致開發者經常忽略一些應對各種攻擊的工作,儘管他們實施起來也不是很困難。

Hunt不是那麼寬容,他也不認同所有的過錯都來自於高層管理的壓力。相反,他認為現在有網上有這麼多教程詳細的向開發人員講解如何避免SQL隱碼攻擊,對,是詳細的教程,不僅僅是一些好的建議。“這些年,我看到很多有關如何避免明顯的SQL隱碼攻擊風險的教程”,他說到。

隨著網際網路黑客們不停的在YouTube上分享他們的SQL隱碼攻擊經驗,網站的開發者們也沒有閒著。“我們有能力的人站出來,分享他們的專業知識,而不僅僅是把自己的事情做好就行了”,Hunt說。

最後,這些網站的安全和他們的資料安全歸根到底還是網站開發者自己負責的。這意味著SQL隱碼攻擊和漏洞還會存在,至少在未來一段時間內不會消失。[譯者注:估計原作者的意思是安全還是由開發者自己負責,不在於黑客不去攻擊,自己開發的時候不注意,還是沒辦法避免被攻破的~~]

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

SQL 注入,永不過時的黑客技術 SQL 注入,永不過時的黑客技術

相關文章