Java和.NET開發人員更容易遭遇漏洞
開發人員通常將開放式Web應用程序安全項目(OWASP)十大漏洞榜單用作應用程序安全的基準,但超過四分之三的Java和.NET應用程序至少含有一個OWASP榜上漏洞。
上述結論出自安全測試公司Veracode針對近76萬個應用程序所做的分析。分析還發現,采用這兩個編程生態的應用程序中,大約五分之一至少存在一個高危漏洞。
總體而言,應用程序平均每個月有27%的幾率引入至少一個漏洞,編寫較差和不經常掃描的應用程序可能存在更多漏洞,而安全流程更完善且由訓練有素的開發人員編寫的應用程序則不太可能引入新的漏洞。
Veracode戰略產品管理副總裁Tim Jarrett表示,分析凸顯了將安全集成進開發流程的重要性。
他說道:“數據始終表明,一旦流程中樹立起安全慣例,你就會得到更好的結果,無論是在整個漏洞修復方面,還是在減緩漏洞涌現方面。這能起到很大的改善。”
同時,軟件公司和開發團隊仍在努力清除應用程序代碼里的缺陷和漏洞。但Veracode于1月11日發布的《軟件安全狀況》報告揭示,盡管開發人員和開源項目在加快軟件缺陷修復速度,漏洞的平均半衰期仍舊以月計,而非以日或周計。
例如,占調研所分析全部應用程序71%的Java和.NET應用程序,就分別在243天和158天之后仍有半數漏洞留存。
圖:Verocode《軟件安全狀況》報告
應用程序膨脹和過時都會對其安全性產生極大影響。平均而言,應用程序的代碼量增加了40%左右,更可能存在漏洞。分析發現,面世兩年的應用程序中大約54%存在漏洞,推出五年之久的應用程序則69%都存在漏洞。
JavaScript的安全性令人頗感意外
出乎意料的是,用JavaScript編寫或者采用JavaScript框架的應用程序在漏洞掃描中往往表現更好。大約80%的Java和.NET應用程序都存在漏洞,但僅有56%的JavaScript應用程序含有漏洞。同時,約20%的Java和.NET應用程序存在高危漏洞,但JavaScript應用程序存在高危漏洞的比例不足10%。
Jarret表示,JavaScript框架更新,安全性更強,而且具有開源生態的優勢,而Java從開源生態獲益較晚。
“JavaScript是較新的編程語言,所以用JavaScript編寫的應用程序也更新,而且之前的分析報告也告訴我們,應用程序的年限和漏洞修復時間之間存在關聯。適用于JavaScript的很多工具都相當成熟了,這種編程語言受到完備的支持。”
此外,Java應用程序中的漏洞是個第一方問題,需要開發人員自己來修復,而在JavaScript和Node.js框架中,漏洞往往是個第三方問題,因為漏洞往往出現在軟件依賴的組件中。
“很大程度上,Java應用程序安全問題的修復方式仍舊是修改類文件再編譯之。”Jarret稱,“而在JavaScript應用程序中,漏洞修復更像是個包管理問題。這對于開發人員來說就是另一碼事了,包管理可能更加簡單。”
新編程語言式微
報告數據還凸顯出開發人員想要學習的編程語言和大多數企業實際在用的編程語言之間的差異。Veracode觀察到的主流編程語言和生態,即Java、.NET和JavaScript,并非開發人員的編程技術之選。
Stack Overflow的《2022年開發者調查》揭示,JavaScript和基于JS的框架,如Node.js、React.js和Angular,統領開發人員首選技術榜單;而Java是最不受待見的編程語言——54%的受訪者都非常害怕Java,只有46%喜歡這種語言。
然而,Veracode掃描的應用程序中,用Java編寫的占據了近半壁江山(44%),用JavaScript編寫的僅占14%。
此外,開發人員最鐘愛的編程語言Rust,甚至都沒在Veracode的數據中出現;而在開發人員心目中排名第六的編程語言Python,只占了所掃描應用程序的不到4%。
Veracode戰略產品管理副總裁Jarret表示,出現這種割裂的部分原因在于,成熟應用程序是用成熟編程語言編寫的。
“所有代碼如果是座海上冰山,新興開發就是冰山的山尖尖,只有在這么小塊地方你才會看到人們選擇Go、Rust、Dart和Flutter。”
由于大量應用程序代碼庫都是用這些成熟的老舊編程語言編寫的,這種情況不太可能會改變。
“很遺憾,老舊應用程序長存不死,所以企業里存在很多具有這些笨重Java代碼庫和.NET代碼庫的關鍵應用。”