· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Дыра в Страничной Адресации

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Янв 12, 2004 18:57:29

какая может быть нахрен защита от записи и тп в процессоре :) - удаляйте темку, имхо


Дата: Янв 12, 2004 23:05:39

Baron Gede
какая может быть нахрен защита от записи и тп в процессоре :) - удаляйте темку, имхо

Ну блин, я же образно. А то лезут тут с ответами про винду...

Книга: Процессоры Pentium II, Pentium Pro и просто Pentium.
Автор: Михаил Гук.
Глава 3. Защищенный режим.
Тема 3.4. Защита.
Страница 107. Сверху.
Цитата: Некоторые функции защиты выполняются и механизмом страничной переадресации, однако, в отличие от "непробиваемой" сегментной защиты, существуют способы обхода страничной защиты на уровне пользователя (CPL=3).


Дата: Янв 12, 2004 23:56:43 · Поправил: Valery

RomikB

Подслушал тут недавно в очереди разговор двух теток:
- Ой, милочка, мне сын говорил, что этот Виндоуз как его там уже устарел и его вообще скоро отменят!

Так че, сразу топик по этому поводу делать?


Дата: Янв 13, 2004 03:13:51

RomikB

Короче, знаток. Ты меня настолько своим топиком затрахал, что я не поленился поговорить со знающими людьми. Даже Свина из-за тебя напряг.
По моему дилетантскому разумению - ЭТО НЕВОЗМОЖНО. По мнению более опытных людей - ТОЖЕ. Свин сказал следующее:


У нас на форуме несколько раз в разных топиках поднимался вопрос о
излюбленной теме для новичков - "а как попасть в ring0"
(это я так понимаю типа тестов на крутость у людей)

Я по глупости поначалу ввязывался в эти разговоры - дело с моей
стороны доходило только до стадии "понять что вообще человек сказать
хотел". Единственного кого я понимал, был Four-F, который так же
безуспешно как я пытался понять, что люди хотят сказать.
Проблема вообще крутилась вокруг того что люди вкладывают в понятие
ring0, попасть в ring0, сегментная защита и т.д. и т.п.
Мы говорили как бы на разных языках, как будто слова знакомые а смысл
и для тебя какой-то перпендикулярный.

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

volodya> ТАКОЕ вообще возможно? Написал сие Гук, который хорош. А не сглупил ли он на
volodya> этот раз? Кто-нибудь что-нибудь может по вопросу сказать?

Если имеется ввиду может ли процесс имеющий CPL3 лезть в страницы в
которых стоит в атрибутах доступ только для супервизора - то нет.
Если понимать это буквально.
А что такое буквально? Это когда байтики каких то команд выполняются
(грузятся в декодер через EIP + база) и
в данный момент в CS находится селектор который ссылается на
дескриптор в котором DPL 11 или пусть даже DPL 00 но младшие битики в
данный момент в CS 11 (RPL=3) и вот если эти байтики представляют
собой инструкцию которая ссылается на адрес принадлежащий странице с
аттрибутом доступа супервизора - то НЕМЕНУЕМО произойдёт исключение.
Т.е. реально доступа по этому адресу вообще не произойдёт (проверка
происходит ДО выполнения) и чисто примитивно технически будет
происходить вместо этого автоматическое действие по (обобщенно и
сокращённо)
переходу на другой участок памяти для исполнения загрузкой новых
значений в EIP:CS исходя из того что лежит в IDT в дескрипторах для
обработчика исключения нарушения общей защиты.
Т.е. это буквально происходящее. В мире конкретных вещей - регистор,
селекторов, активных линий, выборки команд и т.д. - холодный и тупой
мир с предопределёнными действиями.

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

Но в тот момент как произойдёт переход на эти байты, несмотря на то,
что они находились (и находятся до сих пор в реальности) в нити с DPL
кода 3, на момент начала выполнения они уже выполняться будут с CPL
супервизора а не пользователя (а могут и остаться пользователем если
ты DPL шлюза не поставишь в 0).
CPL переводят по разному и не случайно, это то как code prevelege
level то как current prevelege level переводят.
Так вот в описанном сценарии - инициировала действия программа с CPL3
но выполнялись они с CPL0.
Там просто стоит тупая микросхема которая в часности при включении
страничного преобразования проверяет CPL через теневой регистр и
рассчитанного линейного адреса дескриптор страниц (или ранее
директории) - если в нём 0 а (рассчитанный по схеме) CPL получился не
ноль - даётся активный сигнал (до выполнения инструкции) и он приводит
действиям внутренней программы процессора - т.е. то что мы называем
переходом на обработку исключения. У шлюза вызова при этом - своё DPL
- и фиг опять же даже если ты на него перейдёшь то получишь права если
у него будет DPL <> 0.

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

Вот как тут после этого понять прав Гук или нет?
Его слова по разному понять можно.


А на будущее - выполняй поиск по форуму. Тема "ring0 и какой я кульный хацкер" поднималась неоднократно. Бывали даже здравые мысли. Правда, редко :(


Дата: Янв 13, 2004 12:35:04

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


Дата: Янв 14, 2004 16:16:50

А что? Можно вспомнить про ошибки fdiv, f00f, AMD официально признала что в ее Athlon-ах
"при выполнении определенных последовательностей инструкций" компоненты ядра сцепляются в deadlock... Хотя по спецификациям тоже было "невозможно"... Невнимательно водили инженеры перстом по диаграммам мура :)

Короче ответ можно поискать в errata. В их названиях обычно есть слова типа "update", "revision"... В мануалах интела написано что "current errata are available on request"... Можно попробовать... хотя не вполне понятно как...

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


Дата: Янв 15, 2004 17:55:49

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

Если конечно очень хочется, то почему не провести эксперимент на голой машине самостоятельно переведя проц в защищенный режим?
Или всетаки реч идет именно о наличии операционки?


Дата: Янв 18, 2004 08:27:13 · Поправил: The Svin


А что? Можно вспомнить про ошибки fdiv, f00f

А при чём тут случаи с fdiv, f00f и обращение к страницам из кода с текущим CPL3?
Я конечно, очень многого незнаю и чувствую себя перманентным чайником, но я просто вообразить никак саму логику не могу - как можно сделать так, чтобы из CPL3 то можно было к страницам супервизора обратится то нет?
Ты же вроде сам опкод в общих чертах понимаешь?
Вот произошла выборка команды, в частности поля адреса,
рассчитался линейный адрес, если преобразование страничное включено - в той части процедуры декодирования которая связана с вычисление адреса и выборкой операнда из памяти пошла проверка в директории по старшим 10и битам
линейного и элемента директории - всё на этом этапе уже
сравняться CPL и бит доступа, - если бит доступа супервизорский, а CPL <> 0 - всё! Астивный сигнал и полетели на шлюз особого случая. Если там не супервизорский бит - пошли на страницы, нашли элемент по следующим 10и битам линейного адреса - опять такая же проверка. И такой же сценарий.
Это же просто стандартные рутинные процедуры по вычислению и проверке линейного адреса из общей процедуры вычисления и проверки на операнды в памяти. Это происходит однообразно и ещё до того как на шину адрес выдаётся.
Как тут может быть то так то не так?
Просто укажите на каком шаге такая "выборность" может произойти? Что от каких-то условий то она может по разному трактовать бит доступа к странице в сравнении в CPL?
Если системные области не защищены, т.е. CPL3 может изменять свои привелегии, то всё одно изменив их она
либо станет CPL0, либо изменит права доступа на пользовательский. Т.е. либо страницы перестанут быть супервизоскими, либо CPL станет 0. Но пока они не изменились (страница с доступом супервизора а CPL=3) то как вообще и где на каком шаге это "по разному проверка привелегий" произойдёт?
Да если такое было возможно, весь инет был бы полон статьями как в своё время он был полон статьями о незащищённости IDT в 9х. Но хотел бы обратить внимание - незащищённость IDT - это не проблема Intel, это проблема Win9x. Intel даёт возможность системникам - что хочешь защищай, что не хочешь оставляй. Кто писал ядро Чикаго решили по какой-то непонятной причине не защищать IDT, чем создали дыру в Windows где CPL3 переходила в CPL0 и делала что хотела. Но опять же она "переходила" в CPL0 а останься
она в CPL3 - то ни о каком доступе к страницам супервизора опять не могло быть речи.
Тут опять же разговор о терминах. Что такое имел ввиду Гук.
А может этот самый Гук, "слышал звон...".
Чего он больше в книге никаких пояснений то не даёт?
Блин, ввязался я снова на свою голову :)

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.060