Рис. 1. Сетевое окружение ханипота StickyDB
Недавно мы обнаружили интересную технику в ходе атаки одного из серверов PostgreSQL. После входа в БД злоумышленник продолжал создавать полезные нагрузки из встроенных бинарников в скачанных картинках, сохранять полезные нагрузки на диск и запускать их. Как часто бывает в последнее время, злоумышленник захватил ресурсы сервера для майнинга Monero. Как будто этого мало, в процессе атаки он использовал фотографию Скарлетт Йоханссон. Ну тогда ладно. Разберёмся, как это работает!
Как и другие популярные базы данных, для PostgreSQL есть модуль metasploit, облегчающий взаимодействия с ОС. Здесь используется стандартный метод — создание полезной нагрузки во время выполнения путём сброса бинарника на диск с помощью функции lo_export. Одно небольшое изменение в модуле — внедрение функции lo_export как записи в каталог pg_proc вместо прямого вызова. Это сделано, чтобы избежать обнаружения некоторыми системами мониторинга аудита баз данных (DAM), которые внимательно отслеживают привилегированные операции вроде lo_export. Таким образом, obj6440002537 — это по сути в косвенный вызов lo_export (рис. 2).
Рис. 2. Техника уклонения через косвенный вызов lo_export
Теперь злоумышленник может запускать локальные системные команды одной простой функцией
fun6440002537
. Эта функция SQL — оболочка для вызова функции языка C sys_eval
, небольшой экспортируемой функции в tmp406001440
(бинарный файл на основе sqlmapproject), который обычно используется как прокси для вызова команд оболочки.
Итак, какие следующие шаги атаки? Небольшая разведка. Хакер начинает с получения сведений о GPU, выполнив команду lshw -c video, а затем cat /proc/cpuinfo, чтобы получить информацию о процессоре (рис. 3-4). Хотя это кажется странным на первый взгляд, но такая проверка имеет смысл, если конечная цель в том, чтобы добывать побольше любимой криптовалюты, верно?
Рис. 3. Просмотр информации о GPU
Рис. 4. Просмотр информации о CPU
К настоящему моменту злоумышленник получил доступ к БД, установил канал удалённого выполнения кода, а также обошёл решения DAM и узнал о деталях системы. Теперь все готово, чтобы… загрузить фотографию Скарлетт Йоханссон?! Погодите, ЧТО?
Должен сказать, злоумышленники проявляют всё больше креатива.
В данном случае злоумышленники хотели загрузить новый образец вредоносного кода, поэтому разместили его на обычном бесплатном фотохостинге imagehousing.com. Однако у полезной нагрузки должен быть двоичный формат. Если просто переименовать бинарник в формат .PNG, то файл не пройдёт проверку при загрузке на фотохостинг как недопустимое изображение, которое невозможно просмотреть. Вместо переименования файла злоумышленник добавил вредоносный двоичный код к реальной фотографии прекрасной Скарлетт Йоханссон (рис. 5). Так загрузка успешно проходит — изображение доступно для просмотра, кажется доброкачественным, и полезная нагрузка всё ещё там.
Рис. 5. Полезная нагрузка. При открытии она кажется обычным изображением. Не беспокойтесь — здесь картинка чистая, это точно!
Видите двоичный код? Он прямо под её левым локтем! :)
Мы сообщили imagehousing.com о проблеме — и изображение удалили.
Итак, скачать изображение (art-981754.png) с полезной нагрузкой было несложно командой wget. Извлечение исполняемого файла из фотографии осуществляется командой dd (data duplicator). Затем устанавливаются разрешения на выполнение, фактически, полные разрешения (chmod 777) для созданного файла x4060014400. Последний шаг — запустить эту только что извлечённую полезную нагрузку.
Рис. 6: Как средствами SQL скачать картинку, извлечь бинарник и выполнить его
Файл x4060014400 создаёт другой бинарник с названием s4060014400. Его задача — майнить Monero (XMR) в пуле https://monero.crypto-pool.fr/, IP 163.172.226.218 (рис. 7). На этот адрес Monero к настоящему моменту перечислено более 312,5 XMR стоимостью более $90 000:
4BBgotjSkvBjgx8SG6hmmhEP3RoeHNei9mz2iqwhws8wefvwuvi6keplwdfnx6guiq5451fv2soxod7rhzqhqtvbdtfl8xs
Рис. 7. Инструкция SQL для начала майнинга Monero
Конечно, когда дело сделано, нужно замести следы.
Рис. 8. Очистка следов
С точки зрения атакующего — миссия выполнена!
С помощью VirusTotal от Google мы проверили, как реагируют почти 60 антивирусов на три разные формы криптомайнера в этой атаке: URL-адрес, где размещалось вредоносное изображение, сам файл изображения и криптомайнер. Результаты:
- URL-адрес: среагировал один антивирус (рис. 9)
- Файл изображения: три антивируса предупредили о спрятанном криптомайнере (рис. 10)
- Извлеченный криптомайнере от вредоносных изображения: обнаружен 18-ю антивирусами (рис. 11)
Рис. 9. Один антивирус среагировал на вредоносный URL
Рис. 10. Три антивируса среагировали на вредоносное изображение
Рис. 11. Восемнадцать антивирусов обнаружили криптомайнер
Трюк с добавлением бинарника к нормальным файлам (изображениям, документам) — очень старый метод, но он по-прежнему позволяет обойти большинство антивирусов. Это действительно шокирующий факт.
Создание такого файла-мутанта тривиально в одну строчку:
Linux: cat myExecutableFile >> myImageFile.png
Windows: type myExecutableFile.exe >> myImageFile.png
Найти инстансы PostgreSQL на доменах можно с помощью инструментов обнаружения, таких как Nmap, если злоумышленник уже находится внутри локальной сети. Но можно ли найти более простые цели? Что насчёт открытых для внешнего мира баз PostgreSQL? Известно, что так делать не рекомендуется, но существуют ли такие базы данных? Ну… вообще-то да, как минимум 710 000 из них кучей хостятся на AWS (рис. 12). И найти их элементарно через Shodan. Так что злоумышленник может легко получить список, запустить брутфорс пароля для дефолтного пользователя postgres, залогиниться и применить некоторые из описанных методов.
Рис. 12. 710 тыс. инстансов PostgreSQL с открытыми IP-адресами. Иллюстрация: shodan.io
В следующей статье из этой серии мы обсудим другие атаки. Последняя статья будет посвящена защите, но вот несколько быстрых советов, как избежать этой угрозы:
- Следите за прямыми вызовами lo_export или косвенными вызовами через записи в pg_proc.
- Остерегайтесь функций, которые обращаются к бинарникам на C (как на рис. 2).
- Используйте файрвол для блокировки исходящего сетевого трафика из базы данных в интернет.
- Убедитесь, что вашей базе данных не назначен общедоступный IP-адрес. Если это так, ограничьте доступ только для хостов, которые взаимодействуют с базой (сервер приложений или клиенты администраторов БД).
Комментариев нет:
Отправить комментарий