Социальные сети

Th3y 0wn Y0u

23.11.2017
 

Многомудрый пр0ф3сс0р из IBM наёл мудрённый способ сломать adobe flash. да и не просто взломать, а сделать так, чтобы flash исполнил произвольный код в своей внутренней байт-машине для action script. Машинка эта, по-умолчанию код проверяет, чтобы тот никаких злонамерянных действий не совершал. Однако проверка выделенна в отдельную фазу, поэтому если тоблички проверяльшика слегка подпортить, он может и не заметить "злых" инструкций, в то время как исполнителю кода на эти таблички плевать, и он "злые" иструкции выполнит и не подавится.

Всё дело в том, что у action script регистровая виртуальная машина и свои виртуальные регистры она хранит в оперативной памяти хост-машины. Проверяльших как-раз проверяет, что байт-код обращается только в память,отведённую под регисты и никуда больше. Во время выполнения обращения не перепроверяются (для эффективности) ибо считается, что предварительно проверенный код корректен. Поэтому если удасться подсунуть на выполнение код в обход проверяльщика, то можно писать в произвольную область памяти хост-процесса.

Остаётся дело за малым - обмануть проверяльшик. А проверяльшик обмануть не сложно. У него есть таблица инструкций, где каждой инструкции соответствует длина в байтах. Некоторые инструкции не требуют проверки и потому игнорируются. Если табличку подправить, то можно заставить проверяльшик проигнорировать очень длинную последовательность байт в которую можно спрятать зловредный код.

Осталось только исправить таблицу. А это требует способа записать произвольное значение в нужное место в памяти. Или, как говорят хакеры и исследователи по компьютерной безопасности, нужен write32 vulnerability.
Однако и это оказалось возможно. Где-то в недрах флэша есть примерно такой код (исходников я не видел, код приведён для иллюстрации, названия структур, функций и констант выдуманы, опятьже для иллюстрации):

int size = GetBufferSizeFromUserProvidedData ();
if (size < SOME_LIMIT)
{
    BYTE[] p = new BYTE[(unsigned int)size]; //non-throwing new here
    p[GetUserProvidedOffset()] = GetUserProvidedValue ();
}

Итак.
1. size проверяется как число со знаком, а используется, как число без знака. Можно подобрать такое значение, что проверка пройдёт успешно, но new обламается из за слишком большого размера запрошенной памяти.
2. Результат new нигде не проверяется. На современных системах попытка записи\чтения по нулевому адресу вызовет безобидный access violation. Однако тут NULL используется со смещением, полученным от пользователя без проверки. В результате запись идёт по 0+offset - то есть прямо куда хакер попросит.
3. Записываемое значение тоже полученно от пользователя, так что получается write32.

Итого: проверяйте, коллеги, результат new и прочих аллокаторов, не говоря уже о смещениях и размерах буферов, полученных извне системы, из непроверенных источников

По материалам:
http://blogs.msdn.com/david_leblanc/archive/2008/04/16/checking-allocations-potential-for-int-mayhem.aspx
http://www.matasano.com/log/1032/this-new-vulnerability-dowds-inhuman-flash-exploit/










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


Шаг 5. Выбираем фирменное наименование организации

Если вы собираетесь регистрировать новое юридическое лицо, то перед вами неизбежно встают необходимость выбора его названия и ряд сопутствующих вопросов. Следует ли проверять выбранное наименование организации на уникальность перед подачей документов на регистрацию? Можно ли зарегистрировать компанию с таким же наименованием, как и у другой, уже существующей орган...
Читать далее »

Шаг 4. Выбор системы налогообложения

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

Аренда помещений

Самым тесным образом с фактическим адресом организации связана Аренда Ею помещений, необходимых для налаживания выбранных видов деятельности. Для деятельности любой организации необходимо помещение. Однако недвижимость стоит сейчас очень дорого, и лишь немногие организации в состоянии приобрести помещение в собственность. В связи с этим значительная част...
Читать далее »

Шаг 3. Выбираем место нахождения организации

МЕСТО НАХОЖДЕНИЯ ОРГАНИЗАЦИИ, ЕЕ ЮРИДИЧЕСКИЙ, ФАКТИЧЕСКИЙ И ПОЧТОВЫЙ АДРЕСА В ГК РФ приведено понятие «место нахождения юридического лица» – так называемый юридический адрес, официально зарегистрированный в ЕГРЮЛ. Однако юридическое лицо может располагаться и по другому адресу – фактическому. В гражданском законодательстве не содержит...
Читать далее »

Карточка

С образцами подписей и оттиска печати ...
Читать далее »

Форма

Документа, подтверждающего наличие лицензии Приложение 26 СЕРТИФИКАТ СООТВЕТСТВИЯ ...
Читать далее »

Уведомление

О регистрации юридического лица в территориальном органе Пенсионного фонда Российской Федерации по месту нахождения На территории Российской Федерации Приложение 22 Свидетельство О регистрации страхователя в территориальном фонде Обязательного медицинского страхования При обязательном мед...
Читать далее »