駭客攻防與惡意程式威脅 回到資安Q&A
Q
網站深受SQL Injection等隱碼攻擊困擾
我們公司網站一直深受SQL Injection等隱碼攻擊困擾,一直無法杜絕,公司短期內並沒有辦法針對程式人員作安全程式碼的訓練, 不知道可以先做那些預防措施,避免網站的威脅一直發生…
提問時間: 04/18/2011
A
值班醫師回應


當然,要徹底解決SQL INJECTION的問題可以從許多不同的層面著手,不過最終還是「觀念」最重要,先擁有了正確防堵SQL INJECTION的開發觀念,就不會寫出不安全的程式,也才能一勞永逸。

要徹底解決SQL INJECTION的問題其實並不是太難,一直無法杜絕可能有幾個原因:
1. 對SQL INJECTION的觀念有所誤解,導致一直寫出不安全的程式
2. 網站程式碼太多,不知道是哪支程式有弱點導致被攻擊成功
3. 連接資料庫的管道太多,不知道駭客是從哪個 AP 發動攻擊的
4. 資料庫賦予AP的權限過大,導致資料結構被修改或被惡意刪除資料


依據不同層面的問題,可以有不同的預防措施如下:
1. 我之前曾經對幾家國內企業辦理過SQL INJECTION的教育訓練,過程中發現開發人員由於經驗不足,開發的過程又沒有人可以詢問,以致於用以前在學校或補習班的經驗在撰寫程式,即便學校可能教授過SQL INJECTION相關課程,不過難保學校老師教的就是正確觀念,這點我在授課的過程中的確有聽到學員提起學校老師對SQL INJECTION的見解,的確有些人教的方法非常不正確,但學員又沒有判斷能力,因此誤以為是安全的寫法。因此我認為如果貴公司的資料庫一直遭受SQL INJECTION攻擊的話,應該立即尋求專家的協助,替公司內部進行一場教育訓練,以防止問題再度發生。

不過,另一個弔詭的問題就在於,貴公司就是無法判斷何謂正確的SQL INJECTION觀念才外聘講師,很不幸的又有些講師又無法教授正確的SQL INJECTION觀念,那怎麼會有能力挑選講師呢? 相對的,SQL INJECTION這問題在大多公司早已解決,那些還有SQL INJECTION問題的公司大多是開發人員的資訊落差太大,自行吸收的資訊量有限,因此這問題的確難解,身為管理者的人應該多加思考解決方案。

2. 針對程式碼太多或找不到問題點的應用程式,可以考慮購買Web Application Firewall (WAF)相關產品,透過這個方式可以暫時解決找不到弱點的問題,但這方式並不一定能夠 100% 解決SQL INJECTION的問題,因為應該沒有WAF產品敢宣稱他們的程式能夠100%杜絕SQL INJECTION的問題而且還能讓應用程式正常運作。

另一方面來說,功能強大的WAF在設定上並不是非常容易,這些都需要較有開發經驗的人擔任顧問才有辦法設定出真正安全的設定,以筆者的經驗來說,之前替客戶檢視WAF設定時,發現廠商在安裝設定WAF設備的過程中派出一位資深顧問,不過設定的過程根本沒有與網站建置人員溝通過,也不瞭解網站本身是用什麼程式語言撰寫的(PHP, ASP.NET, Ruby, …),過了一個星期後就說WAF設定完成,結果網站的各種弱點依然存在,我進一步Review後才發現其WAF規則根本不適用該網站,客戶白白花了近百萬的設備,其安全性的價值卻低於十萬,實在非常可惜,因此在選擇WAF產品時,廠商派出的顧問才是重點,不要光看設備的品牌就採購相關產品,在資安的領域沒有銀子彈,只能一步一腳印的把每個環節顧好。

3. 這部分透過SQL Server Profiler對所有AP來源所做的查詢進行查核基本上都能找到一些蛛絲馬跡,只要在資料庫連線參數裡加上Application Name參數,即可在SQL Server Profiler裡區分由不同AP連入的查詢項目,其設定過濾的方式如下:





圖片來源:作者提供。

4. 適當的修改資料庫存取權限,並依據不同的連線來源進行權限設定,即可有效杜絕資料庫權限過大的問題。不過這樣的建議不見得適用於每間公司,因為調整資料庫存取權限相對的也代表必須更動到部分應用程式的程式碼,但在企業裡並不是所有應用程式都有人能夠維護,調整了這一點可能會導致應用程式發生異常的狀況,依據您企業的資安政策,你是否能接受一個不安全但是可用的應用程式?還是一個真正安全都是到處有Bug的程式?我相信大部分人會選擇前者,而這也是資安的兩難之處!




資安急診室醫師介紹
網站開發公司技術總監
專攻Web開發超過十多年,曾擔任MSDN講座、Visual Studio 2010上市發表會、TechDays等大型技術研討會講師。其部落格"The Will Will Web - 記載著 Will 在網路世界的學習心得與技術分享" 目前已經累積近千篇文章,上面的文章大多都是與Web技術相關以及工作中最實用的解決方案。
我要回應此文章
您的姓名:
回應內容:
  輸入圖片數字