超 100000 個 GitHub 代碼庫泄露了 API 或加密密鑰
每天成千上萬新的 API 或加密密鑰通過 GitHub 項目泄露出去。
六個月期間掃描 GitHub 公共代碼庫總數中 13% 的數十億個文件后發現,超過 100000 個代碼庫泄露了 API 令牌和加密密鑰,每天數千個新的代碼庫在泄露新的秘密內容。
這次掃描是北卡羅來納州立大學(NCSU)的團隊開展的一項學術研究的課題,研究結果已交給 GitHub,GitHub 看到調查結果后采取了行動,加快開發一項名為令牌掃描(Token Scanning)的新安全功能,目前該功能處于測試階段。
研究人員掃描了數十億個 GitHub 文件
NCSU 的這項研究是迄今為止對 GitHub 最全面和最深入的掃描,超過之前的任何同類研究。
2017 年 10 月 31 日至 2018 年 4 月 20 日,NCSU 的研究人員掃描了多個 GitHub 帳戶,掃描時間持續近六個月,尋找 API 令牌和加密密鑰等格式的文本字符串。
他們不僅使用 GitHub Search API 來尋找這些文本模式,就像之前的其他研究工作一樣,還查看了谷歌的 BigQuery 數據庫中記錄的 GitHub 代碼庫快照。
在這六個月期間,研究人員分析了無數 GitHub 代碼庫當中的數十億個文件。
在上個月發表的一篇研究論文中,NCSU 的三人團隊表示,他們使用 GitHub Search API 獲取并分析了代表 681784 個代碼庫的 4394476 個文件,以及代表谷歌的 BigQuery 數據庫中記錄的 3374973 個代碼庫的另外 2312763353 個文件。
NCSU 團隊掃描了 11 家公司的 API 令牌
研究人員在這龐大的文件堆中尋找采用特定的 API 令牌或加密密鑰格式的文本字符串。
由于并非所有的 API 令牌和加密密鑰都采用同樣的格式,因此 NCSU 團隊決定使用 15 種 API 令牌格式(來自屬于 11 家公司的 15 項服務,其中 5 家來自 Alexa Top 50)和 4 種加密密鑰格式。
這包括谷歌、亞馬遜、Twitter、Facebook、Mailchimp、MailGun、Stripe、Twilio、Square、Braintree 和 Picatic 使用的 API 密鑰格式。
許多流行 API 的密鑰有著獨特的結構,一旦泄密,將導致安全風險。
結果立馬出來了,研究項目發現每天數千個 API 和加密密鑰泄露出去。
總的來說,NCSU 團隊表示他們發現了 575456 個 API 和加密密鑰,其中 201642 個具有獨特性,它們都散布于 100000 多個 GitHub 項目中。
合并數據集中的秘密內容絕大多數被單一所有者使用。
研究團隊在學術論文中披露,使用谷歌 Search API 找到的“秘密內容”和通過谷歌 BigQuery 數據集發現的“秘密內容”也很少有重疊。
研究人員說:“合并兩個數據集后,我們確定這兩個數據集中出現了 7044 個秘密內容,占總數的 3.49%。這表明我們的方法在很大程度上是互補的。”
此外,大多數 API 令牌和加密密鑰(93.58%)來自單一所有者帳戶,而不是多個所有者代碼庫。
這意味著 NCSU 團隊發現的絕大多數 API 和加密密鑰很可能是實際環境中使用的有效令牌和密鑰,因為多個所有者的帳戶通常往往包含用于共享測試環境和開發階段代碼的測試令牌。
泄露的 API 和加密密鑰停留數周
由于研究項目是在六個月的期間內進行,研究人員還有機會觀察帳戶所有者是否以及何時認識到自己泄露了 API 和加密密鑰,并從代碼中刪除敏感數據。
該團隊表示,他們跟蹤的 API 和加密密鑰中有6% 在泄露后一小時內被刪除,這表明這些 GitHub 所有者立馬意識到了所犯的錯誤。
超過 12% 的密鑰和令牌一天后消失,而 19% 的密鑰和令牌最多停留了 16 天。
研究人員說:“這也意味著我們發現的秘密內容中 81% 沒有被刪除。這 81% 秘密內容的開發人員很可能不知道秘密內容被泄露,或者低估了泄露的風險。”
短期和長期監測秘密內容
研究團隊發現了一些重大泄露
研究人員開始研究其中一些內容是從何處泄露時,這種掃描的重要性顯露出來。
NCSU 團隊說:“有一次,我們發現了我們認為是美國數百萬大學申請者所依賴的一大網站的 AWS 登錄信息,可能是由承包商泄露的。”
“我們還找到了一個西歐國家的主要政府機構的網站的 AWS 登錄信息。在這種情況下,我們能夠證實該帳戶的有效性,甚至證實提交秘密內容的特定開發商。該開發商在網上聲稱擁有近 10 年的開發經驗。”
在另一個案例中,研究人員還發現了 564 個谷歌 API 密鑰,這些密鑰被一家在線網站用來規避 YouTube 的速率限制,并下載以后托管在另一個視頻共享門戶網站上的 YouTube 視頻。
NCSU 的研究人員說:“由于密鑰數量非常多,我們懷疑(但無法確認)這些密鑰可能是以欺詐手段獲得的。”
此外,研究人員還發現了 7280 個 RSA 密鑰。研究人員發現,通過分析這些配置文件中的其他設置,絕大多數用戶禁用了密碼身份驗證,完全依賴 RSA 密鑰進行身份驗證,這意味著凡是發現這些密鑰的人都可以訪問成千上萬的私密網絡。
研究人員使用其他 API 令牌掃描工具分析他們自己的數據集以確定掃描系統的效率時,掃描結果的高質量也顯露無遺。
研究團隊說:“我們的研究結果表明,TruffleHog 在檢測機密內容基本上無效,因為它的算法只檢測到我們的 Search 數據集中 25.236% 的秘密內容和 BigQuery 數據集中 29.39% 的秘密內容。”
GitHub 獲悉后忙于補救
北卡羅來納州立大學計算機科學系助理教授 Brad Reaves 今天接受 ZDNet 的采訪時表示,他們在 2018 年將這項研究的結果告知了 GitHub。
Reaves 說:“我們與 GitHub 討論了結果。對方啟動了一個內部項目,幾乎就在我們完成研究的同時,檢測并告知開發人員泄露的秘密內容。該項目于 2018 年 10 月公開承認。”
“我們被告知 GitHub 在監測研究文檔中列出的秘密內容之外的更多秘密內容,但我們沒有獲得進一步的細節。”
Reaves 補充道:“由于這種類型的泄露很普遍,我們很難通知所有受影響的開發人員。我們面臨的諸多挑戰之一就是,我們根本無法獲得大批 GitHub 開發人員的安全聯系信息。”
“在我們的論文發表時,我們試圖與 GitHub 合作以通知開發人員,但考慮到我們的令牌掃描與 GitHub 的有重疊,他們覺得沒必要另外通知。”
API 密鑰泄露是已知問題
開發人員在眾多應用程序和網站的源代碼中留下 API 和加密密鑰,這不是什么新問題。亞馬遜已敦促互聯網開發人員掃描代碼,從早至 2014 年的公共代碼庫中刪除任何 AWS 密鑰,甚至發布了一個工具來幫助他們向公共代碼庫提交任何代碼之前掃描代碼庫。
一些公司已主動負起責任,掃描 GitHub 及其他代碼共享庫,查找無意中泄露的 API 密鑰,搶在 API 密鑰所有者注意到泄露或濫用之前撤銷令牌。
NCSU 開展這項研究是為了最深入地研究這個問題。
Reaves 稱:“研究結果表明,開源軟件代碼庫中的登錄信息管理對于新手和專家來說仍然具有挑戰性。”
Reaves 與 Michael Meli 和 Matthew R. McNiece 共同撰寫的這篇論文題為《Git 會有多糟糕?細述公共 GitHub 代碼庫中的秘密內容泄露》