1、事件背景
近日,使用廣泛的php環境集成程序包phpStudy被公告疑似遭遇供應鏈攻擊,程序包自帶PHP的php_xmlrpc.dll模塊隱藏有后門,安恒應急響應中心和研究院隨即對國內下載站點提供下載的phpStudy安裝包進行分析,確認phpStudy2016、phpStudy2018的部分版本有后門,建議使用該版本的用戶立即進行安全加固處理。
2、后門分析
通過分析,后門代碼存在于extphp_xmlrpc.dll模塊中,至少有2個版本:
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
分析過程:
對比官網的xmlrpc源代碼可以知道,默認xmplrpc模塊的幾個初始化函數都是被設置為:

而污染過的版本中“request_startup_func”函數被惡意攻擊者自定義:

用戶所有的請求都會經過自定義的函數“sub_100031F0”,
進一步分析函數“sub_100031F0”,當攻擊者(或普通用戶?)發起的HTTP數據包中包含“Accept-Encoding“字段信息時,會進入攻擊者自定的流程:

當Accept-Encoding字段信息為“compress,gzip”時,它會觸發搜集系統信息功能,如其中函數“sub_10004380”搜集網卡信息:

同時會執行內存php代碼:

DUMP出PHP進一步分析:

解密出Base64加密字符串:

通過HTTP包構造工具測試發包,成功觸發訪問惡意“360se[.]net”域名:

分析發現,當Accept-Encoding字段信息為“gzip,deflate”時,它會接著判斷是否設置“Accept-Charset”字段:

再判斷是否設定的特定的“Accept-Charset”字段,在滿足特定條件以后可以執行黑客給定的php命令,實現控制服務器的目的,隱蔽性非常高。
3、影響版本
目前測試發現phpStudy2016和phpStudy2018版本存在后門,IOC:
0f7ad38e7a9857523dfbce4bce43a9e9
c339482fd2b233fb0a555b629c0ea5d5
360se[.]net
用戶可以通過搜索php_xmlrpc.dll模塊中包含“@eval”關鍵字快速判斷是否是存在后門的版本,命令參考:
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