網絡連線速度愈來愈快,而存取網站的設備亦變得更大眾化及相宜,加上地域性問題,網上業務擁有著無限商機;然而,這亦為黑客帶來了全新的業務模式,那就是我們先前曾介紹過的「攻擊即服務 (Attack As a Services – AAaS.)」。
這些攻擊業務非常多元化,由最基本的垃圾廣告散佈到大型 DDoS 攻擊,同時這些服務供應商擁有完善的行業生態系統,例如地下黑市市場、黑客工具生命週期管理,更甚者亦提供 SLA (Service Level Agreement),保證攻擊服務不中斷。
今次我想在這裡向大家分享一下最近有復興跡象的黑客攻擊業務,那就是 SQL Injection。以往 SQL Injection曾經是很多獨立黑客的攻擊手段,直到現時仍是;之不過以服務形式提供的卻不多,事關 SQL Injection 並不能像 DDoS 般幾乎可全自動化,因為 SQL Injection 需通過於輸入欄位輸入一些能誤導語法執行的語法,而這往往需要與時並進,亦即是說需要黑客親自臨場指揮。
由於此攻擊自動化效果差,加上 SQL Injection 的最大目的是偷取目標網站的資料為主,目標價值愈高,收費自然愈昂貴;由於利潤大,進行 SQL Injection 的收入提高;加上黑客更可藉由替客户進行 SQL Injection 的期間同時將所收集到的資料進行複制,並率先將資料賣出,一方便賺取金主的資金,同時更可取得有價值資料,更甚者亦可比金主快一步,將資料以合法手段銷售出去!例如替客户發送 EDM(Email Delivery Message – 簡單說就是垃圾郵件),又或者直接建立一個專門銷售電郵名單的網站(外國有很多這類網站),試問如此一石四鳥的賺錢方法,黑客們又怎捨得忘記 SQL Injection 呢?
甚麼是 SQL Injection?
說了這麼久,那究竟甚麼是 SQL Injection 呢?為了令大家更容易理解,今次筆者不會提及程式部份,反而希望以文字的方式敘述,希望令大家更容易理解到甚麼是 SQL Injection。
首先就上述提到的例子 – 購物平台而言。當用户在進行搜尋工作時(或一些輸入文字的動作)時,如果你希望的話,所輸入的資料可成為 SQL 搜尋語法,流程如下:
1. 用户輸入欄位輸入搜尋關鍵字,例如是會員名稱等。
2. 按下確認後,資料會先比對一些程式預設的條件,如果條件符合便會進行下一步驟。最常見的就是比對用户輸入的資料格式是否正確。
3. 接著用户所輸入的將會被執行。
就此看來,上述過程好像沒有甚麼大不了,對吧?
但其實關鍵之處就在步驟 2。有些較舊式的網上平台,在編程時可能仍未有現在如此複雜的網頁語言/或編寫時仍未有某些新式的攻擊方法,因此在禁止用户輸入資料的條件上,可能仍存在一些編程上的漏洞,以致黑客能於輸入欄位輸入了一些符號,而這些符號將能直接影響數據庫的搜尋動作。
而另一類問題就是編程時未有考慮到不同瀏覽器的支援程度。例如大部份瀏覽器可能已支援以 HTML5 的方式檢查用户所輸入的資料的格式;但偏偏就是老品牌的瀏覽器不支援;這可是真實情況!開發者往往認為自己編寫的最新式語言,傳統品牌瀏覽器怎樣也會支援吧!可笑的是仍未支援,那麼便會失去了針判斷用户輸入資料是否符合要求的檢查功能;同樣地由於檢查機制於某些瀏覽器未能發揮作用,以致黑客可有機可乘。
編程時,針對用户欄位輸入的資料是否符合規定,這檢查其實十分重要!
攻擊方式
黑客可通過於輸入欄位輸入一些符號,由於欠缺檢查用户所輸入的資料,因此一些於 SQL 語言上會使用到的符號例如是 “=”, “ ’’ ” 等等便可成功被執行,如果是針對性的攻擊,黑客更可直接通過於文字輸入欄位直接從目標網站之中的數據庫輸出所想要的註冊會員資料。
舉個例子,數據庫的第一行分別以 Password、ID、Email 三個欄位儲存會員的密碼、註冊編號、電郵,在欠缺保護的網站之中,黑客輸入一些語句,像是 ID=1 (當然實際上不是這麼簡單,由於希望大家明白當中原理,因此大量簡化當中步驟),那麼輸出的結果便很有可能是讀取了 1 號 ID (會員編號) 的整行會員資料,如此便可輕易的取得目標網站的會員資料。
其實作為一名富經驗的開發者,在進行開發時必定能加入相關語法從而避開相關攻擊手段;如果大家本身經營網上業務,但又希望加強本身的網頁保安的話,那麼不妨在伺服器端採用一些 Log Management 的工具,並針對 SQL 部份進行監控,這樣對於預防 SQL Injection 有絕對幫助!
鳴謝:Lapcom
SQL Injection 復興之路:黑客一次攻擊、四大回報
https://www.facebook.com/hkitblog