作者: 張宗銓 / 安碁資訊股份有限公司資安維運處資深專案工程師
網站是提供網路服務的重要元素,一旦網站被攻擊,將會影響非常多的使用者,包括讓企業受到損失,產生負面新聞甚至傷及組織形象。威脅主要是對網站置入攻擊程式、偷資料或癱瘓網站,本文將簡介這些攻擊,讓管理者了解網站資訊安全的概念。
網站的資安威脅
網站是網路服務的重要元素,一旦網站被攻擊,將會影響非常多的使用者。舉例來說,若網站被攻擊者透過DDoS[1]癱瘓,造成網站無法正常運作時,訪客就無法參觀網站,導致人潮將減少,對電子商務而言就是重大的損失。當網站管理者不知如何處理時,還會被藉機勒索,讓企業不僅僅損失金錢,連帶辛苦經營的品牌形象與信任感也蒙受負面陰影。
隨著網際網路的發達,大家也越來越依賴網站提供的便利服務,攻擊者對網站不懷好意的犯罪案例也是層出不窮,只要入侵網站後台動點手腳,大家辛苦建置的網站就會變成犯罪者的攻擊武器,訪客一旦參觀網站就會被攻擊或被感染惡意程式。而網站裡所儲存的大量機密資訊,像個人資料、密碼、信用卡卡號等,更是攻擊者虎視眈眈的肥肉。若建置網站時沒有意識到這些威脅,而沒有做防護措施,這些機密資料就會被網路罪犯偷走,負面新聞也會影響訪客使用網站服務的意願,更嚴重還會傷及企業形象。
有很多方法可以攻擊網站[2] [3],根據目的可以分為2種,第一種是對網站置入攻擊程式或偷資料,第二種是透過DDoS癱瘓網站讓訪客無法使用,分別介紹如下:
第一種:對網站置入攻擊程式或偷資料
如果網站不安全,資料沒有保護好,讓攻擊者可以輕易的偷走資料,訪客就不敢儲存個人機密資料。網站上如果有惡意的攻擊程式,訪客也會不敢瀏覽此網站。對管理者來說,網站有弱點就會被攻擊者入侵,一旦攻進系統就有可能控制整台主機,然後偷取資料或安插惡意程式。這些針對網站的攻擊手法五花八門,以下僅介紹幾個比較常見的威脅。
SQL injection
攻擊者在輸入的字串中夾帶非法的SQL指令,就可讓資料庫誤認為是合法的SQL指令而執行[4],攻擊流程大致如下:
1. 先找到輸入點,例如用google搜尋 login.asp site:com.tw。
2. 看原始碼決定要使用GET或POST方式注入。
3. 測試是否有漏洞,像是根據不同的Database執行Query動作,或是使用單引號 ( ' )做測試。
4. 注入不合法的SQL指令。
一旦完成攻擊流程,就可以使用SQL injection犯罪,常見有以下三種:
Authorization bypass:在帳號密碼的輸入欄位填入特定的SQL語法,攻擊者就可以直接登入網站的系統內,毋須取得真正的帳號密碼。
‧Using the select command:透過特定的語法將資料庫裡的資料撈出來,造成個人機密資料外流。
‧Using the insert command:注入相關惡意資料或惡意連結,當訪客存取網站時,網頁會讀取資料庫裡面的惡意連結,讓訪客點選並引導訪客到惡意網站,進而滲透訪客的電腦。
要防止SQL Injection帶來的問題,只要避免輸入欄位的內容直接成為網站SQL語法的一部份,就有很好的阻止效果,因此在開發設計上就需要多一些轉換方式來避免此問題。
XSS(Cross-Site Scripting)
在不安全的網站中植入惡意Script,可用來取得帳號密碼,信用卡等機密資訊,或在客戶端植入間諜程式都算[5]。這些程式碼大部份是Javascript,其他可能的還包括VBScript, ActiveX, Flash等。XSS原理就是在網站輸入點放入 < script> 惡意code < /script>,如以下三個範例:
範例1,在輸入欄位填入 < script > alert('XSS');< / script>
範例2,在網址填入 http://web.com/index.asp?name= < script > alert('XSS') < /script>
範例3,將一句話木馬或惡意程式碼透過上傳檔案的輸入點放入網站內。
當攻擊者使用XSS手法時,可以有以下二種操作:
Stored Attack:將惡意程式碼插入目標網站內,等待訪客到目標網站後,觸發攻擊程序入侵訪客電腦。
Reflected Attack:將被插入惡意程式碼的網頁放入電子郵件寄給受害者,當受害者開啟郵件內的網頁就會觸發攻擊程序,入侵受害者電腦。
要避免XSS的攻擊,各種輸入點都要做嚴格的檢查,不要讓script有辦法被儲存到網站就可以解決。
Security Misconfiguration
網站安全沒有設定好,就會引發很多資安問題,常見的問題有以下幾種:
‧Default Password:預設帳密沒有刪除或更改,攻擊者可透過嘗試不同預設帳密的方式直接入侵。
‧Third-party Example Vulnerability:有許多套件的範例程式有漏洞,若沒刪除這些範例程式,攻擊者可透過範例程式的漏洞入侵。
‧Directory Traversal/Forceful Browsing:未關閉Directory listing功能或瀏覽權限沒設好,攻擊者就可找出所有網站上的檔案,或得到重要的原始碼。
‧Error Message Interception:錯誤訊息直接回傳在使用者頁面上,使攻擊者得到額外的資訊,透過瀏覽器錯誤的回傳值,可得知系統的架構與版本等資訊,藉以蒐集相關弱點資訊。
只要將這些基本設定都調整妥當,網站安全就可以大幅提昇。
第二種:癱瘓網站
癱瘓網站常見的方法,就是讓網站將可處理封包的能力用完,當網站無法處理新的封包,就無法接收新的訊息。但由於一般網站通常可以處理大量封包,所以攻擊者要用大量的機器發動攻擊比較容易看到效果。另一種是將可處理連線的數量用完,讓網站無法處理新的連線,一般網站的連線數預設都不高,攻擊者通常用一台攻擊電腦就可以將目標可用的連線數耗盡,以下將介紹三種癱瘓網站的策略。
Flooding
簡單來說就是人海戰術,在短時間快速的用非常大量的查詢造成網站癱瘓,因為網站處理的能力有限,如果瞬間進來大量的查詢封包,超過網站處理的極限,新的封包就不會馬上被網站回覆,導致新來的訪客覺得網站沒反應,有當機的感覺。而體質比較不好的網站,有時候面對大量的查詢封包,也會造成整個網站當機。
像是HTTP Request Flooding[6]就是攻擊者傳送大量的HTTP Request封包到目標網站,試圖讓目標癱瘓。或是透過Wordpress pingback[7],利用其他網站,以反射攻擊的原理,將大量的回覆訊息送到目標網站,讓目標癱瘓。要避免Flooding這種短時間大量的封包攻擊,可以透過防火牆限制短時間內大量封包的來源IP來緩解此攻擊。
Exploit
簡單來說就是一招定勝負,相對於Flooding的短時間大量攻擊,Exploit攻擊只要用少量的封包就可以癱瘓網站。攻擊者只要知道目標有那些弱點,而且目標也還未將弱點修補時,攻擊者就可透過弱點下手,讓網站直接癱瘓。
舉例來說,像是2017年編號CVE-2017-15707[8],攻擊者可以利用Apache Struts的弱點,發動DoS攻擊。2016年編號CVE-2016-3369[9],攻擊者利用IIS弱點讓目標系統停止回應。要避免攻擊者透過此方法癱瘓網站,只要定期更新修補弱點,就有很好的防禦效果。
Slow HTTP
透過消耗連線數量讓網站沒有任何可用連線以提供服務,相對於Flooding的短時間大量的攻擊,Slow HTTP[10]是長時間的佔用連線,攻擊策略剛好相反。網站的服務連線數量有限,若每個可用來服務的連線都在使用,新的訪客就無法存取此網站,對訪客而言,就是無法使用網站。雖然網站可能沒有癱瘓,但對訪客來說因為無法瀏覽,所以感覺很像癱瘓。不過也有些網站對大量連線處理效率很差,連線數量變多,網站就會當機,對攻擊者來說這種網站是最棒的目標,因為要癱瘓非常容易。此攻擊可以根據HTTP的方法分為以下:
‧GET:也稱為Slow Read,慢慢的下載網站的物件,例如圖片、網頁或檔案。正常瀏覽或下載這些網頁物件或檔案時很快就會下載完,但透過此手法可以讓幾秒下載完的工作,拖延到幾十分鐘才處理完,將連線整整佔住幾十分鐘。當佔住的連線數量越多,網站可以用來服務的連線就越少。
‧POST:也稱為Slow Body,一般網站有透過POST上傳檔案或輸入文字的機制,只要控制上傳的速度慢一點,就可以讓原本幾秒就可以完成的事,又拖到好幾分鐘,佔住連線。
‧HEAD:也稱為Slowloris,開始在存取網站時,先傳送HEAD封包到網站,但攻擊者故意放慢傳送的速度,一點一點的傳,讓整個過程變很久,就可以達到佔住連線的目的。
如果要了解網站對Slow HTTP攻擊的承受度,可以用slowhttptest[11]工具檢測。如果要防禦,可透過一些模組控制連線的使用時間,或限制每次傳輸封包的量不能太低,像是mod_qos、mod_reqtimeout等模組都有緩解的效果。
總結
很多網站的資安問題都可以在建置規劃時就避免,在一開始設計網站時,任何可能會讓資料進入的地方都要嚴格審查,而網站在維運時更要勤快更新補洞,並調整好相關的防禦模組抵擋DoS攻擊,就可以將網站的資安威脅降低。如果希望可以做得更好,可以找資安公司做更進階的檢查,像是定期對網站做弱點掃描滲透測試,檢查網站是否有可能的切入點讓攻擊者下手,或是對網站做DoS演練,了解網站防禦機制的耐打程度,也可以做資安健診仔細檢查網站是否早已經被攻擊者佔據,最後還可以透過SOC服務監控事件,關聯各種不同設備的資安日誌,掌握戰場上的風吹草動,提高網站的資安能量。
參考文獻
[1].Denial-of-service attack ,https://en.wikipedia.org/wiki/Denial-of-service_attack
[2]. web app vulnerabilities,http://systw.net/note/af/sblog/more.php?id=174
[3].OWASP Top 10-2017,https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf
[4].SQL injection,https://en.wikipedia.org/wiki/SQL_injection
[5].Cross-site_scripting,https://en.wikipedia.org/wiki/Cross-site_scripting
[6].HTTP flood,https://www.incapsula.com/ddos/attack-glossary/http-flood.html
[7].WordPress Pingback DDoS攻擊分析,http://www.cc.ntu.edu.tw/chinese/epaper/0039/20161220_3904.html
[8].Apache Struts S2-054 DoS,https://www.secfree.com/article-588.html
[9].MS16-110, https://www.twncert.org.tw/NewsRSSDetail?lang=zh&RSSType=mssecurity&seq=15721
[10].How to Protect Against Slow HTTP Attacks,https://blog.qualys.com/securitylabs/2011/11/02/how-to-protect-against-slow-http-attacks
[11].slowhttptest,http://systw.net/note/af/sblog/more.php?id=326