Следующая новость
Предыдущая новость

Вредоносный код в овечьей шкуре. Как работает атака на анклав SGX

04.04.2019 20:44
Вредоносный код в овечьей шкуре. Как работает атака на анклав SGX

Содержание статьи

  • Вырываясь на оперативный простор
  • Укрепляем позиции
  • Штурвал на себя!
  • Чисто гипотетически
  • Proof of Concept

За годы хаотичной эволюции набор команд ассемблера x86-64 стал порождать самые причудливые сочетания. Сегодня мы рассмотрим творческий подход к использованию TSX-инструкций изнутри анклавов — защищенных участков памяти. Результатом будет рабочий эксплоит, который позволит выполнять любой код с привилегиями хост-приложения.

Итак, что нам недоступно в анклаве? Мы не можем делать системные вызовы. Мы не можем выполнять операции ввода-вывода. Мы не знаем базового адреса сегмента кода хост-приложения. Мы не можем переходить к коду хост-приложения при помощи jmp и call. Мы не имеем представления о структуре адресного пространства, которой руководствуется хост-приложение (например, какие именно страницы промаппены или что за данные размещены на этих страницах). Мы даже не можем попросить операционную систему промаппить нам кусок памяти хост-приложения (например, через proc/pid/maps).

INFO

Логичней всего думать о технологии SGX (Software Guard Extensions) и анклавах как о «песочнице наоборот». В sandbox-приложениях, как правило, запускается потенциально опасный код, который требуется изолировать от операционной системы и сторонних программ. Анклав же, напротив, исходит из того, что окружение уже может быть скомпрометировано злоумышленниками, и поэтому предотвращает любой несанкционированный доступ извне. Подробности ты найдешь на сайте Intel.

Наивные попытки прочитать вслепую произвольную область памяти хост-приложения рано или поздно приведут к принудительному завершению анклавной программы (и скорее рано, чем поздно). Так происходит всякий раз, когда запрашиваемая анклавом область виртуального адресного пространства оказывается недоступной хост-приложению. О возможности записать «что-то свое» даже заикаться смешно.

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

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

В статье я покажу несколько приемов, при помощи которых злодеи преодолевают перечисленные ограничения и используют SGX в своих корыстных интересах при проведении ROP-атак. Делается это либо для выполнения произвольного кода, замаскированного под процесс хост-приложения (аналогично process hollowing, который часто используется малварью), либо для маскировки уже готовой малвари — чтобы избавиться от преследований со стороны антивирусов и других защитных механизмов.

Вредоносный код в овечьей шкуре. Как работает атака на анклав SGX

WARNING

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

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

7490 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости