В рамках кампании по защите данных наших клиентов мы в Imperva рассказываем о разных методах атак на БД. Если вы не знакомы с нашим исследовательским проектом StickyDB, почитайте прошлые статьи: часть I и часть II. Там описано устройство сети ханипотов (рис. 1), которая заманивает злоумышленников атаковать наши БД, чтобы мы изучали их методы и улучшали защиту.


Рис. 1. Сетевое окружение ханипота StickyDB

Недавно мы обнаружили интересную технику в ходе атаки одного из серверов PostgreSQL. После входа в БД злоумышленник продолжал создавать полезные нагрузки из встроенных бинарников в скачанных картинках, сохранять полезные нагрузки на диск и запускать их. Как часто бывает в последнее время, злоумышленник захватил ресурсы сервера для майнинга Monero. Как будто этого мало, вектором атаки была фотография Скарлетт Йоханссон. Ну тогда ладно. Разберёмся, как это работает!

Удалённое выполнение кода и обход защиты DAM


Как и другие популярные базы данных, для PostgreSQL есть модуль metasploit, облегчающий взаимодействия с ОС. Здесь используется стандартный метод — создание полезной нагрузки во время выполнения путём сброса бинарника на диск с помощью функции lo_export. Одно небольшое изменение в модуле — внедрение функции lo_export как записи в каталог pg_proc вместо прямого вызова. Это сделано, чтобы избежать обнаружения некоторыми системами мониторинга аудита баз данных (DAM), которые внимательно отслеживают привилегированные операции вроде lo_export. Таким образом, obj6440002537 — это по сути в косвенный вызов lo_export (рис. 2).


Рис. 2. Техника уклонения через косвенный вызов lo_export

OK, ваша БД под контролем. И какой у вас GPU?


Теперь злоумышленник может запускать локальные системные команды одной простой функцией 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?


Найти инстансы PostgreSQL на доменах можно с помощью инструментов обнаружения, таких как Nmap, если злоумышленник уже находится внутри локальной сети. Но можно ли найти более простые цели? Что насчёт открытых для внешнего мира баз PostgreSQL? Известно, что так делать не рекомендуется, но существуют ли такие базы данных? Ну… вообще-то да, как минимум 710 000 из них кучей хостятся на AWS (рис. 12). И найти их элементарно через Shodan. Так что злоумышленник может легко получить список, запустить брутфорс пароля для дефолтного пользователя postgres, залогиниться и применить некоторые из описанных методов.


Рис. 12. 710 тыс. инстансов PostgreSQL с открытыми IP-адресами. Иллюстрация: shodan.io

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

  • Следите за прямыми вызовами lo_export или косвенными вызовами через записи в pg_proc.
  • Остерегайтесь функций, которые обращаются к бинарникам на C (как на рис. 2).
  • Используйте файрвол для блокировки исходящего сетевого трафика из базы данных в интернет.
  • Убедитесь, что вашей базе данных не назначен общедоступный IP-адрес. Если это так, ограничьте доступ только для хостов, которые взаимодействуют с базой (сервер приложений или клиенты администраторов БД).

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


  1. vesper-bot
    19.03.2018 11:31
    +1

    Windows: type myExecutableFile.exe >> myImageFile.png

    Windows: copy /b a.jpg+b.exe c.jpg. Так надежнее.


  1. aamonster
    19.03.2018 11:50
    +3

    Мдя… Если у кого-то есть ключи к вашей квартире (пароль пользователя бд с нужными правами) — он может войти и приготовить себе обед на вашей плите (намайнить крипты). А консьержка (антивирус) не заметит, что он принёс сковородку (код для майнинга).
    И беспокоиться мы будем именно об этом, а не о том, что он может что-то украсть или сломать.


    Может, всё-таки лучше поменять замок?


    1. saboteur_kiev
      19.03.2018 19:54

      он может войти и приготовить себе обед на вашей плите

      Прочитал как на вашей планете

      p.s. надо меньше бегать между ГТ и хаброй в конце рабочего дня


  1. teecat
    19.03.2018 13:40

    Небольшое добавление
    По скриншоту видно, что вредоносная программа была отнесена к классу условно безопасных (Tool — утилиты). Статистика показывает, что у пользователей часто для данного класса стоит действие Пропускать. То есть антивирус угрозу знает, но согласно настройкам она пропускается на компьютер


    1. pavel_pimenov
      19.03.2018 14:19

      Также вирус в данном случае это линуксовый бинарь, антивирусы в основном под винду вот молчат(например Microsoft) — т.к. не запустится.


      1. teecat
        19.03.2018 14:39

        Честно говоря такой установки (обнаруживать только вирусы для Windows) я у антивирусов для десктопов не видел (для мобильных такое наоборот норма). Иначе как ловить проходящие вредоносные файлы. Тут скорее качество системы сбора/количество пользователей соответствующих платформ влияют


      1. Busla
        20.03.2018 10:05
        +1

        В данном случае вируса вообще нет.


    1. Busla
      20.03.2018 10:03

      Я бы вообще сказал, что это ложное срабатывание: майнер — не вредоносная программа.


      1. teecat
        20.03.2018 10:14

        Ну как сказать. Философский вопрос. Если у вас сервер полностью зависнет на майнинге (а такое в нашем саппорте тоже встречалось), то думаю вопрос о вредоносности отпадет.
        1. Есть майнеры, которые по сути не отличаются от легитимных. Из все меньше, но есть. Вредоносная программа — это то, что устанавливается без разрешения или выполняет неописанный функционал. Явным образом майнер на машине нежелаемый (тормоза никому не нужны). А если он еще и прячется, то это точно троян/червь/тулза
        2. Есть майнеры (мало, но есть) которые инжектируются в процессы для скрытности. Так что майнеры они разные


        1. bogolt
          20.03.2018 10:45

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


          1. teecat
            20.03.2018 11:09

            Это если мы говорим о поведенческом анализаторе, контролирующем поведение запущенной программы. Антивирусное ядро (а вирустотал показывает знания именно антивирусного ядра и баз) обнаруживает программу на основе записей (если конечно не ложняк), четко относящих файл к определенной записи

            для антивируса одинаково вредоносными

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


        1. Busla
          20.03.2018 14:37

          … а если СУБД выжрет всю память, то и её тоже к вредоносному ПО причислить


          1. teecat
            20.03.2018 14:52

            если она установлена без разрешения админа — конечно /юмор офф


  1. helgisbox
    19.03.2018 14:08

    Интересно, а вот вызов lo_export, какой есть аналог функции по сохранению бинарников в чистом виде у Oracle или MS-SQL?


    1. bolk
      20.03.2018 12:36

      Бизнес-план созрел?