黑客攻擊 Packagist PHP 包,“劫持”數(shù)億軟件包
Bleeping Computer 網(wǎng)站披露,一個化名“neskafe3v1”的網(wǎng)絡(luò)攻擊者“黑進(jìn)” PHP 軟件包集中式存儲庫 Packagist 中 ,獲取了四個不太活躍賬戶的訪問權(quán)限,劫持十四個軟件包。據(jù)悉,這些軟件包累計安裝已超數(shù)億次。
有意思的是,包“劫持”事件發(fā)生后,這名網(wǎng)絡(luò)攻擊者聯(lián)系了 Bleeping Computer 并表示之所以發(fā)動此次網(wǎng)絡(luò)攻擊活動,是想通過劫持軟件包,找到一份工作。
Packagist 是一個 PHP 軟件包的集中式存儲庫,為開發(fā)人員提供了一個快捷的方式來分享和安裝 PHP 軟件包,開發(fā)人員可以將自己的 PHP 軟件包上傳到 Packagist,并通過 Composer 進(jìn)行安裝和依賴管理。
被劫持包的名稱主要包括:
值得一提的是,該名攻擊者還向 Bleeping Computer 提供了材料,證明被劫持包的 Packagist 頁面已經(jīng)修改成了指向自己的(偽造的)鏈接,取代了此前指向合法 GitHub 存儲庫的鏈接。
例如,下面截圖中 acmepp 包 Packagist 頁面的 GitHub 鏈接,已經(jīng)從 GitHub.com/acmehp/acmephp 改為研究人員的 repo。
acmepp 劫持軟件包列表頁面(Bleeping Computer)
Packagist 的發(fā)布過程與 npm 或 PyPI 等開源 repos 的發(fā)布過程略有不同,與直接將二進(jìn)制文件或軟件版本上傳到 Packagist.org 相反,開發(fā)人員只需創(chuàng)建一個 Packagistorg 帳戶,并提交一個鏈接到特定包的GitHub 回購,Packagist 的爬蟲隨后訪問所提供的 repo,并聚合所有數(shù)據(jù)以顯示在該包的 Packagist 頁面上。
當(dāng)開發(fā)人員使用“install”或“update”命令運(yùn)行 Composer 時, Composer 實(shí)例首先在本地查找包的存在,如果找不到,則默認(rèn)在 Packagist 上搜索此包,并檢索為該包列出的 GitHub URL。之后,從該包的 Packagist 頁面上列出的 GitHub 回購中下載該包的內(nèi)容。也就是說,Packagist 直接從服務(wù)器托管和分發(fā)軟件版本,這種方式與 npm 或 PyPI 的工作方式形成了鮮明對比。
通過修改每個包的 Packagist 頁面,網(wǎng)絡(luò)攻擊者有效地劫持了 Composer 環(huán)境中使用的安裝工作流。開發(fā)人員現(xiàn)在可以從 neskafe3v1 的 GitHub 回購中獲取包的內(nèi)容,而不是從項目的存儲庫中獲取。
網(wǎng)絡(luò)攻擊者簡單地將 composer.json 文件更改為類似于應(yīng)用程序清單的文件,在這些包中讀取”由neskafe3v1……И?ураборунапозиции應(yīng)用安全、滲透測試人員、網(wǎng)絡(luò)安全專家提供?!暗葍?nèi)容。
更改了 composer.json 文件以演示黑客攻擊:
網(wǎng)絡(luò)攻擊者通過分叉原始項目存儲庫,修改 composer.json 中 的“description”字段,并將更改提交到自身的分叉存儲庫中,但沒有將更改合并回原始存儲庫。(這樣做需要額外的訪問權(quán)限,并且可能會引起維護(hù)人員的仔細(xì)檢查)。當(dāng) Bleeping Computer 要求網(wǎng)絡(luò)攻擊者分享劫持包裹使用的確切技術(shù)時,沒有獲得答案,反而收到了”我正在找工作,在被某家公司聘用后會披露一份報告,沒有獲得取工作之前,沒有什么可談的。”一段話。