Linux rootkit как удалить

Обновлено: 04.07.2024

На хабре не раз было упомянуто приложение под названием rkhunter. Хотелось бы остановиться на нем по подробней.

Rkhunter — это сканер различных видов локальных (потенциальных) уязвимостей (бэкдоров, эксплоитов и руткитов) со своей регулярно обновляемой базой.
Он написан на bash и perl, поэтому будет работать под любой серверной ОС на базе unix без каких-либо проблем.

  • Centos: yum install rkhunter
  • Debian/Ubuntu: apt-get install rkhunter
  • FreeBSD: make all install clean -C /usr/ports/security/rkhunter или pkg install rkhunter

Первый запуск и подготовка
Первый запуск требуется для проверки системы на предмет совместимости и корректности установки самого rkhunter.

Проверим для начала актуальность установленной версии

rkhunter --versioncheck

Появится такая информация, по которой можно судить об актуальности версии
[ Rootkit Hunter version 1.4.2 ]

Checking rkhunter version…
This version: 1.4.2
Latest version: 1.4.2

Для поддержания актуальности инструмента для поиска уязвимостей на сервере следует запускать rkhunter с ключом --update

rkhunter --update
[ Rootkit Hunter version 1.4.2 ]

Checking rkhunter data files…
Checking file mirrors.dat [ No update ]
Checking file programs_bad.dat [ No update ]
Checking file backdoorports.dat [ No update ]
Checking file suspscan.dat [ Updated ]
Checking file i18n/cn [ No update ]
Checking file i18n/de [ Updated ]
Checking file i18n/en [ No update ]
Checking file i18n/tr [ Updated ]
Checking file i18n/tr.utf8 [ Updated ]
Checking file i18n/zh [ Updated ]
Checking file i18n/zh.utf8 [ Updated ]

Вторым шагом будет создание снимка состояния установленной системы для rkhunter командой:
rkhunter --propupd

[ Rootkit Hunter version 1.4.2 ]
File created: searched for 171 files, found 139

Итак, база обновлена и теперь мы готовы сделать первый запуск rkhunter для сканирования.
rkhunter -c --enable all --disable none

File properties checks…
Files checked: 139
Suspect files: 23

Rootkit checks…
Rootkits checked: 381
Possible rootkits: 0

Applications checks…
Applications checked: 3
Suspect applications: 0

The system checks took: 2 minutes and 39 seconds

All results have been written to the log file: /var/log/rkhunter/rkhunter.log

One or more warnings have been found while checking the system.
Please check the log file (/var/log/rkhunter/rkhunter.log)

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

Первый запуск и проверка произведена, теперь перейдем к более тонкой настройке этого замечательного инструмента.

Настройка rkhunter
Файл конфигурации rkhunter может находиться в /etc/rkhunter.conf или /usr/local/etc/rkhunter.conf в зависимости от ОС и дистрибутива.
В первую очередь настроим оповещение на адрес электронной почты в параметре
MAIL-ON-WARNING=«почтовый@ящик»
В случае ложного срабатывания на файлы типа /bin/which можно воспользоваться параметром SCRIPTWHITELIST и добавить в него файлы, которые не требуется проверять/сигнализировать о проблеме. Добавлять следует по одному в параметр на строчке:
SCRIPTWHITELIST="/usr/sbin/adduser"
SCRIPTWHITELIST /img/image-loader.svg" data-src="https://habrastorage.org/files/8d4/2b6/743/8d42b674301741a1a7a22314ca83c32c.jpg"/>


В ISPmanager5 это пункт меню “Планировщик” в разделе “Система”

В качестве заключения хочу напомнить. Не забывайте запускать rkhunter --propupd после каждого изменения конфигурационных файлов или обновления ОС. Этим вы избежите ложных срабатываний.

Сегодня наша статья будет посвящена rootkit . О том, что это за пакость такая знает, надеюсь, каждый, но давайте немного освежим в памяти, что же такое руткиты (rootkit ). Руткиты, - это вредоносные программы, созданные для получения доступа на уровне пользователя или суперпользователя, при этом они очень хорошо маскируются от антивирусных программ.

Как удалить rootkit (руткиты) в GNU/Linux - Rootkit Hunter - иконка статьи

Если приглядеться к названию, то очень выделяется первая часть слова в названии rootkit , - это root , которая явно указывает, что слово зародилось в мире Unix -компьютеров. Кто такой root в GNU/Linux мы уже описывали здесь.

Сегодня, когда мы говорим о руткитах, то, как правило, речь ведется о Windows -компьютерах (система windows, да простят меня пользователи этих систем, наиболее подвержена заражению) , но раз это слово зародилось в мире Unix , то и поговорим, соответственно, о руткитах в GNU / Linux . Как бы красочно (или устрашающе) не называлась статья, разговор пойдет, все таки, не о борьбе как таковой с руткитами в Linux системах, а о способах проверки.

  • Поиск и удаление руткитов в Linux - Rkhunter
  • Установка Rkhunter
  • Обновление Rkhunter для борьбы с руткитами в Linux
  • Обработка результатов сканирования
  • Предисловие к послесловию
  • Послесловие

Поиск и удаление руткитов в Linux - Rkhunter

Для GNU/Linux есть несколько инструментов сканирования руткитов, которые помогают противостоять известным или потенциальным руткитам. Одним из таких инструментов является Rootkit Hunter или сокращенно rkhunter . Это очень простая в использовании утилита, которая проверяет компьютеры под управлением Unix ( GNU / Linux ) на наличие руткитов. Она имеется во всех GNU / Linux .

Rkhunter конечно не устанавливается по умолчанию, но в репозиториях имеется. Если вдруг, по каким либо причинам, ее там не окажется, то ее всегда можно найти и скачать с официального сайта производителя. Графической оболочкой rkhunter не наделен, поэтому все будем выполнять через. терминал и обязательно с правами суперпользователя (sudo - замена root) , будем делать из Вас настоящих линуксоидов, чтобы никто не боялся командной строки :)

Установка Rkhunter

Итак, для начала пользования этой утилитой, мы ее установим:

Для установки rkhunter на Debian , Ubuntu или Linux Mint (или любой другой оси, которая берет начало от Debian) достаточно в терминале (командной строке) ввести команду (можно потренироваться и набрать ее самостоятельно или просто скопировать и вставить) :
sudo apt-get install rkhunter
Для установки rkhunter на Fedora :
sudo yum install rkhunter
Что может утилита rkhunter : а может она не так уж и мало, а именно, - сравнивает хэши исполняемых системных файлов с известными значениями, содержащимися в базе данных, проверяет на известные руткиты файлы и каталоги, выявляет зловредный код, проводит проверку сетевых портов и интерфейсов, проводит проверку системного boot , проводит проверку групп и аккаунтов, проводит проверку системных конфигурационных файлов, проводит проверку файловой системы в целом.

Единственное, что rkhunter не умеет делать, - это самостоятельно удалять руткиты. Но это скорее плюс, чем минус, потому как утилита не идеальна (кстати, как и не идеальны все антивирусы) , и даже она может ошибаться и ложно срабатывать. Вся проверка записывается в файл /var/log/rkhunter/rkhunter .log . О том, что же делать, если rkhunter все же укажет на наличие подозрительных файлов мы поговорим чуть ниже. А пока перейдем к ее работе.

Обновление Rkhunter для борьбы с руткитами в Linux

как удалить руткиты в линукс - скриншот 1

Первое, что надо сделать после установки утилиты - это обновить ее и удостовериться, что у нас актуальная версия (актуальная версия на сегодня - 1.4.2 ):
sudo rkhunter --update (два дефиса перед update обязательны),
rkhunter --versioncheck

И второе, - раз мы обновили базу, значит изменился конфигурационный файл утилиты (конфигурационный файл расположен в /etc / rkhunter.conf ) и нам нужно сказать (показать) программе, что эти изменения внесены в файл конфигурации, вот для этого нужно сделать снимок (слепок, называйте как вам больше нравится) командой:
rkhunter --propupd
Это в Ваших же интересах, чтобы утилита меньше ложно срабатывала.

как удалить руткиты в линукс - скриншот 2

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

Проверяется это так:

Для дистрибутивов на базе RPM командой:

Для debian -но подобных дистрибутивов программой debsums. По умолчанию эта программа не установлена в системе, ее надо установить:

Какая бы система у вас не была установлена вывод будет примерно одинаковый:

как удалить руткиты в линукс - скриншот 3

(если везде написано "ОК ", значит никаких изменений с файлами не происходило).

как удалить руткиты в линукс - скриншот 4

Ну мы немного отвлеклись. После установки выполним поиск руткитов (правда тут есть большая вероятность, что мы этих руткитов просто не найдем, по причине того, что их просто не будет в вашей системе)
sudo rkhunter -c или
sudo rkhunter --check или
sudo rkhunter -c --enable all --disable none

как удалить руткиты в линукс - скриншот 5

И в конце выведется общий список - информация по тестированию.

как удалить руткиты в линукс - скриншот 6

как удалить руткиты в линукс - скриншот 7

Если вы визуально не хотите наблюдать за ходом тестирования, то можно запустить rkhunter с ключом -rwo, в этом случае будут выводиться только предупреждения:
rkhunter -c --enable all --disable none --rwo

Утилита выдала несколько предупреждений, что такие то процессы в данный момент работают. Под процессами подразумеваются открытые программы, которые работают в фоновом режиме. В тот момент у меня были открыты текстовый редактор, запущен антивирус, работал скайп и pidgin, был открыт терминал, и были открыты еще несколько приложений. На все эти процессы и среагировал rkhunter .

Обработка результатов сканирования

Когда сканирование завершится, rkhunter сохранит результат в /var/log/rkhunter/rkhunter.log
Вы можете отобразить выданные предупреждения следующим образом.
sudo grep Warning /var/log/rkhunter/rkhunter.log
Если Вы после введения этой команды на экране увидели это..

как удалить руткиты в линукс - скриншот 9

..то можете дальше ничего не читать, ибо пока у вас просто всё отлично :)

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

Предупреждения могут быть вызваны просто тем, что вы обновили программное обеспечение, или обновили систему в целом, что привело к изменению системных настроек. Поэтому запускать rkhunter --propupd перед сканированием желательно всегда. Во-вторых, надо вспомнить, что вы устанавливали "потустороннего" в систему.

Например, может среагировать на установленный принтер или МФУ . Ведь всё это вы уже устанавливаете в систему дополнительно. Например, пример ложного срабатывания (последние 2 строчки, указывают на то, что после установки системы в домашней директории появились скрытые директории, которых в системе быть не должно, а это был установлен МФУ) :


Просто надо детально смотреть по каждому пути (файлу) на который rkhunter "ругается". Если что-то вызывает сильное сомнение у вас, то надо сравнивать оригиналы файлов с теми, на которые ссылается rkhunter . Это долгий и кропотливый процесс. Ставится виртуальная машина, куда пишется чистая ось и открывая поочередно файлы с чистой оси вы их сравниваете с теми, которые вызывают сомнение. Еще раз повторюсь, что в 99 процентах это ложная тревога.

Ну, а если у вас выпал тот 1% и вы полностью уверены, что в системе сидит руткит, то можно предпринять следующее:

Определить к какой программе относится тот файл, на который указал rkhunter и переустановить эту программу

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

Отключение компьютера от сети, перенос всех ваших ценных данных с этой системы и полная переустановка (только не делайте резервных копий исполняемых файлов, ведь вы же не знаете и не можете со сто процентной гарантией подтвердить, что они чистые) .

В двух словах как-то так. Ну, что еще можно сказать в заключение..

Предисловие к послесловию

    • чтобы вставить текст надо нажать i, затем можно вводить текст
    • чтобы удалить символ(ы) сначала нажать ESC, а затем набрать x
    • чтобы выйти из vi без сохранения нужно нажать ESC, а затем набрать :q!
    • чтобы сохранить и выйти надо нажать ESC, а затем набрать :wq

    как удалить руткиты в линукс - скриншот 10

    А теперь удостоверимся, что мы внесли задания в cron. Введите команду:
    crontab -l

    Задание для cron создано.

    Послесловие

    На этом можно поставить точку, а значит, что на этом животрепещущем вопросе мы сегодня закончим наше повествование.

    Ну как, очень было сложно? Думаю, что нет. Но, как и всегда, если есть какие-то вопросы, мысли, дополнения и всё такое прочее, то добро пожаловать в комментарии к этой записи.

    Оставайтесь с проектом, здесь Вам всегда рады ;)

    PS: За существование данной статьи спасибо члену команды Pantera

    Белов Андрей (Sonikelf) Заметки Сис.Админа [Sonikelf's Project's] Космодамианская наб., 32-34 Россия, Москва (916) 174-8226

    Итак, ситуация, к сожалению, стандартна: я не беспокоился о защите сервера, и за это — его сломали. Всё справедливо, никаких претензий к фортуне. Но теперь встал вопрос о недопущении ошибок в будущем.


    На VPS стоит Ubuntu Server 10.10 (фаерволл не был включен), когда с него начали брутфорсить кого попало, то моему хостеру посыпались абузы, а он дал мне сутки на то, чтобы я закрыл дыры и отчитался, иначе прибьют мой аккаунт. Хостер Hetzner.de — молодец, другие бы небось сразу бахнули аккаунт, а эти дали время на устранение брешей.


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


    Прошу квалифицированных хабровчан подсказать:

    1. Что я делал после атаки ни так и чего из необходимого не сделал?
    2. Как же теперь искать руткита?
    3. Если есть какие-нибудь комплексные мануалы по базовой защите на русском или простом английском, то ткните в них, пожалуйста.

    Свои IP я далее исказил, а IP плохих парней оставил неизменными (на случай, если кто-то будет гуглить спасение от них).


    Попробовал посмотреть, кто вообще юзает ssh:


    Врубил фаерволл, добавил правила:


    И sockstat теперь говорит, что на IP 2.2.44.3 никто уже не лезет.


    Пошёл искать кто и как приходил на сервер.


    Был у меня такой юзер с доступом в консоль (юзер создавался давно, не исключено, что у него пароль был смешной или что пароль запалился у кого-то из сотрудников на локальном компе через вирус, ибо от ftp пароль такой же и его сохраняли в клиентах).


    Но этот webmaster не был в sudoers. Получается, у меня какой-то руткит?


    Установил rkhunter и chkrootkit


    Первый нашёл такие подозрительности:


    Второй нашёл только это:

    Но это были мои же рут-сессии, запущенные внутри screen.


    И… получается, что в остальном всё чисто.


    Как теперь искать руткит?

    Переставить систему с нуля. Это наиболее правильно для сервера. Если не найду конструктивного решения, то, видимо, придётся. Восстановить конфиги и контент БД и веб-сервера — вопрос решаемый за час. Но хочется, конечно, более изящного решения и контроля за ситуацией. роме того, волнует как именно проникли: доказательств того, что пароль утёк из FTP-клиента — пока нет. И потом: как именно получили рута? Всё это, как минимум, интересно. Как правильно пишут в буржуйских книгах по криминалистике: снять образ, а потом играться с ним сколько влезет. Переустановка для сервера — единственно верное решение, я бы не был уверен в том, что вычистил совсем все. О, в вычищение я как раз совсем не уверен :-) Наоборот, думаю, что у меня там нечто сидит затаившись. > Но этот webmaster не был в sudoers. Получается, у меня какой-то руткит?
    Ничего не получается, скорее всего какой-то эксплойт. Лучше накатить с нуля систему и любую не статику (php скрипты etc.) из бекапа. По-иному есть шанс что-то не найти.

    1. Попробуйте для начала утилиту unhide для поиска спрятанного процесса (если таковой есть)
    2. переустановите все пакеты. Вот скрипт:

    for pkg in `dpkg --get-selections|awk ''| egrep -v '(dpkg|apt)'`; do apt-get install --reinstall -y $pkg; done

    3. Используйте tripwire для контроля целостности файлов (на будущее)

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

    я один раз встречался с руткитом, ркхантер его не находил, было года 4 назад, деталей не помню, он умело прятался от ТОП ps и ещё много чего, но святился исходящим соединением.
    дальше по цепи этого соединия был найден «модуль ядра»… переустановка решила вопрос.

    ещё также недавно у одного из знакомых был сайт на нулленым движке, не менявшийся лет 5 и вот через него мне загрузили файл (шелл) собрали «ирк клиента» и также зацеплись с к удалённому серверу. процесс работал от пользователя apache

    Погасив многое я нашёл файл, который использовался апачем. простое ф3 по исполняемому файлу показало параметры соединения с ирк сервером, пошёл я туда и пообщался с админом того канала, ботов таких у него было большее 250.

    всеми серверами он рулил прямо из канала, сказал что продаёт серваки спаммерам, сказал через что он ко мне попал, сказал что из малазии он. серваки продаёт от 5 до 100 баксов.

    просил меня дать ему шелл только для «ИРКпрокси» ничего большего :))

    имеет смысл поискать «пхп шелл» или подобные «штуки»

    у меня была перловская картинка кстати, файл jpg внутри с пёрл скриптом по сборке ирк демона :))

    Скрипт установки и вектор заражения

    Инфицирование начинается с попытки брут-форса SSH, используя логин root. В случае успеха злоумышленники получают доступ к скомпрометированной машине, а затем устанавливают троян, как правило, с помощью шелл-скрипта. Скрипт содержит такие процедуры, как main, check, compiler, uncompress, setup, generate, upload, checkbuild и т.д. и переменные __host_32__, __host_64__, __kernel__, __remote__,, и т.д. Процедура main расшифровывает и выбирает C&C сервер, основываясь на архитектуре системы.

    В запросе ниже параметр iid — это MD5-хэш от имени версии ядра. Сначала скрипт перечисляет все модули, работающие в текущей системе с помощью команды lsmod. Затем он берет последний и извлекает свое имя и параметр vermagic. В одном из наших случаев среда тестирования работает под «3.8.0-19-generic\SMP\mod_unload\modversions\686\», который имеет MD5-хэш, равную CE74BF62ACFE944B2167248DD0674977.

    Три GET-запроса отправляются на C&C. Первой выполняется процедура check:

    request:
    GET /check?iid=CE74BF62ACFE944B2167248DD0674977&kernel=3.8.0reply:
    1001|CE74BF62ACFE944B2167248DD0674977|header directory is exists!

    Затем процедура compiler отправляет еще один GET-запрос, в котором такие параметры как C&C servers, version infо и т.д. передаются на сервер, где они собраны в недавно созданный исполняемый файл:

    Наконец, третий GET-запрос загружает адаптированную версию исполняемого файла трояна, запакованную в gzip-архив, который распаковывается и запускается:
    request:
    GET /upload/module/CE74BF62ACFE944B2167248DD0674977/build.tgz
    reply:
    1001|CE74BF62ACFE944B2167248DD0674977|create ok

    Предыдущие шаги выполняются только в том случае, если уже есть собранная версия для текущей версии ядра на сервере. Если нет, сценарий находит заголовочные файлы ядра в директории /lib/modules/%s/build/, где %s означает возвращаемое значение после выполнения команды uname -r, затем упаковывает все файлы и загружает их на сервер C&C, используя специальный загрузчик, названный mini. Это первый сценарий.

    Компоненты руткита являются загружаемыми модулями ядра (LKM). Для успешной установки их в системе, значение vermagic LKM необходимо согласовать с версией заголовочных файлов ядра, установленных в пользовательской системе. Именно в этом смысл всех предыдущих шагов установки. Если предыдущие последовательности потерпели неудачу, скрипт устанавливает троян без компонентов руткита.

    Структура и живучесть

    Двоичная структура основного исполняемого файла следующая:


    Живучесть трояна достигается несколькими способами. Во-первых, он устанавливается в каталог /boot/ с именем, содержащим случайную строку из 10 символов. Затем скрипт с идентичным именем создается в каталоге /etc/init.d/. Вместе с пятью символическими ссылками, указывающими на скрипт, созданный в /etc/rc%u.d/S90%s, где %u перечисление от 1 до 5, а %s заменяется рандомным именем файла трояна. Кроме того, скрипт добавляет файл /etc/cron.hourly/cron.sh со следующим содержимым:


    Строка "*/3 * * * * root /etc/cron.hourly/cron.sh" добавляется в crontab.

    • Скачивание и выполнение инструкций в конфигурационный файл бота;
    • Переустановка себя как /lib/udev/udev;
    • Выполнение flood-команд.


    Убийство процессов или удаление списка процессов, до его установки, типично для троянов.
    Кроме того, мы должны отметить, что есть модификация этого трояна, скомпилированного для архитектуры ARM. Это говорит о том, что список потенциально инфицированных систем (кроме 32-х и 64-х Linux веб-серверов и настольных ПК) расширяется на маршрутизаторы, IoT, NAS хранилища или 32-битные сервера ARM (однако, пока это не наблюдалось в природе). Он содержит дополнительную реализацию функцию загрузки-и-выполнения в бесконечном цикле под названием daemondown:


    Несколько дней назад наблюдался новый 32-битный вариант данного трояна с некоторыми изменениями. Бот устанавливается как /lib/libgcc4.so файл и уникальный файл, содержащий идентификационную строку в /var/run/udev.pid, скрипт инициализации был в /etc/cron.hourly/udev.sh и функции руткита были полностью опущены. Наличие всех этих файлов может служить индикатором компрометирования.

    LKM Руткит

    Трояны для платформы Windows использовали различные функции руткита в течении очень долгого времени. Известно, что некоторые трояны имели Windows вариант руткита Агония (Agony rootkit — его исходный код был опубликован в 2006 году). Мы представили исследования, связанные с этим вредоносным DDoS инструментом на Botconf 2014 в обзоре под названием Китайская курица: многоплатформенный-DDoS-ботнет. Теперь есть flood-троян для Linux, который также содержит встроенный руткит. Это основная функциональность, чтобы скрыть различные аспекты деятельности трояна и обеспечить выполнение процедур:


    Троян работает в пользовательском пространстве, запрашивая эти функции от руткита в ядре с помощью команды управления вводом-выводом с определенным кодом (0×9748712). Наличие руткита сначала проверяется, открыв процесс с именем rs_dev:


    Собственно, запросу необходимо два параметра: один указывает номер команды, которую будет выполнять руткит, а другой является номером порта, чтобы быть скрытым. Ниже пример того, как троян скрывает порт TCP (обратите внимание на task 3):


    Основываясь на именах процедур, вполне вероятно, что авторы вредоносного ПО были вдохновлены проектом с открытым исходным кодом под названием Suterusu, чтоб собрать свой ​​руткит. Троян с прошлого года называется «Рука Вора», он потерпел неудачу в своих амбиций, стать первым банковским трояном для Linux-десктоп. Он также заимствовал часть кода из существующего проекта с открытым исходным кодом, а именно — методов введения процесса. Описание проекта гласит: «LKM руткит для Linux 2.6/3.x на x86(_64) и ARM». В другой статье, связанной с Suterusu, был опубликован в январе 2013 года.

    C&C связи


    Список C&C-серверов хранится в шелл-скрипте в переменной __remote__. Троян сначала отправляет информацию о работающей системе к серверу C&C (весьма вероятно будет отображаться на панели оператора ботнет). Ответы обычно приходят в виде команды. Заголовок команды длиной 0x1C байт хранится в структуре, называемой Header. Первая команда останавливает любые флуд-атаки и начинает следующую с одним из хостов, представленном в списке. Записи о заголовке приведены ниже. Выделенные параметры размер — это общий размера команды (Size, 0x102C), число задач (Order, 0×3, т.е. _cmd_start в таблице switch), а количество flood задач (Task_Num, 0xf):


    Остальная часть команды flood содержит зашифрованую структуру с задачами атаки. После расшифровки мы можем увидеть IP-адрес (красный цвет) и порты (зеленый цвет), которые будут выполнены трояном и других параметров атаки DDoS (например, серый цвет решает тип атаки: SYN / DNS).

    Читайте также: