當(dāng)技術(shù)組件、應(yīng)用程序以及服務(wù)器需要相互依賴對方來提供業(yè)務(wù)解決方案時(shí),應(yīng)用程序依賴就產(chǎn)生了。開發(fā)人員在構(gòu)建解決方案時(shí),就已經(jīng)考慮到了特定的技術(shù)棧。這通常包括操作系統(tǒng)、數(shù)據(jù)庫引擎、開發(fā)框架(例如.Net或Java),以及其他基礎(chǔ)設(shè)施。 | ||
應(yīng)用程序的依賴關(guān)系有很多種類型,包括:庫、數(shù)據(jù)庫、緩存以及應(yīng)用程序所使用的第三方服務(wù)等。一旦應(yīng)用程序的依賴關(guān)系發(fā)生了缺失或存在問題,那么該應(yīng)用程序的功能、用戶體驗(yàn)、安全性以及正常運(yùn)行時(shí)間都會受到一系列的影響。 | ||
開發(fā)人員會因?yàn)楦鞣N各樣的原因來對應(yīng)用程序依賴項(xiàng)進(jìn)行升級,例如安全修復(fù)、新功能版本的發(fā)布、舊版本維護(hù)以及性能改進(jìn)等。但不幸的是,對應(yīng)用程序依賴項(xiàng)的升級是一件極其耗費(fèi)時(shí)間的事。例如,組織有時(shí)可能僅僅想要對某個(gè)單獨(dú)的庫進(jìn)行升級,但最后卻需要連同其所依賴的許多其他庫一起進(jìn)行升級。 | ||
軟件依賴關(guān)系:風(fēng)險(xiǎn)和安全措施 | ||
有時(shí)為了實(shí)現(xiàn)新功能或提高生產(chǎn)率,開發(fā)人員需要引入一些新庫。然而,盡管這些庫在引入的初期可以幫助節(jié)省一些時(shí)間,但到了后面,往往會逐漸成為項(xiàng)目的主要負(fù)擔(dān)。 | ||
“依賴地獄”指的是當(dāng)軟件依賴于其他依賴來運(yùn)行時(shí)所出現(xiàn)的問題。例如,當(dāng)某個(gè)第三方軟件出現(xiàn)故障并將bug引入到其他應(yīng)用程序時(shí),就會發(fā)生這種情況。理解“依賴地獄”產(chǎn)生的原因?qū)τ诒苊饣驕p少其發(fā)送至關(guān)重要?!耙蕾嚨鬲z”并不是由某個(gè)單一因素造成的,這其中存在著一系列的原因,其中常見的有: | ||
?代碼質(zhì)量:通常來講最好的辦法就是使用被開發(fā)人員所廣泛信任的泛型庫,但是泛型庫也仍有可能存在一些問題。并且,即使是在引入了這些庫之后,組織大概也無法發(fā)現(xiàn)依賴性漏洞,況且還可能存在其他潛在的漏洞。所以,在使用某個(gè)庫之前,對其進(jìn)行漏洞檢測是十分必要的。 | ||
?過時(shí)的代碼庫:在一些場景下,開發(fā)人員編寫了一段代碼,然而隨著時(shí)間的推移,這些代碼失去了使用價(jià)值并被完全遺棄,但是代碼本身卻未被從系統(tǒng)中刪除。于是這種類型的代碼就成為了一種潛在的風(fēng)險(xiǎn),使組織面臨一些修復(fù)成本高昂的漏洞。 | ||
?依賴項(xiàng)中的死代碼:有些依賴項(xiàng)可能會需要下載或使用不必要的死代碼。隨著不斷發(fā)展,項(xiàng)目可能會與這些死代碼出現(xiàn)重疊的依賴關(guān)系。 | ||
?不完整的文檔:在某些情況下,組織可能缺少用于向他人介紹程序功能的文檔,或者是文檔的質(zhì)量差。但由于缺乏適當(dāng)?shù)奈臋n,對軟件依賴關(guān)系的改進(jìn)和協(xié)調(diào)過程就會變得更加困難。 | ||
以上這些還僅是依賴關(guān)系可能導(dǎo)致問題的場景。另一方面,盡管外部的包和庫非常有用,代碼重用也是軟件工程不可分割的重要組成部分,但是在重用的時(shí)候,組織必須保持十分的謹(jǐn)慎和責(zé)任心。 | ||
識別應(yīng)用程序依賴關(guān)系的技術(shù) 應(yīng)用程序識別 | ||
在應(yīng)用程序識別過程中應(yīng)用程序數(shù)據(jù)管理(Application Data Management,ADM)工具能夠識別和監(jiān)控軟件產(chǎn)品的不同組件。以下是三種主要的傳統(tǒng)識別方法: ?Sweep and Poll: 該技術(shù)會通過 ping IP 地址并收集響應(yīng)信息,來識別依賴關(guān)系。 ?網(wǎng)絡(luò)監(jiān)聽:網(wǎng)絡(luò)流量分析可以幫助識別數(shù)據(jù)包在流經(jīng)系統(tǒng)時(shí)所采取的路徑。 ?Agent-Based: 這種方法包括在服務(wù)器上安裝一個(gè)小型軟件程序,來對出站和入站流量進(jìn)行實(shí)時(shí)監(jiān)控。 相比于這些傳統(tǒng)方法,有些應(yīng)用程序識別技術(shù)會使用工具來提升便捷性和有效性。例如,可以使用編排平臺、應(yīng)用程序性能監(jiān)視(APM)工具以及高級監(jiān)視功能來識別和跟蹤應(yīng)用程序組件和底層服務(wù)器資源。 | ||
應(yīng)用程序映射 | ||
應(yīng)用程序映射技術(shù)有助于識別和映射整個(gè) IT 生態(tài)系統(tǒng)中所使用的全部實(shí)例、通信通道以及應(yīng)用程序(包括端口和服務(wù))。高級解決方案還可以定義子網(wǎng)、虛擬私有云(VPCs)以及云上的安全組,例如 Azure、谷歌云以及 AWS。 | ||
這些工具直觀映射的特性實(shí)現(xiàn)了應(yīng)用程序依賴關(guān)系的可視化表示。組織可以對這些映射進(jìn)行共享和檢查,并將其用于各種用途,包括故障排查和規(guī)劃。該技術(shù)可以幫助告知業(yè)務(wù)策略,根據(jù)業(yè)務(wù)上下文來組織信息,并實(shí)時(shí)地確定關(guān)鍵警報(bào)和信息的優(yōu)先級。 | ||
應(yīng)用程序依賴關(guān)系如何影響云安全? | ||
部署和運(yùn)行于云環(huán)境中的云原生應(yīng)用程序在安全方面也可能會受到應(yīng)用程序依賴關(guān)系的影響。應(yīng)用程序依賴關(guān)系主要通過以下幾種方式來影響云原生應(yīng)用程序的安全性: | ||
依賴關(guān)系可以引入漏洞 | ||
與傳統(tǒng)的應(yīng)用程序一樣,一旦云原生應(yīng)用程序與具有已知安全漏洞的庫或框架具有依賴關(guān)系,那么整個(gè)應(yīng)用程序都會陷入風(fēng)險(xiǎn)之中。在向開發(fā)環(huán)境中引入依賴關(guān)系之前,組織需要保持依賴項(xiàng)的實(shí)時(shí)更新,并對其進(jìn)行仔細(xì)的檢查和測試。 | ||
依賴關(guān)系可以增加攻擊面 | ||
云原生應(yīng)用程序的依賴關(guān)系越多,攻擊者就有越多的機(jī)會來嘗試?yán)寐┒?。組織應(yīng)盡可能地保持應(yīng)用程序所擁有的依賴關(guān)系數(shù)量處于最小值,特別是那些不是特別必要的依賴關(guān)系。 | ||
依賴關(guān)系可能會損害數(shù)據(jù)的完整性 | ||
若云原生應(yīng)用程序所依賴的庫或框架遭到了攻擊破壞,那么該應(yīng)用程序中的數(shù)據(jù)就有可能遭到更改或損壞,從而導(dǎo)致數(shù)據(jù)丟失或機(jī)密性的破壞。 | ||
依賴關(guān)系可能會對合規(guī)性造成影響 | ||
以 PCI DSS 為例,作為一種標(biāo)準(zhǔn),PCI DSS 要求組織確保所有軟件依賴關(guān)系都是安全的,并且還需要進(jìn)行定期的更新。未能正確管理依賴關(guān)系就可能會導(dǎo)致組織違規(guī)。 | ||
應(yīng)用程序依賴關(guān)系如何影響云遷移? | ||
應(yīng)用程序依賴關(guān)系是云遷移項(xiàng)目中的關(guān)鍵部分,通常是遷移過程中出現(xiàn)安全問題和停機(jī)的關(guān)鍵原因。 | ||
處理依賴鏈 | ||
將應(yīng)用程序視為一個(gè)分層結(jié)構(gòu)是非常有用的。它包括一系列的依賴工具和 API,從應(yīng)用程序自己的接口開始,一直延伸到它所依賴的平臺。依賴管理的目標(biāo)是確定可以協(xié)同工作的版本組合,以便開發(fā)團(tuán)隊(duì)能夠更好地了解新的和不斷變化的應(yīng)用程序依賴關(guān)系。通過將應(yīng)用程序表示為分層結(jié)構(gòu),可以對依賴關(guān)系有一個(gè)更加清晰地了解,從而更好地管理和控制它們,確保應(yīng)用程序能夠穩(wěn)定、可靠地運(yùn)行。 組織可以控制自己應(yīng)用程序組件的版本,來啟動(dòng)這個(gè)依賴鏈處理過程。如果組織有需要分別分發(fā)的軟件組件,則需要為每個(gè)組件分配一個(gè)版本號,并跟蹤該版本的基礎(chǔ)依賴鏈。這樣組織就可以獲得與每個(gè)應(yīng)用程序版本相關(guān)聯(lián)的特定平臺工具的版本。如果出于任何原因需要回滾,那么組織則可以決定哪些其他組件也需要回滾以維護(hù)版本兼容性。。 | ||
對應(yīng)用程序版本和云環(huán)境進(jìn)行同步 | ||
因?yàn)檫@種方法需要更改某些平臺組件(包括中間件),所以每個(gè)應(yīng)用程序的平臺版本都必須得到同步。要做到這一點(diǎn),組織就需要始終從依賴鏈的頂部開始,直到達(dá)到鏈的末端。開發(fā)人員設(shè)計(jì)他們的應(yīng)用軟件時(shí),會使用特定的操作系統(tǒng)和中間件功能,并期望使用常用工具的 “某個(gè)版本版或更高版本”。對于任何給定工具的任何給定版本,開發(fā)人員都必須檢查所有的依賴項(xiàng),而不僅限于自己內(nèi)部的依賴項(xiàng)。 | ||
識別潛在的依賴關(guān)系 | ||
并非所有的應(yīng)用程序依賴關(guān)系都是明確的。例如,許多開發(fā)人員都面臨著這樣一個(gè)問題,即管理程序平臺版本必須與物理主機(jī)上的客戶操作系統(tǒng)兼容。另一個(gè)常見的問題是,當(dāng)一個(gè)編排器的特定版本,如 Kubernetes,需要一個(gè)操作系統(tǒng)組件的特定版本時(shí)。重要的是要通過對每個(gè)依賴鏈與標(biāo)準(zhǔn)操作系統(tǒng)和中間件組合進(jìn)行測試來確定所有依賴關(guān)系。 | ||
云提供商的特性和 API | ||
當(dāng)組織準(zhǔn)備遷移到云端時(shí),需要搞清楚每個(gè)應(yīng)用程序的依賴樹,包括對云提供商功能和 api 的所有引用。確保組織能夠了解云供應(yīng)商是如何對其 API 和工具進(jìn)行通信更改的。同時(shí),組織還需對這些更改可能創(chuàng)建的任何新的依賴關(guān)系進(jìn)行驗(yàn)證。 如果組織計(jì)劃進(jìn)行混合或多云部署,那么建議對這些云依賴樹進(jìn)行差異比較,以識別跨云平臺邊界遷移的所有應(yīng)用程序和組件。若有兩個(gè)不同的供應(yīng)商的依賴樹存在不一致,那么組織就有可能在這些供應(yīng)商平臺之間面臨擴(kuò)展或故障轉(zhuǎn)移的問題。為了避免這種情況的發(fā)生,組織就需要提前對組件進(jìn)行同步。 | ||
結(jié)論 | ||
應(yīng)用程序依賴關(guān)系對于云安全來說至關(guān)重要。因?yàn)槿绻芾聿划?dāng),那么它們可能就會引入漏洞并暴露敏感數(shù)據(jù)。通過理解和跟蹤依賴關(guān)系,組織可以確保自己的應(yīng)用程序是安全的,并且符合行業(yè)標(biāo)準(zhǔn)和法規(guī)。 同時(shí),適當(dāng)?shù)囊蕾囮P(guān)系管理還可以幫助提高應(yīng)用程序的性能和可靠性。因?yàn)檫^時(shí)的或不合理的依賴關(guān)系可能會導(dǎo)致 bug 和系統(tǒng)崩潰等問題的出現(xiàn)。 | ||
應(yīng)用程序依賴關(guān)系涉及到應(yīng)用程序所依賴的所有組件、工具和接口。在云計(jì)算環(huán)境中,這些依賴關(guān)系往往比傳統(tǒng)的本地應(yīng)用程序更為復(fù)雜和深層次。應(yīng)用程序的漏洞和安全弱點(diǎn)均可能會通過它們的依賴關(guān)系而擴(kuò)散到整個(gè)系統(tǒng)中,從而加重威脅與風(fēng)險(xiǎn)的程度和范圍。若一個(gè)組織對自己的應(yīng)用程序依賴關(guān)系沒有一個(gè)清晰的了解,那么該組織就無法有效地評估系統(tǒng)中的所存在的風(fēng)險(xiǎn)與隱患,更無法采取適當(dāng)?shù)陌踩胧﹣肀Wo(hù)組織內(nèi)的系統(tǒng)和數(shù)據(jù)。除了要對應(yīng)用程序的依賴關(guān)系進(jìn)行全面的識別梳理和定期的更新同步以外,組織還可以通過使用容器化技術(shù)或限制組件訪問權(quán)限來降低依賴關(guān)系所帶來的風(fēng)險(xiǎn)。 |
|
||||
Copyright© 重慶秉通精益信息技術(shù)有限公司 | 渝公網(wǎng)安備 50010702502937號 | 渝ICP備2024028021號-1 聲明:本站部分內(nèi)容圖片來源于互聯(lián)網(wǎng),如有侵權(quán)請聯(lián)系管理員刪除,謝謝! |