Технологии контейнеров Linux используются все чаще, и одновременно нарастают проблемы безопасности, связанные с контейнерами. С помощью скрытых вычислений криптовалюты злоумышленники пытаются получать информацию об уязвимости контейнера для извлечения прибыли. Давайте посмотрим, что нужно сделать, чтобы обнаружить, остановить и предотвратить такие атаки.
Криптовалютные прибыли формируются путем потребления ресурсов для создания хешей. Накопленные хеши — это выполненная работа, а работа представляет значение в блокчейне. В удачный день оно преобразуется в значение, представляющее реальную валюту. В зависимости от валюты и от того, как она формируется, почти все криптопрограммы требуют большого количества ресурсов процессора. Память и хранилище данных не имеют особого значения. Ресурсы процессора востребованы для любого экземпляра, так как он выполняет работу, за которой следует заработок. Минимум ресурсов процессора на экземпляр, но тысячи тысяч экземпляров обеспечивают накопление заработка. Никакие данные не извлекаются, секреты компании не распродаются, и поэтому о криптоджекинге мы слышим реже, чем о других атаках, поскольку происходит «откачивание» ресурсов без ущерба для конфиденциальности или данных.
Некоторые программы добычи цифровых валют могут регулироваться установщиком или автоматической программой-ботом, и в результате процесс не сигнализирует о нарушениях политики «Нагрузка на процессор!», а аналитик, в свою очередь, недоумевает, что происходит с экземплярами. Он наблюдает стабильный поток. Поведение потока — не произвольные перепады вверх-вниз; показатель, например, будет 45,255% от какого-то другого числа, представляющего стабильное состояние (то есть происходит статическое похищение ресурсов).
Контейнеры: числа не спасают
Программы скрытой добычи цифровых валют могут появляться в экземплярах, составленных из монолитных приложений или контейнеров. Программы добычи цифровых валют встречаются в маршрутизаторах, образах Docker, Drupal, WordPress и других.
Если существуют тысячи контейнеров или парк контейнеров динамичен по своей природе, их обнаружение затрудняется. В масштабируемом мире структуры расширяются, сжимаются и исчезают. В результате бывает трудно указать лимиты ресурсов, так как нет кумулятивного триггера для политики, отслеживаемой диспетчером панели управления. Непосредственно перед тем, как высокая нагрузка или нагрузка устойчивого состояния сможет послужить триггером для какого-то действия, экземпляры исчезают — точно так, как было задумано. Ни шума, ни пыли, но ограбление состоялось. Грабитель украл немного мелочи, но, когда появляются и исчезают сотни тысяч экземпляров, кумулятивный эффект значительный.
Откуда появляются эти экземпляры? Существует несколько направлений атак. Самый простой — из контейнеров, которые не проинспектированы и постоянно используются повторно. Многие компании тщательно проверяют контейнеры, применяя подчас очень строгие процедуры для проверки репозиториев в поисках зараженных контейнеров. Но возьмите сильно загруженную группу, которой приходится иметь дело с многочисленными изменениями и скомканным контролем качества — и повторится история Monero.
Другое направление атаки — неосторожно обращенные к общедоступной сети контейнеры, как выяснили исследователи, работающие с приманками. В экземплярах устанавливаемых продуктов медленно внедряется обязательное изолирование сетевых путей по умолчанию, хотя данные в современных пулах носителей менее открыты для всех желающих. Экземпляры Docker, открытые для общедоступной IP-сети, заражаются автоматическими программами поиска быстрее, чем за три дня. Мародеры жадны, а их автоматические программы эффективны, и на сегодня взломщики достаточно хорошо изучили Docker, чтобы расхищать контейнеры.
Еще один метод — внутренние диверсии для целенаправленной подмены контейнеров. Тысячи экземпляров могут составить неплохой пенсионный фонд. Коллега, проводившая длительное расследование, считает, что это произошло с одним из ее «облачных» приложений. Улики были уничтожены, но в резервных копиях сохранились зараженные контейнеры и сценарий Kubernetes, который разрешает исходящий трафик в любой адрес IPv6. Есть человек, которого она подозревает, но он больше не работает в компании. Внутренняя или внешняя атака, халатность или обман — результат один и тот же: потребление ресурсов компании в целях извлечения прибыли.
Как обнаруживаются зараженные экземпляры? Простые методы сводятся к отслеживанию высокого или постоянного статического использования процессора. Программные нагрузки на процессор обычно отличаются высокой динамичностью, но состояние гонки, замедляющее процессор, свидетельствует о проблемах, а стабильное потребление нормально для многих приложений, если принять во внимание, что они часто статичны, пока не потребуется выполнить какое-то действие. Использование процессора оптимизированными приложениями часто попеременно взлетает вверх и падает. Однако неизменно одинаковая нагрузка подозрительна.
В иных случаях имеются ограничения и на исходящий трафик, которые отслеживают или через политику останавливают трафик из внутренних серверов, направляемый куда-либо кроме «законных» внешних источников. Существуют также низконагрузочные решения мониторинга, которые являются частью более крупных платформ управления парком, таких как Aqua и Twistlock.
Отмечается взрывной рост программно-определяемых сетей (SDN) для парков контейнеров. Везде применяются собственные методики развертывания сетей, перехвата разнородных типов трафика и адресов портов назначения и прочие методы определения трафика скрытого вычисления цифровых валют.
Также можно использовать приложения конструирования контейнеров, такие как Envoy с привлечением пакетов Zipkin или Jaeger. Envoy — инфраструктура контейнеров компании Sidecar Communications, которая используется для построения сеток приложений (с обнаружением сетевых служб), а Zipkin обеспечивает элементарный мониторинг исполнения. Zipkin очень удобен для определения временных характеристик транзакций, которые постоянно нарушаются добытчиками валют. С помощью подключаемых модулей Jaeger можно развернуть несколько различных типов образцов экземпляров, чтобы убедиться, что они укладываются в рамки желаемой политики. На более низком уровне Puppet, Chef и другие приложения могут опрашивать экземпляры в поисках известных приложений скрытого вычисления цифровых валют и других свидетельств подозрительных изменений файлов. Эти методы схожи с применяемыми в программах Aqua и Twistlock.
Фильтрация трафика не мешает программе скрытого вычисления цифровых валют украсть ресурсы процессора, но не позволяет извлечь из этого пользу. Данный подход устраняет симптомы, не затрагивая причины болезни. Важно внедрить политики на основе ролей для рабочих групп и проверять каждый образ контейнера с помощью анализатора контейнеров.
Лучший способ лишить добытчиков валют их доходов — отслеживать некорректное поведение в сети. Существуют возможности использования промежуточных серверов, которые предотвратят отправку трафика на известные сайты добычи валют, как в черную дыру. Такие списки очень непостоянны и подвержены произвольным изменениям. Исчерпывающего списка источников обналичивания криптовалют не существует. Перехват произвольных исходящих переговоров — отличный способ поддерживать безопасность в целом, но поиск виновника отнимает порой слишком много времени.