Владислав Кабак | Omegicus CIO

NebKa

ЛЕТНИЕ УКРАШЕНИЯ ДЛЯ НОГ СВОИМИ РУКАМИ

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



читать далее »

Тканый коврик из лоскутков своими руками

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



читать далее »

ВИНОГРАД ИЗ БУМАГИ. КВИЛЛИНГ

   



читать далее »

Оригинальная люстра из веревки. Мастер-класс

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



читать далее »

Простая выкройка тельняшки



читать далее »

КРУЖЕВНЫЕ КОРОНЫ

    Источник: http://barrellab.ru



читать далее »

Упаковка подарка мужчине

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



читать далее »

Животные

У рыбы сарган зеленые кости.


читать далее »

Мой совет:

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


читать далее »

Наука

Самые большие гайки весят 4,74 т каждая, имеют внешний диаметр 132 см и 63,5-сантиметровую резьбу.


читать далее »

Браслет из кожи своими руками. Мастер-класс.

Вот такой красивый браслетик из кусочков кожи можно сделать своими руками. Что нам понадобится: Кусочки кожи (можно разных цветов, получится яркий); ножницы; кнопки; Кусочек картона (для создания шаблона); Вырезаем из картона вот такой шаблон: Прислоняем к кусочкам кожи, обводим и вырезаем: Теперь соединяем



читать далее »

Анекдот

- Замуж еще не вышла?- Да какое, замуж! Университет надо закончить. Карьеру хочу сделать. Впереди целый мир непознанных возможностей!- Не зовут?- Не зовут.


читать далее »

Шьем косынку на резинке

Автор:  Irina Vadimovna Уважаемые мастерицы, стало уже доброй традицией ежегодно публиковать подобный МК. И даже в этом году я уже не первая! Но всё же разрешите предложить вашему вниманию МК по пошиву детской косынки на резинке. Нам понадобится: -



читать далее »

Мой совет:

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


читать далее »

СТИЛЬНО И ПРОСТО. СУМКА С ВЫКРОЙКОЙ.

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.  



читать далее »

Джутовая филигрань. Шкатулка ДОМИК. Мастер-класс от Виолетты Бурба

Итак, приступим к изготовлению домика. Для работы нам понадобится:1. Джутовый шнур.2. Лист в клеточку для эскиза, файл.3. Клей "Титан", "Драгон" или любой прозрачный клей из "этой серии". С помощью горячего пистолета, можно собирать каркас.4. Спица,



читать далее »

Анекдот

Состоялся первый международный съезд лохов. Лохи приехали со всего мира, а съезд отменили.


читать далее »

20 фактов о пищеварении

1. Ваш пищеварительный тракт представляет собой 9-метровую трубу, которая начинается во рту и заканчивается анальным отверстием.2. В тонкой кишке столько складок, вплоть до самых микроскопических, что общая площадь её поверхности составляет 250 квадратных метров. Этого


читать далее »

Мой совет:

Кафельная плитка импортного производства дороже отечественной, но при ее укладке не придется выравнивать края плиток, чтобы они легли близко одна к другой.


читать далее »

Плетеный браслет из вощенного шнура, бусин и цепочек. Мастер-класс

 



читать далее »

Совет:

Каждый день делайте что-то хорошее для других.


читать далее »

Анекдот

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


читать далее »

Оригинальные и интересные идеи для кухни

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



читать далее »

Анекдот

Собирая чайные листья на плантации Липтона, индус Мохаммед даже не подозревает, что он это делает бережно и с любовью.


читать далее »

Анекдот

- Морковка или жизнь! - кричал заяц, угрожая Снеговику феном.


читать далее »

Анекдот

Windows - винчестеру: - Ты слишком много знал…


читать далее »

Большая подборка нежных веночков. Идеи

   



читать далее »

История

Испанская инквизиция преследовала многие группы населения, но более других катаров, марранов и морисков. Катары это последователи альбигойской ереси, марраны - крещеные евреи, а мориски - крещеные мусульмане.


читать далее »

Цветы ОРХИДЕИ из цветной бумаги. Шаблоны и фото мастер-класс

По материалам сайта liagriffith.com/diy-metallic-paper-dendrobium-orchids



читать далее »

Панно

Автор: Владлена Предлагаю сделать панно. Объёмное, живописное и "вкусное". Данный мастер-класс посвящаю весне. Ведь - практически все её любят, правда? Итак, нам потребуется холст, нужная рама, стекло к ней, краски, любая самозатвердевающая глина, стеки и... хорошее знание, либо


читать далее »

МK "Космея" из фоамиарта(Фоамиран) от мастеров компании Avelly.



читать далее »

Формат исполняемых файлов PortableExecutables (PE)

Формат исполняемых файлов PortableExecutables (PE). ФОРМАТ ИСПОЛНЯЕМЫХ ФАЙЛОВ PortableExecutables (PE) ФОРМАТ ИСПОЛНЯЕМЫХ ФАЙЛОВ PortableExecutables (PE) (даже не руководство системного программиста) by Hard Wisdom [27-Dec-1997y]-[v1.0.0] - Первоначально написанный файл [30-Oct-1998y]-[v1.1.0] - Внесены накопленные изменения,


читать далее »

Как сделать кольцо из застежки-молнии

Если у вас есть старая застежка-молния и вы не знаете что с ней сделать, то сделайте себе кольцо. Быстро, легко, оригинально! У нас уже была публикация про уникальные украшения, созданные Kate Cusack. Они уникальны, необычны и неповторимы.



читать далее »

Анекдот

Наш ответ на извечный шекспировский вопрос "Быть или не быть?": "Эх, твою мать, была - не была!"


читать далее »

Худеем с Джиллиан Майклс. Домашний скраб из кофе

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



читать далее »

Шьем войлочные тапочки. Очень легкий способ!

 



читать далее »

Любимя кошечка и токсоплазмоз

Пришло время усыпить любимую кошечку свекрови? В голове невестки: "Как это, зачем усыпить? Потому что я беременна, а беременным нельзя контактировать с кошками, потому что - токсоплазмоз не дремлет! И мне наплевать, что свекровь против, ведь


читать далее »

Вязаное белое пальто

 



читать далее »

Цветок из тесьмы своими руками

Мастер-класс Влады Звягиной. Сделать такой цветок из тесьмы своими руками совершенно не сложно! В этом фото мастер-классе я покажу, как сделать простой цветок из тесьмы вьюн. Фото 1. Материалы и инструменты, которые нам понадобятся для работы. Фото 2. Для одного небольшого цветка мне понадобился примерно



читать далее »

50 интересных фактов о Стране восходящего солнца

Япония – уникальная страна. Технологии здесь удачно смешиваются с древними традициями и обычаями, а местные жители уважают туристов, которые могут сказать на их языке хотя бы две фразы. Кроме того здесь самый низкий процент изнасилований



читать далее »

Браслет из молнии в стиле "Стимпанк"

Автор МК: Надежда Белоконь Эксклюзивный букет      Берём молнию - 100 см. Разделяем её на 2 половинки. Оставляем только металлические зубцы, отрезаем лишнее и опаливаем по всей длине отрезанный край зажигалкой. Дальше берём 2 части молнии, сворачиваем их примерно пополам



читать далее »

Идеи для дачи и сада - 2

                         



читать далее »

Анекдот

Умер Гуливер… и лилипуты тихо сказали "Ебааать копааать…"


читать далее »

Солнечный водонагреватель

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



читать далее »

Мангалы и барбекю для дачи своими руками

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



читать далее »

Переделка мужского пиджака в стильный женский жилет

Как Вам такой жилет?:) Не пора ли позаимствовать у мужа, отца, брата или друга пиджак, который давно им не носится и переделать его для себя в стильный жилет?:) Давайте изучим мастер-класс:   Итак, прежде всего нам нужен



читать далее »

4 МАСТЕР КЛАССА ЮБОЧЕК ДЛЯ ПРИНЦЕСС

  Шьем вот такую красивую юбочку из фатина. Пошита юбка для девочки с объемом талии 55 см, объемом бедер 62 см, длиной изделия 20 см. Для этого Вам необходимо:- 1 метр фатина при ширине 1,5 метра для верхней



читать далее »

Клеевые прокладки для шитья

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



читать далее »

СЕРЬГИ «ВЕНЕЦИЯ» ИЗ БИСЕРА



читать далее »

Мастер-класс МК "Тычинки своими руками" (автор anansy)

+ добавления от Кляксы и Ryzhii_Angel! Для создания некоторых цветов хочется иметь тычинки, но это проблема. Например у нас в магазинах их нет...Заказывать в инет-магазине конечно можно, но если тебе там ничего больше не надо, кроме тычинок, получается немного



читать далее »

Анекдот

Амереканец достаёт последнююбутылку с водкой и говоритрусскому:- will you?- я те блять вылью!


читать далее »

MSR-регистры на службе хакера

Автор: (c)Крис Касперски ака мыщъх Популярные дебагеры (Soft-Ice, Syser, Olly) используют базовые отладочные возможности, появившиеся еще в 80386 и совершенно игнорируют тот факт, что процессоры изрядно подросли и обросли целым комплексом отладочных механизмов термоядерного типа, реализованных в виде нестандартных расширений, управляемых


читать далее »

Драпировка чашек лифа

http://www.season.ru/tech/handmade/drapirovki/svob...irovki/drapirovka_chashek.htmlЧто нужно решить до того, как начать драпировку? Основный вопрос - будут чашки вшиваться в корсет или нет, как на зелёном платье Angelina Jolie. Если корсета не будет, то нужно сшить чашки, задрапировать их и пришить



читать далее »

Как сделать авторский блокнот

Самая лучшая память о себе  - это несколько строк хороших слов или необычный дизайнерский подарок. Симбиоз такого поздравления это авторский блокнот - здесь и место для ваших сочинений и предмет для подарка.   И так приступим. Возьмите чистую



читать далее »

Узор ракушки спицами.



читать далее »

Как сделать Пат - смесь для создания тычинок и покраски папье-маше

Автор: Вероника Подгорная ЖЖ автора: nika_po Яндекс объяснил мне что пат - это шахматный термин, а я думала что пат - смесь крахмала, клея ПВА и гуаши. Его используют для изготовления тычинок мастерицы-цветочницы. Если вы вдруг захотите сделать игрушечные



читать далее »

МК цветк из узкой ленты

Ну начнем"с! Решила сделать свой мк, так как с инета меня не удовлетворил. Буду делать цветочек маленький (о том цветке, который побольше я ниже опишу как делала), для этого я взяла узкую ленту 0.5-0.6 (почему-то


читать далее »

Детские часы из ткани и фетра. Мастер-класс

Впечатлило? ОК...ЭМ...потому что они не настоящие. На самом деле, он сделан из войлока и кусочков ткани. Счастье! Радость! Удовольствие! Это тренировочные часы для моей маленькой дошкольницы. И я влюбилась в этот милый маленький проект и я хотела



читать далее »

Природа

Семена красного дерева настолько малы, что 123 000 семян весят всего 1 фунт (453,6 г). То есть одно семя красного дерева весит примерно 0,0036 грамма.


читать далее »

Мой совет:

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


читать далее »

Шьем вешалки и полотенца к Новому году. Отличная идея!

Весьма забавная идея от мастерицы Ulla из Финляндии. Автор предлагает нам сшить полотенца с Новогодними вешалками. Мне нравится, что поделка несет в себе не только праздничный атрибут, но и практическое применение) Полотенца-платьица сказочных эльфов - съемные.



читать далее »

Учёные предсказали столкновение Млечного Пути с будущей галактикой

К такому выводу пришли учёные из Сиднейского университета (University of Sydney), пересчитав данные по гигантскому объекту, приближающемуся к нам.В 2008 году было объявлено, что Облако Смита (Smith’s Cloud), представляющее собой изрядную порцию бедного металлами нейтрального и ионизированного газа (водорода


читать далее »

7 причин не эмигрировать из России

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



читать далее »

Человек

Тонкая кишка человека при жизни имеет длину порядка 2,5 метров. После его смерти, когда мускулатура стенки кишки расслабляется, ее длина достигает 6 метров.


читать далее »
Здесь пока пусто

Unauthorized.

Дефекты проектирования Intel Core 2 Duo - аналитический обзор с точки зрения безопасности

2011.10.08

Автор: (c)Крис Касперски ака мыщъх

Процессоры Intel Core2Duo (и не только они одни!) содержат множество ошибок, приводящих к сбоям программного обеспечения, зависаниям операционной системы и даже к возможности удаленного захвата управления компьютером! Часть ошибок обходится программным путем, часть - обновлением микрокода ЦП или прошивки BIOS, оставшиеся неисправимы вообще и требуют смены процессора. Насколько реальны эти угрозы? Попробуем разобраться!

Введение

Критикуя Windows (и отчасти Linux), за большое количество программных ошибок, мы "по умолчанию" закладываемся на непорочность аппаратного обеспечения, проектировщики которого ничем не отличаются от разработчиков операционных систем. До тех пор, пока процессоры были простыми (относительно операционных систем), выходили редко и тестировались тщательно - ошибки "кремниевых коней" носили единичный характер и учитывались разработчиками компиляторов. Сейчас они представляют разве что познавательный интерес. Легендарный "Hamarsoft's 86BUGS list", насчитывающий свыше сотни ошибок, недокументированных машинных команд и особенностей их поведения, последний раз обновлялся в 1994 году, после чего отправился на свалку истории, захлебнувшись в потоке дефектов, обнаруженных в первых моделях Pentium-процессоров, причем ни один из этих дефектов (за исключением знаменитой ошибки деления, описанной в одноименной врезке), до широкой общественности так и не дошел, ограничившись кругом производителей материнских плат, прошивок BIOS, разработчиков операционных систем/компиляторов и прочей технической элитой.

Возьмем, к примеру, инструкцию битового сканирования BSF dst, src, копирующую в dst индекс первого установленного бита в src. Как вам нравится тот факт, что если src равен нулю, то содержимое dst становится неопределенным, то есть там может оказаться любой мусор, какой только угодно, что серьезно осложняет отладку программ. Допустим, на машине разработчика установлен ЦП, оставляющий dst неизменным и разработчик (или его компилятор) закладываются именно на такое поведение ЦП. А вот у конечного пользователя dst может сбрасываться в нуль, нарушая работоспособность программы и заставляя разработчика теряться в догадках, с какого момента программа пошла вразнос? Обычно в таких случаях все списывается на Windows или "У вас на компьютере вирусы, переустановите операционную систему... Ах, вы уже ее переустановили?! Ну, тогда мы не знаем, разбирайтесь со своей машиной сами".

Кстати, это уже давно не ошибка, а вполне документированная особенность. Intel даже приводит псевдокод команды BSF во втором томе "Instruction Set Reference":

IF SRC = 0
        THEN
                ZF := 1;
                DEST is undefined;
        ELSE
                ZF := 0;
                temp := 0;
        WHILE Bit(SRC, temp) = 0
        DO
                temp := temp + 1;
                DEST := temp;
        OD;
FI;

Листинг 1. Псевдокод команды BSF с "узаконенной" ошибкой.

С такими "особенностями" еще можно смириться, но куда прикажете девать исключения на 486+, эпизодически возникающие при загрузке регистра CR3 (указатель на каталог страниц) в регистр общего назначения? Конечно, непредвиденные исключения можно и подавить, что делает Linux и OpenBSD. Делать-то она это делает, но... местами. А местами не делает. Обращение к регистру CR3 происходит из многих функций ядра, а ядро пишет целая армия разработчиков, часть из которых осведомлена об этом дефекте, а часть даже не подозревает. В результате, мы имеем нестабильно работающую систему.

Windows вообще не пытается сражаться с этим. А зря. Запрещение кэширования на запись в некоторых моделях процессоров разрушает содержимое кэша, откуда процессор продолжат брать ранее скэшированные данные (уже разрушенные) и чтобы программа не "грохнулась", кэш необходимо очистить программным образом, считывая туда незначащие данные вплоть до полного его заполнения. На прикладном уровне такая ситуация, конечно, маловероятна, да и нельзя на прикладном уровне управлять кэшированием, но вот драйвера - совсем другое дело! Если некоторый регион памяти используется для обмена данными с внешним устройством (видеоконтроллером или платой телеметрии), владельцы "неправильных" процессоров окажутся очень "рады" всевозможным артефактам на экране монитора и неверным телеметрическим результатам. Стоит ли удивляться, что x86 не используются в критических инфраструктурах, где работают простые и тщательно протестированные микроконтроллеры?

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

Производители ЦП ведут с дефектами проектирования ожесточенную борьбу, прогоняя каждую команду (а то и комбинации команд) через серию агрессивных тестов, результаты которых так или иначе отражаются в документации или же "specification updates". В частности, последние обновления спецификации на Intel Core 2 Duo в любой момент можно скачать с официального сайта Intel: http://www.intel.com/design/core2duo/documentation.htm#specupdt, раздел errata которого на момент написания этих строк (май 2008) насчитывает 126 ошибок, многие из которых критические и затрагивающие не только ядерный, но и прикладной уровень.

Не многим лучше обстоит ситуация с серверными процессорами: Intel Xeon Quad-Core 5400 и его младший собрат Xeon Dual-Core 5100 насчитывают по 54 официально признанных дефектов каждый. И даже Itanium 9000, рекомендованный фирмой Intel для критических инфраструктур ("massive, mission-critical computing") хранит в своих недрах 85 "жуков", способных обрушить сервер в любой момент. А ведь это одно из самых дорогих и тщательно протестированных произведений Intel, ориентированное на корпоративный сегмент рынка, который ошибок не прощает и на котором помимо Intel имеются и другие игроки, впрочем, сталкивающиеся с теми же самыми проблемами.

Мир несовершенен, никто из нас не без греха. Обновлять микрокод ЦП, прошивку BIOS (а в критических случаях - и сами процессоры!) нужно также регулярно, как накладывать заплатки на операционные системы и прочее программное обеспечение. Ах да, операционные системы... С них-то все и началось!

Intel Core 2 Duo

Рисунок 1. Intel Core 2 Duo со всеми ошибками, которые в нем только есть.

...и грянул гром

Ознакомившись с очередной errata на Core 2 Duo, Theo de Raadt (ведущий разработчик операционной системы OpenBSD, славящейся своей надежностью и защищенностью), пришел в ярость, граничащую с суицидом, и набросился на производителей Core2Duo с обличительным заявлениям в стиле: "как дальше жить и что нам делать?!", тут же подхваченным прессой и ставшей достоянием широкой общественности, постепенно начинающей осознавать, что помощи нет и не будет. Ситуация очень серьезна - достаточно многие ошибки не только приводят к краху системы, но и (теоретически) допускают возможность удаленного захвата управления. Разработчики OpenBSD попытались заткнуть самые крупные дыры, переписав код ядра так, чтобы исключить или хотя бы снизить вероятность событий, ведущих к проявлению ошибок, но вот остальные программистские коллективы, выражаясь образным языком, даже не почесались, и в первую очередь это относится к новомодному Server'у 2008, для которого заплаток нет и не предвидится. Что же тогда говорить о "морально устаревшем", но все еще работающем парке Windows 2000, XP, Server 2003?!

И хотя ни одного работоспособного exploit'а до сих пор никем не было продемонстрировано, это еще ни о чем не говорит и ничего не доказывает. Автор этих строк активно экспериментирует с различными моделями процессоров (при финансовой поддержке крупнейших фирм, специализирующихся на информационной безопасности) и готовит доклад, который при благоприятном стечении обстоятельств будет прочитан на хакерской конференции "Hack In The Box Security", проводимой в Малайзии в октябре 2008 года: http://conference.hackinthebox.org/ (для желающих посетить сие мероприятие напоминаю, что Малайзия очень удобна тем, что не требует визы, достаточно одного паспорта).

Но вернемся к исходному сообщению Theo de Raadt'а, опубликованному в конце июня 2007 года, когда обнаруженных ошибок было вдвое меньше, чем сейчас: http://marc.info/?l=openbsd-misc&m=118296441702631:

List: openbsd-misc
Subject: Intel Core 2
From: Theo de Raadt
Date: 2007-06-27 17:08:16
Message-ID: 200706271708.l5RH8GkK024621 () cvs ! openbsd ! org

Various developers are busy implementing workarounds for serious bugs in Intel's Core 2 cpu. These processors are buggy as hell, and some of these bugs don't just cause development/debugging problems, but will *ASSUREDLY* be exploitable from user-land code. As is typical, BIOS vendors will be very late providing workarounds/fixes for these processors bugs. Some bugs are unfixable and cannot be worked around. Intel only provides detailed fixes to BIOS vendors and large operating system groups. Open Source operating systems are largely left in the cold.

Full (current) errata from Intel: download.intel.com/design/processor/specupdt/31327914.pdf.

  • We bet there are many more errata not yet announced -- every month this file gets larger.

  • Intel understates the impact of these errata very significantly. Almost all operating systems will run into these bugs.

  • Basically the MMU simply does not operate as specified/implemented in previous generations of x86 hardware. It is not just buggy, but Intel has gone further and defined "new ways to handle page tables" (see page 58).

  • Some of these bugs are along the lines of "buffer overflow"; where a write-protect or non-execute bit for a page table entry is ignored. Others are floating point instruction non-coherencies, or memory corruptions -- outside of the range of permitted writing for the process -- running common instruction sequences.

  • All of this is just unbelievable to many of us.

An easier summary document for some people to read:

http://www.geek.com/images/geeknews/2006Jan/core_duo_errata__2006_01_21__full.gif

Note: that some errata like AI65, AI79, AI43, AI39, AI90, AI99 scare the hell out of us. Some of these are things that cannot be fixed in running code, and some are things that every operating system will do until about mid-2008, because that is how the MMU has always been managed on all generations of Intel/AMD/whoever else hardware. Now Intel is telling people to manage the MMU's TLB flushes in a new and different way. Yet even if we do so, some of the errata listed are unaffected by doing so.

As I said before, hiding in this list are 20-30 bugs that cannot be worked around by operating systems, and will be potentially exploitable. I would bet a lot of money that at least 2-3 of them are.

For instance, AI90 is exploitable on some operating systems (but not OpenBSD running default binaries).

At this time, I cannot recommend purchase of any machines based on the Intel Core 2 until these issues are dealt with (which I suspect will take more than a year). Intel must be come more transparent.

(While here, I would like to say that AMD is becoming less helpful day by day towards open source operating systems too, perhaps because their serious errata lists are growing rapidly too).

Для не владеющих английским языком ("не владеющих", в смысле - находящихся не в ладах) ниже представлен мой перевод:

В настоящий момент разработчики программного обеспечения и производители железа заняты разработкой "костылей", исправляющих серьезные ошибки в процессорах серии Intel Core 2, содержащих просто адское количество багов, и некоторых из этих багов не просто мелкие дефекты проектирования, а реальные дыры, которые *НЕСОМНЕННО* могут быть использованы для атак с прикладного уровня. Ряд ошибок невозможно ни исправить, ни найти обходное решения для предотвращения их возникновения. Intel ограничивается тем, что предоставляет техническую информацию производителям BIOS'ов и ведущим разработчикам коммерческих операционных систем. Open Source сообщество брошено на произвол судьбы.

Вот полная (текущая) errata: download.intel.com/design/processor/specupdt/31327914.pdf (прим. переводчика: ссылка битая, т.к. номер спецификации постоянно обновляется и последняя версия может быть найдена по базовой ссылке: http://www.intel.com/design/core2duo/ documentation.htm?iid=prod_core2duo+tab_techdocs#specupdt).

  • Мы готовы биться о заклад, что ошибок на самом деле гораздо больше, чем анонсировано - с каждым месяцем errata становиться все больше и больше (так оно и оказалось впоследствии - прим. КК);

  • Intel существенно преуменьшает значимость обнаруженных ошибок - практически все операционные системы вляпаются в эти баги;

  • В сущности, MMU (Memory Management Unit - Блок Управления Памятью) подвергся существенным конструктивным изменениям и работает совсем не так, как в предыдущем поколении x86-процессоров (точнее, теперь он никак не работает - прим. КК). Мало того, что он превратился в сплошное скопище "тараканов", Intel сделала решительный шаг вперед, определив по ее выражению "новые методы обработки страничных таблиц" (см. стр. 58 - тут, правда, не совсем понятно, что именно смотреть и где; поиск по фразе в Google выдает ссылки только на сообщение Theo de Raadt'а, и ни на один документ от самой Intel - прим. КК);

  • Некоторые ошибки имеют прямое отношение к технике "переполнения буферов" (самая популярная разновидность атак на сегодняшний день - прим. КК), где защита от записи или атрибут "неисполняемый" нагло игнорируются процессором. Другие ошибки связаны с некогерентностью (т.е. несогласованностью) инструкций сопроцессора или же производят разрушения памяти - вне области, отведенной в пользование прикладного процессора, посредством "обычных" (т.е. не привилегированных) машинных инструкций;

  • Все это кажется совершенно невероятным, но это факт!

Вот краткий сводный конспект ошибок Core2Duo для нетехнических людей http://www.geek.com/images/geeknews/2006Jan/core_duo_errata__2006_01_21__full.gif (тут Theo de Raadt слегка противоречит сам себе, поскольку приводит конспект совсем другой errara, с другими ошибками и другой нумерацией, поэтому, перечисленные ниже номера ошибок не имеют к нему никакого отношения - прим. КК).

Примечание: некоторые ошибки типа AI65, AI79, AI43, AI39, AI90, AI99 пугают нас так, что душа, минуя пятки, спускается прямо в преисподнюю. Эти "штучки" не могут быть исправлены программным путем, т.е. посредством модификации исходного кода операционной системы и/или приложений и некоторые из них затрагивают все операционные системы, выпущенные до середины 2008 года, поскольку MMU любых Intel/AMD и совместимых с ними процессоров всегда управлялся одним и тем же способом. И вот теперь Intel говорит нам, что TLB-буфера, входящие в состав MMU, должны "сбрасываться" на совершенно иной манер. Но даже сделав это, ошибки процессора, перечисленные в errata, не позволят создать стабильно работающую операционную систему.

Как уже говорилось выше, в обозначенном списке скрываются 20-30 ошибок, которые не могут быть преодолены программным путем на уровне операционной системы и эти ошибки создают потенциальную угрозу для атаки на машину. Готов поставить на заклад кучу денег, что по крайней мере 2-3 из них реально способны на это.

Например, AI90 подходит для атаки на некоторые операционные системы (двоичные сборки OpenBSD в конфигурации по умолчанию к ним не относятся). В настоящий момент я бы не рекомендовал приобретать машины, построенные на базе Intel Core 2, до тех пор, пока дефекты проектирования не будут исправлены (что по моим подсчетам займет больше года). Intel должна стать более "прозрачной" (а не зажимать технические детали, рассылая их только разработчикам BIOS'ов и коммерческих операционных систем - прим. КК). Межу тем, мне хотелось бы отметить, что и AMD с каждым днем становиться все менее и менее полезной для Open Source сообщества, поскольку количество ошибок, обнаруженных в ее процессорах, растет не менее стремительно.

Сводный конспект

Рисунок 2. Сводный конспект основных ошибок Core 2 Duo, на который ссылается Theo de Raadt.

Сенсация или реальная угроза?

Представляет интерес разобраться, что же так напугало Theo de Raadt'а и насколько велика вероятность атаки на Core 2 Duo, тем более, что за время, прошедшее с момента публикации, количество обнаруженных ошибок удвоилось. Анализировать ошибки мы будем в порядке, обозначенном Theo de Raadt'ом, с учетом специфики операционных систем семейства NT (Windows 2000, XP, Server 2003/2008, Vista), Linux и линейка BSD - Free, Net и Open, приводя официальную информацию из errata со всеми выкладками и рассуждениями, а местами - сценариями реализации атаки.

AI65: A Thermal Interrupt is Not Generated when the Current Temperature is Invalid (Температурное Прерывание не Генерируется при Выходе Текущей Температуры за Пределы)

Problem: When the DTS (Digital Thermal Sensor) crosses one of its programmed thresholds it generates an interrupt and logs the event (IA32_THERM_STATUS MSR (019Ch) bits [9,7]). Due to this erratum, if the DTS reaches an invalid temperature (as indicated IA32_THERM_STATUS MSR bit[31]) it does not generate an interrupt even if one of the programmed thresholds is crossed and the corresponding log bits become set.

Implication: When the temperature reaches an invalid temperature the CPU does not generate a Thermal interrupt even if a programmed threshold is crossed.

Workaround: None identified.


Проблема: Когда DTS (Digital Thermal Sensor - Цифровой Температурный Сенсор) достигает одного из установленных пороговых значений, процессор генерирует прерывание, протоколируя его в журнале событий (IA32_THERM_STATUS MSR (019Ch) биты [9,7]). Вследствие конструктивного дефекта, при достижении пороговой температуры (заданной через MSR регистр IA32_THERM_STATUS бит [31]), DTS не генерирует прерывания и не устанавливает биты журнала;

Последствия: При выходе температуры кристалла за пороговые границы, процессор не генерирует прерывания;

Решение: Не найдено;

В общем, не такой уж и страшный дефект, хотя... учитывая, что а) 99% машинного времени процессор "спит", практически не нагреваясь; б) при активной работе одного или нескольких блоков процессора, тепловыделение резко возрастет; в) для отвода тепла с крохотной площади приходится применять высокооборотистые вентиляторы, характеризующиеся высоким уровнем шума, с которым очень сложно (и дорого!) бороться. Вот производители и перешли на адаптивную схему охлаждения, автоматически повышающую обороты вентилятора при нагреве кристалла и практически останавливающее лопасти во время процессорного сна.

Некоторые производители используют внешний теомодатчик, но большая часть полагается на показания процессора - так и дешевле и точнее, но если DTS не работает, то возникает прямая угроза перегрева кристалла, особенно если хакер загрузит его на полную мощность, что очень легко сделать Java-скриптом или Flash-роликом. Кратковременный перегрев для ЦП, в общем-то, не опасен, но вот систематический "перекал" ведет к необратимой деградации кристалла. Первым, как правило, гибнет кэш и система начинает выдавать критические ошибки приложений и выбрасывать голубые экраны смерти.

Таким образом, атаковать систему не нужно. Она и сама умрет через какое-то время.

AI79: REP Store Instructions in a Specific Situation may cause the Processor to Hang (Инструкции Записи с Префиксом REP при Определенных Обстоятельствах могут Завесить ЦП)

Problem: During a series of REP (repeat) store instructions a store may try to dispatch to memory prior to the actual completion of the instruction. This behavior depends on the execution order of the instructions, the timing of a speculative jump and the timing of an uncacheable memory store. All types of REP store instructions are affected by this erratum.

Implication: When this erratum occurs, the processor may live lock and/or result in a system hang.

Workaround: It is possible for BIOS to contain a workaround for this erratum.


Проблема: Во время выполнения серии инструкций записи, предваренных префиксом REP (REP STOSx/MOVSx), содержимое промежуточного буфера может выгружаться в память до того, как туда поступят актуальные данные. Поведение процессора зависит от порядка выполнения инструкций, временных характеристик "спекулятивных" переходов и временных характеристик некэшируемого буфера записи. Этот дефект распространяется на все операции записи с префиксом REP.

Последствия: Проявления дефекта варьируются от зависания процессора или операционной системы;

Решение: Дефект можно обойти на уровне BIOS;

Да... тут есть, о чем задуматься. Инструкции REP STOSx/MOVSx относятся к числу самых популярных. Функции инициализации и копирования памяти в большинстве случаев реализованы именно так и работают они как на прикладном, так и на ядерном уровне. Трудно представить, что произойдет, если вместо записываемых данных в память будет выгружен мусор, случайно оказавшийся в буфере или... умышленно засунутый туда хакером ("Засунутый" - в смысле оставшийся от предыдущей серии операций записи).

К сожалению, Intel не раскрывает технических деталей и нам остается только догадываться, при каких именно условиях возникает преждевременный "выброс" данных в память. То, что дефект устраним на уровне BIOS - это хорошо, но вовсе не факт, что за это не придется расплачиваться производительностью (есть подозрение, что BIOS просто изменяет диапазоны временных характеристик).

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

AI43: Concurrent Multi-processor Writes to Non-dirty Page May Result in Unpredictable Behavior (Параллельные Записи в "Чистые" Страницы Памяти на Многопроцессорных Системах Ведут к Неопределенному поведению)

Problem: When a logical processor writes to a non-dirty page, and another logical processor either writes to the same non-dirty page or explicitly sets the dirty bit in the corresponding page table entry, complex interaction with internal processor activity may cause unpredictable system behavior.

Implication: This erratum may result in unpredictable system behavior and hang.

Workaround: It is possible for BIOS to contain a workaround for this erratum.


Проблема: Когда логический процессор осуществляет запись в "чистую" (т.е. ранее не модифицированную) страницу памяти, а другой логический процессор в это же самое время или осуществляет запись в эту же страницу, или явным образом устанавливает бит модификации в соответствующем поле страничного каталога, "внутриусобные" войны между логическими процессорами, заключенными в один физический кристалл, при определенных обстоятельствах приводят к неопределенному поведению системы.

Последствия: Данный дефект приводит к непредсказуемому поведению системы и возможному зависанию;

Решение: Дефект может быть устранен на уровне BIOS;

Ох, столько мудрости в этих словах "неопределенное поведение". Инженеры их очень любят. Инженеры вообще любят неожиданности, подстерегающие их в непредвиденных местах. Но чего тут гадать. Все предельно ясно. Флаг модификации, являясь разделяемым ресурсом, весьма придирчив к порядку и все операции с ним должны быть упорядочены теми или иными механизмами синхронизации. Даже не столько сам этот бит, а его окружение. Модифицировать отдельные биты процессор не обучен и он оперирует машинными словами (длина которых не обязательно равна двум байтам, в данном контексте - это минимальная порция обмена с памятью, которая на Core 2 Duo по одним данным составляет 16, по другим 32, а по третьим 64 бит). Процессор сначала читает машинное слово целиком в свой внутренний буфер, взводит/сбрасывает один или несколько бит, после чего записывает его обратно. А теперь представим, что процессоров у нас два и они одновременно обращаются к одному и тому же слову. Тогда повторная установка уже установленного бита приведет к его сбросу! Операционная система будет считать, что данная страница не была модифицирована и потому при нехватке памяти не станет выгружать ее в файл подкачки, что приведет к необратимой потере данных!

Как это можно использовать для атаки?! Завесить систему - это ерунда, при желании можно разрушить дисковый кэш, для этого нужно организовать операции записи один и тех же файлов из двух (или более) разных потоков, параллельно с этим "съедая" всю свободную оперативную память. На NTFS самым главным файлом является $MFT, хранящий информацию обо всех остальных файлах тома. Прямое обращение к нему операционная система блокирует, но вот косвенное - создание/удаление/изменение атрибутов одних и тех же файлов из разных потоков - допускает даже с гостевыми правами. А крах дискового тома - это пострашнее зависания. Аналогичным образом обстоит ситуация и с файловыми системами, используемыми в Linux и BSD.

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

Грубым решением проблемы является переход в однопроцессорный режим, что осуществляется добавлением ключа /ONECPU в boot.ini). Конечно, производительность при этом падает, но если целостность данных превыше производительности - это не такая уж и безумная мера. А надеяться на производителей BIOS... Где гарантия, что они действительно справятся с ошибкой?!

AI39: Cache Data Access Request from One Core Hitting a Modified Line in the L1 Data Cache of the Other Core May Cause Unpredictable System Behavior (Запрос Кэш-линейки L1-кэша из Одного Ядра Разрушает Модифицированную кэш-линейку Другого Ядра, Приводя к Непредсказуемому Поведению Системы)

Problem: When request for data from Core 1 results in a L1 cache miss, the request is sent to the L2 cache. If this request hits a modified line in the L1 data cache of Core 2, certain internal conditions may cause incorrect data to be returned to the Core 1.

Implication: This erratum may cause unpredictable system behavior.

Workaround: It is possible for the BIOS to contain a workaround for this erratum.


Проблема: Когда запрос данных из Ядра 1 приводит к "промаху" L1-кэша, запрос перенаправляется к L2-кэшу. Если же данная кэш-линейка уже находится в L1-кэше Ядра 2 и была им модифицирована, при определенных обстоятельствах Ядру 1 возвращается неверный результат.

Последствия: Непредсказуемое поведение системы;

Решение: BIOS может справиться с этой проблемой;

Как известно, многоядерные процессоры имеют разделяемый (один на всех) L2-кэш и "индивидуальные" L1-кэши, фактически являющиеся частью ядра. В грубом приближении мы имеем обыкновенную многопроцессорную систему с разделяемой внешней памятью и внутрипроцессорной кэш-памятью. Для поддержания памяти в согласованном состоянии используются специальные когерентные протоколы, разработанные десятки лет тому назад. Казалось бы, в чем проблема?!

А в том, что создатели Core 2 Duo или забыли о когерентности (ну, это уж вряд ли), либо, что более вероятно, реализовали ее неправильно. Насколько часто разные ядра, работают с одними и теми же порциями данных? Очень часто! Ведь при переключении контекстов, потоки, стартовавшие на одном ядре, рано или поздно оказываются на другом! Последние версии операционных систем линейки NT, Linux и BSD наконец-то научились отличать ядра от физических процессоров (в многопроцессорных системах) и потому стараются по возможности избегать переброски потоков с одного ядро на другое, поскольку при этом придется заново заполнять L1-кэш. Есть даже специальные API-функции для закрепления потоков за определенным процессором (ядром), но на практике они не используются и программисты предпочитают доверять системному планировщику, алгоритм которого оптимизируется разработчиками операционной системы с учетом "характера" процессоров, имеющихся на рынке. Но в распоряжении планировщика - сотни потоков и обычно только два (редко - четыре) ядра. Так что, избежать "передислокаций" потоков невозможно, точнее, возможно, но уж слишком неэффективно.

Как можно использовать данный дефект для атаки? Самое простое - ничего не делать с системой. Она и сама упадет. Разрушение дисковых данных достаточно маловероятно, хотя и не исключено на 100%, а вот критические сбои приложений и голубые экраны смерти - вполне ожидаемое явление. Действительно, если программа что-то записала в память (на самом деле в кэш, но это уже не важно), а при последующем чтении не обнаружила никаких изменений, тут может произойти все что угодно.

Автору удалось реализовать разрушение кучи (динамической памяти) путем циклического выделения/освобождения крошечных блоков в Java-скрипте, следствием чего явился крах браузера. Чисто теоретически возможно разрушить кучу так, чтобы передать управление на shell-код, но для этого необходимо учитывать множество специфичных деталей, неизвестных удаленному атакующему, хотя в принципе, достаточно предсказуемых.

Шторм запросов к любому драйверу (например, шторм IP-пакетов) также потенциально способен вызывать крах системы, но учитывая, что шторма зачастую вызывают BSOD'ы даже на "правильных" процессорах (из-за ошибок синхронизации, допущенных разработчиками драйверов), очень трудно определить - с каким дефектом мы имеем дело: с программным или аппаратным. Тем не менее, хакерский потенциал у атак данного типа весьма весомый, что главным образом, обуславливается простотой их реализации.

Самое непонятное в этой истории - какое отношение имеет BIOS к "разборкам" внутри процессора?! Единственное разумное предположение - BIOS просто заливает обновленный микрокод, предоставленный Intel. По-другому справиться с проблемой навряд ли получится.

AI90: Page Access Bit May be Set Prior to Signaling a Code Segment Limit Fault (Атрибут Доступа к Странице Памяти Может Быть Установлен до Генерации Исключения)

Problem: If code segment limit is set close to the end of a code page, then due to this erratum the memory page Access bit (A bit) may be set for the subsequent page prior to general protection fault on code segment limit;

Implication: When this erratum occurs, a non-accessed page which is present in memory and follows a page that contains the code segment limit may be tagged as accessed;

Workaround: Erratum can be avoided by placing a guard page (non-present or nonexecutable page) as the last page of the segment or after the page that includes the code segment limit;


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

Последствия: При проявлении данного дефекта, страница памяти, следующая за последней страницей кодового сегмента, получает атрибут доступа, даже если изначально она была недоступна для чтения;

Решение: Пагубное влияние данного дефекта может быть нейтрализовано путем установки сторожевой страницы (отсутствующей в памяти или неисполняемой), отделяющей кодовый сегмент от последующего за ним сегмента;

Вот мы и добрались до дефекта, особо отмеченного Theo de Raadt'ом в качестве подходящего кандидата для атаки на операционные системы (за исключением OpenBSD в конфигурации по умолчанию). Что же это за операционные системы такие?! Ну-ка, ну-ка! В NT лимиты сегментов кода, данных и стека "распахнуты" на все адресное пространство, нижнюю половину которого занимает прикладной код, верхнюю - операционная система. Так что, за пределами кодового сегмента вообще ничего нет. Да и чтобы добраться до его конца, необходимо сначала как-то попасть на уровень ядра, где можно делать что угодно и без всяких дефектов процессора (правда, в Core2Duo есть еще один интересный дефект, обнаруженный автором и не описанный в последней errata - при выполнении кусочка инструкции, находящегося в самом конце кодового сегмента, декодер, определяя длину инструкции по первым байтам, пытается считать ее продолжение, которого нет, в результате чего происходит "заворот" в начало сегмента, первой странице которого также присваивается атрибут доступа, после чего генерируется исключение, которое хакеру необходимо отловить, чтобы система не свалилась в BSOD, но что это даст?! Младшие страницы адресного пространства специально сделаны недоступными в NT для отлова обращения по нулевым указателям, свидетельствующих о том, что программа обращается к невыделенной области памяти, и Windows передает ей исключение, которое та может обработать тем или иным образом, но чаще всего обработчик конструктивно не предусмотрен и тогда система завершает работу приложения в аварийном режиме. Установка атрибута доступа на первую страницу приведет к подавлению исключения и программа упадает не в момент обращения к нулевому указателю, а чуть позже - когда попытается обработать считанный оттуда мусор. Не слишком-то большое достижение, к тому же легко реализуемое на прикладном уровне без обращения к дефектам процессора).

Правда, 16-разрядные приложения имеют свои собственные 16-разрядные лимиты и чисто теоретически благодаря ошибке в процессоре атакующий может получить доступ к данным, которые ему читать не положено. В смысле, по атрибутам страниц не положено, а так... если атакующий может запускать приложения, то отформатировать диск или удалить все файлы быстрее и надежнее. А вот из 32-разрядного приложения вызвать 16-разрядное - ну, не то, чтобы невозможно, но все-таки достаточно сложно (имеется в виду вызов из shell-кода, исполняющегося в 32-разрядном приложении). Другими словами, на Windows этот дефект не оказывает ровным счетом никакого воздействия.

А что насчет BSD и Linux? Штатные ядра также исповедуют плоскую модель. Кодовый сегмент находится в самом конце адресного пространства и ничего интересного за ним нет. Некоторые защитные пакеты, разработанные еще в ту далекую эпоху, когда процессоры поддерживали атрибут "исполняемый" только на уровне селекторов, а необходимость защиты стека, кучи и данных от исполнения заброшенного хакером туда shell-кода уже назрела - произошло вот что: нестандартные ядерные расширения урезали лимиты стека и сегмента данных (расположенных в начале) и отобрали у них атрибут "исполняемый". А за ними расположили сегмент кода. Вот если бы они поступили в обратном порядке (сначала код, потом стек и данные), то у хакеров была бы потенциальная возможность доступа к недоступным данным, вот только... стек и куча доступы и так... без всяких дефектов процессора.

Конечно, можно предположить, что где-то есть операционная система в которой сначала идут пользовательские сегменты кода и данных, а потом расположен сегмент операционной системы, хранящий данные, защищенные от чтения, поскольку, будучи прочитанными, они позволят повысить уровень своих привилегий, например, но... если такая операционная система и есть, то это не Linux, не Windows, не BSD и не QNX... а какая-то студенческая поделка. Вопрос: какой интерес ее атаковать?! Короче, на этот дефект процессора можно вообще не обращать внимания. Ну разве что при разработке новых операционных систем, радикально отличающихся от уже существующих.

Плоская модель памяти

Рисунок 3. Windows использует "плоскую" модель памяти с "распахнутыми" границами сегментов.

AI99: Updating Code Page Directory Attributes without TLB Invalidation May Result in Improper Handling of Code #PF (Обновление Атрибутов Директории Кодовых Страниц без "Инвалидации" TLB Может Привести к Некорректной Обработке Исключения #PF)

Problem: Code #PF (Page Fault exception) is normally handled in lower priority order relative to both code #DB (Debug Exception) and code Segment Limit Violation #GP (General Protection Fault). Due to this erratum, code #PF maybe handled incorrectly, if all of the following conditions are met:

  • A PDE (Page Directory Entry) is modified without invalidating the corresponding TLB (Translation Look-aside Buffer) entry

  • Code execution transitions to a different code page such that both
    – The target linear address corresponds to the modified PDE
    – The PTE (Page Table Entry) for the target linear address has an A (Accessed) bit that is clear

  • One of the following simultaneous exception conditions is present following the code transition
    – Code #DB and code #PF
    – Code Segment Limit Violation #GP and code #PF

Implication: Software may observe either incorrect processing of code #PF before code Segment Limit Violation #GP or processing of code #PF in lieu of code #DB.

Workaround: None identified.


Проблема: Исключение #PF (Page Fault - Страничный Отказ) обычно обрабатывается в с другими исключениями, перечисленными в порядке уменьшения приоритета: #DB (Debug Exception - Отладочное Исключение), Segment Limit Violation (Исключение Выхода за Пределы Сегмента), #GP (General Protection Fault - Общее Нарушение Защиты). Вследствие дефекта проектирования, #PF исключение обрабатывается некорректно при наступлении одного из следующих событий:

  • PDE (Page Directory Entry - Запись Каталога Страниц) модифицируется без "инвалидации" (to invalidate - делать недействительным) соответствующей записи TLB (Translation Look-aside Buffer - Буфер Обратной Трансляции);

  • Транзакция исполнения машинной инструкции находится на стыке двух страниц, причем выполняется одно из следующих условий:
    – Линейный целевой адрес соответствует модифицированной PDE;
    – PTE (Page Table Entry - Запись Таблицы Страниц) для целевого линейного адреса имеет сброшенный бит доступа;

  • Транзакции предшествует одно из двух следующих исключений:
    – #DB и #PF;
    – #GP и #PF;

Последствия: Программное обеспечение должно либо отслеживать некорректное #PF исключение, предшествующее #GP исключению, так же как #PF исключение - перед #DB.

Решение: Не найдено.

Наконец-то мы добрались до дефекта, который Theo de Raadt характеризует как "Ну вот - теперь нам Intel говорит, что TLB нужно обрабатывать совершенно иным путем, не похожим на старый". Ох, и врет! Intel ничего такого не говорит, признавая за собой дефект и расписываясь в бессилии найти приемлемое обходное решение. Дефект, конечно, серьезный и остается только удивляться, как существующие операционные системы ухитряются работать на Core 2 Duo, не падая каждые шесть-семь минут (хотя, возможно, они и падают, но не так часто).

Выход только один - ждать новой ревизии процессора с исправленной ошибкой обработки TLB (после чего все будет "как при бабушке"), либо же модифицировать (причем весьма значительно) ядро операционной системы, чтобы оно стабильно работало и на дефектных ЦП. Microsoft выпуском такой заплатки не озаботилась, хотя похоже, что при ее манерах обращения с TLB, обозначенный дефект не особо и мешает. А вот Theo de Raadt доработал ядро OpenBSD, застраховав систему от возможных "сюрпризов" со стороны процессора. Естественно, ядро исправить (да еще таким необычным способом) - это не просто две строчки кода местами поменять, так что его можно понять. Кому хочется отдуваться за чужие ошибки?! А между тем ошибок в процессорах много...

Ошибка деления в Pentium

Самая громкая ошибка в Pentium была обнаружена в 1995 году и продемонстрирована на следующем примере: x - (x / y) * y, результат которого (если только y != 0) должен быть равен нулю, однако при определенных значениях x и y (x = 4195835, y = 3145727) процессор выдавал... 256! Потрясающая точность, однако!

Журналисты подхватили сенсацию, вынудив Intel пойти на замену процессоров, чего она изначально делать не хотела, доказывая, что людям, далеким от математики, точные вычисления не нужны, а вероятность проявления ошибки на произвольном (а не умышленно подготовленном) наборе данных близка к нулю.

С тех пор, сообщений об ошибках в ЦП как будто бы не отмечалось. И потому заявление Theo de Raadt'а, что Core2Duo содержит огромное количество ошибок, многие из которых допускают удаленный захват управления, стало очередной сенсацией года.

Заключение

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

Нетронутую целину дефектов железа хакеры только-только начали осваивать. До сих пор не представлено ни одного proof-of-concept exploit'а и не зафиксировано случаев вторжения, основанных на ошибках ЦП, однако... в атмосфере определенно что-то происходит. Что-то такое... не предвещающее ничего хорошего.

Впрочем, не будем изображать из себя пророков, предоставив событиям развиваться своим чередом, а сами тем временем приложим максимум усилий по обеспечению собственной безопасности, скачивая свежие прошивки BIOS и выбирая продукцию тех производителей, которым можно верить, и которые действительно борются с дефектами процессоров, отмечая свои достижения в сопроводительных файлах. Что же касается операционных систем, то в линейке BSD - OpenBSD несомненный лидер, Linux'ы все на одно лицо и особой разницы между ними нет (у одних - одни недостатки, у других - другие). Microsoft, похоже, бороться в ошибками процессоров вообще не собирается, а это большой минус, особенно на рынке серверов, где OpenBSD чувствует себя вполне уверенно. А вот перевод рабочих станций на OpenBSD, скорее всего, окажется дороже, чем убытки от возможных атак. Впрочем, свой выбор каждый делает сам.

https://nebka.ru/?uid=1&post=20963