步驟一:端口掃描
你需要做的第一件事是在客戶端和服務器端進行一次端口掃描,找出那些打開但并不需要的通訊端口。各種服務如FTP、NetBIOS、echo、gotd等使用的端口是引起安全問題的典型因素。對于TCP和UDP端口來說,根據(jù)經驗通常的做法是:關掉任何程序運行所不需要的服務或監(jiān)聽器。
端口掃描被用來檢測目標系統(tǒng)上哪些TCP和UDP端口正在監(jiān)聽,即等待連接。大多數(shù)的計算機默認地打開了許多這樣的端口,黑客和破解者經?;ê芏鄷r間對它們的目標進行端口掃描來定位監(jiān)聽器,這是他們開始攻擊的前奏。一旦這些端口都被鑒別出來,要使用它們也就不困難了。
端口掃描工具,通常叫端口掃描器,很容易在Internet上找到。其中很多是基于Linux的。例如Namp、Strobe、Netcat是比較好的一類。我最喜歡的基于Linux的端口掃描器是Nump。也有許多基于Microsoft Windows的端口掃描器,其中我最喜歡的是Ipswitch的WS Ping ProPack。WS Ping ProPack是一個低開銷、多用途的網絡問題定位工具,它將許多功能包裝成簡單易用的形式。
有了端口掃描器后,對全部TCP和UDP端口進行一次完整的檢查來確定哪些端口是打開的。將監(jiān)測到的打開的端口與系統(tǒng)運行所需要用到的端口進行比較,關閉所有沒有用到的端口。在Microsoft操作系統(tǒng)中關閉端口經常需要重新配置操作系統(tǒng)的服務或者修改注冊表設置。UNIX和Linux系統(tǒng)就簡單一些:通常只是將配置文件中的某一行注釋掉。
步驟二:檢查用戶帳戶
接下來,需要將目光轉移,看看操作系統(tǒng)、任何數(shù)據(jù)庫以及程序自身,特別注意guest用戶帳戶、默認賬戶或者簡單密碼賬戶以及不需要的用戶ID。之所以需要這樣做是因為大多數(shù)的默認設置留下了許多漏洞,創(chuàng)建了多余的賬戶,它們可能會被用來危及系統(tǒng)的安全。這種情況在使用數(shù)據(jù)庫系統(tǒng)如Oracle或Web服務器如Microsoft Internet Information Services (IIS)時特別突出。
我曾經通過使用本不該存在或應被禁止的用戶ID和密碼登陸進入過許多路由其、數(shù)據(jù)庫和應用程序中。例如,若干年前,在測試一個簡單的Web應用程序時,我嘗試用Guest 賬戶ID和空密碼登陸進系統(tǒng)。很出乎我的意料,程序很爽快地將Guest作為合法用戶并允許我登陸。然后我又試了幾個其它的賬戶,如輸入用戶ID和密碼為空/空或管理員/管理員,結果都成功了。
有了這次經驗,我總是在軟件安裝手冊的每一章尋找默認的賬號和密碼。我建立了一份這些默認賬號和密碼的列表,以確保能夠把找到過的都試試。對于程序本身我也這樣做,建立一份由程序員創(chuàng)建的測試用戶帳戶,也把它們試試。
測試這些東西能夠幫助發(fā)現(xiàn)危害系統(tǒng)的途徑,禁用和刪除不必須的賬戶是一種消除找到的缺陷的一種方法。對于通訊端口也有一個相似的方法:禁用任何系統(tǒng)運行所不需要的用戶ID。如果某個用戶ID不能被禁用,那么至少改變它的默認密碼,使其不易被破解。
你會問,怎樣才算一個好的密碼?它地長度至少為六到八個字符,并含有一個特殊字符。密碼必須足夠長,以使其不易被破解,但是必須能夠容易記住——這是難以兩全的。我喜歡使用縮寫詞或者容易記憶的設備。千萬別用任何易猜的單詞或習語,這是一個常見的密碼失誤。同樣的,不要使用字典中的單個詞語。我記憶最深刻的差密碼之一是ROLLTIDE,這是我在
阿拉巴馬州大學一臺被丟棄的機器上發(fā)現(xiàn)的(這所大學運動隊的昵稱是Crimson Tide)。
步驟三:檢查目錄許可
在關閉了無用端口并禁用了多余的賬號后,仔細檢查一下程序所用到的數(shù)據(jù)庫和服務器目錄的權限設置。很多攻擊利用了配置失誤的權限,這種方法經常被用來攻擊Web服務器。
例如,使用CGI腳本的Web站點有時允許寫訪問。通過它,一個惡意的供給者可以很簡單地在CGI二進制目錄下放置一個文件。然后他就能夠調用這個腳本文件,Web服務器會運行它,典型地在管理員權限下。能夠寫并執(zhí)行腳本是非常危險的,要開放這些權限應該格外小心。
另一個例子,幾年前,我給一個安全實驗室里的一個非常重要的系統(tǒng)作測試。通過配置失誤的權限,我可以在很短的時間內破壞整個實驗室以及所有17個被認為是安全的機器。在端口掃描之后,我發(fā)現(xiàn)每個服務器都運行了一個FTP監(jiān)聽器,而且每個都允許匿名訪問,使得我可以訪問每個服務器系統(tǒng)。
FTP監(jiān)聽器給了我對每臺機器上真正存放密碼文件的訪問權限,真是一個巨大的配置失誤。由于權限如此設置,我不僅可以下載存放密碼的文件,而且可以通過把密碼文件中的密碼修改后再上傳給服務器覆蓋源文件而使這些用戶“中毒”。當然我將自己授予了root訪問權,從而取得了機器的管理員權限。
如果正確地設置了目錄權限,我就不能訪問被指定給匿名用戶使用的FTP目錄以外的任何東西。因此,我本不能夠得到真正存放密碼的文件,更別提將其替換了。當然,如果他們曾經做過任何自己的端口掃描,就像我在步驟一里提到的,那么用這種方法我將哪里也到不了。
步驟四:對數(shù)據(jù)庫也進行和上面同樣的設置
文件系統(tǒng)不是唯一因權限設置不當而會受到攻擊的對象。大多數(shù)的數(shù)據(jù)庫系統(tǒng)有很多安全漏洞。它們的默認權限設置通常不正確,如打開了不必要的端口、創(chuàng)建了很多演示用戶。一個著名的例子是Oracle的演示用戶Scott,密碼為Tiger。加強數(shù)據(jù)庫安全的措施與操作系統(tǒng)一樣:關閉任何不需要的端口、刪除或禁用多余的用戶,并只給一個用戶完成其任務所必需的權限。
步驟五:關上后門
你對必須經過幾個步驟來測試被應用程序包裝得很深的功能感到厭倦了嗎?能夠建立一個直觀的快捷方式嗎?其實大家都這么想。問題在于這些快捷方式——也被叫做后門,經常被忽略或遺忘,而有時它們又會不經意地連同應用程序一起被發(fā)布。任何嚴格的安全測試程序都因該包括檢查程序代碼中不經意留下的后門。
另一個真實的因后門而引發(fā)安全問題的例子是Solaris操作系統(tǒng)的早期版本的[Ctrl]K錯誤。上世紀90年代早期的Solaris用戶只需以一般用戶身份登陸并按兩次[Ctrl]K就可以獲得root權限。
為了尋找后門,必須完整地檢查源代碼,查找基于非預期參數(shù)的條件跳轉語句。例如,如果某個程序是通過雙擊圖標而被調用的,那么要確保代碼不會因為從命令行用特殊參數(shù)調用而跳轉到某個管理或特權模式。
--------------------------------------------------------------------------------
安全測試是正常軟件測試的一部分嗎?
你所在的單位會例行對新的應用程序進行安全測試嗎?為了確保一個應用程序是安全的你會采取哪些處理過程和方法?將你的意見寄給我們,我們會在以后進行討論。
--------------------------------------------------------------------------------
同基礎測試一樣,安全測試必須系統(tǒng)的進行,以上五個步驟為此提供了系統(tǒng)化的方法。在依其行事之前,你可以對你的系統(tǒng)進行基礎的安全測試而不必招致巨大的花費。這個方法不會使你一夜之間變成一個安全專家,但是只要你理解所要測試的系統(tǒng),它會幫助你了解基礎的安全知識。如果想確保你的系統(tǒng)比較安全,或者使黑客和解密組織把你的系統(tǒng)作為目標的機會更小的話,那就按照這些步驟來做吧。