Вопрос Как воспризвести Meltdown на JS ?


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
Всем привет.

У меня на си получилось воспроизвести, но на си некруто.

Кто-то говорит, что можно на JS сделать, блин не в какую не получается, кто-нить копал ?

Вот есть код:
JavaScript:
var TABLE1_STRIDE = 1;
var TABLE1_BYTES = 3;
var probeTable = ['alpha', 'beta', 'corky'];
var simpleByteArray = [0x00, 0x01, 0x02];
var localJunk;
var index = 0;
if (index < simpleByteArray.length) {
    index = simpleByteArray[index | 0];
    index = (((index * TABLE1_STRIDE) | 0) & (TABLE1_BYTES - 1)) | 0;
    localJunk &= probeTable[index | 0] | 0;
};
    alert( 'Result = ' + localJunk );

Заюзать можно примерно так, создав htm-страничку:
HTML:
<!DOCTYPE HTML>
<html>

<head>
  <!-- Тег meta для указания кодировки -->
  <meta charset="utf-8">
</head>

<body>

  <p>Начало документа...</p>
  <script>
var TABLE1_STRIDE = 1;
var TABLE1_BYTES = 3;
var probeTable = ['alpha', 'beta', 'corky'];
var simpleByteArray = [0x00, 0x01, 0x02];
var localJunk;
var index = 0;
if (index < simpleByteArray.length) {
    index = simpleByteArray[index | 0];
    index = (((index * TABLE1_STRIDE) | 0) & (TABLE1_BYTES - 1)) | 0;
    localJunk &= probeTable[index | 0] | 0;
};
    alert( 'Result = ' + localJunk );
  </script>

  <p>...Конец документа</p>

</body>

</html>
Но localJunk всегда 0-ль, какой-то развод.

Вообще алгоритм такой:
  1. Мы выделяем участок памяти X, по длине больший, чем несколько линий кэша.
  2. Мы сбрасываем кэш так, чтобы память X не была в кэше. ( .)
  3. Мы определяем адрес в ядре, который мы хотим прочитать, и записываем его в указатель p.
  4. Мы пишем код вида:
    C:
    if (data == 0){
    byte kernelByte = *p;
    byte dummy = X[(kernelByte & 1) * CACHE_LINE_SIZE];
    }
  5. В data мы кладём ненулевое значение, и вытесняем data из кэша.
  6. Мы выполняем указанный код, после чего измеряем время доступа к X[0] и X[CACHE_LINE_SIZE].
Что происходит? Весь код внутри if не выполняется в реальности, но выполняется лишь спекулятивно. Про спекулятивном выполнении чтение по указателю на память ядра завершается успешно. В зависимости от значения младшего бита спекулятивно прочитанного значения мы производим доступ к одной из двух кэш-линий. Таким образом, одна из кэш-линий окажется загруженной в результате спекулятивного выполнения.

Если время доступа к X[0] близко к типичному времени доступа к закэшированной памяти, то в спекулятивном коде было обращение к X[0], и значит, kernelByte & 1 == 0. Если время доступа к X[CACHE_LINE_SIZE] близко к типичному времени доступа к закэшированной памяти, то в спекулятивном коде было обращение к X[CACHE_LINE_SIZE], и значит, kernelByte & 1 == 1.

Таким образом, мы смогли прочитать один бит защищённой памяти. Далее, один за одним можно считывать информацию. На текущий момент скорости считывания составляют около 1-2 килобайт в секунду.

На убунте получилось этим сплоитом воспроизвести уязвимость:
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
Вообще алгоритм такой:
Немного поясню ещё, а-то непонятно может-быть (Копипаст, но понятный :)):

У многих современных процессоров есть так называемое спекулятивное выполнение. Что это такое?

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

Если выполнение реально пойдёт по нужной ветке, побочные эффекты «секретно» выполненных операций публикуются процессором и становятся видимыми другим инструкциям. Если же выполнение не пойдёт по нужной ветке, спекулятивно выполненные команды аннулируются, и их результат никому не виден.

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

Каким образом можно это использовать? Мы можем в спекулятивно выполняемом коде в зависимости от считанных данных подгрузить в кэш различные куски памяти, и измерив время доступа к ним, решить, какие же данные были прочитаны.

Чем это отличается от обыкновенного чтения данных? Вот тут-то и проявляется ошибка в Intel'овских процессорах. Дело в том, что мы можем спекулятивно читать память ядра, которая нам недоступна. Ошибка заключается в том, что при спекулятивном чтении не проверяются права на доступ к памяти.

Параллельно с описанной атакой Meltdown есть очень похожая, в некотором смысле более общая атака, известная как Spectre.

В ней «недоступная» память читается так же, но не через границы уровней доступа. То есть, читается не ядро, а память собственного процесса (или, возможно, даже другого процесса, бегущего с теми же правами!). Этой уязвимости подвержены уже и процессоры AMD, потому что блокировка спекулятивного выполнения на уровне процессора «не видит» границ между процессами, т. к. процесс — понятие уровня операционной системы.

Зачем может понадобиться читать память своего же процесса? Например, для выхода из «песочницы». Код на JS в браузере обычно бежит в том же процессе, с теми же правами, а контроль над тем, чтобы JS не читал память за границами положенного, возложена на код, который проверяет выход индексов за границы диапазона. Как мы уже видели, выход индекса за границы диапазона возможен даже при контроле значения индекса при спекулятивном исполнении кода.

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

Патч для Meltdown заключается в том, что из виртуального пространства процесса операционная система убирает память ядра. Это замедляет системные вызовы, но исправляет данную проблему.
 

BIG BOSS

Пользователь
Форумчанин
Регистрация
09.01.2018
Сообщения
3
А у localJunk вместа 0 какой ответ должен быть в alert
 

BIG BOSS

Пользователь
Форумчанин
Регистрация
09.01.2018
Сообщения
3
Я читал на англоязичних форумах что это не полная реализатсия JavaScript кода там не всё добавили
 

virt

Просветленный
Просветленный
Регистрация
24.11.2016
Сообщения
706
Репутация
228
Как понял JS уязвимость для выхода из "песочницы", т.е. типо можно прочитать память своего процесса.

В предложенном коде, хз что-делается. Возможно то-что localJunk = 0 и есть демонстрация.
 

IvanPetrov

Уважаемый пользователь
Форумчанин
Регистрация
02.01.2018
Сообщения
30
Репутация
11
Уже первые новости "удачных" патчей от MS


Множество компьютеров по всему миру перестали работать в результате установки обновления от Microsoft, закрывающего уязвимости Meltdown и Spectre, The Verge.

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

В Microsoft, в свою очередь, сообщили, что за возникновение проблемы несет ответственность компания AMD. Для владельцев процессоров этой марки обновления будут заблокированы.

"Корпорация Майкрософт работает с AMD для решения этой проблемы", - в соответствующем разделе справки.

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

 

BIG BOSS

Пользователь
Форумчанин
Регистрация
09.01.2018
Сообщения
3
И да что значить на СИ произвел ты программу троянчик смог воспроизвести?
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
И да что значить на СИ произвел ты программу троянчик смог воспроизвести?
Это

Вообще по поводу трояна, далее уже можно сделать дамп памяти например и выискивать нужные данные, как пример использования.

Уже первые новости "удачных" патчей от MS
Продолжение:

Походу патч убивает компьютер, т.к. есть подозрения, что патч меняет микрокод проца:
Некоторые пользователи говорят, что переустановка Windows не решает вопрос.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
А такое возможно? Я считал, что у проца все аппаратное
А почему-нет, микрокод находится в специальной памяти процессора, в которую разрешен чтение/запись.

Процесс обновление микрокода задокументирован, можешь погуглить.

Да-вон даже на офф. сайте майкрософт:

Также вот статья, где можно более подробно почитать, как это происходит:

Переводя на общепонятный язык, имеется возможность в любой момент времени подправить алгоритм работы любой команды процессора, таким образом, чтобы она выполняла недокументированную функцию, нужно только знать структуру информационного блока, и тогда из любой процессорной команды можно будет сотворить совершенно иную, собственную, по своему вкусу и разумению.
 
Автор темы Похожие темы Форум Ответы Дата
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 3
virt СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 2
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 5
Hooko СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 5
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 17
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 0
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 1
Ворошилов СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 0
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 0
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 2
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 0
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 6
Антоха СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 2
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 0
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 1
Ворошилов СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 0
Magic_Mushroom СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 4
Platon666 СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 5
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 1
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 2
Похожие темы
Как получить доступ к chatGPT в России
На заметку Как взломать вконтакте, своей половинки
ВАЖНО Как непопасться
Вопрос Как определить версию myBB
На заметку Как распространить вирус. Способы бывалых
На заметку Шутка со спецсимволами и как профиксить
ВАЖНО Как стырить пароль
На заметку О том, как угнать домен
На заметку Пара слов как обмануть сканер отпечатков пальцев
На заметку О том как правильно заходить на Happy-Hack
На заметку Как поднасрать конкуренту, или блокируем группу вконтакте врага
Информация Взлом вконтакте, почта и т.д. Как это делают !
Инструкция БД XenForo.Как слить нужную информацию.
Информация Как обойти идентификацию WI-FI (общественным точкам доступа в Интернет)
Новость Анонимность и как легко и быстро преодолеть блокировку сайтов при помощи ТОР-Браузер
Кардинг - Как это было...
Как закриптовать автоит скрпит?
Help. Как редактировать .bin ?
Определяем как провайдер блокирует сайты
Видео как легко зайти на заблокированный сайт и скачать торрент
Верх Низ