當技術組件、應用程序以及服務器需要相互依賴對方來提供業務解決方案時,應用程序依賴就產生了。開發人員在構建解決方案時,就已經考慮到了特定的技術棧。這通常包括操作系統、數據庫引擎、開發框架(例如.Net或Java),以及其他基礎設施。

應用程序的依賴關系有很多種類型,包括:庫、數據庫、緩存以及應用程序所使用的第三方服務等。一旦應用程序的依賴關系發生了缺失或存在問題,那么該應用程序的功能、用戶體驗、安全性以及正常運行時間都會受到一系列的影響。

開發人員會因為各種各樣的原因來對應用程序依賴項進行升級,例如安全修復、新功能版本的發布、舊版本維護以及性能改進等。但不幸的是,對應用程序依賴項的升級是一件極其耗費時間的事。例如,組織有時可能僅僅想要對某個單獨的庫進行升級,但最后卻需要連同其所依賴的許多其他庫一起進行升級。

軟件依賴關系:風險和安全措施

有時為了實現新功能或提高生產率,開發人員需要引入一些新庫。然而,盡管這些庫在引入的初期可以幫助節省一些時間,但到了后面,往往會逐漸會成為項目的主要負擔。

“依賴地獄”指的是當軟件依賴于其他依賴項來運行時所出現的問題。例如,當某個第三方軟件出現故障并將bug引入到其他應用程序時,就會發生這種情況。理解“依賴地獄”產生的原因對于避免或減少其發生至關重要。“依賴地獄”并不是由某個單一因素造成的,這其中存在著一系列的原因,其中常見的有:

? 代碼質量: 通常來講最好的辦法就是使用被開發人員所廣泛信任的泛型庫,但是泛型庫也仍有可能存在一些問題。并且,即使是在引入了這些庫之后,組織大概也無法發現依賴性漏洞,況且還可能存在其他潛在的漏洞。所以,在使用某個庫之前,對其進行漏洞檢測是十分必要的。

? 過時的代碼庫: 在一些場景下,開發人員編寫了一段代碼,然而隨著時間的推移,這些代碼失去了使用價值并被完全遺棄,但是代碼本身卻未被從系統中刪除。于是這種類型的代碼就成為了一種潛在的風險,使組織面臨一些修復成本高昂的漏洞。

? 依賴項中的死代碼: 有些依賴項可能會需要下載或使用不必要的死代碼。隨著不斷發展,項目可能會與這些死代碼出現重疊的依賴關系。

? 不完整的文檔:在某些情況下,組織可能缺少用于向他人介紹程序功能的文檔,或者是文檔的質量差。但由于缺乏適當的文檔,對軟件依賴關系的改進和協調過程就會變得更加困難。

以上這些還僅是依賴關系可能導致問題的場景。另一方面,盡管外部的包和庫非常有用,代碼重用也是軟件工程不可分割的重要組成部分,但是在重用的時候,組織必須保持十分的謹慎和責任心。

識別應用程序依賴關系的技術

應用程序識別

在應用程序識別過程中應用程序數據管理(Application Data Management,ADM)工具能夠識別和監控軟件產品的不同組件。以下是三種主要的傳統識別方法:

? Sweep and Poll: 該技術會通過ping IP地址并收集響應信息,來識別依賴關系。

? 網絡監聽:網絡流量分析可以幫助識別數據包在流經系統時所采取的路徑。

? Agent-Based:這種方法包括在服務器上安裝一個小型軟件程序,來對出站和入站流量進行實時監控。

相比于這些傳統方法,有些應用程序識別技術會使用工具來提升便捷性和有效性。例如,可以使用編排平臺、應用程序性能監視(APM)工具以及高級監視功能來識別和跟蹤應用程序組件和底層服務器資源。

應用程序映射

應用程序映射技術有助于識別和映射整個IT生態系統中所使用的全部實例、通信通道以及應用程序(包括端口和服務)。高級解決方案還可以定義子網、虛擬私有云(VPCs)以及云上的安全組,例如Azure、谷歌云以及AWS。

這些工具直觀映射的特性實現了應用程序依賴關系的可視化表示。組織可以對這些映射進行共享和檢查,并將其用于各種用途,包括故障排查和規劃。該技術可以幫助告知業務策略,根據業務上下文來組織信息,并實時地確定關鍵警報和信息的優先級。

應用程序依賴關系如何影響云安全?

部署和運行于云環境中的云原生應用程序在安全方面也可能會受到應用程序依賴關系的影響。應用程序依賴關系主要通過以下幾種方式來影響云原生應用程序的安全性:

依賴關系可以引入漏洞

與傳統的應用程序一樣,一旦云原生應用程序與具有已知安全漏洞的庫或框架具有依賴關系,那么整個應用程序都會陷入風險之中。在向開發環境中引入依賴關系之前,組織需要保持依賴項的實時更新,并對其進行仔細的檢查和測試。

依賴關系可以增加攻擊面

云原生應用程序的依賴關系越多,攻擊者就有越多的機會來嘗試利用漏洞。組織應盡可能地保持應用程序所擁有的依賴關系數量處于最小值,特別是那些不是特別必要的依賴關系。

依賴關系可能會損害數據的完整性

若云原生應用程序所依賴的庫或框架遭到了攻擊破壞,那么該應用程序中的數據就有可能遭到更改或損壞,從而導致數據丟失或機密性的破壞。

依賴關系可能會對合規性造成影響

以PCI DSS為例,作為一種標準,PCI DSS要求組織確保所有軟件依賴關系都是安全的,并且還需要進行定期的更新。未能正確管理依賴關系就可能會導致組織違規。

應用程序依賴關系如何影響云遷移?

應用程序依賴關系是云遷移項目中的關鍵部分,通常是遷移過程中出現安全問題和停機的關鍵原因。

處理依賴鏈

將應用程序視為一個分層結構是非常有用的。它包括一系列的依賴工具和API,從應用程序自己的接口開始,一直延伸到它所依賴的平臺。依賴管理的目標是確定可以協同工作的版本組合,以便開發團隊能夠更好地了解新的和不斷變化的應用程序依賴關系。通過將應用程序表示為分層結構,可以對依賴關系有一個更加清晰地了解,從而更好地管理和控制它們,確保應用程序能夠穩定、可靠地運行。

組織可以控制自己應用程序組件的版本,來啟動這個依賴鏈處理過程。如果組織有需要分別分發的軟件組件,則需要為每個組件分配一個版本號,并跟蹤該版本的基礎依賴鏈。這樣組織就可以獲得與每個應用程序版本相關聯的特定平臺工具的版本。如果出于任何原因需要回滾,那么組織則可以決定哪些其他組件也需要回滾以維護版本兼容性。。

對應用程序版本和云環境進行同步

因為這種方法需要更改某些平臺組件(包括中間件),所以每個應用程序的平臺版本都必須得到同步。要做到這一點,組織就需要始終從依賴鏈的頂部開始,直到達到鏈的末端。開發人員設計他們的應用軟件時,會使用特定的操作系統和中間件功能,并期望使用常用工具的“某個版本版或更高版本”。對于任何給定工具的任何給定版本,開發人員都必須檢查所有的依賴項,而不僅限于自己內部的依賴項。

識別潛在的依賴關系

并非所有的應用程序依賴關系都是明確的。例如,許多開發人員都面臨著這樣一個問題,即管理程序平臺版本必須與物理主機上的客戶操作系統兼容。另一個常見的問題是,當一個編排器的特定版本,如Kubernetes,需要一個操作系統組件的特定版本時。重要的是要通過對每個依賴鏈與標準操作系統和中間件組合進行測試來確定所有依賴關系。

云提供商的特性和API

當組織準備遷移到云端時,需要搞清楚每個應用程序的依賴樹,包括對云提供商功能和api的所有引用。確保組織能夠了解云供應商是如何對其API和工具進行通信更改的。同時,組織還需對這些更改可能創建的任何新的依賴關系進行驗證。

如果組織計劃進行混合或多云部署,那么建議對這些云依賴樹進行差異比較,以識別跨云平臺邊界遷移的所有應用程序和組件。若有兩個不同的供應商的依賴樹存在不一致,那么組織就有可能在這些供應商平臺之間面臨擴展或故障轉移的問題。為了避免這種情況的發生,組織就需要提前對組件進行同步。

結論

應用程序依賴關系對于云安全來說至關重要。因為如果管理不當,那么它們可能就會引入漏洞并暴露敏感數據。通過理解和跟蹤依賴關系,組織可以確保自己的應用程序是安全的,并且符合行業標準和法規。

同時,適當的依賴關系管理還可以幫助提高應用程序的性能和可靠性。因為過時的或不合理的依賴關系可能會導致bug和系統崩潰等問題的出現。

數世點評

應用程序依賴關系涉及到應用程序所依賴的所有組件、工具和接口。在云計算環境中,這些依賴關系往往比傳統的本地應用程序更為復雜和深層次。應用程序的漏洞和安全弱點均可能會通過它們的依賴關系而擴散到整個系統中,從而加重威脅與風險的程度和范圍。若一個組織對自己的應用程序依賴關系沒有一個清晰的了解,那么該組織就無法有效地評估系統中的所存在的風險與隱患,更無法采取適當的安全措施來保護組織內的系統和數據。除了要對應用程序的依賴關系進行全面的識別梳理和定期的更新同步以外,組織還可以通過使用容器化技術或限制組件訪問權限來降低依賴關系所帶來的風險。