10萬npm用戶賬號信息被竊、日志中保存明文密碼,GitHub安全問題何時休?
作者 | 褚杏娟 燕珊
5 月 26 日,GitHub 披露了 4 月中旬一次安全漏洞的更多調查細節,描述了攻擊者如何抓取包括大約 10 萬個 npm 用戶的詳細登錄信息。同時,這也顯示了在將 JavaScript 包注冊中心整合到 GitHub 的日志系統后,GitHub 在內部日志中存儲了 “npm 注冊中心的一些明文用戶憑證”。
“明文密碼”的發現過程
今年 4 月 15 日,GitHub 披露了有攻擊者通過偷來的 OAuth 用戶令牌(原本發放給 Heroku 和 Travis-CI),可以有選擇地從私人倉庫下載數據。自官方在 4 月 12 日首次發現這一活動以來,攻擊者已經從幾十個使用 Heroku 和 Travis-CI 維護的 OAuth 應用程序的組織中訪問并竊取數據,其中包括 npm。
該行為被發現后,GitHub、Travis CI 和 Heroku 撤銷了所有 OAuth 令牌,以阻止進一步的黑客攻擊。
5 月 26 日,GitHub 產品安全工程高級總監 Greg Ose 表示,該公司在調查期間發現,攻擊者可以獲得 npm 的內部數據和客戶信息,比如 AWS 訪問密鑰。通過訪問 npm 的 AWS 基礎設施,攻擊者能夠竊取 skimdb.npmjs.com 鏡像的舊備份信息,具體包括:
一份來自 2015 年的用戶信息存檔,包含大約 10 萬個 npm 用戶名、密碼哈希和電子郵件地址。截至 2021 年 4 月 7 日的所有私有 npm 包清單和元數據。截至 2022 年 4 月 10 日的所有私有 npm 包的已發布版本的名稱和版本號 semVer。來自兩個組織的私人包。
經過日志和事件分析以及檢查所有 npm 軟件包版本的哈希值后,GitHub“目前確信攻擊者沒有修改注冊表中的任何已公開的軟件包,也沒有對現有軟件包發布任何新版本”。GitHub 重置了所有受影響用戶的密碼,并向受影響組織和用戶發送了通知。
GitHub 強調,攻擊者不是通過入侵 GitHub 或其系統獲得了這些令牌,因為 GitHub 未以原始可用的格式存儲相關令牌。由于 npm 使用與 GitHub.com 完全獨立的基礎架構,GitHub 在這次原始攻擊中沒有受到影響。
另外,在這次的事件調查中,GitHub 還表示發現了存儲在 npm 注冊表內部日志中的一些明文憑證。
按照 GitHub 的說法,“經過內部發現和與 OAuth 令牌攻擊無關的額外調查,GitHub 發現將 npm 整合到 GitHub 日志系統后,在內部日志中發現了一些 npm 注冊表的明文用戶憑證。”具體內容包括“npm 訪問令牌和少量用于嘗試登錄 npm 賬戶的明文密碼,以及一些發送到 npm 服務的 GitHub 個人訪問令牌。”
不過,只有 GitHub 員工可以訪問這些信息。“這個問題已經得到緩解,在對 npm 的攻擊之前,包含明文憑證的日志已經被清除了。”
“雖然這種記錄憑證的做法違背了我們的安全最佳實踐,但 GitHub 或 npm 并沒有遇到會暴露這些含有純文本憑證日志的損害或數據泄露問題。”GitHub 在報告中補充道。
這是由來已久的安全隱患。在 github 上執行一次搜索刪除密碼操作可以發現,在 repo 中存儲密碼的情況非常普遍,簡單的搜索就返回來 51 萬次 commit 記錄,這還沒有覆蓋到沒有填寫詳細的 commit 信息,或者已經通過刪除歷史記錄來掩飾活動的情況。
GitHub 安全問題不斷
GitHub 在全球擁有超過 8000 萬個存儲庫,無疑是最受歡迎的開源代碼管理系統。但不斷爆出的安全問題也一直困擾著 GitHub。
2021 年,Github 日前遭到大規模暴力破解密碼的攻擊,一些帳號被成功攻破;2020 年,Github 存儲庫中發現了臭名昭著的 Octopus Scanner 惡意軟件;2018 年,Github 更是遭遇了大規模 DDoS 攻擊。
根據北卡羅來納州立大學的研究,通過對超過 100 萬個 GitHub 帳戶為期六個月的連續掃描,發現包含用戶名、密碼、API 令牌、數據庫快照、加密密鑰和配置文件的文本字符串可通過 GitHub 公開訪問。
今年 GitHub 在安全問題上再次加碼。5 月初,GitHub 宣布在 2023 年之前,所有使用 GitHub 平臺存儲代碼、做貢獻的開發者都需要啟動一種或多種形式的雙因素身份驗證(2FA),否則將無法正常使用該平臺。促使 GitHub 做出這項決策的直接原因便是,未啟用 2FA 的開發人員帳戶去年遭到入侵,導致 npm 包被接管。
“大多數安全漏洞并非來自非常復雜的攻擊事件或是零日漏洞,相反,往往是一些低成本的攻擊,如社會工程、密碼泄露,以及其他為攻擊者提供訪問受害者賬戶的攻擊。”GitHub 首席安全官 (CSO) Mike Hanley 在發布的博文中寫道。
雖然有很多場景已經驗證了 2FA 的有效性,但是 2FA 在整個軟件生態系統中的采用率仍然很低。GitHub 內部研究表明,目前只有大約 16.5% 的活躍用戶(大約六分之一)對其帳戶啟用了增強性的安全措施,只有 6.44% 的 npm 用戶啟用了 2FA。
使用 GitHub 的一些建議
即便 GitHub 自身在不斷加強安全防護,但是每個 GitHub 用戶也應該了解一些安全常識,盡量避免因為個人疏忽等原因造成不必要的損失。
1.切勿將憑據和敏感數據存儲在 GitHub 上
GitHub 的目的是托管代碼存儲庫。除了設置賬戶權限外,沒有其他安全方法可以確保密鑰、私人憑據和敏感數據可以一直處于可控和安全的環境中。
git 代碼提交會維護已添加和刪除內容的歷史記錄,從而使敏感數據永久保存在分支上。當分支被合并和再分叉時,潛在的數據或基礎設施泄露問題可能會呈指數級增長。
減輕這種風險最簡單方法是在提交到分支之前不在代碼中存儲憑據和敏感數據。但是,可能會發生一些錯誤。為從編程層面防止錯誤情況的發生,可以在 CI 和 CD 管道中使用 git-secrets 等工具,通過中斷構建過程來防止帶有敏感數據的代碼到達 GitHub。另外,也可以使用機密和身份管理工具,例如 Vault 和 Keycloak。
2.刪除文件中的敏感數據和 GitHub 歷史記錄
一旦在 GitHub 倉庫中發現了敏感數據,就需要采取一些應急處理措施。首先要使曾經公開的令牌和密碼無效。一旦秘密公開就要做好已被攻擊者掌握的準備。
當然,肯定需要從存儲庫中刪除敏感數據。但 GitHub 非常擅長保留所有提交的完整歷史記錄,包括敏感信息的變更日志。有關詳細信息,可以參閱“從存儲庫的歷史記錄中清除文件”。
3.限制訪問控制
開發者專注在分析更復雜的攻擊手段時,往往一些最簡單的事情都沒有做好,比如在顯示器上貼著記錄密碼的便利貼等。
無論是在 GitHub 平臺,還是一般的場景,開發者都應當遵守基本的安全準則:在每個貢獻者的 GitHub 帳戶上啟用雙因素身份驗證、永遠不要讓用戶共享 GitHub 帳號和密碼、必須適當保護任何可以訪問源代碼的筆記本電腦或其他設備等等。
4.嚴格驗證 GitHub 上的應用程序
所有好的平臺都可以擴展,GitHub 及其應用程序市場也不例外。在將它們添加到代碼倉庫時要記住第三方應用擴展是由組織和第三方開發人員編寫的。
在選擇和安裝 GitHub 應用程序時注意:不要給應用程序過多的訪問權限、詢問應用所需訪問級別的原因及可能帶來的危害、在讓應用背后的作者或組織訪問代碼庫之前驗證他們的合法性和可信性等。
安全性取決于最薄弱的環節,因此,如果要訪問的應用的安全性較差,那么攻擊者可以通過攻擊它們的應用來訪問你的代碼——這是開發者最敏感的資產之一。最后,確保定期檢查或審計第三方應用及其貢獻者,以確保仍然需要他們、信任他們、認為他們值得賦予權限去訪問代碼。
5.及時更換 SSH key 和個人訪問 token
GitHub 訪問通常使用 SSH 密鑰或個人用戶令牌 (代替密碼,因為已啟用了雙因素身份認證) ,開發者可以定期更新密鑰和 token,來降低密鑰泄露造成的任何損失。
參考鏈接:
https://www.bleepingcomputer.com/news/security/github-attackers-stole-login-details-of-100k-npm-user-accounts/
https://www.theregister.com/2022/05/27/github_publishes_a_post_mortem/?td=rt-3a
https://snyk.io/blog/ten-git-hub-security-best-practices/
文章來源:infoQ