Как стать автором
Обновить
Страховой Дом ВСК
Более 30 лет на рынке страхового бизнеса

Использование именованных каналов NamedPipe для выполнения команд от имени администратора

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.1K

Привет, Хабр!

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

Меня зовут Владимир Рябовол, в качестве .NET разработчика Страхового Дома ВСК я занимаюсь разработкой desktop-приложения «Агент АРМКоординатор», которое уже показало первые результаты нового качества опыта для специалистов и пользователей.

Главное окно приложения "Агент АРМКоординатор"
Главное окно приложения "Агент АРМКоординатор"

О блоках:

  • Информация о ПК — просмотр и копирование информации о пользователе, его ПК.

  • Состояние ПК — результаты мониторинга системы, на основании выполнения PowerShell скриптов.

  • Утилиты — состоит из кнопок запуска для «Распознать текст из области»«Распознавать текст из файла», «Сканирование QR-кода», «Конвертер Изображений». Благодаря этим функциям можно выделить любую часть экрана и получить текст из конкретного участка, загрузить изображение для получения текста из него, отсканировать QR-код подключенной к ПК веб-камерой или загрузить изображение с QR-кодом, запустить конвертацию в/из PDF.

  • Ссылки — добавление пользователем кнопки на любой ресурс. Как гиперссылкой на сайт, так и на открытие приложения.

  • Инструменты — пользователь может самостоятельно запускать скрипты для решения типичных проблем самостоятельно.

Ключевой блок приложения создан для мониторинга систем — мы прибегли к использованию мощных инструментов PowerShell. Каждый день наш агент запускает специальные скрипты, дважды в день, и результат выводится в удобном для пользователя формате в блоке Состояние ПК.

Больше всего здесь интересен скрипт, который смотрит атрибуты SMART SSD и выводит оставшееся здоровье диска. В Страховом Доме ВСК доменная структура сети и выполнение скриптов регулируется настройками политики безопасности. Значит, выполнение скриптов обычному пользователю разрешено только в рамках текущего пользователя — для просмотра атрибутов SMART необходимы права администратора. Здесь мы и столкнулись с задачей легального обхода запрета запуска скриптов.

Наш агент установлен на всех ПК компании, развернута и вспомогательная Windows-служба, которая определяет основной ПК пользователя. Служба работает в контексте локального администратора — мы решили воспользоваться её услугами. Для безопасного взаимодействия мы применили именованный канал NamedPipe.

Именованные каналы — это механизм взаимодействия между процессами в операционных системах Windows. Механизм позволяет процессам обмениваться данными друг с другом через специальные «каналы», создаваемые с определенным именем в файловой системе. На стороне службы был развернут сервер NamedPipeServerStream, который ждет подключения клиента, знающего секретное имя.

//Создаём объект безопасности для именованного канала

PipeSecurity ps = new ();

//Получаем идентификатор безопасности для всех пользователей

var sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);

NTAccount account = (NTAccount)sid.Translate(typeof(NTAccount));

//Устанавливаем правила доступа для учетной записи NT, позволяя чтение и запись

ps.SetAccessRule(new PipeAccessRule(account, PipeAccessRights.ReadWrite, System.Security.AccessControl.AccessControlType.Allow));

//Создаем сервер именованного канала с заданными параметрами, включая объект безопасности

string pipeName = "секретное_имя";

var pipeServer = NamedPipeServerStreamConstructors.New(pipeName, PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.None, 512, 512, ps);

try

{

//Ожидаем подключение клиента к серверу

    await pipeServer.WaitForConnectionAsync();

//Создаем поток StreamReader для чтения данных от клиента

    var reader = new StreamReader(pipeServer);

    var message = await reader.ReadLineAsync();

//Выполняем команду PowerShell полученную от клиента

    var result = await RunPowerShell.Run(message);

//Отправляем результат выполнения клиенту

    var writer = new StreamWriter(pipeServer);

    await writer.WriteAsync(result);

    await writer.FlushAsync();

}

catch (Exception ex){ }

//На стороне агента подключение осуществляется через NamedPipeClientStream

//На стороне клиента создаем именованный канал с заданным именем

string pipeName = " секретное_имя";

var pipeClient = new NamedPipeClientStream(".", pipeName, PipeDirection.InOut);

try

{

//Подключаемся к серверу именованного канала

    await pipeClient.ConnectAsync();

//Создаем поток StreamWriter для записи данных в канал

    var writer = new StreamWriter(pipeClient);

//Отправляем сообщение

    await writer.WriteLineAsync(message);

    await writer.FlushAsync();

//Создаем поток для чтения ответа

    var reader = new StreamReader(pipeClient);

    result = reader.ReadToEnd();

}

catch (Exception ex) { }

Скрипты находятся в папке C:\Program Files\VSK\Scripts, что позволяет не беспокоиться о том, что обычный пользователь сможет изменить скрипт или добавить другой. Вместе с тем, в рамках безопасности наши скрипты подписаны сертификатом компании, ведь компании политика запуска скриптов RemoteSigned, не позволяющая запуск сценариев PowerShell, которые не имеют цифровой подписи.

Скрипт, предполагаемый к запуску от учетной записи администратора, должен начинаться с комментария #admin. Агент, при открытии скрипта, смотрит на наличие этого комментария. Если есть, то через NamedPipe он передается на выполнение службе, которая в ответ вернет результат. Если комментарий в начале отсутствует, скрипт будет выполнен от имени пользователя.

В нашем агенте есть и функционал опроса пользователя о его настроении, работоспособности, работе определенных систем. Полученную информацию мы также передаем службе через NamedPipe, которая в дальнейшем шифруется AES-алгоритмом и передается через TCP-протокол на сервер.

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

Буду держать тебя в курсе, Хабр!

Теги:
Хабы:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Публикации

Информация

Сайт
www.vsk.ru
Дата регистрации
Дата основания
Численность
5 001–10 000 человек
Местоположение
Россия