1、事件背景
近日,使用廣泛的php環(huán)境集成程序包phpStudy被公告疑似遭遇供應(yīng)鏈攻擊,程序包自帶PHP的php_xmlrpc.dll模塊隱藏有后門,安恒應(yīng)急響應(yīng)中心和研究院隨即對(duì)國內(nèi)下載站點(diǎn)提供下載的phpStudy安裝包進(jìn)行分析,確認(rèn)phpStudy2016、phpStudy2018的部分版本有后門,建議使用該版本的用戶立即進(jìn)行安全加固處理。
2、后門分析
通過分析,后門代碼存在于extphp_xmlrpc.dll模塊中,至少有2個(gè)版本:
phpStudy2016和phpStudy2018自帶的php-5.2.17、php-5.4.45
phpStudy20161103
phpphp-5.2.17extphp_xmlrpc.dll
phpphp-5.4.45extphp_xmlrpc.dll
phpStudy20180211
PHPTutorialphpphp-5.2.17extphp_xmlrpc.dll
PHPTutorialphpphp-5.4.45extphp_xmlrpc.dll
分析過程:
對(duì)比官網(wǎng)的xmlrpc源代碼可以知道,默認(rèn)xmplrpc模塊的幾個(gè)初始化函數(shù)都是被設(shè)置為:
而污染過的版本中“request_startup_func”函數(shù)被惡意攻擊者自定義:
用戶所有的請(qǐng)求都會(huì)經(jīng)過自定義的函數(shù)“sub_100031F0”,
進(jìn)一步分析函數(shù)“sub_100031F0”,當(dāng)攻擊者(或普通用戶?)發(fā)起的HTTP數(shù)據(jù)包中包含“Accept-Encoding“字段信息時(shí),會(huì)進(jìn)入攻擊者自定的流程:
當(dāng)Accept-Encoding字段信息為“compress,gzip”時(shí),它會(huì)觸發(fā)搜集系統(tǒng)信息功能,如其中函數(shù)“sub_10004380”搜集網(wǎng)卡信息:
同時(shí)會(huì)執(zhí)行內(nèi)存php代碼:
DUMP出PHP進(jìn)一步分析:
解密出Base64加密字符串:
通過HTTP包構(gòu)造工具測(cè)試發(fā)包,成功觸發(fā)訪問惡意“360se[.]net”域名:
分析發(fā)現(xiàn),當(dāng)Accept-Encoding字段信息為“gzip,deflate”時(shí),它會(huì)接著判斷是否設(shè)置“Accept-Charset”字段:
再判斷是否設(shè)定的特定的“Accept-Charset”字段,在滿足特定條件以后可以執(zhí)行黑客給定的php命令,實(shí)現(xiàn)控制服務(wù)器的目的,隱蔽性非常高。
3、影響版本
目前測(cè)試發(fā)現(xiàn)phpStudy2016和phpStudy2018版本存在后門,IOC:
0f7ad38e7a9857523dfbce4bce43a9e9
c339482fd2b233fb0a555b629c0ea5d5
360se[.]net
用戶可以通過搜索php_xmlrpc.dll模塊中包含“@eval”關(guān)鍵字快速判斷是否是存在后門的版本,命令參考:
findstr /m /s /c:"@eval" *.*
4、緩解措施
https://windows.php.net/downloads/releases/archives/php-5.2.17-Win32-VC6-x86.zip
https://windows.php.net/downloads/releases/archives/php-5.4.45-Win32-VC9-x86.zip