Комментарии 524
Ну или какой-то тест для linux. Я бы сейчас у себя проверил.
sysbench провисает в одном тесте на 30%. Визуально, пока все по старому, больше на io-задачах зависаю, типа клонирования образа.
Рабочие сервера обновлять буду не я. Я только проверил, чтобы все работало после апдейта.
а делать файлохранилище в виртуалке — печаль по просадкам i/o. никто вменяемый таким не занимается.
опция
nopti
в параметрах ядра при загрузке определяет будет ли использоваться изоляция или нет.Интересно, можно ли на Windows отказаться от изменений, вызывающих замедление работы. На Linux, вроде бы, можно будет.
Пароль можно просто подбирать из найденного в памяти. У ключей энтропия выше чем у остальных данных обычно, если при этом мониторить трафик, то можно проверять гипотетические ключи.
С таким объяснением достаточно серьёзно проблема выглядит?
Attacks using JavaScript. In addition to violating process isolation oundaries using native code, Spectre attacks can also be used to violate browser sandboxing, by ounting them via portable JavaScript code. We wrote a JavaScript program that successfully reads data from the address space of the browser process running it.
В части номер 4.3 есть больше объяснений.
Не нужно компрометировать популярный сайт, я прямо сейчас на своём сайте пишу яваскрипт (и даю на него ссылку) который из брауера будет таскать всё что может. У вас несколько вкладок открыто? Даже может быть несколько програм (одна из них — менеджер паролей?), так?
А на ссылку, которую я дал, вы нажали? :-)
Вообще в том же хроме JS вкладки крутится в её собственном процессе. Отдельном.
Она позволяет добыть данные из ядра при условии возможности дёргать нужные сисколы и выполнять нужные инструкции CPU в контролируемых условиях. Из JS этого сделать нельзя, но можно сформировать код, который будет через другую уязвимость из перечисленных читать память своего процесса. Разберитесь в механизме работы, а потом делайте заявления.
Был прав.
Был.
Года так до 2014-го.
Разговоры о сранвительной безопасности опенсорса и коммерческой разработки вообще бессмысленны — практика показывает, что и то, и другое может иметь дыру с амбарные ворота размером, которую могут не замечать месяцами, а то и годами. Впрочем, всёрьез слушать Столлмана, особенно когда он опять забывает таблетки принять, тоже не очень осмысленное действие.
Применительно к процессорам же опенсорс — это и вовсе смешно, будет примерно как опенсорсные ноутбуки: очень дорого, очень громоздко и по производительности способно на равных конкурировать со средним вайфай-роутером.
А Байкал почему дырявый?
Такой запрет, кстати, ускорит работу с DMA, так как не нужен будет второй cache flush.
Есть Байкал-Т1 MIPS P5600 www.baikalelectronics.ru/products/T1
а есть Байкал-М, он на ARMv8-A www.baikalelectronics.ru/products/M
Второй для меня, естественно, теперь умер.
opencores.org и там не все так плохо. Многие ядра пытаются поддерживать wishbone и быть хоть с чем—то совместимым. Вон, OpenRISC даже в космосе побывал и для него есть полноценный тулчеин, даже сборка линукса, а он вроде как даже не самый продвинутый среди открытых архитектур. Проблема в другом — если говорить про асик— нет гарантий, что на заводе ничего в него не дошьют, да и это очень дорого. Если говорить про плис — либо чертовски медленно, либо чертовски дорого (как правило, и то, и другое, если говорить про построение архитектуры общего назначения на плис), да ещё и не на каждую плисину влезет полноценная soc. Но я давно мечтаю собрать на основе маленькой платы с плис типа такой какой-нибудь openphone с чертежами для 3D принтера
RISC наше всё :)
сильно древние неуязвимы
access.redhat.com/security/vulnerabilities/speculativeexecution
В общем, если у процессора кэш и предсказание ветвлений есть, то Spectre ваш.
В общем, если у процессора кэш и предсказание ветвлений есть, то Spectre ваш.Спекулятивное исполнение и точный таймер нужны…
— Которая? — переспрашивает Ржевский.
— Вон та, в желтом платье.
— Ну, я со спины сказать не могу, — пожимает плечами поручик. В этот момент дама поворачивается, поручик Ржевский пристально смотрит ей в лицо и говорит:
— Эта — берет.
Корнет подходит к даме, они о чем-то беседуют и удаляются. Через некоторое время корнет возвращается, довольный:
— Действительно, берет! Но как вы определили, поручик?!
— Послушайте, корнет, — веско произносит поручик Ржевский, — Рот есть — значит берёт!
Примерно та же история с процессорами и Spectre.
Если права доступа к страницам ядра проверяются ДО запуска подгрузки в кэш, то остается только eBPF, который сам по себе бяка (JIT в ядре!). К тому же он кажется требует привелегий. Гуглы вроде не нашли в текущем коде ядра Linux подходящих последовательностей помимо возможности сформировать их через eBPF.
Во-первых, ядро большое, а подходящие для атаки последовательности могут быть разными, так что что там найдётся в конкретной версии ядра, собранной конкретным компилятором с конкретными настройками — это ещё бабка надвое сказала. Там не очень-то много надо.
Во-вторых, авторы второй работы, не гуглевской, вообще с ядром не заморачивались, а просто взяли DLL'ки, используемые их софтиной, и поискали нужную последовательность в них, резонно предположив, что эти же DLL'ки с большой вероятностью будут шариться с другими процессами.
Так что eBPF просто радикально облегчает задачу, но не более того.
А где-то есть список подверженных этому CPU?
Все интел, выпущенные за последние 10 лет :)
Спектра исправляется\локализуется на стороне каждой прикладной программы в отдельности. А Мелтдаун опасен в основном для многопользовательских систем с множественным доступом различных субьектов, между которыми нет доверия. У РеактОСа же в самой ближайшей перспективе наиболее реалистичные сценарии использования предполагают однопользовательский доступ в изолированных сегментах инфраструктуры.
Еще важно отметить, что в РеактОС существующие средства доставки и инжекции вредоносного ПО на данный момент не способны выполнить свою функцию.
Безусловно, в дальнейшем определенные механизмы безопасности будут внедрены, а пока мы посмотрим, как с этим справятся остальные вендоры и воспользуемся их опытом.
Спектра исправляется\локализуется на стороне каждой прикладной программы в отдельности.
Ну если быть честным, то спектру нельзя исправить чисто программно, можно только минимизировать возможность атаки (ну или снизить вероятность что-ли)…
Или вы действительно считаете, что уменьшением точности таймера (как превентивно сделали например в некоторых браузерах) или перекомпиляцией софта (дабы заменить уязвимые последовательности) вы исключите фактор атаки? Ну-ну...
Еще раз, — спектру практически невозможно полностью закрыть программно, от слова совсем, пока во всяком случае. Еще менее реально закрыться от возможных будущих подобных "уязвимостей". Только если есть возможность как-то отключить branch prediction (например для потока "исполняющего" javascript и/или потенциальный "чужой" код). Или выключить кэши процессора, ну или написать что-то типа "антивирус для процессора" (это сарказм если что).
Кроме того уже сейчас нужно различать те-же CVE-2017-5715 и CVE-2017-5753 (например для 5715 нужен еще и микрокод-update, т.е. чисто программно у вас шансов "защититься" просто нет).
А ящик пандоры только-только открылся — я к тому что завтрашний зоопарк возможных CVE-дериватов, эксплуатирующих такие и подобные им дыры (т.е. speculative execution и иже с ними), пока сложно себе представить.
Но то что он будет, это однозначно.
Интел предлагает вставлять LFENCE после условного перехода для фикса Варианта-1, и использовать команды PUSH + RET вместо перехода по регистру. Вроде LLVM/gcc уже даже патч есть.
Но если у атакующего — возможность выполнять свой код с минимальными привилегиями, то зачем ему в свой код вставлять LFENCE?
А теперь берем и внимательно читаем "правильную литературу" про спектру, например здесь особливо пункты 7-й и 8-й.
Если коротко, про то чего вам тут Intel предлагает: а) этим всё не исправить и история далеко не окончена, и б) хочется спросить — они это вообще серьезно?! Если это правда предложение инженеров Интел (а не отмазка какого-то "продажника")… тогда все еще хуже.
Там пишут, что предположительно вообще все когда либо выпущенные 86 процессоры Интел с спекулятивным исполнением. А это с 95 года. Просто в стоей работе авторы продемонстрировали уязвимость на сравнительно новых процессорах.
Еще бы помнить когда он выпущен.
Но, на самом деле, сложно выяснить есть ли в том или ином процессоре этот баг т.к. потроха процессора закрыты и как он обрабатывает инструкции — покрыто мраком.
Единственный выход, который мне видится — запускать PoC эксплоит (найти бы его еще) на каждом из них и смотреть результат.
Please check with your system vendor or equipment manufacturer for more information regarding your system.
Intel® Core™ i3 processor (45nm and 32nm)
Intel® Core™ i5 processor (45nm and 32nm)
Intel® Core™ i7 processor (45nm and 32nm)
Intel® Core™ M processor family (45nm and 32nm)
2nd generation Intel® Core™ processors
3rd generation Intel® Core™ processors
4th generation Intel® Core™ processors
5th generation Intel® Core™ processors
6th generation Intel® Core™ processors
7th generation Intel® Core™ processors
8th generation Intel® Core™ processors
Intel® Core™ X-series Processor Family for Intel® X99 platforms
Intel® Core™ X-series Processor Family for Intel® X299 platforms
Intel® Xeon® processor 3400 series
Intel® Xeon® processor 3600 series
Intel® Xeon® processor 5500 series
Intel® Xeon® processor 5600 series
Intel® Xeon® processor 6500 series
Intel® Xeon® processor 7500 series
Intel® Xeon® Processor E3 Family
Intel® Xeon® Processor E3 v2 Family
Intel® Xeon® Processor E3 v3 Family
Intel® Xeon® Processor E3 v4 Family
Intel® Xeon® Processor E3 v5 Family
Intel® Xeon® Processor E3 v6 Family
Intel® Xeon® Processor E5 Family
Intel® Xeon® Processor E5 v2 Family
Intel® Xeon® Processor E5 v3 Family
Intel® Xeon® Processor E5 v4 Family
Intel® Xeon® Processor E7 Family
Intel® Xeon® Processor E7 v2 Family
Intel® Xeon® Processor E7 v3 Family
Intel® Xeon® Processor E7 v4 Family
Intel® Xeon® Processor Scalable Family
Intel® Xeon Phi™ Processor 3200, 5200, 7200 Series
Intel Atom® Processor C Series
Intel Atom® Processor E Series
Intel Atom® Processor A Series
Intel Atom® Processor x3 Series
Intel Atom® Processor Z Series
Intel® Celeron® Processor J Series
Intel® Celeron® Processor N Series
Intel® Pentium® Processor J Series
Intel® Pentium® Processor N Series
лучше отключите JavaScript даже при посещении безопасных сайтов
Нормально пользоваться Хаброй с отключённым JS — возможно?
(не говоря уже об обычных сайтах сплошь увешанных js)
Проблема в том, что js — уже давно далеко не «рюшечки на сайтах», а основной функциональный элемент, отключение которого смерти подобно (этого самого сайта).
Что видимо и произойдёт в ближайшие дни.
А без JS хабр вполне возможен, если напишут отдельную версию — сделать простую форму для написания статьи/комментариев.
Для хрома Google вроде как рекомендует включить chrome://flags/#enable-site-per-process если у вас версия ниже 64
И как это спасет?
Это как для защиты от ядерной бомбы используйте бронежилет.
А что с клонами Хрома? Вивальди и Новой Оперой?
Интересно, что будет если отключить WebWorker-ы?
Интрига дня/недели: подвержены ли процессоры Apple?
https://ru.wikipedia.org/wiki/Apple_Ax я про эти.
Spectre с большой вероятностью работает на всех ipad/iphone. Практически все современные ARM ядра ей подвержены.
Meltdown подвержены только ядра ARM Cortex-A75 (на них еще нет выпущенных процессоров)
Однако, Apple не использует готовые ядра Cortex, а разрабатывает ядра сама. На текущий момент нет информации об атаке Meltdown на ARM ядра Apple. Вот ждемс информацию.
Пожалуй, самое вероятное и неприятное применение на данный момент — получение дампа системной памяти во время выполнения JavaScript.Больше похоже на заявление от представителей жёлтой прессы. Низкоуровневые операции (типа получения данных по произвольному указателю), которые скорее всего будут нужны для эксплуатации уязвимости, из JS недоступны. В общем, или покажите рабочий пруф, или не распространяйте сомнительную информацию и не нагнетайте бесполезную панику.
В первоисточнике есть JS сниппет, который читает память процесса браузера https://spectreattack.com/spectre.pdf, эта ссылка есть в статье...
if (index < simpleByteArray.length) {
index = simpleByteArray[index | 0];
index = (((index * TABLE1_STRIDE)|0) & (TABLE1_BYTES-1))|0;
localJunk ^= probeTable[index|0]|0;
}
Во-вторых, чтение памяти своего процесса (где живёт вкладка) и получение дампа всей системной памяти — разные вещи. В-третьих, не заявлено, что можно целенаправленно прочитать всю память своего процесса из JS. Как я вижу, с использованием этой методики максимум могут быть сделаны выводы о содержимом каких-то случайных блоков памяти своего процесса, в зависимости от того куда при выполнении JS была физически помещена переменная массива.Итого у нас есть возможность узнавать содержимое байтиков за пределами выделенного JS-массива. Его физический адрес мы не знаем, но изучив как JS-движок хранит переменные в куче, возможно где-то рядом с массивом мы сможем найти какой-нибудь указатель, который подскажет где мы вообще физически находимся. С этим, возможно, дальше будет немного проще плясать.
Но вообще активная эксплуатация всё ещё выглядит сомнительной. Скорость «чтения» будет очень маленькой. Как я понимаю, даже пример на C читает где-то 1000-2000 байт в секунду. Всё адресное пространство не прочитаешь с такой скоростью за разумное время, явно нужно точно знать куда смотреть относительно того куда в памяти попал этот JS-массив.
Плюс на 64-битных системах у нас вырисовывается ограничение, что мы можем «смотреть» только в окошко размером в 4 гигабайта, поскольку инты в JS 32-битные. Таким образом, использование Meltdown из браузера также сильно осложнено — весьма вероятно, что до интересных системных структур мы просто не сможем дотянуться, даже если сможем прикинуть где они относительно нашего массива находятся.
Не в курсе как там в JS, а для выполнения WebAssembly на 64-разрядных системах слышал что намеренно резервируется адресное пространство размером в 4 гигабайта, потому что указатели внутри WebAssembly 32-разрядные, и уверенность что они не могут выйти за пределы своего окошка позволяет делать меньше проверок во время выполнения.
Согласен, сейчас пример кода на уровне "proof-of-concept", и читать всю системную память он не сможет by design/
Однако, в голову приходит такое практическое применение дырки — найти в памяти куки (в памяти сандбокса вполне могут остаться куки от ранее посещенных во вкладке страниц), и утащить себе валидные session_id/token-ы от чужих сервисов.
Конечно, задача не тривиальная, но увы, кажется решаемая.
Во-вторых, чтение памяти своего процесса (где живёт вкладка) и получение дампа всей системной памяти — разные вещи.После установки вот того самого патча, который обещает всё замедлить на 30% — да.
Сейчас операционки устроены так, что в них сразу вся физическая памяти размапирована в таблицах всех процессов — просто к ней нет доступа из-за соотвествующих прав на память. Но спекулятивное исполнение на это плюёт!
То есть любой процесс может потихоньку-полегоньку прочитать всю память всех процессов на всей системе.
Когда память перевалила за 950MB
Что вы имеете в виду?
Потом объёмы памяти росли, 64бита всё никак не приходили и пришлось пристраивать костыли… когда 64бита, наконец, пришли, от костылей, разумеется, отказались.
Насколько я понимаю, единомоментно в таблицах сидит только память текущего процесса и ядра.Ага. Только «память ядра» по умолчанию включает в себя, в том числе, прямой доступ ко всей физической памяти системы.
Так просто удобнее и быстрее. На 32-битных системах с более, чем гигабайтом памяти, приходится плясать. На 32-битных системах с 950MB памяти (и менее), можно «не париться»… вернее «можно было».
Практическая ценность этого вопроса какая? В известных мне ОС не делают разделение kernel и user с помощью непересекающихся сегментов. Проверять не на чем.
Игнорирует ли чтение при спекулятивном выполнении ограничение на размер сегмента?
Сегмент может быть расположен «вверху», а данные ядра — внизу. Теоретически. Не все АП может быть смаппировано. Ну, допустим, не проверяет, но там сверху — просто дыра, не мапированная на физическую память.
Практическая ценность этого вопроса какая? В известных мне ОС не делают разделение kernel и user с помощью непересекающихся сегментов. Проверять не на чем.
Думаю о своей хоббийной ОС, где такое разделение есть.
Я бы проверил из любопытства, но пока еще детально не понял механизм эксплуатации, только косвенно по вашим комментариям про array1 и данные кеша, буду читать техническое описание уязвимости позже.
Сегмент может быть расположен «вверху», а данные ядра — внизу. Теоретически.
In 64-bit mode, segmentation is generally (but not completely) disabled, creating a flat 64-bit linear-address space. The processor treats the segment base of CS, DS, ES, SS as zero, creating a linear address that is equal to the effective address.© System Programming Guide, Chapter 3.2.4
Получается, ОС 32-битная, раз можно рулить сегментами? Странно вкладываться в умирающую архитектуру, но хобби бывают всякие.
Сегмент может быть расположен «вверху», а данные ядра — внизу.
Вы правда думаете что там при наличии проверки на выход за границы сегмента отдельно проверяется переполнение?
Ведь если для чтения ядерной памяти надо загружать ядерный же селектор из GDT с DPL=0, что выкинет исключение при RPL=3, то до спекулятивного доступа к «запрещенной» ячейки памяти черед не дойдет. Верно?Неверно. Всё это проверяется уже потом, при «нормальном» исполнении (вернее при «отставке» операций). Спекулятивное же на всё это плюёт, так как если «случится бяда» — то этого же всё равно никто не увидит.
Или глубина сп. выполнения намного глубже?А вы посчитайте. Длина конвеера — 12-14 тактов, одновременно современные CPU могу исполнять 3-4 инструкции за такт… так что теоретически могут исполняться спекулятивно полсотни инструкций и больше, а практически 10-20 — в лёгкую.
Но да, это неважно, если сработает трюк с переполнением адреса локального сегмента.
twitter.com/misc0110/status/948706387491786752/photo/1
Our internal experiments confirm that it is possible to use similar techniques from Web content to read private information between different origins.
Я бы не ждал готовых эксплоитов до релизов патчей для всех популярных ОС.
Низкоуровневые операции (типа получения данных по произвольному указателю), которые скорее всего будут нужны для эксплуатации уязвимости, из JS недоступныДля атаки нужно иметь код, работающий с массивом, данные в котором мы контролируем (что нам легко сделает jit-компилятор), нужны точные таймеры (например, на web-workers, если обычный таймер загрублён js-движком), и нужно знать адрес буфера в процессе браузера. Последнее есть проблема, хотя её решает другой эксплойт — AnC.
ССылка битая
От статьи таки ожидал хоть каких-нибудь технических подробностей: что за уязвимость, как обнаружили и т.д., а под катом всего лишь куча ссылок. Нехорошо.
Ну, а мне показалось бесполезным читать статью ни о чём.
Я написал первый быстрый пост за 10 лет на хабре в надежде, что он пригодится хотя бы паре тысяч людей и не ожидал, что приложенного подробнейшего академического документа с примерами будет мало для первичного ознакомления. Если лично вам все это не оказалось полезным, извините что не оправдал ожиданий.
А пока что я прочитал весь ваш текст (не ходя по ссылкам на первоисточники) и половину комментариев. И самое интересное, что увидел — это ГИФка в твите, где хоть внешне иллюстрируется, как один процесс тащит данные из другого.
AMD с ARM также уязвимы, но атаку реализовать сложнее.
AMD уязвим только к первому виду атаки, и закрыть уязвимость можно без потери производительности. Не надо их в одну кучу с интелом и армом смешивать.
Вообще как так вышло, что AMD обошла чаша сия?
— Add microcode_amd_fam17h.bin (bsc#1068032 CVE-2017-5715)
This new firmware disables branch prediction on AMD family 17h processor
to mitigate a attack on the branch predictor that could lead to
information disclosure from e.g. kernel memory (bsc#1068032 CVE-2017-5715).
17h — это как раз Zen. В свете такого описания мне очень интересно, во сколько раз отключение предсказания переходов уменьшит производительность этих процессоров.
Кроме того, такое впечатление, что AMD проверяет доступ до того, как запускает операцию загрузки в кэш.
То есть, остаются только JIT exploit типа eBPF.
However, for both ARM and AMD, the toy
example as described in Section 3 works reliably, indicating
that out-of-order execution generally occurs and
instructions past illegal memory accesses are also performed.
Нет ссылок ни на тестеров ни на объективные результаты.
Скоро напишут, что при открытии двери в туалет замедляется работа кэша второго уровня.
Нет не фейк. Обе уязвимости. Почитайте на оф. сайте уязвимостей. Черным по белому, для простых смертных написанно, как эксплуатировать. Как новичок-специалист я могу сказать, что такие уязвимости имеют место быть, иногда даже в менее страшной форме и тем не менее на этот раз оно оказалось в настолько важном месте.
AMD с ARM также уязвимы, но атаку реализовать сложнее.
а можно немного подробнее? насколько сложнее? какие векторы атаки возможны?
Из этой картинки следует, что проблем у процессоров AMD под windows нет. И под линукс тоже нет, если ты сам ядро не твикал. Это правда так?
Про Spectre — нет.
Вот демонстратор, там в комментариях народ развлекается с самыми разнообразными процессорами, начиная аж с Pentium M, и под разными ОС. В основном интелы, но AMD тоже есть, на них тоже работает.
Кроме того, один из вариантов Spectre AMD официально признаёт как работающий с пометкой «software update to be made available».
Negligible performance impact expected.
В этом вся разница. Ошибки были, есть и будут. Но если они исправляются практически без потери производительности — то это приемлемо. Наверное…
Объём трудозатрат на исправление софта исходя из имеющихся данных трудно оценить даже по порядку (точнее, попробовать можно, но эта оценка вызывает ужас).
Фразу «нам необходимо пропатчить всё существующее ПО в неизвестном количестве мест» тоже можно закончить на «и этого будет достаточно для нейтрализации Spectre».
Для Clang и GCC уже есть патчи которые защищают от SPECTRE
Я не силен в x86 ассемблере (забыл его), но что-то типа
— вычисление условия А, например по слову из памяти или как последнее в цепочке вычислений
— условный переход по условию А, который всегда выполняется в нормальной ситуации
— загрузка слова по регистру, который известен задолго до и который содержит «нехороший» адрес.
В нормальном выполнении загрузка никогда не срабатывает, так как условный переход идет нафиг всегда. При спекулятивном выполнении есть большой соблазн запустить эту загрузку на всякий случай заранее, хотя в момент запуска еще не известно значение условия А. Приплыли.
Но почитав о чем народ талдычит, складывается впечатление, что якобы Интел не делает speculative пока по коду не проползет несколько раз циклом(!) Очень странная мысль, я сидел на одном семинаре где они хвастались, что они просматривают вперед аж на 3 условных перехода длинным pipeline — нахрена тогда им это делать то?
Или это конкретный процессор такой, а народ и не знает?
Это насчет того, сработает нехороший код или нет.
Это насчет того, сработает нехороший код или нет.У меня есть ощущение, что вы за деревьями лес потеряли. Intel действительно применяет массу эвристик, чтобы правильно предсказать ветвление — но нам-то нужно, чтобы произошло строго противоположное: весь профит получается на основании спекулятивного исполнения кода, который исполняться не должен.
Вот вы тут пишете:
При спекулятивном выполнении есть большой соблазн запустить эту загрузку на всякий случай заранее, хотя в момент запуска еще не известно значение условия А. Приплыли.Процессор не исполняет ничего «на всякий случай». Он не пытается «хватать» инструкции «где-то рядом» с потоком исполнения и рандомно их исполнять — это бессмысленно. На некоторых CRAY системах пытались одновременно спекулятивно исполнять команды на обоих ветвях после перехода… идея себя не оправдала. У всех же современных процессоров предсказывается один «магистральный путь движения» программы.
Если загрузка после проверки «спекулятивно сработала» (а потом не понадобилась) — то это значит, что предсказатель переходов сработал неверно. За последние четверть века Intel потратил не один миллиард долларов на то, чтобы снизить вероятность такого события.
А вы предлагаете на это событие, случающееся с ничтожной вероятностью, полагаться. Не надо так.
На CRAY не оправдала, на MIPS например — оправдала. И вы немного не в курсе, почему часто отрабатывают тщательнЕе код, который внутри loop — просто есть такая штука как instruction parsing (особая головная боль для Интела) и branch-table — код внутри короткой петли уже разобран в процессоре на микроинструкции и все возможные операции уже сделаны. Посему можно сделать speculative операцию довольно легко. Но это для low-end процессоров, для high-end надо смотреть в обе стороны условного перехода.
Кстати, далеко вперед обычно не смотрят, просто парсят и запускают операции загрузки из памяти (ну очень уж они долгие, особенно если учесть возможность подкачки TLB из памяти), и (внимание!) — простейшие операции над адресами в случае индексирования и последующей второй загрузки над результирующим адресом. Вот мне кажется, что AMD не делает либо индексирование либо вторую загрузку, которая зависит от первой. Посему они такие гордые сегодня.
> Если загрузка после проверки «спекулятивно сработала» (а потом не понадобилась) — то это значит, что предсказатель переходов сработал неверно.
Это важно только в случае узкого канала в память. Если у вас хороший кэш, то большинство неверных предсказаний окончится в кэше и чуть потратит рессурсы LFU-или-как-его-там, которых все равно делают в расчете на speculative.
> А вы предлагаете на это событие, случающееся с ничтожной вероятностью, полагаться.
Это как в анекдоте — 50-на-50. Маленьких циклов, которые полностью оседают в процессоре — мало, большая часть циклов просто не обнаруживается процессором. Так что с этой точки зрения выгодно отрабатывать чуть-чуть вперед по обе стороны условного перехода.
"… method takes advantage of speculative execution after conditional branch instructions"
Intel рекомендует вставлять LFENCE после условного перехода. Что-то не верится в 1.5%, если после каждого перехода будет LFENCE.
Что касается Branch target injection и предлагаемого патч по имени retpoline для этого в LLVM/gcc, то он убивает execution stack protection — запрет на выполнение кода из стэка. Попросту — открывает новые горизонты для хакеров!
Что касается Branch target injection и предлагаемого патч по имени retpoline для этого в LLVM/gcc, то он убивает execution stack protection — запрет на выполнение кода из стэка.Нет там никакого кода в стеке.
«software replaces indirect near jump and call instructions with a code sequence that includes pushing the target of the branch in question onto the stack and then executing a Return (RET) instruction to jump to that location...»
Может, конечно, интеллы чего-то не понимают в программировании, но рекомендации однозначны, и они потребуют разблокировать этот стэк для выполнения.
jmp Target
на эквивалентную последовательностьpush Target
ret
Код остаётся там, где он находился, т.е. в секции кода выполняемого файла. О выполнении кода из стека речи нет.
Из этой картинки следует, что проблем у процессоров AMD под windows нет. И под линукс тоже нет, если ты сам ядро не твикал. Это правда так?Нет, неправда. Просто для эксплуатации нужны определённые данные в ядре, которые пока неизвестно как занести. То есть кто-нибудь когда-нибудь, скорее всего, придумает как это сделать — но на это может потребоваться и несколько недель (тогда всем будет очень больно) и несколько лет (тогда это будет просто «сказкой на ночь»).
gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6
Да, это все еще опасно, гарантировать сложно. Некоторый код ядра делает именно эти операции (криптографический хэш, например).
Некоторые эксперты считают, что программным образом полностью обезопаситься нельзя и единственный способ решить проблему — сменить процессор на вариант без асбеста заведомо безопасный.
А безопасный — это какой? Я так понял вся линейка от интела болеет этим. Менять вообще всю платформу как-то не хочется. В моём случае получается только патч?
Я не совсем понимаю: уязвимость в CPU фиксится на уровне ОС. Может тогда это все-таки уязвимость в ОС?
На уровне ОС это "починили" следующим образом: они на выходе из сискола сбрасывают ряд кэшей процессора, через которые "утекают" данные, плюс заанмапили полностью kernel address space, а не только защитили от чтения/записи, так что надо теперь восстанавливать/убирать. Процесс этот небыстрый, что ведёт к нескольким дополнительным сотням циклов на каждый сискол. Отсюда просадка производительности на 30% в том же постгресе.
Спасибо за объяснение!
Но если кто-то гоняет PostgreSQL на виртуалках?
https://www.postgresql.org/message-id/20180102222354.qikjmf7dvnjgbkxe@alap3.anarazel.de
ну не 30, а 23, да и то в синтетическом тесте.
Но все равно обидно :(
Это понятно, но значит ли это, что в следующем поколении CPU уязвимость будет устранена и на уровне ОС этот замедляющий код может быть отключен (для соответствующих версий CPU конечно же) ?
Как только приходит подтверждение предсказания, эти выделенные линии мержаться в кеш. Если приходит неподтверждение, линии отбрасываеются, как и изменения в регистрах.
Всего-то ещё 100500 транзисторов на эту логику. Там и без того намешано чёрт знает сколько, так что чуть усложнить работу процессора не страшно.
Если есть доступ к rdtsc, хакер будет просто подгадывать момент, когда rdtsc увеличился, крутить цикл почти до следующего тика, а потом запускать процедуру чтения адреса и смотреть, успел ли счётчик скакнуть, или нет.
Если нет доступа к rdtsc (как в сценарии с web-workers), ничего не меняется. Вспомогательный поток непрерывно делает вычисления и постоянно кладёт результаты в память. Основной поток в интересующий момент просто смотрит, сколько успело навычисляться.
Вообще-то я его и имел в виду. Огрубить rdtsc до 2000 тиков в секунду.
Ну а eBPF — это все-таки просто что-то типа троянского коня в ядре и больше софтверная проблема.
И можно даже из-под Windows накатить обновление — вот пример support.microsoft.com/en-us/help/3064209/june-2015-intel-cpu-microcode-update-for-windows.
Оно вам надо? Тут уж дешевле поставить интерпретатор x86 для x86 и пускать всё в эмуляции под QEMU…
www.vmware.com/us/security/advisories/VMSA-2018-0002.html
Miscrosoft в своем анонсе про Azure пишут, что при обновлении гипервизора, нет необходимости обновлять гостевые ОС:
This Azure infrastructure update addresses the disclosed vulnerability at the hypervisor level and does not require an update to your Windows or Linux VM images. However, as always, you should continue to apply security best practices for your VM images.
azure.microsoft.com/en-us/blog/securing-azure-customers-from-cpu-vulnerability
Возможно и в случаее VMWare тоже можно будет обойтись обновлением гипервизора, но достоверной информации пока нет :(
Отличные новости, ничего не скажешь. 10 лет Карл, 10 лет дырка была. И не в софте, а в железе!
Поправка небольшая — 20 лет.
www.securitylab.ru/news/355981.php
Может, смотря что делает система. Насколько я понимаю, любая обработка кода может провести эту атаку. Допустим есть эксплоит выполнения кода в ОС на уровне сетевого стека. Написать PoC после этого не проблема, запускаем атаку и параллельно дергаем SSH — SSH подгружает файлы и они проходят через память. Память мы уже выискиваем данные.
Я пример привожу конечно.
сменить процессор на заведомо безопасный
И в этом проце через пару лет найдут еще одну уязвимость из-за которой надо сменить проц, вот прям сейчас, бегом, покупай, вон тот, новый, а то продажи пк комплектующих падают, заодно и мать купи, вот.
Со стороны выглядит как новая модель по стимулированию продаж.
Интересно, как долго уже всякие NSA, ФСБ и прочие негодяи пользуются этими эксплоитами…
How deep the rabbit hole goes?
JavaScript does not provide access to the rdtscp instruction, and Chrome intentionally degrades the accuracy of its high-resolution timer to dissuade timing attacks using performance.now()[1]. However, the Web Workers feature of HTML5 makes it simple to create a separate thread that repeatedly decrements a value in a shared memory location [18, 32]. This approach yielded a high-resolution timer that provided sufficient resolution.
Кажется, отключение WebWorkers должно предотвратить/усложнить использование атаки через браузер.
и единственный способ решить проблему — сменить процессор на вариант заведомо безопасный.С пока еще не скомпрометированной закладкой :)
Ну и отлично! Нахрен общество!!!
и единственный способ решить проблему — сменить процессор на вариант заведомо безопасный.
а еще лучше — сделать свой процессор, о котором никто не будет знать, версию 0.1 можно сделать на лампах :)
Данная новость теперь будет спекулироваться нашим государством как перевод всех гос. учреждений на процы «свои».
Почитал чуть-чуть статью (pdf).
Очередной прикол с асинхроным исполнением. Надо бы в таких случаях применять какие то алгоритмы чтобы формально доказывать корректность работы.
Вообще опасная фича что сначала загружается в регистр запрещенный участок памяти а потом уже идет проверка на то были ли на это разрешения. Похоже дело было так: реализация доступа к страницам памяти была еще с рождения х86, а потом поверх решили добавить out-of-order инструкции новым слоем, и вышло такое комбо.
Надо бы в таких случаях применять какие то алгоритмы чтобы формально доказывать корректность работы.Математически всё корректно, проблема с физикой. Если бы в системе не было таймера, утечки бы не было. Это примерно как недавняя «уязвимость» функции memcmp(user_input, secret_key, key_size), которая сравнивает user_input и secret_key побайтно. Замеряя время выполнения, можно узнать, на каком байте находится расхождение, и брутфосить только этот байт.
То бишь, на языке математики требования к таймингам тоже можно выразить и проверить корректность соответствующих высказываний.Это значит — сразу зарезать кучу оптимизаций. Если есть возможность для некоторых данных выполнить операцию быстрее, этой возможностью категорически нельзя пользоваться, ведь это раскроет данные перед атакой по таймеру.
А если ускорение получается автоматически (как при делении на некоторых делителях), нужно добавлять искуственные задержки, сводя всё к худшему случаю. Определённо, не то, что мы хотим от процессора.
Сейчас, в зависимости от секретного байта, подчитывается какая-то кеш-линия. Если кеш-линию инвалидировать, то изменение состояния кеша при выполнении mispredicted branch — это тоже утечка информации. Просто информации утекает меньше и нужно больше раундов атаки.
Полноценное (на мой взгляд) решение я выразил здесь.
Зная адрес в памяти
array1
, я делаю чтение array1[x]
так, что array1+x
является адресом в недоступной области (в данном баге не проверяется мой доступ к этой области). Обозначим секретное значение k=array1[x]
Затем я читаю
array2[k*256]
(ко всему array2 у меня полный доступ, тут никаких ошибок не предвидится) и, в зависимости от k, это чтение загружает в кеш кусок array2 и выбивает из кеша одну из линий. Если затем эту линию инвалидировать, это несильно помешает, я всё равно замечу, какая из линий инвалидирована.Сама прочитанная линия array2 мне не нужна, я и так знаю данные array2. Важно лишь, какая линия выбита (а для этого я могу весь кеш забить каким-нибудь array3 и проверять, что вылетело).
Атака усложняется, но остаётся возможной.
В чём выгода перед патчем ОС тогда?
В Windows свой PID просто лежит в PEB, доступном из юзермода.
.text:180001250 ; DWORD __stdcall GetCurrentProcessId()
.text:180001250 public GetCurrentProcessId
.text:180001250 GetCurrentProcessId proc near
.text:180001250 mov rax, gs:30h
.text:180001259 mov eax, [rax+40h]
.text:18000125C retn
.text:18000125C GetCurrentProcessId endp
Кстати, в старых FreeBSD вызов getpid() кэшировался на уровне libc; fork() просто снимал флаг «а мы знаем свой pid». vDSO тут даже не обязательно.
Микрокодом это сделать наверное нельзя.
Но если сделать нативно — всего лишь 1-2 новых 512-битных регистра (а такого размера регистров и так уже 32: zmm0-zmm31), которые при коммите изменений запишутся в кеш, а не в регистровый файл (как бы это в современных процессорах не было одной и той же структурой, т.к. конструкции типа
add eax,[ebp+8]
работают, как и add eax,ebx
)Дальше случается гонка между MMU и конвейером, и судя по всему, в Интелах побеждает конвейер, а в АМД — MMU. Но ни там, ни там конвейер не ждёт результата из MMU.
Поэтому конвейер обязан ждать MMU.
Если говорить про Meltdown, там вообще нужный адрес может уже в TLB быть, MMU остаётся только проверить наличие привилегий.
Вообще опасная фича что сначала загружается в регистр запрещенный участок памяти а потом уже идет проверка на то были ли на это разрешенияПрямого доступа в запрещённый участок всё равно нет. После отрицательного ответа на проверку доступа загруженные данные откатываются обратно.
А вот сторонние эффекты, как то загруженная в кеш линия, зависящая от прочитанного байта (для того там и хитрая конструкция
y = array2[array1[x] * 256]
), остаются. И, хотя напрямую нельзя узнать, какие адреса сейчас сидят в кеше, это можно сделать, замеряя время доступа к разным адресам.Если запретить физическое чтение данных, к которым нет доступа, много теряем в производительности — убираем параллельную загрузку и проверку доступа, придётся делать всё строго последовательно и про выполнение процессором одновременно N инструкций на одном ядре придётся забыть.
Если мы про Meltdown, то у AMD немного другая внутренняя логика, в результате которой у атакующего не остаётся достаточного временного окна для собственно атаки.
Это логика, над которой раньше никто явно особо не задумывался, поэтому что у Intel сделано так, а у AMD иначе — обусловлено какими-то иными причинами, возможно, настроением разработчика процессора тем утром, когда он сел этот блок рисовать. У ARM вон вообще часть ядер Meltdown подвержена, а часть — нет.
Spectre, как я понял, на AMD процессорах лечится программно практически без потери производительности.
Пруфов пока никто не видел, и из оригинальной работы по Spectre никак не следует, что мы их увидим.
Точнее, даже так: да, возможно, он лечится программно и без потерь. В каждом конкретном уязвимом месте каждой используемой на компьютере программы. Теперь умножьте количество таких мест на количество существующих в мире программ.
www.youtube.com/watch?v=6bCdFmehMSY
Патч сводится к нескольким строчкам. Главный вопрос, что будет с производительностью на реальных системах. Пока на десктопе мне тяжело сказать как она изменилась.
Думаю, что его эксплуатация начнется с какого-то webasembly и максимум, что будет подпадать под атаку на широкую аудиторию — это пользовательские данные из браузера.
Но в моем понимании для эксплуатации нужно исполнить код на целевой системе. То есть, если у вас сейчас система в актуальном состоянии, и исполнение кода на VPS в контролируете, то нужна еще одна 0day уязвимость позволяющая запустить эксплойт. Это без того, что еще нужно знать, что искать, или дампить память целиком и потом разбираться в ней.
Поставьте какую-нибудь IDS, ну или, как минимум, fail2ban закрутите до упора.
A c VPS, я не думаю, что вы сможете сделать больше, чем накатить обновление ядра. Нужно новости почитать, но вроде как spectre пока свободно эксплуатируем.
на 486 или более старше
Ну зачем вы так сразу людей пугаете, можно же Pentium MMX поставить.
на 486 или более старше
Pentium MMX и более старше. Pentium Pro и Pentium II уже уязвимы.
Также есть старые (вроде как до 2013 г) Atom'ы, которые тож не имеют этих всяких конвейеров.
Пришло твое время!
Судя по тестам, патчи сильно повлияют на производительность существующих систем. Тесты показывают падение на 10-30% в некоторых задачах.
Это ж отличная новость для всех поставщиков оборудования и особенно производителей процессоров!
Производительности моего уже десятилетнего Core2Quad мне пока на всё хватает, даже прошлогодние игры упираются лишь в видеокарту. А прилетит патчик, комп начнёт наконец-то тормозить, и побегу я и миллионы таких как я в магазин за новым 6-8-ядерным процессором, который потянет за собой апгрейд всего остального компа. А уж как энтерпрайз обрадуется новые компы и сервера покупать!
Это ж отличная новость для всех поставщиков оборудования и особенно производителей процессоров!В чем она отличная?
Я думал о покупке ноутбука. Нормальной рабочей станции с расчетом года на три, на уровне EliteBook, ZBook, Precision. Но вот теперь у меня возникает вопрос, покупать ли сейчас ноутбук за 2к, если через год выйдет версия с процессором, который будет на 10-30% мощнее без учета естественного прогресса технологии. И думается мне, что не я один такой. А на AMD выбор не такой большой и выигрыш в производительности тоже не будет значительным.
И вот если этот вопрос будут задавать достаточное кол-во людей, то продажи могут просесть очень сильно.
PS только что накатил новое ядро. Визуально стал несколько медленнее, тестов почти не делал, но в одном проседание на 30%, в остальных все как-было.
А я и куча других людей не собирались покупать, так как нас устраивала имеющаяся производительность. После патча она просядет на 30%, что подстегнёт апгрейды. Даже с учётом штрафа в 30% новые кофе-лэйки намного быстрее старых коре2квадов, хотя бы из-за роста тактовой частоты в полтора раза, не говоря уж о двух дополнительных ядрах, гипертрединге и всех тех новых фич, которые Интел успел сделать за десять лет.
После патча она просядет на 30%, что подстегнёт апгрейды.
Не факт, я уже написал, что у меня она просела только в одном тесте. Если у вас есть какой-то нормальный тест для linux на производительность, я готов его прогнать, чтобы проверить.
В любом случае пару недель нужно подождать. Но сомневаюсь, что ситуация сильно исправится и, скорее всего, нужно будет собирать что-то mini-itx.
www.techdirt.com/articles/20150812/11395231925/lenovo-busted-stealthily-installing-crapware-via-bios-fresh-windows-installs.shtml
Производительности моего уже десятилетнего Core2Quad мне пока на всё хватает, даже прошлогодние игры упираются лишь в видеокарту.
Очень странно, потому что я своими глазами наблюдал обратное при переходе с Xeon E5xxx (по характеристикам идентичен топовому C2Q) на i7-6700. Допустим, Mafia III на старом процессоре не «тормозила» (визуальные подвисания) только на минимальных настройках графики, а с новым процессоров никаких проблем я не увидел даже на средних. Учитывая, что видеокарта осталась прежней, напрашивается вывод, что процессор реально был узким местом.
Частота, вроде бы, не должна настолько заметно влиять (1066 -> 2133)
Наверное выбор сделаю в сторону производительности на одной машине, где мне не страшно что данные стырят. Как отрубить теперь последствия этого патча? Флаг в реестре не подскажите?
Кстати, вдобавок к обновлениям операционных систем выпущен свежий микрокод для процессоров:
New upstream microcodes to partially address CVE-2017-5715
+ Updated Microcodes:
sig 0x000306c3, pf_mask 0x32, 2017-11-20, rev 0x0023, size 23552
sig 0x000306d4, pf_mask 0xc0, 2017-11-17, rev 0x0028, size 18432
sig 0x000306f2, pf_mask 0x6f, 2017-11-17, rev 0x003b, size 33792
sig 0x00040651, pf_mask 0x72, 2017-11-20, rev 0x0021, size 22528
sig 0x000406e3, pf_mask 0xc0, 2017-11-16, rev 0x00c2, size 99328
sig 0x000406f1, pf_mask 0xef, 2017-11-18, rev 0xb000025, size 27648
sig 0x00050654, pf_mask 0xb7, 2017-11-21, rev 0x200003a, size 27648
sig 0x000506c9, pf_mask 0x03, 2017-11-22, rev 0x002e, size 16384
sig 0x000806e9, pf_mask 0xc0, 2017-12-03, rev 0x007c, size 98304
sig 0x000906e9, pf_mask 0x2a, 2017-12-03, rev 0x007c, size 98304
Простым юзверям на это всё равно побоку. У них 3 биткоин майнера в аппдате, 2 маил ру сервиса которые «неизвестно откуда взялись/всегда там были», 20 тулбаров в браузерах, подменёные ярлыки на рабочем столе, зато «красивые часики». Таким юзверям по барабану на эту уязвимость потому что раз в пол года они перестанавливают шиндовс xp и даже не краснеют.
Другие «супер продвинутые» юзвери никогда не сидят под админом, запускают программы только в песочници из под виртуалки. Такие обычно не могут даже распаковать игрушку не говоря уже о запуске потому что вообще у них «белый список»… Таким данная уязвимость не страшна потому что они поддерживают состояние бекапов по 3 раза в день.
Почему я не слова ни сказал о защите личной информации например «пороль от сбербанка»? Потому что всё что хранится в принципе не на вашем компе — не ваша личная собственность. Если захотят спиздить ваши фотки с облака — спиздят. Не через процессор так через терморектальный_криптоанализ всё равно найдут способ… Двух факторная аутификация для того и создавалась чтобы даже скомпрометированная машина не могла ничего получить. Но о безопасности самой машины всё равно не имеет смысла говорить пока процессы в принципе не будут разделены. Какой смысл говорить о безопасности браузера если он хранит свои данные в той же папке в которой и зловред? (я про appdata). И доступ туда имеет вообще любая программа.
На самом деле никто никогда и не был по настоящему защищён.
Вот а что я неправильно сказал? Ни одного комментария — только тихие минусы… Между прочим тысячи юзеров скачивают и запускают неизвестные фаилы и Bad Rabbit тому пример. Вот что делает новость про него на хабре? о чём она говорит?
САМА ОС создана для того чтобы любые программы получали как можно больше прав в системе. И это пропагандируется вместо изоляции и эмуляции. И вы думаете что защищены? рано или поздно появляется приложение которое «ну вот очень нужно мне прямо сейчас» и оно не распространяется как простой портабельный екзешник с библиотеками, нет — оно распространяется как установочный файл. А значит будет требовать админ права. И без этого работать не будет. Тот же УАК в винде: «ой программа делает что-то системное но я не скажу что это и куда она лезет, более того если не разрешите я её просто кильну её на месте» и вот как быть простым юзерам? Где пользователям винды найти аналог fakeroot для windows? (я бы пересел на линукс если бы там был аналог программы sound lock из коробки и без настройки, серьёзно меня держит только эта хрень… блин я даже на тостере создал тему чтобы выяснить куда мне двигаться чтобы самому написать такое приложение. А ещё отсутствие нормальных аудио плееров, но в целом есть более менее терпимые плееры просто немного коробит от них ))
А что делают программы которые не требуют админ прав? они всё равно пишут в общие папки. У них по умолчанию достаточно прав чтобы перелопатить все фаилы пользователя. Есть ли оболочка под винду или линукс чтобы в ней по умолчанию предлагался бы запуск от фиктивного пользователя? есть ли система чтобы эти самые фиктивные пользователи были бы ещё и различными для различных программ? Я не спорю что может быть инструменты то и есть, но вот чтобы это было ЗАЛОЖЕНО в систему изначально — нет. Более того большинство даже коммерческих таких инструментов имеют серьёзнейшие проблемы.
И получается что не имея защищённости изначально мы впариваем снижающий производительность патч лишь для того чтобы получить иллюзию безопасности. Кому это надо? Разве что интелу чтобы хоть как-то снизить уровень покупок инженерных процессоров случайно забытых в китае, а то уж больно жирно получается для юзеров играть в современные игрушечки заплатив меньше 10 долларов…
Вы минусаторы! Если хоть у одного из вас есть действительно защищённая ОС то пожалуйста распишите рецепт счастья для простых смертных. Или хотябы просто аргументируйте. Может вам не понравилось что я не написал своё отношение к самой «уязвимости» — ну так конечно же плохо иметь в процессоре какой-то набор инструкции который бы выдавал бы какие нибудь неположенные данные. Я с этим согласен. Но прямо сейчас это не самая большая «дыра» в системе… И если есть возможность «залатать» дыру средствами ОС — значит что это и не «дыра» процессора в принципе. вот что я считаю.
Ужас и кошмар — то, что прямо в данный момент хабр может читать ваши пароли посредством javascript.
Эта уязвимость коснется абсолютно всех, да в разной степени, да кого-то напрямую, кого-то косвенно, но коснется.
Почему все говорят о "падении производительности"? Производительность не падает — увеличивается загрузка процессора натвыполнение "лишних" операций и падает КПД! И за все это заплатим мы с вами счетами за электроэнергию и укороченным временем работы ноутбуков от батарей!
Инструкции выполняются? Скорость выполнения инструкций падает? Со стороны процессора он работает точно так же — просто ПО которое на нем выполняется начинает передавать ему больше инструкций.
Говорить "снижение производительности" неверно потому, что низкая производительность ассоциируется с низким потреблением энергии. В данном же случае происходит не только замедление выполнения пользовательского кода, но и увеличение потребления энергии.
ОС выполняет меньше сисколлов в секунду (т.к. больше времени тратит на каждый при том же hardware).
низкая производительность ассоциируется с низким потреблением энергииo_O
www.catalog.update.microsoft.com/Search.aspx?q=KB4056898 Windows 8.1
www.catalog.update.microsoft.com/Search.aspx?q=KB4056897 Windows 7
Касательно 7ки. Если прочесть о чем оно, то не особо похоже под нашу проблему. Но кто знает, что там под капотом
Кстати обновления от MS до сих пор еще не видны через обычный механизм обновления. По крайней мере в Win 7 и 8.1, в десятке — не знаю. Но вот WSUS выкачал первую партию (security only update) 4-го числа и вторую (кумулятивные) — 5-го. Может решили корпоративных клиентов обновить побыстрее, а с обычными подождать до вторника патчей.
На мой взгляд для обычной рабочей станции уязвимость не столь страшна, что бы прямо впадать в панику. Да, несомненно уязвимость очень серьёзная. Но для её успешной эксплуатации всё же надо еще немалую работу проделать. Так что пара-тройка дней просрочки с установкой патча не так страшно думаю. Вот для облачных систем очень опасно, это да.
Вот в каком месте у Google чесалось, чтобы опять вывалить всё раньше сроков?
PS: В SCCM всё приехало 4-го. Установку на сервера (Hyper-V и RDSH) аппрувнул руками. Остальные — не горит. Понятно, что длинные «каникулы» это специфика РФ (может и не только наша, конечно), но наверное, можно было и не выкатывать подробности явно раньше обещанных сроков?
Одно ясно, что об уязвимости было известно уже несколько месяцев (вроде с июня как минимум). И подготовка к внедрению патчей (и соответственно к разглашению) велась долго и планомерно. У кого-то нервы сдали на завершающем этапе наверно. Ну или еще какие-то причины были, оставим их деликатно за кадром.
Любопытный факт: как я понял для установки патчей на Windows, в случае если установлен какой-либо антивирус, нужно что бы этот антивирус в начале проапдейтился до совместимого и выставил флаг в реестре. Т.е. производители антивирусов тоже были заранее уведомлены и готовились. Хотя патч к Kaspersky Endpoint Security вышел только 4-го числа. Не похоже как-то на «подготовились заранее». В общем не знаю.
У кого-то нервы сдали на завершающем этапе наверно. Ну или еще какие-то причины были, оставим их деликатно за кадром.Да нет, всё просто: чем ближе «к часу Х», тем больше людей задействовано. Вендоры, крупные ISP, etc.
Так что обычно нужно быть готовым к тому, что за 5-7 дней до официального срока «оно» случится. Так почти со всеми уязвимостями было…
aws.amazon.com/solutions/case-studies/coinbase
docs.gdax.com
Colocation. GDAX primary data sources and servers run in the Amazon US East N. Virginia data center. To minimize latency for API access, we recommend making requests from servers located near the AWS us-east-1 data center.
бинткойнЕщё одна новая монета?
$ sysbench --test=cpu --num-threads=16 --cpu-max-prime=50000 run
sysbench 0.4.12: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 16
Doing CPU performance benchmark
Threads started!
Done.
Maximum prime number checked in CPU test: 50000
Test execution summary:
total time: 25.7222s
total number of events: 10000
total time taken by event execution: 411.0601
per-request statistics:
min: 8.71ms
avg: 41.11ms
max: 117.67ms
approx. 95 percentile: 61.87ms
Threads fairness:
events (avg/stddev): 625.0000/4.76
execution time (avg/stddev): 25.6913/0.01
$ sysbench --test=cpu --num-threads=16 --cpu-max-prime=50000 run
sysbench 0.4.12: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 16
Doing CPU performance benchmark
Threads started!
Done.
Maximum prime number checked in CPU test: 50000
Test execution summary:
total time: 31.8731s
total number of events: 10000
total time taken by event execution: 509.4104
per-request statistics:
min: 9.10ms
avg: 50.94ms
max: 132.46ms
approx. 95 percentile: 68.48ms
Threads fairness:
events (avg/stddev): 625.0000/4.05
execution time (avg/stddev): 31.8382/0.02
Замедление на четверть. Спасибо, Интел!
До патча
General statistics:
total time: 10.0001s
total number of events: 54619
После патча
General statistics:
total time: 10.0003s
total number of events: 32527
Но визуально пока в пределах нормы.
;o)
Кста, разговоры о патчах ОСей,
а патчей браузеров не достаточно?
В исходниках firefox'a смотреть? Или JS отдельная библиотека?
Наше дело выяснить насколько этот парень не знает, что ему на самом деле нужно и добиться, чтобы до него это дошло.
Чтобы он понял, что только мы можем ему это дать.
gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6
Амазон, накатка патчей, просадка производительсти на 25 процентов оО
Закупка нового железа и стоек, кто в плюсе? Сколько надо тому же амазону железа чтобы выровнять эту просадку?
Да там такие цифры с нулями будут, что некоторые типы процессоров мы еще год можем не увидеть на наших рынках.
И просадка на 25% для амазона через чур пессимистична. На реальных задачах в объемах ДЦ у aws будет меньше. Но для некоторых проектов, конечно, может сыграть эффект бутылочного горлышка.
Так и не понял, касается ли эта проблема только Intel или Intel и AMD? Будут ли выпущены патчи для смартфонов/планшетов и произойдет ли падение производительности у них? В случае, если архитектура процессора не x86 / x86-64?
В линуксе отключить можно ключом nopti при загрузке.
reg add «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management» /v FeatureSettingsOverride /t REG_DWORD /d 3 /f
reg add «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management» /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
Get-SpeculationControlSettings вроде показывает что отключилось, тесты показывают возвращение производительности, правда разница в тестах на уровне погрешности ~1.5% туда сюда и до патча и после и после отключения в пропатченной винде.
Уязвимости Spectre подвержены процессоры Intel, AMD (только при включенном eBPF в ядре) и ARM64 (Cortex-R7/R8, Cortex-A8/A9/A15/A17/A57/A72/A73/A75).
Исправление проблемы Meltdown для ядра Linux выпущено в виде набора патчей KPTI. Исправление уязвимости Spectre в общем виде пока не выработано, частично предложено обновление микрокода и усиление безопасности отдельных приложений. Обновление для блокирования Meltdown уже выпущено для RHEL, CentOS и Fedora.
www.opennet.ru/opennews/art.shtml?num=47856
AMD (только при включенном eBPF в ядре)
И при выключенном тоже.
eBPF — просто удобный способ демонстрации дырки, не более.
за исключением Intel Itanium
Отличный повод воскресить платформу под флагом безопасности. Судя по новостям сейчас только у SPARC похоже нет этих дыр (или я не нашел упоминаний о них).
Вот что-то есть.
Там нет вызова ядра, так что этим кодом проверить работоспособность патча скорее всего не получится.
Паника среди пользователей — последнее, что им всем нужно.
Если у вас счётная задача (а большинство игрушек, скажем, сюда попадает), то замедление и под микроскопом не разглядеть.
А если у вас там много-много IPC — то вполне можно и двукратное замедление получить…
Мне ещё в советские времена дед говорил, что спекуляция — это плохо.
Кстати, мне в декабре и на смартфон, и на SMART TV самсунговские прилетели апдейты во второй половине декабря. Причем для ТВ предыдущий апдейт на их сайте был аж от 2015-го года. Совпадение?.. :)
Так что не расстраивайтесь.
twitter.com/rootkovska/status/948997805158338560
Если это еще работает (все-таки 7 лет прошло), то весь облачный сервис накрылся медным тазом, сбацать дырокол для тех процессоров — нефиг делать. Ох, заставят всех обновить процессоры, заставят.
Какие мощности нужны что бы распарсить миллионы дампов и вытянуть хоть что либо полезное кроме паролей от вк и одноглазников.Ровно такие, какие есть. Hint: для автоматического анализа дамп не нужно никуда отсылать, можно его с тем же успехом «исследовать на месте». Даже не снимая его до конца. Какой процент компьютеров сейчас постоянно подключён к сети?
В контексте типичных домашних компьютеров эта атака попросту не имеет ни малейшего смысла.
CPU сдаст вас с потрохами: самая серьезная дыра в безопасности за всю историю наблюдений?