Ограничение доступа к отображаемому в память именованному файлу

Тема в разделе "WASM.X64", создана пользователем Sercher, 8 ноя 2010.

  1. Sercher

    Sercher New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    59
    Создаю c помощью CreateFileMapping область памяти для взаимодействия процессов, как мне открыть доступ к ней только для ОПРЕДЕЛЕННЫХ мной процессов? А то выходит после создания общей именнованной области памяти к ней может любой процесс доступ получить зная ее наименование, а это не есть гуд. Создаю все в win 7 64
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Штатными средствами - никак. Если очень надо, то есть два варианта - либо 1) проверяешь в цикле контрольную сумму данных, которые хранишь в этой именованной секции (но это защита только от изменения), либо 2) пишешь драйвер, фильтрующий обращения к секции. Второй вариант на 64-битных системах реализовать (почти) нереально.

    Да, именно так, потому что подсистема безопасности в NT основывается на том, что субъектом защиты является пользователь, а не процесс. Ну, не всегда это удобно, прямо скажем, в современных реалиях особенно, но уж что есть, то есть. Тут такой вариант можно придумать, не знаю, подойдёт ли. Если процессы, от которых требуется защитить секцию, будут выполняться исключительно под не-админом, тогда можно создать в системе дополнительную учётную запись, специально для твоего софта, с именем и паролем, которые тебе, разумеется, известны, ну и назначать DACL на твою секцию с доступом только этой учётке. Ну и, соответственно, имперсонироваться в эту учётку, когда нужен доступ к секции. Но это всё как вариант, если только, потому что учти, что злонамеренный код может быть внедрён в твой процесс, тогда он также получит доступ к этой секции, и что будешь делать? Процессы/потоки свои защищать тоже? Это, знаешь ли, уже на написание проактивки тянет. Может быть, не стоит заниматься тем, чем твой софт заниматься не должен? Это работа аверов.
     
  3. Sercher

    Sercher New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    59
    Спасибо за ответ.
    Оставлю пока все по старому, возможно позже для обмена информацией между процессами буду использовать именнованые пайпы, и с ними что то придумаю. Например проверку ключа который должен передать присоединяющейся к нему процесс, если ключ не подходит то удалять пайп а затем заново его создавать.
    Правда скорее всего упадет общая производительность т.к. пайп помедленнее прямого чтения в память.
     
  4. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Есть еще один мезханизм - Integrity Levels, он позволяет ограничить доступ на запись со стороны процессов с более низким IL.
    http://msdn.microsoft.com/en-us/library/bb625963.aspx

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    У всякого обьекта имеется дескриптор безопасности определяющий уровень доступа к обьекту. В данном случае обьект секция. Как и сказал Deyton.
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Я уже написал об этом выше, к сожалению, это не спасёт от кода, запущенного от админа, т.к. админские учётки обладают правом становится владельцем (take ownership) любого объекта, после чего возможно изменение DACL. В общем, NT-шная модель безопасности не рассчитана на то, что нужно автору в данном случае.
     
  7. Sercher

    Sercher New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    59
    Заставили переписывать программу с нуля, пока ограничеваю доступ на чтение через шифрование файла по общему ключу, на запись через регулярную проверку crc32. И вот хочу сменить отображаемые файлы на именованные пайпы, ведь насколько я понимаю после того как два процесса соединились по ней третий процесс не как не может прочитать передаваемую инфу?
    Спрашиваю в связи с тем что бытует мнение будто трубы тоже реализованы через файл мэппинг, и выходит при их создании просто создается такой же отображаемый файл для реализации трубы, с которого может производиться несанкционированное чтение.... Кто знает механизмы реализации пайпов в винде подскажите, это так? И какие потери в производительности мне светят при переходе с отобрж-х файлов к пайпам?
     
  8. Ladr

    Ladr New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2009
    Сообщения:
    17
    LPC вроде как лучше именованных пайпов так как позволяет узнать PID клиентского процесса, что важно для данной задачи.