沒有什么能消除所有的錯誤,在編寫的代碼中也是如此。平均而言,所有代碼都有錯誤。其中一些錯誤是良性的,有些會導(dǎo)致意外提前終止,少數(shù)會導(dǎo)致資源消耗失控。一些錯誤會導(dǎo)致安全漏洞,讓用戶做一些意想不到的事情,有時甚至是不希望發(fā)生的事情。
一些安全漏洞是行為漏洞,因為它們?nèi)Q于代碼在執(zhí)行時的行為。另一種類型是智能漏洞,代碼行為可能是正確的,但會泄露有關(guān)如何利用系統(tǒng)的詳細(xì)信息。這是兩種主要的代碼漏洞類型,兩者都有風(fēng)險。
運行時的行為漏洞
代碼運行時的行為漏洞涵蓋了廣泛的問題,但所有這些問題都是代碼行為導(dǎo)致的結(jié)果,在特定的情況下導(dǎo)致了不期望發(fā)生的結(jié)果,其中大多數(shù)都是無意的。
發(fā)送到數(shù)據(jù)庫的未轉(zhuǎn)義用戶輸入可能會導(dǎo)致SQL注入漏洞,或者發(fā)送到瀏覽器的未經(jīng)處理的字符串可能會創(chuàng)建跨站點腳本(XSS)漏洞。有些行為是有意為之,但卻會帶來意想不到的后果;允許其輸出環(huán)境變量或從外部資源讀取數(shù)據(jù)的Log4j字符串替換行為是故意的,但我們現(xiàn)在稱為 Log4Shell 的惡意使用并非如此。在最近的另一個示例中,可以利用多種行為組合在 Linux 臺式計算機上獲得 root 權(quán)限。
內(nèi)容中的情報漏洞
在20世紀(jì)50年代,電話公司(當(dāng)時幾乎只有一家)開始實施完全自動撥號,無需人工接線員在交換站接聽電話。從中收集到的信息導(dǎo)致創(chuàng)建了“藍盒子”,利用內(nèi)部信息讓外人控制電話設(shè)備并免費撥打長途電話。
今天,我們的代碼中存在情報漏洞。代碼中包含大量的秘密,以及這些秘密連接到哪些系統(tǒng)的細(xì)節(jié)。這些秘密曾經(jīng)很難管理,將它們放入代碼中是唯一可行的選擇,F(xiàn)在我們有像Hashicorp Vault這樣的工具,例如,幾乎每個云中都有安全密鑰庫,但是遺留代碼中所有這些秘密的遺留和安全債務(wù)對于Lapsus$這樣的攻擊者和其他專門針對代碼的人來說是一個金礦。
安全是一個過程,而不是一個產(chǎn)品
我們每個人都能說出許多類型的行為漏洞,比不同類型的情報漏洞多得多。但這兩類漏洞所代表的風(fēng)險相對相同。最近發(fā)生的事件表明,攻擊者利用從代碼中獲取的內(nèi)部信息,如從代碼中獲取的密碼和密鑰,夠在防火墻和其他訪問控制的情況下快速行動
將檢測集成到開發(fā)人員的工作流程中,這樣他們就可以在處理和審查代碼時在上下文中采取行動,這是消除新的安全問題的有效方法。為開發(fā)人員提供所需的信息以了解其代碼中智能風(fēng)險的總體情況、風(fēng)險最高的區(qū)域,以及指向他們可以立即修復(fù)的可操作問題以改善代碼健康狀況,這些工具對于幫助團隊降低歷史風(fēng)險是有必要的,理想情況下是通過輪換發(fā)現(xiàn)的任何秘密。
現(xiàn)有的代碼安全檢測工具可以自動完成這個過程,并幫助團隊消除代碼中超過一半的風(fēng)險。