給系統打補丁並非易事,但對確保網絡安全來說必不可少。
堵住漏洞要比與安全相關的其它任何策略更有助於確保網絡安全。遺憾的是,大多數組織和用戶並沒有堅持給系統打補丁。
據安全網站Attrition聲稱,在2000年記錄在案的5823起Web服務器遭破壞的事件當中,如果被感染系統安裝了補丁,99%原本是可以防止的。
如今形勢未見任何好轉。防病毒軟件廠商聲稱,SirCam和尼姆達分別是2002年9月第四和第五種最經常遇到的病毒。這兩種病毒能夠逞威正是依賴未打上補丁的舊版本IE浏覽器。
還有紅色代碼2,首次爆發後一年多來,它仍在攻擊許多系統。
如果打補丁很方便,組織和用戶早就堅持打補丁了。恰恰相反,系統管理員和用戶通常由於諸多原因未給系統打補丁。舉例來說,打補丁這項任務需要下決心投入必要資源。不過,聖迭戈超級計算中心(SDSC)這家大機構證明,打補丁不僅是能夠做到的,而且對網絡安全具有重要意義。
SDSC位於加州大學聖迭戈校園,這家研究機構擁有大量的磁盤空間和計算資源。與其它許多研究機構和高等院校一樣,SDSC也沒有防火牆,不過路由器倒是在執行常規的過濾任務,譬如阻擋帶有欺騙性源地址的數據包。但據SDSC聲稱,兩年多來,自己沒遇到過root權限被非法獲取的現象。該中心將這歸功於兩個做法:逐步淘汰使用明文口令進行驗證的所有網絡應用軟件;員工經常給網絡系統打補丁。
SDSC的網絡包括諸多版本的Unix以及數量幾乎同樣多的Windows桌面系統,總共有近800套系統。給這兩種操作系統打補丁所用的技術迥然不同,不過確實有著一些共同之處。
有關補丁的許多研究論文幾乎毫無例外地這樣開頭:引述開始實施打補丁方案所采取的三個事項。首先,組織要制訂一項命令打補丁的政策。若沒有管理部門的支持,諸多系統的擁有者會抵制給系統打補丁。譬如在SDSC,倘若用戶不允許管理員給系統打補丁,就無法連接到內部網絡。記住:因為沒有防火牆,所以“內部”在這種情況下只是相對的。不過對那些希望仍在“外部”的用戶而言,某些資源的確無法享用。
開始打補丁的第二步就是盤查軟硬件庫存。你要准確地知道哪些類型的系統連接在網絡上,包括硬件架構、操作系統及所有網絡服務,然後建立一個包含這些系統信息的數據庫。利用商用掃描產品或免費軟件如Nessus,庫存盤查工作可以實現自動化。
掃描工具也能發現網絡服務存在的潛在漏洞,但比查找漏洞更重要的是打上補丁。打個比方,漏洞掃描器只告訴你屋頂漏水了,盡管你早已知道屋頂需要修補。
大多數研究人員一致認為應該實施的第三個策略就是給所有系統統一打上補丁。你所在組織也許在運行幾個版本的Windows或Solaris,但一定要讓每個系統處在同樣的基礎上。在SDSC,這種方法包括逐步淘汰對舊操作系統的支持、逐步引入新版本。
無論怎樣,都要利用配送光盤建立參考系統、裝入標准應用軟件,然後安裝補丁。可以利用參與系統作為基准建立新系統。在Windows環境下,可以使用Ghost等克隆工具。在Unix環境下,視操作系統的需求而定,方法有所不同。安裝Linux系統時,克隆硬盤既簡便又迅捷。至於擁有較復雜硬件的龐大系統,可以使用廠商的安裝軟件,譬如Solaris JumpStart自動安裝工具。
一旦所有系統被統一打上補丁,你就完成了大部分工作。盡管你仍需要在Windows桌面系統上裝有最新的防病毒軟件,但不會再受到如今盛行的許多電子郵件病毒的感染。你的Unix系統將免受自動攻擊工具和腳本少年(script kiddy)實施的最常見攻擊的困擾。雖然與攻擊者的較量中還沒有獲勝,但你無疑獲得了喘息之機。
打補丁過程的下一步就是確保給系統打上的補丁是最新版本,說起來容易做時難。微軟光在2002年9月就發布了四則安全公報,幾乎可能影響到許多組織的每個Windows桌面系統。但這就意味著每次微軟打個噴嚏,你就要坐立不安嗎?
區別對待
未必如此。美國國家標准和技術研究所(NIST)發表過如何對待補丁的一份報告,認為廠商宣布新補丁時,不妨采用一種鑒別分類法(triage)。為了不被宣布補丁的消息牽著鼻子走,NIST建議組建補丁和漏洞小組(PVG),在新的漏洞和補丁宣布後,小組成員定期碰面討論及評估。只有出現緊急情況,PVG才會增加碰面次數,譬如說每周一次。
有時候也會出現極其危險、極易被人利用的漏洞,這時就要立即打上補丁。但更多時候,可以比較從容地安裝補丁,然後加以測試。
在SDSC,管理小組和自願的工作站用戶一道測試新補丁。小組不是倉促推出可能會破壞某些關鍵應用軟件的補丁,而是會在發布前至少用一天時間(有時是好幾天)來測試新補丁。然而,用於測試的系統所運行的應用軟件必須類似於將安裝補丁的系統上的應用軟件。因為除了電子郵件和網上浏覽,系統管理員和用戶的操作其實全然不同,這不像聽上去那麼簡單。測試人員還要核實補丁的確堵住了漏洞,而且沒有造成其它漏洞――過去就出現過這問題。在這種情況下,漏洞掃描器或Nessus等工具確實證明了自身價值。
一旦補丁經過了測試,而且證明安全有效,就可以安裝了。假設所有系統統一打上補丁,那麼利用Windows Domain驗證的組織可以使用微軟的系統管理服務(SMS)來完成這項工作。Windows管理員可以使用SMS安裝程序,在安裝補丁前後建立參考系統的快照(snapshot)。然後SMS會比較快照的不同,並建立一個包,描述未打補丁的系統和打上補丁的系統之間的區別。這辦法盡量減少了傳輸文件的數量,同時記錄下了包內的其它細微變化,譬如注冊表鍵和訪問控制列表(ACL)的改動。
SMS的目的在於,每次用戶登錄到域時,他的工作站都會接受檢查,查明SMS客戶軟件是否已安裝並在運行。如果還沒有安裝客戶軟件,NetLogon腳本就負責安裝。SMS或者發布補丁,以便系統“拉取”這些補丁;或者把補丁“推送”給系統。因為給Windows系統打補丁常常需要重啟動,許多機構往往把SMS設置成在前一天晚上打補丁。
在SDSC,Windows IT小組采取了其它措施,進一步確保SMS打補丁的工作順暢進行。他們把新系統的BIOS設置成首先從硬盤啟動,這樣一來,如果某人忘了把插在機器內的軟盤拿出來,系統不至於在重啟動期間停機。IT小組還去掉了Windows NT/2000/XP Secure Attention Sequence對話框上的關閉選項,以防用戶到了晚上忍不住關閉系統。晚上打補丁大大減小了因SMS引起系統莫名其妙地重啟動從而導致用戶丟失重要文件編輯結果的可能性。
至於Unix,SDSC使用了名為配置引擎(cfengine)的一個工具。該工具可用於純客戶機環境,也可用於客戶機/服務器環境。無論哪種模式,cfengine都會跟蹤配置文件,配置文件會在運行cfengine的Unix系統上處理日常管理任務,譬如刪除舊的臨時文件、檢查所有權和許可權及修復符號鏈接。Cfengine還可以用來安裝補丁。
系統管理員必須為每種Unix系統測試補丁,然後為每種系統采取相應的方式准備補丁。譬如說,Solaris 8及早期版本使用patchadd命令安裝補丁,而許多Linux系統使用某種形式的rpm命令。一旦補丁准備就緒,系統管理員就可以把補丁包安裝在服務器系統上,隨後客戶機系統會從服務器上獲取補丁。cfengine還包括隨機選擇請求補丁的時間的機制,從而防止網絡堵塞。如果每個系統都試圖同時下載補丁,就會出現堵塞。
有的放矢
SDSC的系統管理員和IT部門人員不是把時間全部用來打補丁。相反,打補丁成了每周常規工作的一部分,並經常進行,這足以防止問題發生。SDSC同其它許多組織的區別在於兩個因素:其一是以搞好安全和系統管理工作作為首要目標。其二是SDSC的管理人員願意對包括研究人員在內的所有用戶實施政策,從而使補丁策略有可能取得成效。
安裝補丁的這項制度已見成效。SDSC的一些策略如Windows系統上運行最新的防病毒軟件如今已成了其它機構所常見的商業慣例。而其它策略如使用參考系統、評估及測試補丁以及定期安裝補丁使SDSC成為網絡界其它同行的典范。
但即使所有組織都仿效SDSC的做法,仍存在重大的補丁問題。這是因為小企業和家庭用戶很少給系統打補丁。這一方面是由於不願給目前正常工作的系統打補丁。在其它情況下,可能純粹是由於需要在還不太可靠的網絡鏈路上下載100多兆的微軟服務包(Service Pack)。
不管是什麼理由,除非絕大部分系統打上了補丁,否則我們的網絡沒有一個會是安全的。