在最新的軟件供應鏈攻擊中,PHP官方Git倉庫被黑客攻擊,代碼庫被篡改。近日,PHP維護人員表示黑客可能已經擁有了包含密碼的用戶數據庫。
3月28日,攻擊者使用PHP的作者Rasmus Lerdorf和Jetbrains開發者Nikita Popov的賬號,向git.php.net服務器上的 php-src 存儲庫推送了兩次惡意提交。
用戶數據庫可能已被入侵
此次事件最初被視為git.php.net服務器的泄露。但對事件進行進一步調查發現,這些提交是使用HTTPS和基于密碼的認證推送的結果,這讓研究人員懷疑master.php.net用戶數據庫可能存在泄露。
同時,研究人員還發現黑客需要對用戶名進行幾次猜測,一旦找到正確的用戶名,就會成功認證。但如果數據庫已經泄露,為什么黑客還需要進行猜測呢?目前,研究人員還沒有找到原因。
此外,據說master.php.net認證系統使用的是非常老的操作系統和PHP的版本,這就使得攻擊者也有可能利用軟件的漏洞來發動攻擊。
因此,維護者已經將master.php.net遷移到新的main.php.net系統中,并支持TLS 1.2。此外,維護者還重置了所有現有的密碼,并使用bcrypt而不是普通的MD5哈希存儲密碼。
事件回顧
PHP Git服務器被植入RCE后門
PHP是一種開源的計算機腳本語言,為互聯網上超過79%的網站提供動力。因此,事件一經曝光被引起了強烈關注。
負責人Popov在公告中表示,他們目前還不知道事件是怎樣發生的,但是此次事件導致的后果是git.php.net服務器的數據泄露而不是簡單的單個賬號的泄露。
官方公告
經觀察,在兩個惡意提交中,攻擊者在上游發布了一個假裝成修正文字輸入錯誤的神秘修改。
攻擊者以Rasmus Lerdorf的身份簽署的惡意提交(非法)植入遠程代碼執行后門
然而,仔細檢查一下新增的第370行調用zend_eval_string函數的地方,可以發現,這段代碼實際上是為運行被劫持的PHP版本的網站植入了一個后門,以獲得輕松的遠程代碼執行(RCE)。
PHP的開發者表示,如果字符串以'zerodium'開頭,這一行就會從useragent HTTP頭內執行PHP代碼。
此外,惡意代碼中包含了一條注解 “REMOVETHIS: sold to zerodium, mid 2017”。值得注意的是,Zerodium是一家知名的零日漏洞經紀商,而注釋的意思是“漏洞在2017年中出售給了zerodium”。對此,而Zerodium的CEO Chaouki Bekrar認為攻擊者很可能試圖出售這個漏洞,但找不到賣家,所以攻擊者干脆自己惡搞。
不過,PHP相關負責人表示,惡意提交幾小時后,就被他們在進行常規的代碼審查時發現。這些更改的惡意很明顯,所以很快被還原了。
對于Git這樣的源代碼版本控制系統來說,這樣的事件會發生很正常。因為可以把提交的內容為打上本地任何一個人的簽名,然后再把偽造的提交內容上傳到Git服務器上。這樣一來,就會讓人覺得這個提交確實是由簽名的人提交的。
PHP官方代碼庫遷移到GitHub
作為此次事件后的預防措施,PHP維護人員決定將PHP官方源碼庫遷移至GitHub。
他們表示,雖然調查還在繼續,但為了減少自己的Git基礎設施所面對的風險,他們決定關閉git.php.net的服務器。原本只是鏡像的GitHub上的存儲庫,之后將成為正式服務器。
并且,從現在開始,任何修改都要直接推送到GitHub上而不是原先的服務器。
那些想要幫助PHP的人可以申請在GitHub上被添加為PHP組織的一部分。不過,如果要成為該組織的一員,先要在自己的GitHub賬戶上開啟雙因素認證。
目前,PHP還在檢查除了那兩個惡意提交外的威脅,并且檢查是否有任何代碼再惡意提交被發現之前被分發到下游。