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

NebKa

Шарф снуд

     Большой шарф снуд (шарф, замкнутый в кольцо). Шикарный, тёплый, уютный!Цвет айвори (слоновая кость).Связан из скандинавской полушерсти (Не колючий! Не оставляет ворсинок на тёмной одежде!).Очень плотная вязка.Отделан по кромке широким ручным хлопковым кружевом.Общая длина снуда около 1,5



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

Моя работа: "Часы"

Привет всем!) Хочу показать свою работу под названием "Часы". Сделала я их себе на кухню. У меня над печкой не очень красивой формы, проходит труба газовая, так вот чтобы её закрыть,я и смастерила себе на


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

Лавровый венок своими руками

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



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

Роспись стен структурной краской. Коридор. Мастер- класс от Томаш Ольги.

1.Абсолютно любая структурная краска годится для выполнения этих работ. Структурная краска это акриловая краска с добавлением шпаклевки. Их производят много различных фирм. Они различаются по густоте и крупности добавок . 2. На прогрунтованные стены наносится



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

Животные

Утиное кряканье не дает эха, и никто не знает, почему.


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

Валентинки своими руками.

Близится один из моих любимых праздников, день св.Валентина или день всех влюблённых!Напомню, день святого Валентина отмечают 14 февраля, так что у нас с вами есть время основательно подготовиться к этому дню. Так как мы с


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

География

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


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

Мой совет:

С цветных тканей пятна от йода выводят денатурированным спиртом или ацетоном.


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

Животные

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


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

ЛЕТНИЙ БРАСЛЕТ СВОИМИ РУКАМИ. МАСТЕР-КЛАСС

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



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

Животные

Бражник Cocytius cluentius – бабочка с самым длинным хоботком - до 28 сантиметров.


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

Животные

Зрачки бегемотов напоминают по форме букву "Т", что позволяет им видеть одновременно под водой и над водой.


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

Чехол для ноутбука из старой футболки

Предельно простая идея, даже не требует того, чтобы рассказывать её пошагово. Главное, что кармашки для проводов получаются сами собой, а швы все обработаны промышленным способом. Красота!  



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

Живопись в стиле старых мастеров: пишем картину сами

Автор: Арина Шульпина (pictureforyou) Именно в преддверии замечательного праздника — Нового года — мне бы хотелось поделиться со всеми секретом написания картины в стиле старых мастеров. Этот мастер-класс создан для новичков, любителей, а, может быть, даже профессионалам будет



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

Наборный край с бахромой

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



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

Страх. Список фобий человека…

Фобия от греч. φόβος — «страх» В психиатрии фобией называют патологически повышенное проявление реакции страха на тот или иной раздражитель. Фобия — это ярко выраженный  навязчивый страх, который обостряется в определённых ситуациях и не поддающийся полному



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

Мой совет:

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


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

Скворечник

Девочки, всем приветик!     Нам потребуется: - картон (у меня 2мм, но можно и тоньше, просто у меня другого не было) - акварельнная бумага - клей - канцелярский нож - акриловая краска (белая и коричневая) - свечка - наждачная бумага - украшения (по желанию)   Для начала



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

Пион из фоамирана. Мастер-класс



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

Плетеный стул из старых ремней – вышедшее из моды в дело!

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



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

МК Цветочного ободка из Фоамирана

  Для создания цветочного ободка нам потребуется: фоамиран иранский я использовала цвета: оранжевый,айвори,персиковый, темно и светло зеленый. ушные палочки детские(с ограничителем) и обычные, флористическая проволока молд гипсовый(необязательно) горячий пистолет и палочки клея для него шаблон листиков ​Итак начнем) Для начала нарисуем шаблоны листиков



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

Анекдот

Ведет прием врач с практикантом-студентом мед. института.Вызвали врача к телефону,а практикант решил продолжить прием самостоятельноЧерез некоторое время возвращается врач.Отсчет практиканта:Практикант:"Принял трех пациентов.Первый был с поносом.Я ему дал слабительного. Так он бежал по коридору ,а потом


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

Вязание. НОСКИ НА ДВУХ СПИЦАХ БЕЗ ШВА

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



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

Космос

Зодиакальными называют 12 созвездий, расположенных вдоль видимого годового пути Солнца среди звезд: Овен, Телец, Близнецы, Рак, Лев, Дева, Весы, Скорпион, Стрелец, Козерог, Водолей, Рыбы. Небольшую часть своего пути (с 30 ноября по 18 декабря) Солнце


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

Гибискус из фоамирана. Мастер класс.

  Не так давно я узнала, что существует удивительный материал - Фом эва.  Мне очень нравиться работать с ним. Мне хочеться поделиться с вами частичкой своей любви! Буду очень рада, если мой небольшой мастер-класс поможет в работе



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

Космос

Атмосфера земного шара весит 5 300 000 000 000 000 тонн.


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

Анекдот

Достойная зарплата - это когда уже нужно получать следующую, а ты ещёпредыдущую не истратил.


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

Подвесные кармашки в детскую комнату

Устаревает не только одежда, но и другие вещи - наволочки, скатерти...Или просто остаются кусочки ткани после того, как вы что-то шьете. Сегодня предлагаю вашему вниманию мастер-класс по шитью подвесных кармашков в детскую комнату.    Сделать кармашки совсем



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

Носки Карамелька. Вязание спицами

Потрясающе красивые нежные носочки со вкусным названием - Карамелька. Предлагается схема с подробным мастерклассом.   Порядок работы   1. Наберите 52 петли (количество петель должно быть кратно 26). Распределите их на 4-х спицах — по 13 петель.2. Вяжите 3



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

200 иностранных слов, которым есть замена в русском языке.

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



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

Текстильная сумочка для рулона туалетной бумаги. Шьем сами

http://marrietta.ru/post328296281/



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

Мастер-класс по переделке свитера в повязку на голову.

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



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

Мастер-класс "Мак из фоамирана"

Татьяна Махова (modnoe-hobby)   Мастер-класс содержит 38 фото с подробным описанием процесса работы. Подходит как для начинающих, так и для опытных мастеров. В природе встречается около 100 видов маков самых разнообразных цветов и оттенков – огненно-красного, розового, желтого,



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

Как сшить сумочку - чехол для утюга



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

Юбка-полусолнце. Нарядная!

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



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

Аисты из пластиковых бутылок для дачи

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


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

Маленькая сумочка из кожи.Мастер класс и выкройка.

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



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

Животные

Рекордсмен среди дятлов по частоте ударов клюва в ствол дерева - один из калифорнийских дятлов. Он бьет в дерево с частотой до 28 ударов в секунду, его дробь напоминает скорее стрельбу из пулемета.


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

ЛЕТНЕЕ ПЛАТЬЕ СПИЦАМИ



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

Анекдот

Жизненный опыт - это когда на смену бесполезным: "Что? Где? Когда? Как?Почему?", - приходит единственное: "А на хрена?"


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

Шьем прихватку своими руками. Мастер-класс



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

Идеальный порядок от Марты Стюарт

А кто у нас больший специалист по идеальному порядку, чем Марта Стюарт? Увидела у нее сегодня очередную идеальную идею из серии «дешево и сердито»: как сделать мешок для грязного белья на дверь спальни — ничего проще:



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

Мой совет:

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


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

Картины своими руками. Идеи

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



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

География

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


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

Квиллинг. День Святого Валентина

Квиллинг. День Святого Валентина



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

Анекдот

Подходит дедушка к зеркалу и говорит: - Я стар. Я очень стар. Я суперстар.


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

Канзаши

За время своего отсутствия очень соскучилась по вдохновляющим подборкам с сайта etsy. Вот нашла свободное время, чтобы погрузиться в этот сайт и подобрать красивые варианты работ в технике канзаши. Не перестаю поражаться, удивляться, восхищаться красотой канзаши.



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

Платье «Летний каскад» крючком



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

МЫЛО НЕ ВЫНИМАЕТСЯ ИЗ ФОРМЫ (Совет)

Перед тем, как делать мыло рекомендую смазать формочку жирным маслом. Таким образом Вы сможете легко достать мыло из формочки после его приготовления. Если Вы приготовили мыло, но не можете достать его из формочки советую поставить мыло


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

НОСКИ СПИЦАМИ. УРОКИ ИЗ САБРИНЫ 10/2013

yarni.ru fromthepurlside.wordpress.com



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

Веер из джута. Вам понравится...

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



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

Азартные игры (под)сознания

Автор: (c)Крис Касперски ака мыщъх Мир, который мы видим (обоняем, слышим, осязаем) не является тем миром, которым он является. Софистика? А вот и нет! Мир как категория сознания и мир как физическая реальность - это две разные сущности,


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

Красивый весенний букет из бумаги

Вот такой красивый букет можно легко и быстро сделать своими руками из бумаги. Конечно, можно сказать: “Зачем же осенью искусственные цветы?”, но ведь он такой легкий и воздушный, и будет радовать  Вас круглый год!   Понадобится: Бумага (белого цвета



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

Вязание. ПАЛЬТО и длинный шарф. Описание+схемы

Размеры (европейские): XS-S(M)L(XL) Размеры (российские): 42-44(46)48(50) Размеры готового изделия:обхват груди - 96(104)112(120) см,длина - 101(103)105(107) см,внутренняя длина рукава - 46(47)48(49) см. Вам потребуется: пряжа Novita Isoveli (75% шерсть, 25% полиамид, 130 м/100 г) - 1400(1500)1600(1700) г темно-зеленого цвета (037),



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

Анекдот

Два юриста в кафе достали бутеры.— Извините, у нас нельзя есть свою еду.Юристы переглянулись, пожали плечами и обменялись бутербродами


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

Шьем подушки (мастер класс, идеи для вдохновения).

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



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

Животные

Морда льва, как отпечатки пальцев - нет двух львов, имеющих такую же модели усов.


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

Открытка к 8 Марта в технике квиллинг

Для изготовления открытки к 8 Марта вам потребуется:   - полосы бумаги, нарезанные вручную или в готовом виде (18 шт. полосок белого цвета - длиной в 29-ть см, вширь 3 мм; 14 зелёных  полос - длиной 29-ть



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

Оформление балкона

А представляете, выходите вы на балкона, а там вот такая красота и уходить то не захочется. Создайте уютный уголок у себя дома   найдено на просторах интернета!!!!



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

Разное

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


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

Причёска "Ракушка" своими руками.

Причёска "Ракушка" своими руками.  Причёска "Ракушка" своими руками.  1. Начинается прическа, как Вы уже поняли с того, что волосы нужно тщательно расчесать. 2. Далее хорошо расчесываем волосы по всей длине по направлению назад. Собираем их в пучок. Классический вариант, когда



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

Мой совет:

Если краснокочанную капусту ошпарить кипятком, она будет мягче.


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

Анекдот

- Вовочка, признайся, кто написал тебе это сочинение?- Не знаю, честное слово! Я рано лёг спать, Марья Иванна.


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

Unauthorized.

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

2011.10.08

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

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

Бывает, что человек пытается решить какую-то проблему,
хотя она решена уже тысячи лет назад, а он просто об этом
не знает или не понимает, что это именно его проблема.
Виктор Пелевин, "Желтая Стрела"

Введение

Количество регистров Pentium-процессоров вплотную приближается к тысяче и хотя значительная часть из них носит сугубо служебный характер, сути дела это не меняет. Часть регистров стандартизирована и реализована во всех моделях (например, EAX, CR3, DR1), часть - специфична для определенной группы процессоров и совместимость с другими процессорами не гарантирована, хотя все они продаются под торговой маркой Pentium. Вот о таких специфичных регистрах мы и поговорим.

В технической документации они скрываются за аббревиатурой MSR - Model Specific Register(s) и впервые такие регистры появились (если мне не изменяет память) в P6, более известном как Pentium Pro и его "бюджетном" собрате Pentium-II. Революции не свершилось, но команда RDTSC с тех времен прочно вошла в лексикон всех разработчиков защит. Специальный MSR-регистр каждый такт увеличивает свое значение на единицу, а команда RDTSC позволяет прикладным программам считывать его содержимое. Как результат - при пошаговом прогоне защищенного кода под отладчиком, кол-во "тиков" процессора между двумя соседними замерами резко возрастала и защита палилит хакера только так.

Разработчики процессоров, используемых главным образом в серверах и высокопроизводительных рабочих станциях, совершили огромный бросок вперед, сотворив новые отладочные механизмы, глядя на которые обладатели Pentium-II/III только облизывались. Но с появлением Pentium 4 эти возможности, хлынув в бюджетную сферу, стали доступными всем и каждому, к чему создатели отладчиков ни морально, ни физически, ни технически оказались не готовы.

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

Мыщъх

Рисунок 1. Мыщъх (a.k.a. Chuha на Хинди) за работой.

Что нам понадобится

Для экспериментов, описанных в статье, нам понадобятся следующие вещи, программы и инструменты:

  • Windows Driver Kit (WDK) для всех систем, по Висту включительно:
    http://www.microsoft.com/whdc/DevTools/default.mspx (требует регистрации);

  • Windows Server 2003 SP1 DDK:
    http://www.microsoft.com/whdc/devtools/ddk/default.mspx;

  • IA-32 Architecture Software Developer's Manual Vol. 3: System Programming Guide:
    http://www.intel.com/products/processor/manuals/;

  • DebugView:
    http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx;

  • KmdManager - утилита динамической загрузки/выгрузки драйверов:
    https://wasm.ru/pub/21/files/kmd3.zip;

  • Syser 1.95.19000.0894:
    http://www.sysersoft.com/download/download.php;

  • Soft-Ice:
    www.google.com ;-)

Чтение и запись MSR-регистров

MSR-регистры имеют свои собственные имена (например, IA32_TIME_STAMP_COUNTER), однако мыщъх'у не известен ни один ассемблер, "переваривающий" их, а потому приходится использовать "безликие" номера, перечисленные в приложении "MODEL-SPECIFIC REGISTERS" руководства Intel "IA-32 Architecture Software Developer's Manual Volume 3: System Programming Guide", откуда, в частности, можно узнать, что MSR-регистр IA32_TIME_STAMP_COUNTER имеет номер 10h.

Чтение MSR-регистров осуществляется машинной командой RDMSR с предварительной загрузкой номера нужного нам MSR-регистра в ECX. После выполнения команды регистровая пара EDX:EAX содержит исходный результат. В EDX помещаются старшие 32-бита значения MSR, а в EAX, соответственно, идут младшие.

За запись отвечает команда WRMSR, ожидающая номер MSR-регистра в ECX, а записываемое значение в регистровой паре EDX:EAX. Пример использования обоих команд показан ниже:

MOV        ECX, 10h         ; // IA32_TIME_STAMP_COUNTER
RDMRD                       ; // MOV (EDX:EAX), IA32_TIME_STAMP_COUNTER
INC        EAX
WMSR                        ; MOV IA32_TIME_STAMP_COUNTER, (EDX:EAX)

Листинг 1. Демонстрация чтения и записи MSR-регистров.

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

.686
.MMX
.model flat, stdcall
extern DbgPrint:PROC
.code

DriverEntry proc
        NOP
        NOP
        INT 03                      ; // Soft-Ice: I3HERE DRV

        MOV ECX, 10h                ; // IA32_TIME_STAMP_COUNTER
        RDMSR                       ; // MOV (EDX:EAX), IA32_TIME_STAMP_COUNTER

        MOV        EAX, 666h        ; LOW 32 bits
        WRMSR                       ; // MOV (EDX:EAX), IA32_TIME_STAMP_COUNTER

        RDMSR                       ; // READ AGAIN - just for fun :-)

        push offset mystring
        CALL DbgPrint
        pop eax

        mov eax, 0C0000182h         ; STATUS_DEVICE_CONFIGURATION_ERROR
;       RET                         ; Four-F says
        RETN 8                      ; <- haron says
DriverEntry endp

.data
mystring DB "*] MSR [*",0Dh,0Ah,0

end DriverEntry

Листинг 2. Исходный текст "скелета" простейшего драйвера MSR-base.asm для экспериментов с MSR-регистрами.

Для сборки драйвера нам понадобиться NTDDK и командный файл следующего содержания (для настройки которого необходимо прописать путь к библиотекам ядра):

@ECHO OFF

SET FILE_NAME=MSR-base

REM каждый настраивает эту строку под себя!
SET ntoskrnl=D:\NTDDK\libchk\i386\ntoskrnl.lib

IF EXIST %FILE_NAME%.obj DEL %FILE_NAME%.obj
ml /nologo /c /coff %FILE_NAME%.asm
IF NOT EXIST %FILE_NAME%.obj GOTO err
link /nologo /driver /base:0x10000 /align:32 /out:%FILE_NAME%.sys /subsystem:native %FILE_NAME%.obj %ntoskrnl%
GOTO end

:err
ECHO -ERR!

:end

Листинг 3. Командный файл для сборки драйвера.

Остается самая малость - загрузить драйвер внутрь системы, передав управление процедуре DriverEntry, которая выполнив все, что задумано, завершится с кодом STATUS_DEVICE_CONFIGURATION_ERROR, автоматически выгружая драйвер из системы.

Существует множество загрузчиков драйверов (на худой конец, можно написать и свой, благо в MSDN входит пример с ZwLoadDriver вместе со строгой рекомендацией не использовать эту функцию в серьезных проектах). Перебрав кучу загрузчиков, мыщъх остановился на KmdManager'е, написанным легендарным хакером Four-F, известным своим циклом статей на WASM'е, откуда можно скачать сам загрузчик вместе с исходными текстами: https://wasm.ru/pub/21/files/kmd3.zip.

Но прежде, чем загружать драйвер в систему, необходимо установить Soft-Ice (или Syser - это кому что больше нравится) и сказать ему "I3HERE DRV", заставив его отлавливать INT 03h в драйверах. Зачем все это?! А зачем, что наблюдать за командами RDMSR/WRMSR удобнее всего из отладчика, а Soft-Ice - это классика жанра.

Загрузка драйвера посредством KmdManager'a

Рисунок 2. Загрузка драйвера посредством KmdManager'a.

Ок, Soft-Ice подготовлен к работе, запускаем KmdManager.exe, указываем путь к драйверу, взводим галочку, расположенную между [Register] и [Run] и нажимаем на [Reg'n'Run] - Soft-Ice тут же появляется на экране в точке, где мы заботливо воткнули в драйвер команду INT 03h и теперь можем трассировать драйвер, сколько нашей душе угодно, а когда надоест - нажать или "x;" для выхода.

KmdManager, конечно, обругает нас матом, что драйвер загрузить не удалось, но все идет по плану. Именно так оно и было задумано. Зачем загружать драйвер, если все, что нам нужно - выполнить несколько команд на уровне нулевого кольца?!

Наблюдение за MSR-регистрами в Soft-Ice

Рисунок 3. Наблюдение за MSR-регистрами в Soft-Ice.

Чтение/запись MSR с прикладного уровня

Для чтение/записи MSR с прикладного уровня можно воспользоваться недокументированной native-API функцией NtSystemDebugControl(), экспортируемой из динамической библиотеки NTDLL.DLL. Готовый к употреблению пример работы с ней лежит на http://www.openrce.org/blog/view/535/Branch_Tracing_with_Intel_MSR_Registers, однако для этого необходимо: а) обладать правами администратора; б) в последних пакетах обновления под Server 2003 и XP возможности этой функции были существенно урезаны и, по-видимому, политика урезания продолжится и в дальнейшем, так что все-таки без драйвера не обойтись.

Перехватываем системные вызовы

Для перехода с прикладного уровня в режим ядра операционные системы NT 3.х/4.х и W2K использовали прерывание INT 2Eh, которое в изобилии водится в динамической библиотеке NTDLL.DLL, служащей своеобразными вратами в "ад"... тьфу, мостом между прикладным и ядерным уровнями.

77F88278 public ZwCreateFile
77F88278 ZwCreateFile      proc near        ; CODE XREF:LdrLoadAlternateResourceModule+29F?p
77F88278
77F88278 arg_0  = dword ptr  4
77F88278
77F88278        mov        eax, 20h        ; NtCreateFile
77F8827D        lea        edx, [esp+arg_0]
77F88281        int        2Eh             ; <-- врата в ад
77F88283        retn       2Ch
77F88283 ZwCreateFile      endp

Листинг 4. Реализация вызова функции ZwCreateFile на W2K.

Основной недостаток INT 2Eh в том, что выполняется она очень медленно и потому в P6-процессорах появилась пара более быстрых команд: SYSENTER (с прикладного уровня в режим ядра) и SYSEXIT (из режима ядра - назад на прикладной уровень), которую Microsoft стала использовать взамен INT 2Eh, начиная с XP и Server 2003, в результате чего NTDLL.DLL оказалась чуть ли не полностью переписанной.

В частности, в ней появилась пара процедур быстрого вызова ядерных функций и выхода из них обратно на прикладной уровень:

ntdll!KiFastSystemCall:
7C82ED50 8BD4        MOV EDX,ESP
7C82ED52 0F34        SYSENTER

ntdll!KiFastSystemCallRet:
7C82ED54 C3          RET

Листинг 5. Процедуры NTDLL.DLL быстрого вызова ядерных функций с прикладного уровня.

Прерывание INT 2Eh вопреки распространенному заблуждению не было предано анафеме и вместо морга перекочевало в процедуру KiIntSystemCall:

ntdll!KiIntSystemCall:
7C82ED60 8D542408        LEA        EDX,[ESP+0X8]
7C82ED64 CD2E            INT        2Eh
7C82ED66 C3              RET

Листинг 6. Процедура вызова ядерных функций через INT 2Eh, оставленная в XP/Server 2003 для совместимости.

Однако дизассемблирование показывает, что ни та, ни другая процедура реально не используются и NTDLL.DLL исповедует совершенно другой механизм диспетчеризации системных вызовов. В частности, код той же функции ZwCreateFile в Server 2003 выглядит так (сравните его с листингом 4):

77F42467 public ZwCreateFile
77F42467 ZwCreateFile proc near            ; CODE XREF: LdrLoadAlternateResourceModule-10C?p
77F42467        mov        eax, 27h        ; NtCreateFile
77F4246C        mov        edx, 7FFE0300h  ; offset SharedUserData!SystemCallStub
77F42471        call       edx
77F42473        retn       2Ch
77F42473 ZwtCreateFile endp

Листинг 7. Реализация вызова функции ZwCreateFile на Server 2003.

Что находится по адресу 7FFE0300h? Призвав на помощь Soft-Ice ("U 7FFE0300h"), мы видим (см. рис. 4), что здесь расположена машинная инструкция SYSENTER, что, собственно говоря, и требовалось доказать.

SYENTER в SharedUserData!SystemCallStub

Рисунок 4. SYENTER в SharedUserData!SystemCallStub.

Теперь немного о сути самой диспетчеризации. В таблице дескрипторов прерываний (IDT) для прерывания INT 2Eh имеется своя запись, указывающая - по какому адресу и селектору процессор должен передавать управление при ее выполнении. Естественно, на уровне ядра IDT легко модифицировать, установив свой перехватчик системных вызовов (многие rootkit'ы именно так и поступают), однако это слишком заметно. Целостность IDT проверяют многочисленные антивирусы и прочие защитные механизмы.

Операционные системы семейства XP/Виста и Server 2003/2008 предоставляют в этом плане намного больше возможностей. Во-первых, мы можем изменить содержимое SharedUserData, заменив SYSENTER переходником на свой собственный обработчик. И хотя этот регион формально недоступен для записи с прикладного уровня, он находится в пользовательской области памяти, которая в отличие от ядра все-таки может быть модифицирована с прикладного уровня, пускай и не без извращений, но... это тема совсем другого разговора.

Задумаемся - а куда SYSENTER передает управление? Ведь целевой адрес нигде явным образом не указан. Курим мануал от Intel и выясняем, что SYSENTER принимает три скрытых аргумента, передаваемые через MSR-регистры.

  • SYSENTER_CS_MSR (174h): - CS регистр для перехода на уровень нулевого кольца;
  • SYSENTER_ESP_MSR (175h): - ESP регистр для перехода на уровень нулевого кольца;
  • SYSENTER_EIP_MSR (176h): - EIP регистр для перехода на уровень нулевого кольца;

Селектор стека (регистр SS) получается путем сложения константы 08h со значением MSR-регистра SYSENTER_CS_MSR, так что SYENTER позволяет задавать не только CS:EIP, но и SS:ESP. Таким образом, мы имеем в своем распоряжении все четыре необходимых ингредиента для перехвата, хотя на практике достаточно подменить целевой EIP, перенаправив его на код нашего хакерского обработчика (естественно, расположенного внутри ядра, т.е. представляющего из себя драйвер, хотя чисто теоретически можно заставить SYSENTER вызывать обработчик, находящийся на прикладном уровне, но на этом пути слишком много подводных камней, чтобы принимать его всерьез). Весь фокус в том, что за MSR-регистрами еще мало кто следит и подобный rootkit имеет хорошие шансы остаться незамеченным долгое время (или даже не быть замеченным вообще).

Ниже приведен фрагмент кода, считывающего MSR-регистры, связанные с командой SYSENTER. На NT 3.х/4.х и W2K мы получим нули, а XP/Виста/Server 2003/2008 покажут нам адрес диспетчера системных вызовов, который можно хакнуть через WRMSR:

INT 03               ; // for Soft-Ice

MOV ECX, 174H        ; // SYSENTER_CS_MSR
RDMSR                ; // MOV (EDX:EAX), SYSENTER_CS_MSR

MOV ECX, 175H        ; // SYSENTER_ESP_MSR
RDMSR                ; // MOV (EDX:EAX), SYSENTER_ESP_MSR

MOV ECX, 176H        ; // SYSENTER_EIP_MSR
RDMSR                ; // MOV (EDX:EAX), SYSENTER_EIP_MSR

Листинг 8. Фрагмент исходного текста драйвера MSR-SYSENTER.asm, определяющего адрес диспетчера системных вызовов под XP/Виста/Server 200x.

Загружаем драйвер привычным способом (Soft-Ice должен быть предварительно запущен) и начинаем трассировать программу, наблюдая за значениями, возвращаемыми в регистровых парах EDX:EAX.

Читаем MSR-регистр

Рисунок 5. Читаем MSR-регистр номер 174h (SYSENTER_CS_MSR) под W2K и видим в EDX:EAX значение 00000000h, т.к. W2K не использует SYSENTER.

Читаем MSR-регистр

Рисунок 6. Читаем MSR-регистр номер 174h (SYSENTER_CS_MSR) под Server 2003 и видим в EAX значение 08h, совпадающее с ядерным селектором CS, что и требовалось доказать.

Халтурный хронометр или хронометраж наоборот

Начиная с P6 в Pentium-процессорах появился специальный счетчик производительности, увеличивающий значение MSR-регистра IA32_TIME_STAMP_COUNTER (10h) на единицу каждый такт (на самом деле это очень большое допущение, документация от Intel гарантирует просто увеличение, оставляя за собой простор для маневров, но это уже дебри технических деталей, в которые лучше не вдаваться).

По умолчанию прикладным программам даровано право читать его содержимое командой RDTSC, возвращающей текущее значение в регистровой паре EDX:EAX, причем отладчики типа Soft-Ice не "замораживают" этот счетчик на время своей работы, что позволяет защитным механизмам легко обнаруживать факт трассировки или срабатывания точек останова (обработка которых требует значительного количества процессорного времени). Во времена IBM XT/AT-совместимых компьютеров для той же цели использовался системный таймер (ну, грубо говоря, часы) и вот его-то Soft-Ice как раз и "замораживал", не позволяя защитам обнаружить себя. А сейчас что?!

Флаг TSD в управляющем регистре CR4

Рисунок 7. Флаг TSD в управляющем регистре CR4.

Начнем с того, что команду RDTSC очень легко сделать привилегированной. Для этого достаточно взвести TSD флаг (2-й бит) в регистре CR4 (доступном только с нулевого кольца), после чего всякая попытка вызова RDTSC с прикладного уровня заставит процессор генерировать общее исключение защиты, перехватываемое отладчиком и мы (перед возвращением управления программе) можем записать в регистровую пару EDX:EAX все, что нам захочется, а конкретно - создать видимость, что выполнение данного участка кода заняло ничуть не больше времени, чем обычно.

Фрагмент кода, который взводит TSD-бит, приведен ниже:

MOV        EAX, CR4        ; // читаем управляющий регистр CR4
OR         EAX, 4          ; // взводим TSD флаг
MOV        CR4, EAX        ; // обновляем CR4

Листинг 9. Делаем команду RDTSC привилегированной инструкцией.

А как быть, если защита реализована на уровне драйвера и наш запрет на чтение IA32_TIME_STAMP_COUNTER ей не помеха?! Тогда можно прибегнуть к прямой записи MSR-регистра IA32_TIME_STAMP_COUNTER командой WRMSR, пример использования которой приведен в листинге 1. Правда, здесь есть одно "но". Процессор (вот сцука) записывает только младшие 32-бита MSR-регистра IA32_TIME_STAMP_COUNTER, а остальные сбрасывает в ноль и защита может разоблачить наши махинации, правда, все известные мыщъх'у защиты с этим не заморачиваются, а просто сравнивают результаты двух замеров и если в обоих старшие 32-бита обнулены, то все ок.

Или не ок? Прикинем, насколько нам хватит младших 32 бит. Возьмем процессор с тактовой частотой в 1 ГГц, увеличивающий IA32_TIME_STAMP_COUNTER на единицу каждый такт, тогда младшие 32-бита переполнятся за 4,294967296 сек. Срок, в общем-то, не такой уж и большой. Впрочем, учитывая многозадачную природу Windows, защиты осуществляют замеры только на коротких "трассах", выполняющихся сотые или даже тысячные доли секунды, т.е. меньше одного кванта (времени, отпущенного процессу системным планировщиком, после которого происходит переключение на другой поток). В XP длительность кванта составляет ~100 мс, поэтому результаты замера в ~50 мс уже нельзя считать достоверными - поток мог быть прерван планировщиком. Короче говоря, для борьбы с защитами младших 32 бит вполне хватит.

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

  1. Записать что-то в IA32_TIME_STAMP_COUNTER;
  2. Прочитать IA32_TIME_STAMP_COUNTER;
  3. Если старшие 32 бита равны нулю, мы на живом процессоре и записываем в младшие 32 бита фиктивное значение;
  4. Если старшие 32 бита не равны нулю, мы под VM Ware и записываем в младшие 32 бита значение с поправкой на эмуляцию

Таким образом, ломая программы под VM Ware и корректируя значение IA32_TIME_STAMP_COUNTER должным образом, мы надежно скроем присутствие отладчика от всех защит, основанных на замере временных интервалов.

Трассируем ветвления

Взведите бит TF регистра флагов (E)FLAGS (от там 8-й по счету, начиная от нуля) и процессор начнет генерировать отладочное прерывание INT 01h после выполнения каждой инструкции (за исключением инструкций, записывающих сегментный регистр SS) - это еще со времен IBM XT (не путать с XP!) всем хакерам хорошо известно.

Недостаток такого подхода прежде всего в его чрезвычайной медлительности. Даже с учетом быстродействия современных процессоров обработка исключений обходится очень дорого и "серьезную" программу мы будем трассировать до конца сезона. А смысл?! К трассировке обычно прибегают для реконструкции логики работы машинного кода, мысленно разбивая его на структурные блоки - ветвления, циклы, etc.

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

Вот если бы мы могли заставить процессор генерировать отладочные прерывания только после ветвлений - скорость распаковки возросла бы в сотни раз. Или вот еще. Сравнивания два прогона защищенной программы - до и после завершения испытательного срока, мы легко найдем тот самый условный переход, после которого все пошло по пути "trial expired". Естественно, полный лог трассировки нам ни к чему. Нас интересуют только ветвления. Вот только так их получить?!

Бит BTF

Рисунок 8. Бит BTF в MSR-регистре MSR_DEBUGCTLA (1D9h).

Оказывается, процессор позволяет сделать это! Если бит BTF (1-й, считая от нуля) MSR-регистра MSR_DEBUGCTLA (1D9h) взведен, то процессор будет интерпретировать стандартный TF флаг как указание генерировать отладочное прерывание только после встречи с ветвлением или исключением, при этом оба флага (BTF и TF) автоматически очищаются.

Проведем следующий эксперимент. Уберем из "скелета" нашего драйвера INT 03h, и поместим туда следующий код, взводящий флаг BTF.

MOV ECX, 1D9H        ; // MSR_DEBUGCTLA
RDMSR                ; // MOV (EDX:EAX), MSR_DEBUGCTLA

OR EAX, 2            ; // SET BTF (single-step on branches) flag (bit 1)
WRMSR                ; // MOV (EDX:EAX), MSR_DEBUGCTLA

Листинг 10. Фрагмент драйвера MSR-branch-trace.asm, взводящего BTF-флаг.

Загрузим драйвер в систему и запустив любой отладчик - например, OllyDbg, нажмем для трассировки одной инструкции. Опс! Отладчик заносит нас черт знает куда, останавливаясь на первом ветвлении (которым в большинстве случаев будет инструкция CALL, вызывающая некоторую API-функцию из стартового кода). Флаг BTF при этом сбрасывается и дальше трассировка проходит нормально (то есть, шаг за шагом), во всяком случае пока мы вновь не загрузим наш драйвер, устанавливающий BTF-флаг или не напишем plug-in для OllyDbg.

К статье (на диске к журналу) прилагается исходный код и откомпилированный модуль MSR-branch-trace.sys, устанавливающий BTF-флаг и тут же проверяющий его значение, выводя результат проверки в отладочный поток, содержимое которого можно просмотреть как с помощью Soft-Ice, так и утилитой DbgView от Марка Руссиновича.

Если взвести BTF-флаг не удается, это означает, что на данной платформе он не поддерживается (на P-III Coppermine поддерживается, на P-4 тоже, а вот под VM Ware 4.5 и 5.2 - увы и ах).

Проверить значение BTF-бита поможет другой драйвер (MSR-branch-trace-x.sys), также прилагаемый к статье (см. рис. 9).

Проверка состояния BTF-флага

Рисунок 9. Проверка состояния BTF-флага драйвером MSR-branch-trace-x.sys.

Заключение

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

Мы не только получаем колоссальный выигрыш в производительности, но и полностью скрываем свое присутствие от защитных механизмов и все существующие на данный момент антиотладочные механизмы перестают работать. Но это будет не сейчас. Такая обширная тема требует отдельной статьи, в которой MSR-регистры - лишь малая часть огромного отладочного механизма, спрятанного в недрах процессора.

Короче, ждите прихода и он будет!!!

Учиться, учиться и учиться!

Рисунок 10. Учиться, учиться и учиться!

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