緩沖區溢出:指入侵者在程序的有關輸入項目中了輸入了超過規定長度的字符串,超過的部分通常就是入侵者想要執行的攻擊代碼,而程序編寫者又沒有進行輸入長度的檢查,最終導致多出的攻擊代碼占據了輸入緩沖區後的內存而執行。別以為為登錄用戶名留出了200個字符就夠了而不再做長度檢查,所謂防小人不防君子,入侵者會想盡一切辦法嘗試攻擊的途徑的。 意料外的聯合使用問題:一個程序經常由功能不同的多層代碼組成,甚至會涉及到最底層的操作系統級別。入侵者通常會利用這個特點為不同的層輸入不同的內容,以達到竊取信息的目的。例如:對於由Perl編寫的程序,入侵者可以在程序的輸入項目中輸入類似“| mail < /etc/passwd”的字符串,從而使perl讓操作系統調用郵件程序,並發送出重要的密碼文件給入侵者。借刀殺人、借Mail送“信”,實在是高! 不對輸入內容進行預期檢查:有些編程人員怕麻煩,對輸入內容不進行預期的匹配檢查,使入侵者輸送炸彈的工作輕松簡單。 Race conditions:多任務多線程的程序越來越多,在提高運行效率的同時,也要注意Race conditions的問題。比如說:程序A和程序B都按照“讀/改/寫”的順序操作一個文件,當A進行完讀和改的工作時,B啟動立即執行完“讀/改/寫”的全部工作,這時A繼續執行寫工作,結果是A的操作沒有了表現!入侵者就可能利用這個處理順序上的漏洞改寫某些重要文件從而達到闖入系統的目的,所以,編程人員要注意文件操作的順序以及鎖定等問題。
2、系統配置不當
默認配置的不足:許多系統安裝後都有默認的安全配置信息,通常被稱為easy to use。但遺憾的是,easy to use還意味著easy to break in。所以,一定對默認配置進行揚棄的工作。 管理員懶散:懶散的表現之一就是系統安裝後保持管理員口令的空值,而且隨後不進行修改。要知道,入侵者首先要做的事情就是搜索網絡上是否有這樣的管理員為空口令的機器。 臨時端口:有時候為了測試之用,管理員會在機器上打開一個臨時端口,但測試完後卻忘記了禁止它,這樣就會給入侵者有洞可尋、有漏可鑽。通常的解決策略是:除非一個端口是必須使用的,否則禁止它!一般情況下,安全審計數據包可用於發現這樣的端口並通知管理者。 信任關系:網絡間的系統經常建立信任關系以方便資源共享,但這也給入侵者帶來借牛打力、間接攻擊的可能,例如,只要攻破信任群中的一個機器,就有可能進一步攻擊其他的機器。所以,要對信任關系嚴格審核、確保真正的安全聯盟。