IT 服務運維中的安全管理
作者 | 趙佩
ITIL 是一套 ITSM 最佳實踐體系,能夠提高 IT 部門用戶滿意度和運行效率。它提供了針對 IT 活動的實踐,可以被組織應用于戰略、價值交付和能力維持。它允許組織建立一個基線,用于計劃、實施和測量,證明合規性和衡量改進。雖然 ITIL 建立了 ITSM 的“游戲規則”,但它只告訴你最好做什么事,具體落地層面的流程實踐需要根據不同的組織進行定制化和優化。
本系列 IT 運維服務管理的文章,基于我們過去在不同項目背景下總結出來的實踐經驗,具有運維服務管理落地指導性質。它為項目穩定運營提供奠項目運維開展計劃的基礎,為進一步的工程實踐和持續優化奠定良好的基礎,同時可以幫助運維項目中的人員完善和提升項目運維過程中的服務管理能力。
本系列文章的主題包括運維安全管理、事件管理、變更管理、應急預案、自動化效率化運維。本文為第一篇:運維中的安全管理。
在企業的 IT 服務運維管理中,安全管理是一個非常重要的問題。在產品運維過程中,不僅需要管理、維護和監控 IT 系統的可靠性,同時系統的安全性也是非常重要的。當談到運維安全管理時,我們最容易想到的是保護敏感信息和數據安全。然而,隨著信息技術的進步,敏感信息和數據安全的威脅也變得越來越復雜。
想象一個場景,你所運維的系統中,有一個比較重要的服務因為安全漏洞問題需要被隔離甚至關停,這可能會引發一系列緊急舉措和挑戰。在現實中,我們曾經就遇到過這樣的情況。由于一個重大的系統漏洞,服務器被攻擊并受到了破壞。在恢復服務之后,我們又發現了應用程序中的軟件包存在漏洞,必須在緊急的時間內進行修復才能重新上線。最終,我們花費了將近兩天的時間才讓應用程序恢復至可用狀態。如果我們定期進行漏洞掃描并及時修復任何漏洞,或許就能夠避免這樣的情況再次發生。
再想象一個場景,你所運維的一個線上服務昨天還正常提供服務,但是今天突然所有用戶都在抱怨不能用了,你查看了監控后發現系統的指標都沒有問題,最終才發現居然是應用證書過期了。這樣一個看似簡單的問題卻造成了如此大的影響,不僅僅可能涉及金錢損失,還很可能影響到公司的聲譽。如果在日常運維中我們注重證書的安全管理,就不會發生這樣低級的錯誤,從而避免無法挽回的損失。
除了上述提到的軟件依賴包的安全管理和證書的安全管理,運維團隊還需要考慮權限管理、 CI/CD(Continuous Integration/Continuous Delivery) 流水線(Pipeline)安全檢查、個人隱私數據信息管理、Web 應用防火墻管理、威脅建模等方面。這些措施都可以有效地減少惡意攻擊和數據泄漏的風險,并保護企業的業務穩定性和可持續性。
當然,在運維階段中涉及的安全管理問題是多方面的,需要我們根據具體項目情況進行綜合考慮和解決。下面我們會基于運維項目上所涉及的安全領域來具體分享運維項目上的一些安全實踐。
一、權限管理
(圖片來源:https://arxall.io/news/wp-content/uploads/2022/02/access-rwr-600x400.jpg)
1.概念
在運維項目中,很多場景下,我們需要與多個系統進行交互,這給我們的系統和人員帶來了許多權限管理的挑戰和要求。例如,我們需要確保管理員擁有足夠的權限來完成必要的任務,但又不能賦予過多的權限,以避免安全風險。我們還需要確保所有操作都有明確的記錄和審計,以便在發生問題時進行追蹤和分析。另外,我們還需要使用適當的認證和授權措施,以防止未經授權的訪問和操作。
為了滿足這些要求,我們需要實施一套完整的運維權限管理方案,包括對管理員帳戶、角色、權限、認證和授權、審計和監控等方面的管理。這樣,我們才能確保管理員只能訪問他們所需的資源,并且他們的操作都能夠被準確記錄和審計。此外,我們還需要定期審查和更新權限,以確保系統和數據的安全性和完整性得到保障。
在運維項目中,權限管理是保護系統和數據安全的關鍵環節,它不僅是技術上的問題,更是一個管理流程上的問題,所以需要管理員的合作和配合。只有全面而有效的運維權限管理方案,才能確保系統的穩定性和安全性,為企業的發展提供有力的支持。
2.權限管理在運維中的重要性
權限管理在運維中具有非常重要的作用,它可以確保系統和數據的安全性和完整性,避免未經授權的訪問和操作,同時也可以提高運維效率和降低風險。
- 保護系統和數據安全:通過運維權限管理,可以對管理員的操作進行授權和控制,避免未經授權的訪問和操作,確保系統和數據的安全性和完整性。
- 降低安全風險:通過限制管理員的權限,可以避免他們誤操作或惡意操作系統和數據,從而降低安全風險。
- 提高運維效率:通過權限管理,可以使管理員擁有足夠的權限來完成必要的任務,從而提高運維效率。
- 精細化的權限控制:通過將管理員分配到不同的角色中,可以實現權限的精細化控制,使管理員只能訪問和操作其所需的資源,從而避免權限過度賦予導致的安全問題。
- 審計和監控:通過對管理員操作的審計和監控,可以及時發現和處理安全問題,從而進一步提高系統和數據的安全性和完整性。
運維權限管理在保障系統和數據安全、降低安全風險、提高運維效率、精細化權限控制以及審計和監控等方面發揮著至關重要的作用。
3.權限管理在運維中如何落地
- 最小權限原則:在運維過程中,應該遵循最小權限原則,即只賦予必要的權限,以最大限度地減少安全漏洞的風險。
- 群組權限:所以的策略都不應該直接分配給用戶,應該分配給用戶組,再把用戶添加到用戶組中,降低管理成本。
- 定期修改密碼:所有的賬戶應該有一定的密碼復雜度策略和定期修改密碼的策略。
- 細粒度的訪問控制:細粒度的訪問控制可以更好地管理運維權限,例如對特定的服務器、應用程序或服務進行授權。
- 審計和監控:對所有運維操作進行審計和監控,以檢測異常行為并及時采取措施。
- 多因子認證 MFA:使用多因子認證可以增加帳戶的安全性,避免帳戶被非法使用,即使密碼被泄露也可以在一定程度上保證賬戶的安全。
- 定期審查權限:定期審查權限,及時刪除無用的帳戶和權限,防止因為人員變動導致的權安全問題。
4.如何度量
要度量運維項目上權限管理的成熟度,可以考慮以下幾個方面:
(1) 權限分配和授權:
- 權限準確性:衡量權限是否正確地分配給了合適的用戶或角色。
- 權限完整性:評估系統中是否存在未分配或遺漏的權限。
- 權限一致性:檢查權限授權是否符合組織內部的標準和規范。
(2) 權限審計和監測:
- 審計合規性:評估權限審計的合規性,包括審計日志的記錄、保留和保護。
- 異常權限活動檢測:監測和評估系統中的異常權限請求和活動,包括超出正常權限范圍的請求和異常的權限使用模式。
(3) 權限變更管理:
- 變更記錄和追蹤:確保權限變更的記錄和審計跟蹤能力,包括變更的原因、執行者和時間戳等信息。
- 變更時效性:衡量權限變更請求的響應時間和處理效率。
(4) 權限撤銷和失效:
- 撤銷時效性:評估權限撤銷的及時性和有效性,特別是在員工離職或角色變更時。
- 失效權限管理:確保不再需要的權限被及時撤銷或失效,避免未經授權的訪問風險。
(5) 權限請求和批準流程:
- 請求時效性:衡量權限請求的響應時間,確保團隊成員能夠及時獲得適當的權限。
- 批準流程效率:評估權限批準流程的效率和準確性,包括審批者的響應時間和批準決策的一致性。
二、密鑰和證書管理
(圖片來源:https://www.sectigo.com/uploads/images/Key.png)
1.概念
密鑰是一種在明文轉換為密文或將密文轉換為明文的算法中輸入的參數。具體來說,密鑰是一組信息編碼,它參與密碼的“運算”,并對密碼的“運算”起特定的控制作用。
數字證書是一種可以在互聯網通訊中唯一地標識身份的一個權威文件。數字證書是由證書認證機構 (以下簡稱 CA) 對證書申請者真實身份驗證之后,用 CA 的根證書對申請人的一些基本信息以及申請人的公鑰進行簽名(相當于加蓋發證書機構的公章)后形成的一個數字文件。可以認為,數字證書就是經過 CA 認證過的公鑰,和公鑰一樣是公開的。
(1) 密鑰的分類
一般情況下,密鑰分為對稱密鑰與非對稱密鑰。
- 對稱密鑰:對稱密鑰一般是用對稱加密算法,而對稱密鑰加密又稱私鑰加密或會話密鑰加密算法,即信息的發送方和接收方使用同一個密鑰去加密和解密數據。它的最大優勢是加/解密速度快,適合于對大數據量進行加密,但密鑰的管理與分配困難。
- 非對稱密鑰:使用非對稱密鑰的加密方式又稱為公鑰加密。它需要使用一對不同的密鑰來分別完成加密和解密操作,一個是公開發布的公鑰,另一個為用戶保存的私鑰。信息發送者用公鑰去加密,而信息接收者則用私鑰去解密。公鑰加密機制靈活,但加密和解密速度卻比對稱密鑰加密慢得多。
(2) 證書的分類
證書的種類較多,這里列舉幾種常見的證書分類:TLS/SSL 客戶端證書,郵件證書、iOS 和安卓證書,自簽名證書等等。
- TLS/SSL 客戶端證書:TLS/SSL 客戶端證書是一種數字證書,基于公鑰加密體系,用于在 TLS/SSL 協議中對客戶端進行身份驗證。它是由受信任的證書頒發機構 CA 簽發的,并包含了客戶端的公鑰、相關身份信息以及由 CA 簽名的數字簽名。TLS/SSL 客戶端證書用于驗證客戶端的身份。服務器可以通過驗證客戶端證書的有效性、簽名和證書鏈,確認客戶端的真實性和完整性,從而確保只有合法的客戶端能夠建立安全的連接。TLS/SSL 客戶端證書在保障通信安全和進行雙向身份驗證方面發揮著重要的作用。
- 郵件證書:S/MIME(Secure/Multipurpose Internet Mail Extensions)是一種安全電子郵件標準,它使用郵件證書來實現電子郵件的加密和身份驗證。S/MIME 通過在電子郵件中添加數字簽名和加密功能,提供了保護郵件機密性和完整性的安全層。通過使用 S/MIME 郵件證書,電子郵件的發件人和收件人可以實現電子郵件的身份驗證、機密性和完整性驗證。S/MIME 提供了一種可靠的方法,使電子郵件在傳輸過程中免受竊聽和篡改,增強了電子郵件通信的安全性和隱私保護。
- iOS 證書:iOS 開發者證書是一種代碼簽名證書,是一種將個人、個人數字身份和應用程序關聯起來的數字簽名。開發者可以從蘋果的官方網站申請蘋果開發者賬號,方便 iOS 證書的申請與使用。iOS 證書主要包括:開發者證書、分發證書、推送證書。開發者證書用于驗證 iOS 應用程序的開發者身份,分發證書用于驗證 iOS 應用程序的發布者身份,推送證書用于實現 iOS 設備上的遠程通知功能。
- 自簽名證書:自簽名證書是一種發行者通過自己私鑰簽署的數字證書,一般由一些公司或軟件開發商創建、頒發和簽名。但由于證書未經過證書頒發機構簽名,因此這種自簽名證書通常不會被廣泛信任,使用時可能會遇到電腦軟件的安全警告。自簽名證書特別適用于內部環境或僅用于測試目的,對于公共網絡和與外部系統交互的場景,建議使用由受信任的第三方證書頒發機構 CA 簽發的證書,以確保可信度和安全性。
2.密鑰和證書管理在運維中的重要性
在運維的過程中,如果我們對密鑰管理不當,密鑰的泄露會導致密碼系統失效,信息出現泄漏,系統出現安全問題。如果沒能及時檢查證書的過期時間,導致證書過期,不僅使得用戶的通信得不到保護,泄漏用戶的安全和隱私,也會使得用戶在使用服務時,出現網頁無法打開等情況。這些情況在運維中都會是非常嚴重的生產安全事故。
3.密鑰和證書管理在運維中如何落地
在運維的過程中,密鑰和證書的管理包含生成、更新、存儲與備份、有效期及銷毀。具體內容如下:
- 密鑰生成和存儲:使用安全的方法生成密鑰對,并確保私鑰的保密性。私鑰應存儲在受控的、加密的環境中,只有授權人員可以訪問。
- 證書申請和簽發:對于需要使用由受信任的第三方證書頒發機構 CA 簽發的證書,按照 CA 的要求生成證書簽名請求 CSR,并提交給 CA 進行簽發。確保證書的簽發過程符合安全最佳實踐。
- 建立清單并監控:建立一個密鑰和證書清單,記錄所有系統中使用的密鑰和證書的詳細信息,包括類型、用途、到期日期等,并在證書到期前自動發送提醒。
- 定期輪換:定期進行密鑰更新,刪除和銷毀過期密鑰。
- 密鑰和證書保護:采取適當的措施保護密鑰和證書的機密性和完整性。使用加密算法保護密鑰的傳輸和存儲,并使用訪問控制和權限管理措施限制對密鑰和證書的訪問。
針對運維團隊所運維的服務,服務的證書可能是由專門的團隊管理,也可能是直接托管在云服務上。針對不同的情況,有如下內容:
(1) 如果證書不在云上托管,而是公司有專門的團隊負責:
- 建議運維初期在我們服務側配置專門的報警,例如提前一個月發郵件通知即將到期的證書。
- 在收到通知后過期前兩周聯系該團隊生成新的證書,并計劃證書替換事項。
- 記錄替換的步驟,以便在團隊內部進行知識沉淀和傳遞。
(2) 如果證書是云服務自動生成和托管,例如 AWS ACM,建議開啟云服務端自動更新。這樣運維人員不需要有額外的工作量。
4.如何度量
要度量運維項目上密鑰和證書管理做得好不好,一般通過查看因證書密鑰導致的安全事故數量作為度量準則,可以考慮以下幾個方面:
- 證書的統一管理文檔是否更新的及時,內容更新是否準確。
- 在定期針對事故查看與分析時,統計因證書密鑰導致的事故數量,是否因證書和密鑰導致了較多的事故。如果統計的數量較高,則代表團隊針對證書和密鑰的管理方式需要改進。
三、代碼依賴安全管理
(圖片來源:https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/03/OpenSource-Security-Blog-image.png)
1.概念
對于軟件的代碼依賴包,我們都不陌生。為了避免重復編寫某個公用代碼,我們都傾向于去在代碼里引用軟件依賴包來提高交付效率。將外部軟件作為依賴包意味著我們需要信賴這個依賴包,但是這些依賴包中可能存在安全漏洞,它們還可能過時,可能存在影響應用程序性能和風險狀況的錯誤或安全問題,從而導致我們的應用質量下降,安全性無法得到保障。因此在享用依賴包所帶來的便利性的同時,我們需要去定期掃描和升級依賴包,做好安全管理,以防止任何安全漏洞趁虛而入。
關于依賴包的安全漏洞,我們往往需要特別關注和及時升級涉及 Critical 極危級別漏洞和 High 高危級別漏洞的依賴包:
- Critical 極危級別漏洞意味著我們的服務或者網站隨時有被黑客入侵的風險。需要將立即修復這些漏洞作為最高優先級。
- High 高危級別漏洞意味著我們的服務或網站可能被黑客入侵,并可能導致黑客找到其他影響更大的漏洞。因此也需要即修復這些類型的漏洞。
2.代碼依賴的安全管理在運維中的重要性
保證軟件系統的安全性:依賴包中可能存在的安全漏洞和問題可能會被黑客利用,導致軟件系統被攻擊或被破壞。運維的項目中,其中有一大部分是遺留的服務,因為這些系統不需要開發新功能了,維護者往往不想在上面投入過多精力的,只想讓他能工作就行,因此大家會常常忽視這些系統的網絡安全問題,比如過期不維護的有安全漏洞的依賴包。只要我們不主動識別并消除來自這些的潛在威脅,就始終存在安全漏洞的可能性。如果我們能正確管理好依賴包,可以發現這些安全漏洞和問題,并及時采取措施加以修復。
- 遵循合規要求:一些行業或法規要求必須對軟件代碼進行安全審計和檢查,以確保其符合安全標準。在運維階段,依然做好依賴包安全管理可以幫助我們的組織遵循這些合規要求,并確保軟件系統的安全性。
- 保護品牌聲譽:一旦軟件系統被攻擊或破壞,會給我們的公司帶來財務和聲譽損失。運維階段持續做好依賴包安全管理,可以發現潛在的安全風險,避免因安全問題導致的損失。
因此,在運維項目上,我們不應該忽視對軟件代碼依賴的管理,定期去掃描和更新依賴包,確保依賴包沒有安全漏洞,直到這個服務的生命周期結束,我們都應該對這些進行負責。
3.代碼依賴的安全管理在運維中如何落地
(1) 選擇合適的依賴掃描工具:
如果當前的運維項目上沒有集成,我們可以考慮根據項目所使用的編程語言和依賴庫,選擇適合的依賴掃描工具。依賴掃描工具的主要目的是檢測和識別項目中的依賴項,以便在需要更新時通知開發人員。掃描工具可以幫助開發人員確定項目中使用的依賴項版本是否過時或具有安全漏洞,從而確保項目的安全性和穩定性。常見的依賴掃描工具包括:
- * Snyk:是一個用于檢測和修復開源軟件中的漏洞的云掃描工具。它支持多種編程語言,包括 Java、JavaScript、Python、Ruby 等。
- * OWASP Dependency Check:是一個開源的工具,可用于檢測 Java、.NET、Node.js 和 Python 應用程序中的漏洞和漏洞。
- * Dependency Track:是一個開源的軟件組件分析平臺,可以檢測并跟蹤應用程序中的組件漏洞和依賴關系。
- * Mend:是一個用于管理開源組件和依賴關系的云掃描工具。它支持多種編程語言,包括 Java、.NET、Node.js、Python 等。
- * Nexus IQ:是一個用于檢測和管理應用程序依賴關系和組件漏洞的工具。它提供了一個集中式的平臺,可以幫助用戶分析和管理所有組件的安全和許可證問題。
(2) 集成依賴掃描工具:
可以將依賴掃描工具集成到 CI/CD 工作流程中,以便在每次構建和部署時都自動運行依賴掃描工具。這可以幫助確保每個版本都經過安全審查。
(3) 代碼倉庫集成依賴升級工具并自動更新依賴包:
依賴升級工具可以幫助開發人員和團隊更輕松地管理其項目的依賴項。這些工具可以定期掃描項目的依賴項,并自動提供更新版本的建議,甚至可以自動提交更新請求和合并請求。如果在開發階段在代碼倉庫沒有集成依賴掃描工具,那么在運維階段,我們應盡可能地集成這樣的工具。 這里我們推薦兩種和 Github 集成的工具:Dependabot 和 Renovate。它們可以輕松自動更新依賴項,提高項目的安全性和可維護性。這兩個工具都能很好的跟 Github 集成,不管是有成百上千的代碼倉庫的大型企業還是個人的代碼倉庫,都可以使用這兩個工具去進行定期代碼依賴包掃描,并自動創建拉取請求。 對于大型項目公司,也可以創建自建的 Dependabot 和 Renovate 實例去進行依賴包的安全掃描,并且定制公司項目內部的規則:
- 了解依賴包的來源和信譽:我們運維中,難免要涉及到改代碼,如果我們要引入新的開源依賴包時,應該了解其來源和信譽,并確保它們不會帶來安全風險或法律問題。例如:可以查看其 Github 頁面或其他社區網站來評估其質量和活躍度。
- 實行最小依賴原則:為了減少安全風險和復雜性,可以使用最小依賴原則,只引入必要的依賴包。在運維過程中,我們每次的代碼改動,要小心引入不必要的依賴包,除此之外,我們也可以定期 Review 依賴包列表,及時移出不必要的依賴。這樣可以盡量減少依賴包中可能存在的安全問題,同時也可以減少軟件系統的復雜性。
- 限制依賴包的版本范圍:限制依賴包的版本范圍可以減少依賴包中可能存在的安全問題。可以使用 SemVer 規范來定義版本,并確保所有依賴包的版本都是兼容的。
- 開啟安全漏洞的告警通知:這樣在運維階段可以第一時間發現項目依賴包里的 Critical 或者 High 級別的安全漏洞。
- 制定策略和流程:根據當前運維階段的項目需要,制定適合的策略和流程,以確保依賴庫的安全性得到持續的管理和審查。例如,制定規則和標準(比如大家要堅持最小依賴原則),以確保在開發新功能或更新依賴關系時遵循最佳安全實踐。
4.如何度量
要度量運維項目上軟件代碼依賴包的安全管理做得好不好,可以考慮以下幾個方面:
- 依賴掃描覆蓋率:度量依賴掃描工具掃描項目依賴的覆蓋率。較高的覆蓋率表示掃描工具可以發現更多的漏洞和安全問題,這有助于提高項目的安全性。
- 安全漏洞修復時間:度量漏洞修復時間,即從掃描發現漏洞到修復漏洞所需的時間。較短的漏洞修復時間意味著團隊更加重視安全,并且能夠快速響應漏洞。
- 安全漏洞數量:度量掃描出的安全漏洞的數量,較少的漏洞數量通常意味著項目的安全性較好。
- 依賴升級的頻率和成功率:度量依賴升級的頻率和成功率。較高的依賴升級頻率和成功率意味著團隊能夠及時升級依賴以解決漏洞和安全問題。
- 安全策略的執行情況:度量團隊在實踐安全策略方面的執行情況,如是否定期審查代碼、定期進行安全測試等。較好的安全策略執行情況可以幫助確保項目的安全性。
這些度量指標可以幫助我們了解運維項目上軟件代碼依賴包的安全管理做得好不好,以評估我們運維項目的安全實踐和改進方向。
四、CI/CD(Continuous Integration/Continuous Delivery) 流水線(Pipeline)的安全管理
(圖片來源:https://www.preemptive.com/wp-content/uploads/2022/06/PreEmptive-icons-10.png)
1.概念
在軟件行業中,CI/CD 流水線是加速軟件開發和集成、快速上線產品的關鍵工具。然而,在 CI/CD 流水線的自動化過程中,安全問題往往容易被忽視,CI/CD 流水線的安全對于確保整個軟件系統的安全和可靠性至關重要。CI/CD 流水線安全管理涉及到的方面眾多,包括但不限于:
- 對 CI/CD 系統本身的安全檢查
- 對 CI/CD 流水線操作權限的檢查
- 對 CI/CD 流水線的執行日志安全檢查
- 對生成產物(Artifacts)的安全檢查
- 對程序代碼的檢查
- 對第三方依賴的檢查
- 對容器鏡像的檢查
- 對部署環境的檢查等
2.流水線的管理在運維中的重要性
在運維項目中,CI/CD 流水線安全管理至關重要。由于它涉及到公司業務的正常運行以及用戶數據的安全,因此對 CI/CD 流水線進行安全管理可以確保整個 CI/CD 過程的可靠性和安全,并為維護軟件系統的穩定性和企業的口碑提供保障。具體來說,CI/CD 流水線安全管理在運維中能發揮以下作用:
- 幫助防止潛在的安全漏洞:CI/CD 流水線安全檢查可以幫助開發團隊發現可能存在的安全漏洞,并及時修復,從而減少黑客攻擊和數據泄露等安全問題的風險。
- 幫助確保整個 CI/CD 過程的安全:CI/CD 流水線安全檢查可以確保 CI/CD 系統本身的安全,包括對流水線操作權限的檢查、對程序代碼的檢查、對第三方依賴的檢查、對容器鏡像的檢查、對部署環境的檢查等,從而確保整個 CI/CD 過程的安全。
- 提高安全意識:CI/CD 流水線安全檢查可以幫助開發團隊了解軟件安全的重要性,并提高安全意識,從而有助于改善整個組織的安全文化。
3.流水線的管理在運維中如何落地
(1) CI/CD 系統的安全
除第三方所提供的 CI/CD 系統外,對于自建的 CI/CD 系統和它所真正執行任務的 Agent/Runner(構建、部署任務執行程序)我們都需要確保它自身的安全。在允許的前提下,確保使用的 CI/CD 及其 Agent 所在的操作系統是最新版本,且已安裝最新的安全補丁,以防止已知的漏洞被利用。在大型公司中對于操作系統的安全性一般有安全團隊專門負責。
對于 CI/CD 服務器系統本身我們需要做到的有:
- 定期更新系統所使用的插件和組件,例如:Jenkins 中的各類第三方插件。
- 對于報出的安全漏洞需要及時做出響應和修復,例如 2023 年初發生的 CircleCI secrets 泄漏事件。
- 確保其使用了 TLS 加密,避免中間人攻擊竊取訪問權限。
對 CI/CD 系統及其數據定期進行備份,做好災難恢復計劃。對于 Agent(構建、部署任務執行程序)我們需要做到的有:
- 及時更新 Agent 的系統鏡像和依賴,以確保安全和可靠性。
- 對 Agent 所能訪問的網絡進行限制,以防止未經授權的訪問和數據泄露。
- 堅持最小權限原則,盡量不使用 root 用戶運行 Agent。
- 給各個項目使用專屬的 Agent,避免來自其他項目的未授權操作。
(2) CI/CD 流水線訪問控制
流水線中未授權的部署操作會影響線上系統的穩定性,攻擊者也可以通過流水線的部署操作將線上版本替換為老版本而制造漏洞。部分流水線可能可以直接下載項目所構建的中間產物或是項目編譯后的二進制文件,被未授權的人員獲取可能會有安全風險。由此可見,對流水線訪問權限的檢查尤為重要。我們需要確保項目的流水線只能由團隊成員所訪問,并要求團隊成員啟用多因子驗證 MFA 提高安全性。對于存儲在 CI/CD 系統中的密鑰,我們需要及時的了解是否已對其進行了加密,這樣有利于避免其他人獲取敏感信息。
(3) 編寫安全的 CI/CD 流水線代碼
雖然很多場景下我們運維團隊所維護的都是一些老的服務或系統,但我們在運維過程中可能會對現有的 CI/CD 流水線進行一些修改加固。在編寫流水線代碼時,我們應該注意的點有:
- 不使用未經授權的庫和組件。
- 不使用硬編碼的密碼和敏感信息。
- 不將敏感信息輸出在流水線日志中。
- 不將生產數據作為流水線的測試輸入。
在常見的 CI/CD 流水線中也應該包含以下步驟:
- 對源代碼進行掃描:源代碼可能存在 SQL 注入、跨站攻擊、內存溢出等常見安全漏洞,因此可以使用 SonarQube 等工具進行掃描,以控制源代碼的質量。
- 對依賴版本進行掃描:依賴庫的版本可能存在安全漏洞,因此需要掃描依賴庫的版本,并及時升級版本以獲得最新的安全修復。
- 對基礎容器鏡像的掃描:容器鏡像中可能存在弱密碼訪問權限、不安全的軟件包或內嵌遠程控制程序等問題,因此掃描基礎容器鏡像也很重要,以此避免此類供應鏈攻擊。
4.如何度量
要度量運維項目上 CI/CD 流水線是否安全,可以考慮以下幾個方面:
- 漏洞發現和修復速度:好的流水線應該能夠及時發現漏洞和及時更新和修復系統級別的漏洞,以最小化安全漏洞帶來的風險。
- 訪問控制的完整性:好的流水線應該遵守最小權限原則,能夠避免未經授權的訪問和數據泄露,提高整個系統的安全性。
- 代碼質量的合規性:好的流水線應該能及時通過自動化工具發現硬編碼的密碼和敏感信息,確保高質量的代碼,符合安全標準和最佳實踐。
五、個人隱私數據管理
(圖片來源:https://www.cyberark.com/wp-content/uploads/2020/04/Laptop-with-Fingerprint-Icon-scaled.jpg)
1.概念
個人身份信息(Personal Identifiable Information,后文簡稱 PII)是指單獨使用或與其他相關數據一起使用時可以識別個人身份的信息。
PII 按照識別類型可以分為:
- 唯一識別一個人的直接標識符(例如,護照號碼,身份證號碼,社會安全號碼等)。
- 與其他準標識符組合以成功識別一個人的準標識符(例如,姓名,出生日期,種族,宗教信仰等)。
PII 按照敏感類型可以分為:
- 敏感的標識符(身份證號碼,社會安全號碼 SSN、駕照號碼、財務信息和醫療記錄等)。
- 非敏感的標識符(郵政編碼、種族、性別和出生日期等)。
2.個人隱私數據管理在運維中的重要性
在運維的過程中,工程師和支持團隊經常需要排查線上的問題,不可避免的需要查看系統日志,服務日志,數據庫數據等信息。而這些信息中經常會出現 PII,這使得 PII 很容易泄漏,而 PII 的泄露可能會違反當地的法律,也可能被黑客利用,給用戶帶來潛在的威脅。
3.個人隱私數據管理在運維中如何落地
根據公司所在國家的法律和公司本身的業務,定義出 PII 的列表。
在運維的初始階段,需要依據 PII 列表識別項目中的 PII 并進行隱藏。 因為日志中的 PII 的數據有時候對排查問題時非常重要,所以在隱藏 PII 的時候,可以采取部分隱藏的策略,既可以達到隱藏 PII 的目的,又可以使用部分 PII 數據對問題進行調查。
在開發產品功能時,避免暴露或者輸出任何 PII 。在運維過程中,如果發現 PII,也需要及時的隱藏。
在日常運維開發中,設立項目中的 PII 檢查規則,并且及時和團隊進行同步:
(1) 代碼中的 PII
不能使用真實用戶的 PII 數據作為測試數據提交到代碼倉庫,因為一般情況下,代碼的讀取權限是被很多人擁有的,這樣很容易泄漏 PII。
(2) 數據庫中的 PII1
- 對于敏感的 PII 數據,在數據庫中需要加密存儲,這樣可以進一步保證客戶的數據安全。
- 對于生產的數據庫,也需要通過權限控制來嚴格控制訪問的權限,確保最小權限原則。
- 對于生產環境數據庫的備份庫,也同樣要注意訪問權限的嚴格控制。
- 在對生產環境數據庫進行拷貝時,也要注意安全的方式,避免數據的泄露,尤其是包含 PII 的數據。
- 如果有從生產環境刷庫到測試環境的需求時,一定要有對應的清除數據庫中 PII 的腳本,確保用戶數據的安全。
(3) 日志中的 PII
在代碼中隱藏日志輸出的 PII,日志系統是我們定位問題使用最多的工具,支持團隊或者開發人員大多都有查看日志的權限,因此隱藏日志中的 PII 十分重要。我們可以在 Pipeline 中配置檢查 PII 日志的插件,并配置告警,便于我們及時發現。
在運維過程中如果有新需求進行產品功能開發時,避免暴露 PII:
- 添加故事卡 PII 檢查點,在創建故事卡和需求梳理時,需要盡量識別出是否有 PII 泄漏的風險并添加檢查點。
- 代碼評審環節,確認代碼的改動是否會給日志中引入 PII。
發現 PII 相關的泄露問題及時通知公司的安全部門,采取相應的措施。
4.如何度量
要度量運維項目個人隱私數據的管理做得好不好,可以考慮以下幾個方面:
根據公司或項目上記錄的 PII 泄露事故數量作為我們度量運維團隊是否做好了 PII 保護的一個指標。
當發現 PII 泄露之后,團隊的應對和處理措施更能反映出大家的信息安全的意識,因此這一點也是一個重要的度量指標。
六、威脅建模
(圖片來源:https://www.guidepointsecurity.com/wp-content/uploads/2020/09/service-icon-threat-model.svg)
1.概念
威脅建模是一種結構化的分析和解決安全問題的方法,用來識別、量化威脅,并且有助于思考如何應對威脅。在公司的安全部門一般會每年定期開展威脅建模活動,除此之外,威脅建模還會發生在項目前期,以及每當業務或者技術有較大變更的時候開展。
2.威脅建模在運維中的重要性
在運維的過程中,威脅建模可以為運維團隊提供清晰的安全視野,最大限度的預防生產的安全事故。尤其是在運維團隊剛入場接手項目時,威脅建模有助于團隊梳理清楚所有安全方面的威脅,及時去發現和修復已有的安全威脅。比如說通過威脅建模明確人員的權限,最大防止數據庫、服務器被不應該接觸權限的人誤刪除或者惡意刪除等。
3.威脅建模在運維中如何落地
(1) 確定運維項目威脅建模的時間
- 運維團隊從其他團隊(交付團隊或者此前的運維團隊)開始接收項目的運維工作時。
- 在運維過程中發生重大變更時,比如項目架構的調整,引入新的組件等。
- 運維過程中有新的發現時。(交付時上一個團隊沒有告知到的或者因為某些原因交接團隊也不是很清楚,交接時間短暫,沒有能在交接時,對項目有完整的、徹底的認知)。
- 團隊可以也可以定期去開展威脅建模。
(2) 準備最新的、準確的架構圖和數據流圖
運維項目即意味著項目主要功能已經完成并且已經在線上運行,那么也就意味著在這個時刻,項目的架構、數據流都已經固定下來。但是每個項目實際產出的各有差異,將有三種情況:
第一種情況,那么運維團隊只需要簡單驗證架構圖和數據流圖的準確性即可。
第二種情況,則需要結合代碼、現存文檔以及過期的架構圖重新完成最新的、準確的架構圖和數據流圖的繪制。出現第二種情況的原因有很多,比較常見的是在某個時刻退役了某些功能但是并沒有刪除代碼,或者是第三方服務發生了改變,但并沒有及時更新架構圖等。
第三種情況,在文檔嚴重缺失的情況下,只能通過閱讀代碼的方式來重新繪制。
- 項目有最新的、準確的架構圖和數據流圖。
- 項目的架構圖和數據流圖過期,不一定準確。
- 由于某些原因沒有架構圖和數據流圖。
(3) 根據 STRIDE 識別圖中每一個元素的威脅
團隊成員分別扮演不同的角色,包括從用戶、開發人員、運維人員、競爭者以及黑客組織。從他們的行為習慣或者目的出發,以 STRIDE 為攻擊的角度去思考如果你是這類用戶,你會怎么做威脅系統安全的事情。
- Spoofing 欺騙
- Tampering 篡改
- Repudiation 否認、抵賴
- Information disclosure 信息泄露
- Deny of service 拒絕服務
- Elevation of privilege 特權提升
(4) 根據 DREAD 對威脅進行風險評估
對第二步識別出來的風險從以下幾個緯度進行打分,確定風險等級。
- Damage potential 潛在損失
- Reproducibility 重現性
- Exploitability 利用難度
- Affected users 受影響用戶數量
- Discoverability 是否容易被發現
(5) 設置應對措施
風險評估完成后,團隊便會獲取到一個按照優先級排序的風險列表 。那么這一步就需要按照優先級制定相關的措施 。例如在做完某次威脅建模后發現有SQL 注入威脅和發現有用戶權限提升為管理員權限。那么此時根據這兩種威脅帶來的影響排出優先級,并且制定相對應的措施(如下表):
威脅 | 措施 |
SQL 注入威脅(高風險) | 更改相關 SQL,并且讓 DBA 團隊進行評審 |
用戶權限提升為管理員權限(中風險) | 由運維人員收回用戶的管理員權限 |
4.如何度量
要度量運維項目上威脅建模做得好不好,可以考慮以下幾個方面:
- 團隊是否有基于運維項目時間(新的交接,重大變更,新的發現)進行威脅建模。
- 每一次進行威脅建模后生成的措施是否都完成。
- 團隊是否及時對數據流圖進行了更新,并根據新的數據流圖更新來完成威脅建模。
七、Web 應用防火墻
(圖片來源:https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTEe9BAIoNTetWZ7EJgxbd99eXdXOoLza26MqwnTiwoZ8fOi-52)
1.概念
Web 應用程序防火墻(后文簡稱 WAF),通過過濾和監控 Web 應用程序與互聯網之間的 HTTP 流量來幫助保護 Web 應用程序。它是一種反向代理,引導客戶端通過 WAF 到達服務器,從而防止暴露服務器。WAF 可以快速簡便地修改規則,因而可以更迅速地響應不同的攻擊手段。例如,當發生拒絕服務攻擊(DDoS) 攻擊時,可通過修改 WAF 規則快速實施速率限制。
2.WAF 和普通防火墻的區別
WAF 和普通網絡防火墻之間的關鍵技術區別在于 WAF 保護 OSI 模型第 7 層應用層的攻擊。而網絡防火墻在 OSI 模型第 3 層網絡層和第 4 層傳輸層運行,保護數據傳輸和網絡流量。WAF 位于外部用戶和 Web 應用程序之間,用于分析所有 HTTP 通信。然后,它會在惡意請求到達用戶或 Web 應用程序之前檢測并阻止它們。網絡防火墻主要目標是將安全區域與不太安全的區域分開,并控制兩者之間的通信。
3.Web 應用防火墻在運維中的重要性
WAF 保護著網站的應用程序,在網站的安全維護上扮演著重要角色。從實際運維經驗中,我們發現許多網站在搭建完成后就由不同人管理,這樣會造成網站上存著不同程序員的管理風格,一旦疏于管理或是在缺失上下文的情況下依循不同邏輯擴增網站的架構,在新舊架構并存、語法混亂的狀態下,網站其實很容易就會出現安全漏洞,但團隊往往不自知而讓黑客有機可趁,因此就會需要 WAF 為網站筑起防護墻,保障網站安全。
4.Web 應用防火墻在運維中如何落地
(1) 準備工作
首先對需接入 WAF 進行防護的網站的業務情況進行全面梳理,幫助我們了解當前業務狀況和具體數據,為后續配置 WAF 的防護策略提供依據。主要梳理的內容包括:
- 網站/應用業務每天的流量峰值情況,包括 Mbps、QPS。
- 業務的主要用戶群體(例如,訪問用戶的主要來源地區)。
- 明確架構,是否有 App 端、Windows 端、Linux 端、代碼回調或其他環境的客戶端。
- 源站服務器的網絡配置和業務端口。
- 源站服務器的請求處理性能,判斷需要的 DDoS 防護規格。
(2) 實現
- 硬件 WAF 串行或旁路部署在網絡上,通過網頁界面進行管理和規則配置,價格較高,但部署方便,運維管理比較省心。
- 軟件 WAF 以 ModSecurity、Naxsi、Wazuh 等免費開源軟件為代表,部署在每一臺 Web 服務器上,需要網絡安全人員熟悉其配置規則,但服務器數量多了之后,這種模式安裝的軟件,維護管理很快就會變得不太方便,因為不同的服務器可能使用不同的規則。
- 以各類云加速 + CDN 類產品為代表,如國外的 CloudFlare、國內的各種云加速等,對用戶隱藏真實服務器地址,云 WAF 作為反向代理執行安全控制,是用戶瀏覽器和真實服務器之間的中間人。但要注意對于涉及商業秘密等場景,要謹慎選擇。
- 對于自研發的方式,目前 Nginx 配合 Lua 搭建簡易的黑名單式 WAF 較為常見。
(3) 產品選擇
目前 WAF 的產品形態主要有硬件 WAF、軟件 WAF、云 WAF 服務和自研發方式,我們可以項目的實際情況,去選擇一款合適的進行部署:
(4) 策略配置
根據應用程序的需求,配置 WAF 策略,包括白名單、黑名單、訪問控制規則、SQL 注入防御、跨站點腳本 XSS 防御等。
(5) 性能測試
在部署完 WAF 之后,比較容易忽視一點的是,我們需要對其進行性能測試。與服務的性能測試相同,旨在確保 WAF 的加入不會影響服務正常的性能指標。
(6) 日志監控
有了 WAF 之后,最重要的一點是要進行數據的采集,監控和智能攔截。將 WAF 的日志和性能指標與現有日志監控系統集成,便于時刻監控 WAF 狀態,定期檢查 WAF 的日志,監控應用程序的安全狀況,發現異常行為需要告警并采取必要的措施,以及及時升級和修復 WAF。
5.如何度量
要度量運維項目上 WAF 的效果,可以先進行威脅建模,根據可能會受到的攻擊,制定 WAF 的測試方案。主要可能包含以下方面:
- 模擬黑客攻擊看是否阻斷生效。
- 模擬災難發生(WAF 宕機或網絡波動等)看是否切換備用 WAF 正常工作。
- 若無備用 WAF,服務是否能正常訪問到源服務器。
- 模擬大流量并發看是否 WAF 能抗壓正常工作。
- WAF 是否支持調整策略。
這些度量指標可以幫助我們了解 WAF 功能是否正常,幫助我們運維項目的安全實踐和改進方向。
八、總結
當談到運維中安全管理時,我們不僅僅在維護和管理IT系統,更是在守護企業的核心利益。無論是保護敏感信息免受黑客威脅,還是確保系統的連續可用性,安全管理都不容忽視。通過對權限控制,密鑰和證書的妥善管理,代碼依賴的安全管理,CICD 流水線的安全檢查,敏感信息的保護,以及建立有效的 Web 應用防火墻和及時進行威脅建模,我們可以建立起一道堅固的安全屏障,以抵御各種內外部風險。
然而,安全管理不僅僅是一項任務,更是一種文化。它需要貫穿于運維的始終,貫徹于每個細節。通過在運維階段進行全面的安全管理,能夠確保業務的可持續性,維護客戶的信任,以幫助我們在競爭激烈的市場中脫穎而出。因此,我們應始終牢記,在運維中,安全是不可或缺的基石。