phpstudy后門植入事件安全通告
發布時間 2019-09-21●事件背景
Phpstudy軟件是國內的一款免費的PHP調試環境的程序集成包,通過集成Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer多款軟件一次性安裝,無需配置即可直接安裝使用,具有PHP環境調試和PHP開發功能,在國內有著近百萬PHP語言學習者、開發者用戶。
近日,杭州公安報道了一起重大安全事件杭州警方通報打擊涉網違法犯罪暨“凈網2019”專項行動戰果,其中詳細說明了一起供應鏈攻擊事件。
●事件描述
2018年12月4日,西湖區公安分局網警大隊接報案稱,某公司發現公司內有20余臺計算機被執行危險命令,疑似遠程控制抓取賬號密碼等計算機數據回傳大量敏感信息。
西湖網警立即對該案立案偵查,并在市網警分局牽頭下,組織精干警力成立專案組迅速開展偵查取證工作。
于2019年1月4日至5日,兵分四路,分別在海南陵水、四川成都、重慶、廣東廣州抓獲馬某、楊某、譚某、周某某等7名犯罪嫌疑人,現場繳獲大量涉案物品,并在嫌疑人的電子設備中找到了直接的犯罪證據。據統計,截止抓獲時間,犯罪嫌疑人共非法控制計算機67萬余臺,非法獲取賬號密碼類、聊天數據類、設備碼類等數據10萬余組。
據主要犯罪嫌疑人馬某供述,其于2016年編寫了“后門”,使用黑客手段非法侵入了PhpStudy軟件官網,篡改了軟件安裝包內容。該“后門”無法被殺毒軟件掃描刪除,并且藏匿于軟件某功能性代碼中,極難被發現。
在專案組的偵查過程中,同時發現馬某等人通過分析“盜取”的數據,得到了多個境外網站的管理后臺賬號密碼,并通過修改服務器數據的方式實施詐騙,非法牟利共計600余萬元。
目前,官方發通告稱,被篡改的軟件版本為PhpStudy2016版本中的php5.4版本,如果你是從其它下載站獲取的該版本,請自行檢查并刪除其中的php5.4版本。
●事件分析
被感染后門的是 /php/php-5.4.45/ext/php_xmlrpc.dll
md5:C339482FD2B233FB0A555B629C0EA5D5
部分分析回連代碼,其中提及了回連C2
●檢測方法
pcheck.sh文件,運行后可以遞歸檢測當前目錄下所有dll文件中是否包含木馬文件的特征值。
#! /bin/bash
# author: pcat@chamd5.org
# http://pcat.cc
# trojan feature
trojan=@eval
function check_dir(){
for file in `ls $1`
do
f2=$1"/"$file
if [ -d $f2 ]
then
check_dir $f2
# just check dll file
elif [ "${file##*.}"x = "dll"x ]
then
strings $f2 |grep -q $trojan
if [ $? == 0 ]
then
echo "===" $f2 "===="
strings $f2 |grep $trojan
fi
fi
done
}
# . stand for current directory
check_dir .
windows系統,執行pcheck.py
# -*- coding:utf8 -*-
__author__='pcat@chamd5.org'
__blog__='http://pcat.cc'
import os
import string
import re
def strings(file) :
chars = string.printable[:94]
shortestReturnChar = 4
regExp = '[%s]{%d,}' % (chars, shortestReturnChar)
pattern = re.compile(regExp)
with open(file, 'rb') as f:
return pattern.findall(f.read())
def grep(lines,pattern):
for line in lines:
if pattern in line:
yield line
def pcheck(filename):
# trojan feature
trojan='@eval'
# just check dll file
if filename.endswith('.dll'):
lines=strings(filename)
try:
grep(lines,trojan).next()
except:
return
print '=== {0} ==='.format(filename)
for line in grep(lines,trojan):
print line
pass
def foo():
# . stand for current directory
for path, dirs, files in os.walk(".", topdown=False):
for name in files:
pcheck(os.path.join(path, name))
for name in dirs:
pcheck(os.path.join(path, name))
pass
if __name__ == '__main__':
foo()
●修復建議
目前PhpStudy官方的最新版本中不存在此后門,請訪問官方鏈接更新到最新軟件:
https://www.xp.cn/
●IOC
IP
133.130.101.150
域名
360se.net
bbs.360se.net
www.360se.net
up.360se.net
down.360se.net
cms.360se.net
file.360se.net
ftp.360se.net
MD5
C339482FD2B233FB0A555B629C0EA5D5
0f7ad38e7a9857523dfbce4bce43a9e9
●參考鏈接
http://baijiahao.baidu.com/s?id=1645182793211249695&wfr=spider&for=pc
https://mp.weixin.qq.com/s/xikzveCJqkKAu1MnMRCYPw