Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

### Обход ограничений безопасности в Delphi: использование Access Tokens и `SetNamedSecurityInfo` для доступа к файлам других процессов

Delphi , Синтаксис , Справочник по API-функциям

Обход ограничений безопасности в Delphi: использование Access Tokens и SetNamedSecurityInfo для доступа к файлам других процессов

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

Описание проблемы

Имеем два процесса: первый запущен под администраторской учетной записью, второй – под учетной записью пользователя, у которого нет прав на доступ к администрируемым процессам. Процессы должны взаимодействовать, сравнивая пути, откуда они были запущены. Однако второй процесс не может получить информацию о пути к первому. Использование функций CreateToolhelp32Snapshot, OpenProcess с уровнем доступа PROCESS_QUERY_LIMITED_INFORMATION и QueryFullProcessImageName не применимо, так как они работают начиная с Windows Vista и Windows 7, а требуется решение для более старых версий операционной системы.

Альтернативный подход к решению

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

Подтвержденное решение

Использование механизма Access Tokens и функции SetNamedSecurityInfo может помочь в решении задачи. Сначала администрируемый процесс может открыть другой процесс, получить его токен и дескриптор безопасности, затем модифицировать список контроля доступа (DACL) для включения новых прав для желаемого пользовательского аккаунта или группы, после чего установить обратно токен и дескриптор безопасности.

Пример кода на Object Pascal (Delphi)

uses SysUtils, Windows;

function GetProcessPath(const ProcessID: cardinal): string;
var
  ProcessHandle: THandle;
  ProcessName: array[0..(MAX_PATH - 1)] of char;
begin
  ProcessHandle := OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, ProcessID);
  if ProcessHandle <> 0 then
  begin
    ZeroMemory(@ProcessName[0], SizeOf(ProcessName));
    if QueryFullProcessImageName(ProcessHandle, 0, @ProcessName[0], SizeOf(ProcessName)) then
      Result := ProcessName;
    CloseHandle(ProcessHandle);
  end;
end;

Этот код не будет работать для процессов, запущенных под администраторской учетной записью, без соответствующих прав. Следующий пример демонстрирует, как модифицировать токен для предоставления доступа к процессу:

uses Windows;

procedure ModifyTokenToAllowAccess(const ProcessID: DWORD; const UserSID: PSID);
var
  ProcessHandle, TokenHandle: THandle;
  TokenInfo: TTokenInformation;
  Access: PACL;
  SD: PSECURITY_DESCRIPTOR;
begin
  ProcessHandle := OpenProcess(TOKEN_QUERY, False, ProcessID);
  if ProcessHandle <> 0 then
  begin
    if GetTokenInformation(ProcessHandle, TokenUser, nil, 0, @TokenInfo);
    Access := CreateMutableSecurityDescriptor(TokenInfo.User.Sid, True);
    // Добавить в ACL необходимые права для UserSID
    SD := CreateSecurityDescriptorInSecurityDescriptor(Access, True);
    SetEntriesInAuditAndAccessAce(SD, FALSE, UserSID, GENERIC_READ or GENERIC_EXECUTE, NO_INHERITANCE);
    // Обновить токен процесса с новым SD
    SetTokenInformation(ProcessHandle, TokenSecurityDescriptor, SD, SizeOf(TSECURITY_DESCRIPTOR));
    CloseHandle(ProcessHandle);
  end;
end;

В этом примере необходимо заменить CreateMutableSecurityDescriptor и SetEntriesInAuditAndAccessAce на реальные функции из Delphi Winapi, которые позволяют работать с токенами доступа и дескрипторами безопасности. Этот код является лишь иллюстрацией и требует дальнейшей реализации и тестирования.

Заключение

Для решения поставленной задачи важно тщательно продумать логику взаимодействия между процессами, а также обеспечить безопасность доступа к информации. Использование Access Tokens и SetNamedSecurityInfo может быть эффективным, но требует глубоких знаний в области безопасности Windows и программирования на Delphi.

Создано по материалам из источника по ссылке.

Описание контекста: Задача заключается в обходе ограничений безопасности в среде разработки Delphi для обеспечения доступа к файлам процессов, работающих под разными учетными записями, с использованием Access Tokens и функции `SetNamedSecurityInfo`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 13:55:34/0.0035479068756104/0