漫談軟體缺陷與漏洞

作者 | Cynthia Freeney

譯者 | 敘緣

策劃 | 丁曉昀

審校 | 冬雨

軟體缺陷

儘管自編碼有了一些進展,但現在開發軟體主要仍然得靠人工。

然而,人非聖賢,孰能無過?因此,我們可以得到一個合理的推測:由人生產出來的產品和服務,必然包含某種形式的缺陷。所以,軟體缺陷不可避免,並且是軟體開發過程的固有部分。

軟體缺陷是邏輯或配置上的錯誤,會導致系統產生我們不期望的行為。

軟體應用程式中的一些主要和常見缺陷包括業務邏輯錯誤、複雜性問題、檔案處理問題、封裝問題、資料驗證問題、身份認證和授權錯誤。

常見弱點列舉 (CWE) 清單描述了常見的軟體和硬體弱點,會導致安全方面的相關問題。該清單對可能存在的軟體弱點進行了全面分類。

在業務研發過程中,我們通常透過比較內部質量和風險指標以及對需求、規範、標準和截止日期等方面的遵守程度,來衡量和評估軟體質量等級的可接受度。

因此,我們應該可以得到這樣一個結論:軟體質量是主觀的,受業務承諾、高階管理人員的參與情況和組織文化的影響。

軟體開發中一個重要的關注點涉及到在預算、進度、範圍、質量和安全性這些方面之間保持適當的平衡。一個方面的變化會影響其他方面。雖然都不希望改變計劃,但這在軟體開發生命週期中並不少見。這些場景反映了組織為了控制預算和進度,不得不在軟體質量和安全性方面做出妥協。

軟體質量並不總是軟體的安全性指標。軟體安全性的衡量標準,是在測試期間和生產部署之後發現的漏洞數量。軟體漏洞是一類軟體缺陷,潛在的攻擊者經常利用這些漏洞,繞過授權,訪問計算機系統或執行操作。有時,授權的使用者也會出於惡意,利用系統中這些未修補的已知漏洞。

這些使用者還可能會輸入不能透過校驗的資料,無意中利用了軟體漏洞,從而損害資料完整性和使用這些資料的功能的可靠性。對漏洞的利用會針對下面三個安全支柱中的一個或多個:機密性、完整性和可用性,它們通常稱為 CIA 三元組。

軟體漏洞

現在已公佈的漏洞利用行為,以及 OWASP 十大、MITRE 常見漏洞和暴露 (CVE) 列表、美國國家漏洞資料庫和其他來源提供的見解都在講軟體漏洞。總體而言,這些資訊強調了技術創新如何打破了所需的平衡,我們可以根據這些資訊採取更有效的措施,在產品部署之前更好地檢測和減少軟體漏洞。

軟體安全瑕疵越來越多,影響最大的因素是我們對軟體安全性不思進取的態度、在軟體安全性方面缺乏有效的最佳實踐、軟體開發人員和潛在攻擊者之間的知識差異以及不安全的遺留軟體。

由於威脅在不斷變化,因此,在安全方面與時俱進的態度對於達成軟體安全性很有必要。組織在開發和部署軟體時,如果對安全的態度原地踏步,有可能會把內部合規跟有效、安全的軟體開發週期過程混為一談;對不斷髮展的威脅向量認識不足;從而無意中增加客戶在各方面的風險。安全策略一成不變,只依賴內部合規來證明開發的軟體很安全,這是短視的行為。

隨著時間的推移,這種依賴性將導致利益相關者對組織開發安全軟體的能力產生盲目的信心,並降低軟體開發團隊充分審查和應對不斷變化的威脅的能力。若我所料不差,這些組織很可能沒有有效的補丁管理程式,也沒有在產品或解決方案實施過程中整合軟體安全方面的設計原則。他們也不太可能新增安全相關場景的測試套件,或將軟體安全的最佳實踐納入軟體開發流程。

想要研發安全的軟體,在研發生命週期中就應該應用軟體安全方面的最佳實踐。最佳實踐涵蓋安全設計原則、編碼、測試、工具以及針對開發人員和測試人員的培訓,有助於在將產品和解決方案部署到生產環境之前主動檢測和修復漏洞。在合適的情況下,應用“故障安全”、“最小許可權”、“深度防禦”和“職責分離”等安全設計原則,可以增強應用程式的安全性。此外,還必須優先對開發人員和測試人員進行軟體安全性方面的常規培訓。

軟體開發人員和潛在攻擊者之間的知識差距正在擴大。這種現象的原因不盡相同,其中一些原因是心態、主要關注領域不同和缺乏學習機會。此外,一些軟體開發人員對系統妥協持零和態度。這種心態與深度防禦的安全設計原則背道而馳,並認為網路和裝置漏洞實際上是“天國的鑰匙”事件(譯註:keys-to-the-kingdom,基督教典故,此處是指透過漏洞獲得極大許可權是漏洞發現者應得的)。因此,他們認為試圖儘量減少妥協是徒勞的。有許多被爆出來的系統資料洩露事件,正是這種心態引發的後果,它們因缺少安全性或分層安全性不足,導致未加密的個人資料被盜。

這種“零和”心態,無意中助長了潛在攻擊者透過各種技術深入到網路中進一步破壞生態系統的能力,從而可能獲得對包含個人和業務資料的其他系統的訪問許可權。仔細審查程式碼是常見的深度防禦措施,但一些軟體開發人員未能有效利用。這些開發人員完全依賴自動程式碼掃描工具,而沒有審查程式碼,或者只是粗略地審查程式碼。使用自動程式碼掃描工具並仔細審查程式碼才是一種有效的深度防禦策略,可以在解決方案或產品部署到生產環境之前檢測出漏洞。

軟體開發人員和潛在攻擊者有不同的優先順序和重點領域。軟體開發人員的重點領域包括實現業務邏輯;修復軟體缺陷以滿足質量要求;確保他們實施的功能或解決方案滿足內部實用性、可用性和效能指標或服務水平協議 (SLA) 中的指標。顯而易見,軟體開發人員會在其主要關注領域獲得專業知識。而潛在攻擊者主要關注領域包括系統和軟體行為分析,他們不斷磨練技能以增加收入、滿足好奇心、實現工具集、偵察和探索。所以同樣地,潛在攻擊者在其關注領域裡也能獲得專業知識。

潛在攻擊者和軟體開發人員之間的技能差異,讓組織需要在軟體安全方面持續地對軟體開發人員進行培訓。軟體開發人員還必須瞭解當前的和不斷拓展的攻擊向量,並瞭解軟體攻擊面的概念,以避免在軟體實現和修改過程中誤入雷區。此外,軟體開發人員必須轉變觀念,將軟體安全原則和最佳實踐納入到軟體開發生命週期中,它們與功能實現具有同等優先順序。

在開發現在被稱為“遺留”軟體的那些年裡,功能實現通常有最高優先順序。對於許多軟體供應商而言,軟體安全跟功能的優先順序不同,而且不是軟體開發流程的一部分。在這種優先順序安排以及威脅形勢不斷增長的長期影響下,其結果就是現在“遺留”軟體中那些漏洞會被人發現和利用。為什麼優先考慮功能實現,原因各不相同。

競爭、上市時間問題以及對軟體安全缺乏關注,是組織不能遵循軟體安全最佳實踐和維持軟體安全開發流程的主要原因。某些組織為了更好地保護“遺留”軟體,給它們分配了資金和資源,在所需功能的實現上做出犧牲;並且由於持續關注在“遺留”軟體的保護上,可能會喪失潛在的競爭優勢。而其他組織透過檢查軟體漏洞來主動評估其“遺留”系統。儘管如此,在程式碼庫被完全修補、升級到最新最安全或被廢棄之前,遺留軟體都將是漏洞利用方面的沃土。

結 論

軟體是潛在攻擊者最常用的攻擊媒介之一。因此,許多組織意識到,為了實現和維護安全的軟體開發流程和基礎架構,盡職盡責的調查非常重要。這些組織獨立而又協同地為推進網路和軟體安全領域的防禦策略做出貢獻。企業貢獻包括:建立描述網路攻擊階段的安全模型和框架(例如洛克希德馬丁公司的網路殺傷鏈),從而使組織能夠規劃相應的緩解措施;設立賞金計劃,獎勵查詢漏洞,讓安全研究人員和其他人可以因發現可利用的軟體缺陷而掙到錢;對開源網路安全工具集的貢獻;編寫應用程式安全白皮書,描述最佳實踐並促進軟體安全向開發 - 安全 - 運維(DevSecOps)自然過渡。

不斷髮展的軟體攻擊向量使得我們不可能在生產部署之前消除所有軟體漏洞。儘管如此,軟體開發人員還是必須持續學習軟體安全開發。也有人正關注於使用機器學習來檢測軟體漏洞,這將有助於更快、更有效地檢測軟體漏洞。然而,這種在專業領域採用機器學習的結果是否符合預期,目前還不確定。與此同時,各組織還是必須繼續在同一戰線上持續投入,共同抗衡潛在攻擊者。

作者簡介

Cynthia Freeney 目前就職於一家專門從事生物醫學人工智慧和自然語言處理技術的組織,擔任軟體專案經理和安全官的雙重角色。她擁有 Scrum Master 認證和 ISC2 認證軟體安全生命週期專家(CSSLP)認證,並且是網路安全的狂熱愛好者。

https://www。infoq。com/articles/emerging-software-vulnerabilities/