關於 PHP 專案的 git 儲存庫和用戶群遭到洩漏的報告

與識別 PHP 專案的 Git 儲存庫中的兩個惡意提交相關的事件分析的第一個結果已經發布,該專案在發送帶有專門設計的使用者代理標頭的請求時啟動了後門。 在研究攻擊者活動痕跡的過程中,得出的結論是,git 儲存庫所在的 git.php.net 伺服器本身並未遭到駭客攻擊,但包含專案開發人員帳戶的資料庫遭到了入侵。 。

攻擊者有可能能夠下載儲存在 master.php.net 伺服器上的 DBMS 中的使用者資料庫。 master.php.net 的內容已移至從頭開始安裝的新 main.php.net 伺服器。 用於存取 php.net 基礎架構的所有開發人員密碼均已重置,並且更改過程是透過特殊的密碼恢復表單啟動的。 git.php.net 和 svn.php.net 儲存庫保持唯讀狀態(開發已移至 GitHub)。

在發現透過 PHP 創辦人 Rasmus Lerdorf 的帳戶進行的第一次惡意提交後,人們認為他的帳戶已被駭客入侵,PHP 關鍵開發人員之一 Nikita Popov 回滾了更改並阻止了提交權限有問題的帳戶。 一段時間後,人們意識到阻止沒有意義,因為如果沒有使用數位簽名驗證提交,任何有權訪問 php-src 儲存庫的參與者都可以透過替換虛構的作者姓名來進行更改。

接下來,攻擊者代表 Nikita 本人發送了惡意提交。 透過分析用於組織對儲存庫的存取的 gitolite 服務的日誌,嘗試確定實際進行更改的參與者。 儘管包含了所有提交的說明,但日誌中沒有兩個惡意更改的條目。 很明顯,基礎設施受到了損害,因為提交是直接添加的,繞過了透過 gitolite 的連接。

git.php.net 伺服器立即被停用,主儲存庫已轉移到 GitHub。 匆忙中,人們忘記了要存取儲存庫,除了使用 gitolite 的 SSH 之外,還有另一個輸入允許您透過 HTTPS 發送提交。 在本例中,git-http-backend 用於與 Git 交互,並使用 Apache2 HTTP 伺服器執行身份驗證,該伺服器透過存取 master.php.net 伺服器上的 DBMS 中託管的資料庫來驗證憑證。 不僅可以使用密鑰登錄,還可以使用常規密碼登入。 對 http 伺服器日誌的分析證實,惡意變更是透過 HTTPS 新增的。

研究日誌發現,攻擊者並不是第一次連接,而是最初嘗試尋找帳戶名,但在識別後,他們第一次嘗試就登入了,即他們事先知道拉斯穆斯和尼基塔的密碼,但不知道他們的登入資訊。 如果攻擊者能夠存取 DBMS,則不清楚他們為什麼不立即使用其中指定的正確登入。 這種差異尚未得到可靠的解釋。 master.php.net 被駭客攻擊被認為是最有可能的情況,因為該伺服器使用了非常舊的程式碼和過時的作業系統,該作業系統已經很長時間沒有更新並且存在未修補的漏洞。

採取的措施包括重新安裝 master.php.net 伺服器環境以及將腳本轉移到新版本的 PHP 8。使用 DBMS 的程式碼已修改為使用參數化查詢,這使得 SQL 程式碼的替換變得複雜。 bcrypt 演算法用於在資料庫中儲存密碼雜湊值(以前,密碼是使用不可靠的 MD5 雜湊值儲存的)。 現有密碼將會重置,並提示您透過密碼恢復表單設定新密碼。 由於透過 HTTPS 存取 git.php.net 和 svn.php.net 儲存庫與 MD5 雜湊值相關,因此決定將 git.php.net 和 svn.php.net 保留為唯讀模式,並移動所有內容其餘的為GitHub 上的PECL 擴充儲存庫,類似主PHP 儲存庫。

來源: opennet.ru

添加評論