近來Slowris頻頻利用HTTP通訊協定的漏洞進行攻擊,讓網站伺服器因為DoS侵擾而整個停擺。其中一個因應之道是善用開源碼的資源,為Apache伺服器加上防禦模組,好讓危害降低到最低。
·QS_SrvMaxConnClose
[%]
設定同時間可接受Keep-alive的連線數量或百分比。在HTTP通訊協定中是採用Request-Response的通訊模式,當使用者提出要求後,網站伺服器在處理完成後,便會回覆給使用者。在一般模式(即非Keep-alive的連線)下,每個要求皆須重新建立新的連接,並在請求完成後即關閉連接,等到下一個連線時,再建立新的連線。採用此通訊模式,網站伺服器必須花費大量的資源在重複建立連線上,因此在HTTP 1.1版本的通訊協定中,便允許使用者以Keep-alive的通訊模式來連接網站伺服器,當使用者提出要求並建立連線後,即繼續保持此連線來服務後續的要求,如此網站伺服器便不需花費資源來重複建立連線。QS_SrvMaxConnClose有number和%(百分比)兩種設定的方式,number代表直接設定同時間最大承受Keep-alive的連線數量,而%(百分比)為設定同時間能夠承受最大連線數(由MaxClients組態設定)的百分比,例如「MaxClients 256 QS_SrvMaxConnClose 50%」則表示網站伺服器同時間最大可接受Keep-alive之連線數量為256的百分之五十(亦即128個連線)。
·QS_SrvMaxConnPerIP
設定來源的個別IP能夠連線到網站伺服器的最大連線數。
·QS_SrvMaxConnExcludeIP
設定排除連線數限制的IP資訊(也就是此來源IP的連線數不受限制),可設定單一IP或IP的範圍。
·QS_SrvMinDataRate
[ Response (bytes/second)] []]
當網站伺服器的連線數,超過所設定的數目時,便排除掉要求速率低於及回覆速率低於的連線。例如「QS_SrvMinDataRate 500 1000 100」即表示當網站伺服器上的連線數超過100時,即排除掉要求速率低於500 bytes/second或回覆速率低於1000 bytes/second的連線。
·QS_SrvRequestRate
設定要求的最低速率。例如「SrvRequestRate 200」是表示網站伺服器不接受每秒傳輸小於200 bytes的要求。
說明至此,相信大家對於mod_qos的控制方式已有初步的了解。這裡可以思考一點的是,Slowris攻擊是利用故意不傳送或很緩慢地傳送要求標頭的結尾符號給網站伺服器,讓網站伺服器必須保持住此連線並等待結尾符號,因此占滿了網站伺服器所能服務的連線數上限,讓正常的使用者無法連線,藉此達到拒絕服務的目的。因此,可以藉由設定一個合理的要求標頭傳送完成時間來降低Slowris的攻擊危害。
可以在「httpd.conf」內設定如下的組態(其中數字部分,並無一定的數值,要依據自身所在的系統進行動態調校):
在重啟網站伺服器後,即可利用mod_qos模組來防禦Slowris的攻擊。
結語
從西元2000年全球駭客第一次成功地癱瘓當時最富盛名的Yahoo、eBay等電子商務網站後,DoS手法即一戰成名,直到今日,此種手法仍能活躍在攻擊手法排行榜上,這或許暗示著由於通訊協定或程式設計的不良,所以無法根除此類的攻擊手法,但也許可利用相關的防範程式來降低此類攻擊的成功率,進而減少駭客攻擊的誘因。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>