Права на чтение/запись страниц памяти в ring0

Тема в разделе "WASM.NT.KERNEL", создана пользователем qman, 4 дек 2008.

  1. qman

    qman New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    14
    Здраствуйте! У меня вот такой вопрос, мне нужно защитить страницу памяти в защищенном режиме в нулевом кольце. Для страничной памяти предусмотрены права доступа на чтение и запись, но насколько я понял они действуют только для разных уровней превилегий, на нулевом все и всем разрешено как на чтение так и на запись, возможна я и ошибаюсь, но вопрос от этого не меняется, можно защитить страницу на запись?
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    5.6.4 Write Protect
    (CR0.WP) Bit
    The ability to write to read-only pages is governed by the
    processor mode and whether write protection is enabled. If
    write protection is not enabled, a processor running at CPL 0, 1,
    or 2 can write to any physical page, even if it is marked as readonly.
    Enabling write protection prevents supervisor code from
    writing into read-only pages, including read-only user-level
    pages.
    A page-fault exception (#PF) occurs if software attempts to
    write (at any privilege level) into a read-only page while write
    protection is enabled.
     
  3. qman

    qman New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    14
    Этим способом можно защитить страницу от записи, но можно ли защитить таблицу?
    Можно ли запретить на запись те страницы в которых находятся таблицы, или атрибуты таблицы страниц памяти изменяются командами процессора, если да - то которыми?
     
  4. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    qman
    Если ты в CR0 поставишь этот бит, то даже программы работающие в 0м кольце будут обламываться с записью в страницы, для которые бит R/W=0 хотя бы в одной из таблиц страниц. Если тебе нужно защитить таблицы страниц, то ты можешь вообще оставить их вне линейного адресного пространства, тогда их даже прочитать никто не сможет.
     
  5. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Информация о страницах памяти (exp 4кб \ 4 мб) хранится в соответсвующих записях каталога таблиц\каталогов страниц. Если страница присутствует в памяти, то в записи выставляется бит (present = 1).
    Можно самому выставить биты (present = 0) в тех страницах в которых загружена защищаемая информация.

    Каталог таблиц\каталоги страниц размещены в страницах памяти, им можно выставить (present = 0) и отлавливать #PF (хук в таблице IDT, которая тоже расположена в страницах памяти).

    Таким образом можно подменять страницы и управлять доступом к памяти.
    Это реализовано в рутките SHADOW WALKER.

    http://www.securityfocus.com/infocus/1851
     
  6. qman

    qman New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    14
    Всем спасибо за помощь, буду приступать к практической реализации, но у меня еще одна просьба, возможно уже где-то описаны практические реализации данных методов или работа со страничной памятью ( я только но открываю для себя PM ), поделитесь ссылками, и простите за такой глупый вопрос, в googlе я не нашел, возможно плохо искал и SHADOW WALKER также не нашел!
     
  7. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Дык это фигня. Никто не мешает загрузить свою IDT. Или cr3, правда тут гемора побольше.
     
  8. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    qman
    описана в книге Шрайбер С. Недокументированные возможности Windows 2000 (+CD-ROM), 2002
    в архиве ещё примеры к книге _http://webfile.ru/2445274
    смотри w2k_spy.h

    Теория
    www.intel.com/products/processor/manuals
    Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide

    Medstrax
    "Memory pages containing SSDT and IDT are set to read-only in the page table"[1]

    Антируткитное средство может котролировать изменения регистра IDTR [2]

    Автор при реализации сам выберет путь.

    1. Лекции Хоглунда и Батлера www.thefengs.com/wuchang/work/courses/cs592_spring2007/Lecture05.ppt
    2. packetstormsecurity.org/papers/bypass/bypassEPA.pdf

    по всем вопросам пиши
     
  9. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Изменение IDTR без виртуализации не детектится. Единственный способ - трейс каждой инструкции. Но этот способ итак снимает все вопросы по отслеживанию записи каталогов страниц и пр.
     
  10. qman

    qman New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    14
    А можно подробнее?
     
  11. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Выполнение каждой инструкции в пошаговом режиме. Выполнили, посмотрели на следующую.
    Если нам кажется что это какая то бяка (пишет/читает не то, в регистры лезет ненужные и далее в таком духе), то мы ее пропустим, где то запомнив, что же она такое нехорошее хотела сделать :) А если на наш суровый взгляд инструкция невинная, то и х..й с ней, пусть выполняется. Если реализуешь - памятник обеспечен))) Ну не пямятник, но скиллы свои поднимешь до нехилых высот ))
     
  12. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Medstrax
    Почему не годится периодически проверять значение регистра IDTR?
     
  13. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    В периодах между проверками можно успеть изменить IDTR, поиметь систему во все щелочки
    и вернуть все обратно.