針對GitHub的八項(xiàng)安全實(shí)踐
譯文【51CTO.com快譯】GitHub可謂世界上最大、最受歡迎的社交開發(fā)平臺。根據(jù)其《2019年Octoverse的態(tài)勢報(bào)告》(請參見-- https://octoverse.github.com/):GitHub當(dāng)時擁有超過4000萬名用戶,而且該社區(qū)每天都在不斷地壯大。
由于各類開發(fā)人員頻繁地使用由該平臺所提供的開源代碼去構(gòu)建軟件,那么大量可以被重復(fù)使用的代碼往往會增加漏洞從一個依賴項(xiàng)或存儲庫,遷移到另一個依賴項(xiàng)或存儲庫的潛在風(fēng)險。可見,基于此類高度互連性,Github平臺及內(nèi)容的安全性顯得尤為重要。每個貢獻(xiàn)者和用戶都應(yīng)當(dāng)專注于創(chuàng)建安全可靠的開發(fā)環(huán)境。
下面,我將和您討論針對代碼安全防護(hù)的八項(xiàng)實(shí)踐。GitHub用戶可以根據(jù)實(shí)際情況進(jìn)行對標(biāo)和實(shí)現(xiàn)。
加強(qiáng)訪問控制
實(shí)施適當(dāng)?shù)脑L問控制是增強(qiáng)安全性的最佳實(shí)踐之一。這不僅僅體現(xiàn)在GitHub上,對于任何需要保障代碼安全性的環(huán)境皆是如此。
目前,GitHub提供了多種選項(xiàng),讓用戶減少不當(dāng)?shù)男孤╋L(fēng)險。其中,我們最常用的當(dāng)屬最小特權(quán)(least privilege)模型。該模型僅向用戶授予基本必要的權(quán)限。如下是我們在使用過程中,需要遵循的各種基本訪問控制準(zhǔn)則:
- 限制存儲庫的創(chuàng)建,以防止用戶在公共存儲庫中公開其組織的相關(guān)信息。
- 啟用分支保護(hù)和狀態(tài)檢查,以確保用戶可以合并各種提交或安全地操作分支。
- 禁用或有條件地允許fork私有存儲庫,以確保用戶不會暴露或向未經(jīng)授權(quán)方共享所在組織的代碼。
- 撤消那些不再屬于貢獻(xiàn)者的、所有非活動用戶的訪問權(quán)限。
- 定期檢查對GitHub項(xiàng)目的訪問權(quán)限。
- 確保用戶不會共享GitHub帳戶或密碼。
- 確保每個貢獻(xiàn)者在其帳戶上啟用雙因素身份驗(yàn)證。
- 定期更換個人訪問的令牌和SSH密鑰。
永遠(yuǎn)不要在您的GitHub文件中存儲密鑰
您是否注意到:代碼、配置文件或提交的消息,都可能成為被攻擊的網(wǎng)關(guān),向其他GitHub存儲庫泄露機(jī)密信息。
為了防止敏感數(shù)據(jù)被添加到存儲庫中,請考慮使用諸如git-secrets(請參見--https://github.com/awslabs/git-secrets)或vault(請參見--https://www.vaultproject.io/)之類的密鑰管理工具。這些工具會掃描您的代碼庫,并在代碼或配置文件中檢測到敏感信息時,立即終止構(gòu)建。
您也許會在意識到GitHub存儲庫里有敏感信息泄漏時,立即將其刪除。但是,GitHub會在您的存儲庫中保留所有提交的歷史記錄。因此僅刪除數(shù)據(jù)是遠(yuǎn)遠(yuǎn)不夠的,您需要從GitHub存儲庫的歷史記錄中清除掉相應(yīng)的文件(請參見--https://help.github.com/articles/removing-sensitive-data-from-a-repository/)。
同時,為了提高安全性,您也需要將那些已經(jīng)泄露出去的密鑰(包括:密碼和令牌),及時設(shè)置為失效狀態(tài)。
為脆弱的依賴項(xiàng)啟用安全警報(bào)
隨著從事的項(xiàng)目越來越多,GitHub用戶會發(fā)現(xiàn)他們越來越難管理好紛繁復(fù)雜的依賴關(guān)系。不過幸運(yùn)的是,GitHub為您提供了自動化安全警報(bào)的機(jī)制,可以幫助您檢測到存儲庫中脆弱的依賴項(xiàng)。
Github安全實(shí)踐
(源自https://github.blog/2019-12-11-behind-the-scenes-github-vulnerability-alerts/)
如上圖所述,GitHub安全警報(bào)源自(美國)國家漏洞數(shù)據(jù)庫(NVD,https://nvd.nist.gov/),GitHub安全公告(GitHub Security Advisories,https://github.com/advisories)和WhiteSource漏洞數(shù)據(jù)庫。它們提供了200多種語言的漏洞數(shù)據(jù)。通過GitHub上提供的實(shí)時安全警報(bào)服務(wù),用戶可以更加安全地使用各種開源庫。
驗(yàn)證GitHub應(yīng)用程序
GitHub的市場里包含了豐富的由第三方開發(fā)人員和組織所編寫的應(yīng)用程序。我們往往需要仔細(xì)驗(yàn)證那些被添加到GitHub存儲庫中的每個應(yīng)用程序。也就是說,在安裝GitHub應(yīng)用程序時,請注意遵循以下規(guī)范:
- 強(qiáng)制執(zhí)行最小特權(quán)原則。切勿向應(yīng)用程序授予超出其要求的訪問權(quán)限。
- 對應(yīng)用請求的訪問權(quán)限始終保持謹(jǐn)慎的態(tài)度,要及時考慮到授予某項(xiàng)訪問權(quán)限可能帶來的損害。
- 在給GitHub的訪問主體授權(quán)時,請進(jìn)行背景檢查,以確保應(yīng)用程序背后的組織或開發(fā)人員合法且可信。
- 需要驗(yàn)證應(yīng)用程序的安全狀態(tài)是否可靠,以避免整體的安全態(tài)勢遭受破壞。
根據(jù)木桶原理,應(yīng)用程序的安全性取決于其最薄弱的鏈接,而GitHub存儲庫也是如此。因此,在授予應(yīng)用程序?qū)Υ鎯斓那‘?dāng)訪問權(quán)限之前,請務(wù)必驗(yàn)證它的來源,以確保其真實(shí)可信。
審核所有導(dǎo)入GitHub的代碼
開發(fā)人員往往需要將外部代碼導(dǎo)入GitHub中。那么,請?jiān)诿看螌?dǎo)入項(xiàng)目時,務(wù)必考慮對源代碼執(zhí)行完整性審核。這看上去非常繁瑣,甚至對于一些較小的項(xiàng)目來說有些吹毛求疵,但是這是一種非常好的安全實(shí)踐,可以在源頭上避免向存儲庫中引入潛在的安全漏洞。
向GitHub導(dǎo)入代碼可能帶來的另一個風(fēng)險是:代碼中可能包含諸如密碼之類的敏感信息。而如果將其存儲到GitHub文件中,那么就會提高應(yīng)用的整體風(fēng)險值。可見,我們在將代碼推送到GitHub之前,必須進(jìn)行安全態(tài)勢的審核與評估,以便發(fā)現(xiàn)其中的安全風(fēng)險點(diǎn)。
值得一提的是:在被導(dǎo)入的過程中,代碼實(shí)際上是從一種封閉的環(huán)境,轉(zhuǎn)換到了一種可以被相互調(diào)用和影響的環(huán)境中。因此,環(huán)境的變化也會促使我們重新進(jìn)行安全關(guān)系和執(zhí)行層面上的審查。
對存儲庫使用自動靜態(tài)源代碼分析
您可以使用多種第三方工具,來分析存儲庫中的安全漏洞。其中最為常用的一種工具是WhiteSource Bolt(請參見--https://bolt.whitesourcesoftware.com/),該工具可以在GitHub市場中免費(fèi)獲取到。
WhiteSource Bolt為GitHub檢測到的漏洞
WhiteSource Bolt通過掃描您的存儲庫,以檢測出所有開源組件中的漏洞。與此同時,它還能提供詳細(xì)的漏洞信息,以及對應(yīng)的修復(fù)建議。
當(dāng)然,您也可以使用其他開源的分析工具,對目標(biāo)GitHub存儲庫開展自動化的,源代碼級的安全分析。
根據(jù)組織的需求,選擇合適的GitHub產(chǎn)品
大多數(shù)組織,特別是政府部門和金融機(jī)構(gòu),都會通過規(guī)定來限制其開發(fā)團(tuán)隊(duì)使用GitHub之類的社交開發(fā)平臺,以防止其他方通過平臺訪問到本組織的源代碼。
如果貴組織確有此項(xiàng)嚴(yán)格的規(guī)定,那么請考慮使用GitHub Enterprise(請參見--https://enterprise.github.com/home)。它允許用戶在內(nèi)部托管的GitHub存儲庫環(huán)境中執(zhí)行各項(xiàng)操作。此舉既允許內(nèi)部開發(fā)團(tuán)隊(duì)訪問到手頭所有的項(xiàng)目,又不必?fù)?dān)心被GitHub上的其他用戶所“剽竊”到,因此,企業(yè)軟件開發(fā)包會得到更加安全的保護(hù)。
為您的項(xiàng)目采用全面的安全策略
常言道,安全是一項(xiàng)集體的責(zé)任。如果您是一名企業(yè)安全經(jīng)理,那么當(dāng)務(wù)之急就是實(shí)施那些能夠讓所有利益相關(guān)者都應(yīng)遵循的安全策略。理想情況下,您應(yīng)該在計(jì)劃階段,就將安全和開發(fā)團(tuán)隊(duì)召集在一起,以確保他們能夠通力協(xié)作。這樣,在項(xiàng)目的開發(fā)過程中,實(shí)施安全控制將會變得更加容易。而隨著人員意識的提高,各種所謂在存儲庫中直接存儲密碼的行為,也就不會頻繁出現(xiàn)。
此外,通過清晰的記錄,團(tuán)隊(duì)成員還可以及時報(bào)告,并協(xié)同解決存儲庫中暴露的各項(xiàng)安全問題。
總結(jié)
每位開發(fā)人員都應(yīng)當(dāng)專注于保護(hù)自己的代碼,以及在GitHub中的安全問題。上述提供的各項(xiàng)安全實(shí)踐,值得您和您的團(tuán)隊(duì)在開發(fā)過程中,持續(xù)嘗試與踐行。
您可以在使用GitHub原生安全服務(wù)的同時,實(shí)施適當(dāng)?shù)纳矸蒡?yàn)證和訪問控制,并通過集成其他工具的方式,來增強(qiáng)開發(fā)工作流程中的安全態(tài)勢。當(dāng)然,您也可以通過查看GitHub業(yè)務(wù)安全性(請參見--https://github.com/business/security)和GitHub安全性文檔(請參見--https://help.github.com/articles/github-security/),來獲取有關(guān)如何保護(hù)GitHub上程序代碼的更多信息。
原標(biāo)題:Stay Safe on GitHub: Security Practices to Follow ,作者:Dickson Mwendia
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】