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

Обеспечение безопасного перезапуска приложения на Delphi: решение проблемы уязвимостей

Delphi , Программа и Интерфейс , Процессы и Сервисы

Вопрос, поднятый в данном запросе, заключается в необходимости безопасного запуска пользовательского приложения из службы в текущей сессии пользователя, что является важной задачей при разработке приложений, работающих в среде Windows. При использовании Delphi 10.2.3 для реализации такой службы возникла проблема: приложение запускалось с правами службы (SYSTEM), что представляет собой серьёзную угрозу безопасности.

Проблема

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

Подтвержденный ответ

Для решения проблемы необходимо использовать токен текущего пользователя, а не токен службы. Функция WTSQueryUserToken() позволяет получить токен пользователя целевой сессии.

Альтернативный ответ

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

Решение

Чтобы запустить приложение с правами текущего пользователя, необходимо выполнить следующие шаги:

  1. Получить идентификатор сессии текущего активного пользователя с помощью функции WtsGetActiveConsoleSessionID.
  2. Использовать функцию WTSQueryUserToken() для получения токена пользователя указанной сессии.
  3. Использовать полученный токен пользователя для запуска приложения с помощью функции CreateProcessAsUser().

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

function SvcLaunchAppInCurrUserSession(const AppToLaunch: String;
                                      const Params: String = '';
                                      WaitForIt: Boolean = False;
                                      HideIt: Boolean = False): Cardinal;
var
  PI: PROCESS_INFORMATION;
  SI: STARTUPINFO;
  bResult: Boolean;
  dwSessionId: DWORD;
  hUserTokenDup, hPToken: THANDLE;
  dwCreationFlags: DWORD;
  CommandLine: string;
  Directory: string;
  pEnv: Pointer;
begin
  Result := S_OK;
  try
    try
      // ... (инициализация переменных)
      // Получение идентификатора сессии текущего активного пользователя
      dwSessionId := WtsGetActiveConsoleSessionID;
      // Получение токена пользователя
      if OpenProcessToken(GetCurrentProcess, TOKEN_READ, hPToken) then
      begin
        if WTSQueryUserToken(WTSGetActiveConsoleSessionId(@dwSessionId), hPToken, hUserTokenDup) then
        begin
          // ... (дальнейшая настройка и запуск приложения с токеном пользователя)
        end;
      end;
      // ... (остальная часть функции)
    except
      // ... (обработка исключений)
    end;
  finally
    // ... (закрытие ресурсов)
  end;
end;

Заключение

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

Этот ответ представляет собой пересказ и анализ предложенных решений, а также предоставляет пример кода, который может быть использован для решения проблемы безопасного перезапуска приложений в рамках служб, написанных на Delphi.

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

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


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

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




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


:: Главная :: Процессы и Сервисы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:12:51/0.0060899257659912/0