2010年1月6日 星期三

讓Apache伺服器遠離DoS攻擊

想像你擁有一家外賣速食店,你同一條街上的競爭對手一直都想把你擠垮。你過去晚上的工作一向是井井有條的,可是有一個晚上,你的電話響個不停,一筆又一筆的訂單接踵而至,你的司機整晚都忙著送東西,結果那些訂餐的地址卻不存在。而與此同時,你的老顧客嘗試通過電話訂餐,卻怎麼也打不通。這時,你的競爭者會順理成章地接管本該屬於你的顧客-往往是傾向於向你訂餐而忽略你的競爭對手的那些顧客。這樣連續幾晚,你將會面臨破產,而你的競爭對手的業務則進入了新的歷程。
如果你在互聯網上開展商務活動,你很容易受到惡意的拒絕服務攻擊 (DoS),而任何運行Web網站、FTP或者郵件管理的伺服器都會受到不同程度的攻擊。
我們很容易想到:競爭對手、惡意的駭客或是對公司極度不滿的舊員工都希望給公司帶來麻煩。他們選擇的方法可能就是讓公司的網站或是其他基於伺服器的公共服務離線,或者至少拖慢其速度以至部分不可用。有很多方法可以達到這一目的,包括發送大量請求以佔用大部分頻寬的,或是讓伺服器超過極限的洪水攻擊。
攻擊可能產生在伺服器上、伺服器所在的網路中或是伺服器的作業系統裡。同樣存在分散式的攻擊,包括病毒分佈攻擊、隨機分散式伺服器攻擊、同步持續攻擊、協同攻擊等。
你應該怎麼在Apache伺服器上避免這樣的攻擊呢?首先,讓我們來分析這類攻擊的原理,以便瞭解它們是怎麼影響你的伺服器的。
封包洪水攻擊
一種中斷伺服器或是其本地網路的方法是資料包洪水攻擊,它通常使用Internet協定ICMP(Internet Control Message Protocol)或是UDP。在最簡單的形式下,這些攻擊都是使伺服器或是網路的負載過重,這意味著駭客的網路速度必須比目標的網路速度要快。使用UDP包的優勢是不會有任何封包返回到駭客的電腦。而使用ICMP包的優勢是駭客能讓攻擊更加富於變化,發送有缺陷的封包會搞亂並鎖住受害者的網路。在一種流行的變化中,駭客能愚弄目標伺服器,讓其相信正在受到來自自身的洪水攻擊。
磁片攻擊
這是一種更殘忍的攻擊,它不僅僅影響目的電腦的通信,還破壞其硬體。偽造的使用者請求利用寫命令攻擊目的電腦的硬碟,讓其超過極限,並強制關閉。這不僅僅是破壞,受害者會遭遇不幸,因為資訊會暫時不可達,甚至丟失。
癱瘓路由
通常,DoS攻擊集中在路由器上,攻擊者首先獲得控制權並操縱目的機器 。當攻擊者能夠更改路由器的路由表時,會導致整個網路癱瘓。這種攻擊是非常陰險的,因為它開始出現的時候往往令人莫名其妙。畢竟,你的伺服器會很快失效,但是當整個網路癱瘓,還是有很多原因需要詳審的。
Apache伺服器最大的缺點是,它的普及性使它成為眾矢之的。Apache伺服器無時無刻不受到DoS攻擊的威脅。
Apache伺服器的脆弱性
上面提到的攻擊,面對運行著Apache的伺服器,採用了特殊的內核和後台。其中一種的內核偽造真實的TCP/IP資料包,否則他們不能遠端的入侵。但是偽造的TCP/IP資料包現在更容易產生並且更普遍的運用於伺服器攻擊活動中。最令人恐懼的事情是,對於這種攻擊,目的電腦上並不需要運行任何程式。
伺服器代碼另一個可怕的脆弱性是,記憶體分配特性為服務、客戶機功能效率成分提交善意的請求。Apache 伺服器可能會因為RAM的不斷消耗而崩潰。
自我防護的方法
系統管理員主機對主機攻擊防範
入站的報頭將提示Apache伺服器為所有附加的報頭分配記憶體。從分配完記憶體到SESSION的最小值,表頭的請求會引起可用記憶體非線形的消耗,最終導致系統崩潰。這類攻擊事實上是一種標準。
如果你正在運行v1.3.2+版本的Apache 伺服器,你可以抵禦這樣的攻擊。這非常容易:假設上面談到的主機對主機攻擊成功了,大量的純表頭請求會強烈的轟擊伺服器。你的解決方案就是MaxClients 指令,系統管理員可以通過這個指令設置表頭數量的最大值,就可以在記憶體耗盡以前中斷主機對主機攻擊。
在Apache伺服器上防範繁殖性攻擊
最有威脅的攻擊是分散式拒絕服務攻擊 (DDoS)。當很多堡壘主機被感染,並一起向你的伺服器發動拒絕服務攻擊的時候,你將傷痕累累。繁殖性攻擊是最惡劣的,因為攻擊程式會不通過人工干涉蔓延。
Apache伺服器特別容易受攻擊,無論是對分散式拒絕服務攻擊還是隱藏來源的攻擊。為什麼?因為Apache伺服器無處不在。在網上分佈著無數的Apache伺服器,因此為Apache定制的病毒 (特別是SSL蠕蟲) 潛伏在許多主機上;頻寬如今已經非常充裕,因此有很多的空間可供駭客操縱。Apache系統趨向穩定,很少需要生機,因此這些問題是讓人頭疼的。
攻擊蠕蟲利用伺服器代碼的漏洞,通過SSL握手將自己安裝在Apache伺服器上。駭客利用緩衝溢出將一個偽造的鑰匙安裝在伺服器上(適用於運行低於0.9.6e 版本的OpenSSL的伺服器)。攻擊者能夠在被感染的主機上執行惡意程式碼,在許多這樣病毒的作用下,下一步就是對特定的目標發動一場浩大的分散式拒絕服務攻擊了。通過將這樣的蠕蟲散播到大量的主機上,大規模的點對點攻擊得以進行,對目的電腦或者網路帶來不可挽回的損失。
你該做些什麼?還不趕緊升級你的OpenSSL!升級到0.9.6e或者更高版本;偽造的鑰匙將起不了任何作用,也不能滲透到系統裡。一些反病毒程式能發現並殺死SSL蠕蟲,但是別指望這些:蠕蟲可能產生變體,從而逃脫反病毒軟體的追捕 。注意重啟Apache可以殺死這樣的病毒,但是對防止將來的感染沒有任何意義。
防火牆仍然非常有價值
在網路攻擊中,防火牆能更好的保護你的安全。你必須明白它能做什麼,不能做什麼。防火牆能夠説明你抵禦常規的拒絕服務攻擊(利用偽造使用者發送不虛假的請求),至少能起到緩和的作用。然而防火牆不能説明你抵禦採用合法服務的拒絕服務攻擊,因此在部署防火牆的時候安全人員不應該遺漏這一點。
當拒絕服務攻擊是一次網路攻擊的時候,防火牆確實很受用。這種類型的攻擊的實質是資料包洪水入侵,防火牆能發現那些不正常的資料包並向你提示可疑的事件。此外,你的防火牆甚至可以檢查進入你主機的遠端使用者。
如何檢測攻擊
你可能猜得出,檢測網路級的拒絕服務攻擊要比伺服器級的簡單一些。網路攻擊影響通訊和路由,這些都是可以正常監控的。你可以在linuxsecurity.com找到一些相關專業軟體的細節。
DoS伺服器攻擊的檢測要麻煩一些,因為在伺服器級很難分辨請求是合法的還是偽造的。你能做的事情主要是瞭解網路何時產生異常,因此你能在起初被攻擊的時候檢測到攻擊。有一些著名的軟體就是出於這一目的的。你可以參考Tripwire、Nagios和 SNIPS (系統/網路集成輪詢系統)。
DoS防範機動
自從Apache 1.3開始,一個被稱作mod_dosevasive的新模組出現了。它的意思是" DoS防範機動(DoS evasive maneuvers)" 它的功能是拒絕偽造的資料請求。它密切監控頻寬和資源使用率。雖然它對分散式拒絕服務攻擊毫無辦法 (幾乎每有一個軟體能對付分散式拒絕服務攻擊),但是它對防範普通的拒絕服務攻擊還是非常有效,絕對值得投資。