“拯救網站運維經理趙明”—紙上談兵與草廬對策
原創(chuàng)【51CTO.com獨家特稿】一個草民要想獲得大成功,單單有能力是不夠的。對于Web網站的安全,我們如果每個部分都要抓,都要立即改變,這有可能將趙明直接通過時光送到戰(zhàn)亂的年代。因此,如果我們看待安全問題都先從技術上下手,往往要再奮斗個幾年才能治理好這個網站,但和時間不等人。因此,我們從大局上看,技術再好,沒有策略支撐是沒用,而策略沒有產品支持也如水中月、鏡中花那樣了。有人說安全靠的是3分技術,7分管理,那么解決趙明負責的這個網站必須要分成三個部分:技術+產品+管理,這也便是處理好自己眼前的這點事的對策。
此次攻擊行為的分析
Web 服務器是一個企業(yè)開放性最強的地方,也是暴露安全問題最多的領域,因此容易成為攻擊目標。趙明作為技術負責人,要扭轉這種局面,就必須知道黑客是如何進入或者攻擊Web 服務器的,掌握黑客入侵的手法才能建立對應的保護體系。 在進一步討論之前,我們先看看這冊 Web 服務器遭到入侵的分析。
腳本小子:大多數(shù)情況下,這些自動進行的攻擊由黑客社區(qū)中技能水平最低的人來實施,這些人通常在黑客社區(qū)中并不具備較高的知識水平,但這并不意味他們不危險。當腳本小子獲得一個向導性的工具,啟動一個攻擊,他們通常不了解這種行為的后果,如潛在地破壞系統(tǒng)或無意識地執(zhí)行拒絕服務攻擊(DoS)。這類人通常為一些網絡新手,他們CGI界面的掃描程序或密碼破解器(password cracker)并針對比較大的目標運行這些應用程序以尋求一些 “有趣” 的結果,而趙明負責的網站很有可能因為沒有防火墻而成為結果中的一部分。
腳本小子可以利用工具,構建一個當前在線并且可訪問的系統(tǒng)數(shù)據(jù)庫,例如: Angry IP scanner 或 Nmap執(zhí)行一個簡單的 ping 掃描,以獲得一個列表,然后使用 Nessus 和其他多種工具,利用漏洞數(shù)據(jù)庫掃描發(fā)現(xiàn)的每個系統(tǒng),發(fā)現(xiàn)漏洞并利用該漏洞。攻擊者可以執(zhí)行掃描。 一旦通過漏洞,獲得了了系統(tǒng)控制權,這些攻擊者會胡亂的搞一通,然后使用一項技術掩飾其蹤跡或滲透行為的證據(jù),但如果沒有配套的刪除日志的工具,他們也就暴露了痕跡。
但是在大多數(shù)情況下腳本小子不執(zhí)行該步驟,這從趙明反應出日志被刪除的事件可以看出來。因此,如果只針對此次攻擊作分析,我認為攻擊者的水平要高一些,或者是存在某些惡意商業(yè)性進攻。攻擊者也很有可能在黑客社區(qū)中分享這個成果,這對于趙明來說,如果找不出問題的所在,必然要遭到更多的攻擊。
防護架構與代碼漏洞的分析
Web 服務器面臨許多威脅,大部分威脅與系統(tǒng)中配置的應用程序、操作系統(tǒng)和環(huán)境有關,前面主要是操作系統(tǒng)和應用程序,而Web整體環(huán)境沒有進行過安全檢測,一樣也會成為Web服務器的“壞鄰居”。基本上,攻擊趙明的黑客擁有了多個趙明不了解的技術和條件。例如,黑客可以通過探測掃描得到企業(yè)網絡的完整基礎設施,如下圖。這樣的網絡結構如果暴露出來,每個服務器的弱點都可能被挖掘出來,這樣就可以組織一次時間長久而又隱蔽的攻擊,并且他的欲望也很強。
針對趙明網站被篡改的文字內容判斷,攻擊者很有可能直接針對目標的弱點(Web服務器本身并沒有加固號)乘虛而入,更多的一種情況是通過這個網絡中其他系統(tǒng)(負載均衡服務器的漏洞,內部文件服務器中的木馬病毒等)實施攻擊,但是這些系統(tǒng)甚至不知道自己被用作攻擊的工具。至于在這類攻擊中牽涉到多少系統(tǒng),不但是趙明,我們如果沒有評估過所有的服務器,就無法做出肯定的估測。
假設,趙明很熟悉服務器加固的方法,那么最可能入侵到服務器的攻擊就是程序中不良代碼的漏洞或者(SQL)注入。
結構化查詢語言(SQL)注入 是專門針對數(shù)據(jù)庫的攻擊。在這種攻擊中,攻擊者利用數(shù)據(jù)庫或 Web 頁面的設計缺陷從數(shù)據(jù)庫提取信息,甚至操縱數(shù)據(jù)庫的信息。雖然我不能詳細解釋這種攻擊是如何實施的,但如果一般了解 SQL 的話,就可以找到相關的答案。如果趙明還是比較明智的(我看了一些上交的作品,把他分析得一無是處,本人不贊同),因為在 Web 服務器上駐留數(shù)據(jù)庫的話,很可能遭到這樣的攻擊,不過趙明還好,將數(shù)據(jù)庫服務器分離開來(Web與數(shù)據(jù)庫分離一樣可以被攻破)。
下面的內容,是不是替運維人員責任的推脫呢?從開發(fā)角度上看,任何開發(fā)人員都知道,不良的編程習慣會帶來問題。不良代碼源于眾多因素,包括培訓質量差、新手或應用程序的質量沒有保證。從好的方面講,不良代碼會給人添麻煩,并且某些特性不能按預期工作;從壞的方面講,包含不良代碼的應用程序就成了最大的安全隱患。
另一個問題在某種程度上也與不良代碼有關,尤其是開源系統(tǒng)+開源程序,程序人員在構建應用程序時將使用到它們,從而縮短開發(fā)周期。不利的一面是,我們用于構建應用程序的組件可能不像內部代碼那樣經過嚴格的測試,因此可能會給應用程序帶來隱患。
亡羊補牢的一些建議
下面一些建議,我想從三個方面對趙明進言:
◆服務器自身安全性的問題
何不學習一下黑客,也使用漏洞掃描工具,然后對服務器進行一次徹底的“維修”呢?使用漏洞掃描作為工具,以查找Web服務器和應用程序基礎設施中存在的問題,比如配置和補丁問題。使用漏洞掃描工具的需要注意的就是它們會經常需要更新,還能發(fā)現(xiàn)你未意識到的問題,從而允許你在系統(tǒng)被侵入之前修復它們。
另外,對于任何一個服務級別的操作系統(tǒng),都要及時更新系統(tǒng)。要關注一下是否發(fā)行補丁、服務包和更新等有助于系統(tǒng)安全的東西。你可以自動收到這些更新,或手動下載它們,這取決于您的安全策略,以及Web主機允許停機維護的時間策略。
◆架構補充與調整
我曾經碰見過好幾家公司將開發(fā)和生產服務器放在一起,他們允許開發(fā)團隊使用生產服務器開發(fā)代碼,或調試現(xiàn)有代碼。這通常是極端懶惰的結果就是遭到入侵,一旦攻擊者盯上您正在開發(fā)的代碼,就會帶來嚴重的后果。此外,開發(fā)人員在測試和調試代碼時,可能會損害安全性。為自己做件好事:實現(xiàn)一個生產與開發(fā)分離環(huán)境!
利用防火墻分割區(qū)域。這似乎是不言自明的,但仍然需要反復提醒。對于Internet來說,這個一個充滿邪惡的地方,所以為了避免將Web服務器暴露在外面,應該使用防火墻保護他們。而很多公司都擁有對內和對外的各種應用程序和服務器資源,在理想的情況下,這兩塊區(qū)域仍然需要通過“內網防火墻”是分開的,并且它們之間的通信要盡可能少。通過以這種方式分開系統(tǒng),就可以避免(至少降低了風險)攻擊者進入Web服務器,然后訪問數(shù)據(jù)或內部系統(tǒng)。因此,使用防火墻和 IDS(入侵診斷系統(tǒng))/IPS(入侵防御系統(tǒng))來保證僅允許特定的訪問,阻止不必要暴露的端口和非法的訪問十分有效。
Web 服務器或 Web 應用程序都能夠生成關于系統(tǒng)活動的日志。有了這些記錄之后,趙明需要經常查看它以發(fā)現(xiàn)問題,比如應用程序失敗或可疑入侵的活動,為了防止這些記錄被刪除,我們可以單獨在架構中增加一臺日志服務器,增加審計日志的工具,這就好比從犯罪現(xiàn)場收集的證據(jù),一旦出現(xiàn)問題,我們甚至可以通過網絡警察抓到他們。(當然,也可以利用蜜罐系統(tǒng)誘捕黑客)
那么所有的負責制成 Web 應用的各個層面,都會使用不同的技術來確保安全性。例如:為了保護服務器的安全,需要安裝防病毒軟件;為了保證用戶數(shù)據(jù)傳輸?shù)狡髽I(yè) Web 服務器的傳輸安全,通信層通常會使用 SSL技術加密數(shù)據(jù);為了防止用戶密碼泄露,可以使用身份認證機制授權用戶訪問 Web 應用。等等這些都需要配套的安全程序或是產品支撐。
◆開發(fā)人員培訓
這項工作實施起來可能要困難非常大,因為IT運維人員和開發(fā)人員的矛盾從來就沒有消除過。但一旦完成,將會帶來巨大的收益。對開發(fā)人員進行安全代碼實踐方面的培訓能夠消除或減少不良代碼引起的問題。
【51CTO.COM 獨家特稿,轉載請注明出處及作者!】
【編輯推薦】