Light mode

Кратко о технологиях защиты и техниках обхода песочниц

  • #Sandbox
  • # ПротиводействиеКибератакам

Подходы к созданию песочниц

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


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


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


Хочется отметить, что при разработке агента (драйвера или модуля ядра) разработчики фактически пишут руткит. Это логично, ведь агент должен скрывать себя в системе и заметать все следы, чтобы злоумышленник его не обнаружил. Например, в Linux агент должен убрать информацию о себе из специальной цепочки, в которой ядро ОС хранит данные о ядерных модулях. А также из файлов в sysfs, содержащих информацию о драйвере.


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

 

Бесфайловые угрозы

Это одна из самых популярных техник злоумышленников. Для ее реализации не нужен записанный на диск файл — вся информация хранится в оперативной памяти. В случае с Windows можно выделить следующие подходы:

  • запись скриптов Powershell в автозагрузку;
  • запись кода в ветки реестра;
  • использование WMI (Windows Management Instrumentation);
  • использование планировщика задач для запуска кода через определенное время.

В Linux применяются другие методы. К примеру, системный вызов memfd_create, который создает файл, живущий только в оперативной памяти. Также можно воспользоваться специальной директорией /dev/shm (shm расшифровывается как SHared Memory). Фактически это обычная директория, в которой можно создавать файлы и запускать что-либо, но все это будет происходить в оперативной памяти и не затронет диск. Кроме того, в Linux есть схожая с /dev/shm директория /tmp. Стоит отметить, что она не всегда будет представлять собой tmpfs (временная файловая система, которая живет в оперативной памяти). Некоторые популярные дистрибутивы могут монтировать ее как ext2 и ext3 (находятся на диске).
 

Неперехватываемые Syscall'ы

Разработчики операционных систем не стоят на месте — API расширяются, а значит, появляются и новые системные вызовы. К примеру, Ex2, Ex3, Ex15 и др. в Windows, которые открывают новые возможности для злоумышленников и создают определенные трудности для песочниц. Само собой, эксперты и разработчики не успевают уследить за всеми новинками — всегда есть вероятность пропустить один образец из тысячи. Но это не должно быть проблемой для песочницы, потому что она живет не только поведенческим анализом. В арсенале Sandbox есть целая совокупность инструментов: статический анализ, дампы памяти, извлечение файлов и т. д. Кроме того, песочницы постоянно развиваются: когда злоумышленники начинают активно использовать новый системный вызов, на него оперативно ставится перехват.

Буткиты

Буткит — это вредоносный код, который запускается до загрузки ОС. Его основная цель — закрепиться в системе и обеспечить защиту других вредоносов от обнаружения средствами защиты. Буткиты бывают двух видов и действуют по-разному:

1. Написанные для устройств на базе BIOS (legasy):

  • внедрение в MBR (master boot record);
  • внедрение в VBR (volume boot record) — загрузочный сектор логического диска;
  • внедрение в IPL (initial program loader).

Популярные семейства ВПО: Gapz, Satana, Pitou.

2. Написанные для устройств на прошивку UEFI:

  • внедрение в Bootmgr;
  • внедрение в SPI-flash;
  • внедрение в EFI-партицию.

Популярные семейства ВПО: LoJax, FinSpy, Trickboo.

Классическая цепочка заражения буткитом выглядит следующим образом:

  1. компрометированная загрузка ОС;
  2. инфицирование ядра (руткит);
  3. запуск бэкдора в режиме пользователя;
  4. контроль над ОС.

В основном буткиты устанавливаются в систему с помощью вызовов CreateFileA->WriteFile, SCSI-команд и функции DeviceIoControl. Защитники могут отслеживать эти команды и успешно детектировать попытки записи. Есть и другой способ внедрения, который часто применяется в таргетированных атаках, — прямая запись в SPI-чип. Отмечу, что для противодействия этой технике потребуется песочница с определенной конфигурацией, поскольку в виртуальной среде этого чипа может не быть (либо он может быть другим).

DOS-песочницы

Песочнице (в частности, технологии поведенческого анализа) нужно время, чтобы обнаружить вредоносную активность, — в среднем две минуты. А для обработки большого потока событий требуются серьезные вычислительные мощности, которых не всегда хватает. Соответственно, возможен сценарий атаки, в котором злоумышленник просто заваливает почту и песочница захлебывается. Или же атакующий может отправить всего один вредоносный образец, который будет совершать огромное количество бесполезных действий, вызовет большой расход ресурсов и т. д. Примеры реализации:

  • беспорядочное создание файлов в системе;
  • форк-бомба;
  • виртуализирующие протекторы, которые не только затрудняют анализ, но и раздувают поток событий.

Отмечу, что атаковать можно не только поведенческий, но и статический компонент песочницы. Например, создать документ с вложенной и сложной структурой, которую система будет долго разбирать. Либо использовать сложное арифметическое вычисление, которое будет долго считаться в виртуальной среде (перемножение квадратных матриц 1000 x 1000, подсчет определителя и др.).

К счастью, песочницы не существуют в вакууме, а всегда работают в связке с другими ИБ-решениями. Чтобы выстроить эффективную защиту, нужно грамотно использовать весь комплекс СЗИ. Таким образом вы нивелируете недостатки отдельных продуктов. 
 

Подробнее о технологиях защиты и техниках обхода песочниц — в докладе Алексея Колесникова на PHDays Fest 2!

Мы дěлаем Positive Research → для ИБ-экспертов, бизнеса и всех, кто интересуется ✽ {кибербезопасностью}