Защита в архитектуре IA-32

Тема в разделе "WASM.BEGINNERS", создана пользователем Gagar, 21 ноя 2006.

  1. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    Доброго времени суток! Объясните мне, дураку, одну вешь...

    Возьмем ОС windows. В неи используется плоская модель памяти. т.е. существует, положим, четыре сегмента, два на уровне ядра, два на уровне пользователя... Когды мы "запускаем" две пользовательские программы, то что происходит? Имеющие сегменты уровня пользователя разделяются на два - по одному для каждой программы? Но тогда это будет мультисегментная модель... Если нет, то получается, что сегменты двух программ совпадают... "Несовпадение" адресов в данном случае обеспечивается страничной адресацией... Если я что пишу не так, исправляйте :))) Воторой момент, как запущенный процесс определяет его это страница или нет? Ведь у свойств страницы есть только бит чтения\записи и бит пользователя\ядра. Где же реализуется защита страниц одного процесса от воздействия на них страниц другого процесса? Получается что не на аппаратном уровне? Но где же?

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

    Жду ваши комментарии по этому поводу!

    С уважением, Горячев Игорь Александрович.
     
  2. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Меняется cr3, таким образом для каждого процесса своя таблица страниц. по первой половине вопроса ты кажется селекторы с сегментами напутал.
     
  3. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Именно так.
    А помечать страницы другого процесса не надо никаким образом. К ним просто нет доступа, потому что в текущей таблице страниц их нет. Эти страницы присутствуют в физической памяти, но процесс не может получить к ним доступа, потому что ни для одному виртуальному адресу этого процесса не соответствует данная физическая страница.
     
  4. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    Спасибо за ответы!!! Теперь я понял, что такое защита IA-32... осталось математическую модель написать :)))
     
  5. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Не фига себе! 8-O
    Дай потом посмотреть, что за штукенция такая получится :)
     
  6. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    дам, конечно! Это мой диплом - математическая модель защищенной распределенной операциооной системы на IA-32...
     
  7. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    Буду периодически сюда обращаться за вопросами по тонкостям архитектуры IA-32 :)))
     
  8. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    Еще один вопрос.

    В записи страницы в таблице страниц присутствуют три бита (с 9 по 11) называемые в имеющейся у меня документации "доступными для системного программиста". Вопрос: что означает эта доступность и могу ли я использовать эти три бита с целью построения системы защиты?
     
  9. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    Gagar

    IMHO имелись ввиду системные программисты, пишущие операционные системы. Если память мне не изменяет эти три бита доступны в режиме ядра и абстрактная ОС может их использовать для своих нужд...
     
  10. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Windows вроде бы их не использует. Простейший способ проверки - выставить их в 1 и ждать бсод :)

    ЗЫ: Поправка! Бит 9 - Copy-On-Write
     
  11. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    И того остается два бита? Ну тоже не плохо :)))
     
  12. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    Неплохо? От них толку ноль. На них процессор никак не реагирует. Не проще ли выделить в памяти, доступной только в ринг0 целую таблицу битовых полей и там плясать на всю катушку ))?
     
  13. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    А в моей модели защиты вовсе не нужно чтоб процессор на них реагировал в виде исключений... На этих двух битах можно так наплясаться, что голова закружится :))) Мне реально один бит нужен, чтоб реализовать достаточную систему защиты :) Мне всего лишь нужно различать страницы, какие можно передавать другим процессам, а какие нельзя. Плюс у меня есть волшебные битики чтения\записи и присутствия\отсутствия.
     
  14. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    А можно ведь сделать свой битовый массив и вообще не зависеть ни от системы, ни от таких-же программистов, которые решили эти два несчастных бита использовать для своих нужд.
     
  15. Gagar

    Gagar New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    12
    Адрес:
    Russia
    Стоп!!! А вот теперь я не понял одной важной вещи!

    В Windows есть така программа ArtMoney. Она сканирует адресное пространство выбранного процесса (игрушки) и позволяет менять найденные значения. Я сам не раз таким образом увеличивал себе деньги в Героях :))) По логике вещей память другого процесса не должна быть доступна! Возникает вопрос как же это работает и можно ли от такого хака защититься?
     
  16. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    Gagar

    Можешь написать драйвер, который будет устанавливать эти биты на защищенных страницах. Хотя толку ноль, от взлома со стороны программ пользовательского режима можно защититься и стандартными средствами NT, а от кода режима ядра это не спасет )
     
  17. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    В юзер-моде - ReadProcessMemoryEx или ZwReadVirtualMemory. Защититься можно, если перехватить в SDT ZwReadVirtualMemory и блокировать доступ к памяти других процессов всех, кроме csrss.exe. Outpost - тому пример, орет аларм при попытке записи.
    На уровне ядра - KeAttachProcess или KeStackAttachProcess; плюс есть возможность вручную преобразовывать адреса и получить доступ куда угодно вообще без вызова системных функций. Защиты нет.
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Первый раз слышу про такое =)
    Как правильно сказал glig, сделать такую защиту, чтоб даже из r0 не было доступа это трудно, может быть даже невозможно. Ибо никто не мешает вручную перевести логические адреса в физические.
     
  19. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Ну все поняли главное :))
     
  20. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    На любую защиту найдется хак.
    А из ринг 0 можно сделать что угодно. Никто и никогда не защитит инфу от доступа на ринг 0. Находясь в кольце 0, ты - БОГ, а от бога не спасет никакая, даже самая навороченная защита.