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