從java語言的角度,需要重視的是程序級別的攻擊,也就是利用Java、jvm或應(yīng)用程序的瑕疵,進行低成本的Dos攻擊,這也是想要寫出安全的java代碼所必須考慮的,例如:
? ? 1、如果使用的是早期的JDK和Applet等技術(shù),攻擊者構(gòu)建合法但惡劣的程序就相對容易,例如,將其線程優(yōu)先級設(shè)置為最高,做一些看起來無害但空耗資源的事情;
? ? 2、利用java構(gòu)建類似上傳文件或者其他接受輸入的服務(wù),需要對消耗系統(tǒng)內(nèi)存或存儲的上線有所控制,因為我們不能將系統(tǒng)安全依賴于用戶的合理使用。其中特別注意的是涉及解壓縮功能時,就需要防范zip bomb等特定攻擊;
? ? 3、另外,java程序中需要明確釋放的資源又很多種,比如文件描述符,數(shù)據(jù)庫連接,甚至?xí)r再入鎖,任何情況下都應(yīng)該保證資源釋放成功,否則即使平時能夠正常運行,也可能被攻擊者利用而耗盡某類資源,這也算是可能的Dos攻擊來源。
各階段如何排查避免安全隱患?
1、開發(fā)和測試階段
? ? 在實際開發(fā)中,各種功能點五花八門,未必能考慮的全面,盡量使用廣泛驗證過的工具、類庫,不管時來自JDK自身,還是Apache等第三方組織,都在社區(qū)的反饋下持續(xù)地完善代碼安全;
? ? 開發(fā)過程中應(yīng)用代碼規(guī)約標準,是避免安全問題的有效手段;
? ? 在早期設(shè)計階段,就由安全專家組對新特性進行風(fēng)險評估;
? ? 開發(fā)過程中,尤其是code review階段,應(yīng)用OpenJDK自身定制的代碼規(guī)范;
? ? 利用多種靜態(tài)分析工具如Findbugs、Parfait等,幫助早期發(fā)現(xiàn)潛在安全風(fēng)險,并對相應(yīng)問題采取零容忍態(tài)度,強制要求解決;
? ??
部署階段
? ? JDK自身也是個軟件,難免會存在實現(xiàn)瑕疵,我們看到JDK更新的安全漏洞補丁,其實就是在修補這些漏洞,大多數(shù)存在序列化相關(guān)漏洞問題都是因為使用的JDK版本較低,可以通過部署解決問題;
? ? 如果是安全敏感型產(chǎn)品,建議關(guān)注JDK在加解密方面的路線圖,同樣的標準也應(yīng)用于其他語言和平臺,很多早期認為非常安全的算法,已經(jīng)被攻破,及時地升級基礎(chǔ)軟件是安全的必要條件。