
Привет, Хабр! Представьте: нужно настроить защищенную среду для работы с документами «Для служебного пользования» на сотне ПК. Каждый раз приходится ехать в офис, сидеть полдня за компьютерами и кликать по кнопкам. Сотрудники заказчика в это время не работают, а вы потихоньку сходите с ума от рутины.
Это то, с чем мы столкнулись при внедрении Secret Net Studio. На первый взгляд, казалось, что это нельзя автоматизировать.
Но оказалось, что можно! Причем не нужны никакие сторонние инструменты. Только то, что есть в Windows из коробки, немного смекалки и помощь нейросети.
В этой статье мой коллега Даниил Куликов — старший инженер технической поддержки К2 Кибербезопасность, — подробно расскажет, как решить эту задачу с помощью батч-скриптов, планировщика задач и консольных утилит. Его подход можно адаптировать для автоматизации многих других рутинных задач в корпоративной среде. Эта статья будет полезна системным администраторам и ИБ-специалистам в госструктурах и крупных компаниях.
Контекст: НСД, SNS и зачем оно нужно
Сначала объясню, при чем здесь несанкционированный доступ. Это может быть умышленный взлом или случайный взгляд коллеги на конфиденциальный документ. Государство и крупный бизнес серьезно относятся к своим данным, особенно если на них стоит гриф «ДСП» (для служебного пользования). Это не гостайна, но и не информация для обсуждения в курилке.
Чтобы защитить такие данные, придумали целый класс систем. Одна из них — Secret Net Studio. SNS умеет многое. Контролирует доступ — пускает в систему только по специальным электронным ключам и паролям. Шифрует данные, следит за устройствами — запрещает подключение флешек, внешних дисков и даже веб-камер. Ведет аудит — записывает действия пользователя, чтобы при инциденте понять, кто что и когда делал.
Казалось бы, установил по инструкции и радуешься, однако у заказчика была специфическая задача: сотрудникам нужно работать с документами ДСП через специальную версию браузера «Атом». При этом нужно было гарантировать, что служебная информация не утечет за пределы защищенного контура.
Реализовали это при помощи разделения на два типа сессий. В неконфиденциальной сессии можно пользоваться интернетом, но доступ к «Атому» и файлам ДСП заблокирован. В конфиденциальной сессии запускается только «Атом», а все создаваемые документы автоматически помечаются как ДСП и находятся под контролем Secret Net.
Проблема в том, что в SNS есть механизм разделения сессий, но система не поддерживает из коробки сложную логику. Каждый раз для каждой машины требовалась ручная настройка: установить браузер, создать нужные папки, а затем с помощью утилит Secret Net раздать десятки команд, чтобы «объяснить» системе, за какими файлами и папками следить, какие процессы считать доверенными. К сожалению, не нашлось готового удобного решения, но я все-же начал искать выход.
«А что, так можно было?»
В какой-то то момент мне надоело раз за разом ездить на объекты и настраивать рабочие места вручную. Хотелось найти более эффективное решение, но ИБ-политика компании устанавливала жесткие рамки, которые почти не оставляли места для маневра.
Инфраструктура неприкосновенна. Заказчик — крупная, критически важная организация. Его ИT-инфраструктура сертифицирована, и о том, чтобы поставить стороннее ПО для автоматизации, не могло быть и речи. Это означало новые проверки безопасности, долгое согласование и потенциальные риски. Работать можно было только с тем, что уже есть.
PowerShell под запретом — заблокирован политиками безопасности. Пришлось искать альтернативы среди старых добрых консольных утилит.
Закрытая сеть. Сетевая инфраструктура была настроена по принципу «запрещено все, что не разрешено». Единственной возможностью оставались открытые SMB-порты для удаленной работы с файлами и служебная учетная запись с необходимыми правами.
Тупик? На первый взгляд — да, но в Windows достаточно много инструментов, которые почему-то игнорируют. В частности, старый добрый планировщик задач (schtasks.exe). Древний, как Windows NT, но надежный инструмент, позволяющий запускать программы на удаленных машинах. А еще у меня были встроенные утилиты самого Secret Net — в документации нашлись консольные команды для настройки.
Для начала я решил проделать настройку руками, просто чтобы понять, реализуется ли задача в принципе. Пошагово воспроизвести через командную строку всю последовательность: создать задачу в планировщике, запустить ее удаленно, передать команду утилите Secret Net.
Попробовал, поэкспериментировал, начало получаться. Стало ясно: автоматизация возможна. Причем для нее не нужно ничего, кроме стандартных средств Windows и смекалки. Оставалось превратить эту идею в рабочий скрипт.
Вкалывают роботы
Когда стало понятно, что нужно делать, встал вопрос — как это сделать быстро. Писать с нуля скрипты на Batch — задача не сложная, но муторная. И здесь пригодилась наша внутренняя LLM-ка GPT.
Запрос был такой: создать batch-скрипт, который запросит у пользователя имя удаленного компьютера и логин, удаленно создаст на этом компьютере две задачи из заранее подготовленных XML-файлов, запустит одну из задач, дождется ее выполнения, выполнит команду для утилиты Secret Net и почистит временные задачи.
Конечно, запустилось все это не сразу, но основная проблема была не в глупости нейросетки, а в особенностях окружения. Сервер у заказчика был старый, и оказалось, что планировщик задач при удаленном запуске от имени администратора ведет себя не так, как ожидаешь. Некоторые операции требовали запуска от имени системы, а не просто с повышенными правами.
Анатомия решения: препарируем скрипты
Теперь технический разбор. Посмотрим на скрипты изнутри и разберемся, почему они выглядят именно так.
Архитектура «из того, что было»: два батника и XML
Итоговое решение состоит из двух основных batch-скриптов (Main_script.bat и DSP_config.bat), а также двух XML-файлов. Такая структура продиктована ограничениями среды.
Почему batch-файлы, а не PowerShell? Ответ вы уже знаете: PowerShell был заблокирован политиками безопасности. Пришлось обратиться к старому, но все еще работающему языку сценариев командной строки Windows.
Почему два скрипта, а не один? У них принципиально разные задачи. Первый — «скрипт-оркестратор». Он запускается на компьютере администратора и управляет процессом удаленно. Второй — «скрипт-конфигуратор» — выполняется на целевой машине пользователя и производит тонкую настройку.
Зачем здесь XML? Голый batch-файл не сможет создать сложные задачи в планировщике. Утилита schtasks.exe позволяет импортировать задачу со всеми параметрами из заранее подготовленного XML-файла. Это чище и надежнее, чем задавать параметры десятками ключей в командной строке.
Скрипт-оркестратор
Шаг 1. Запуск скрипта
Все начинается с диалога. Скрипт запрашивает у администратора две вещи:
@chcp 1251
set /p remoteComputer="Введите имя ПК (например, computer1): "
set /p targetUser="Введите логин пользователя (например, ivanov): "
Команда @chcp 1251 обеспечивает корректное отображение кириллицы в именах пользователей и путях.
Шаг 2: Проверка на здравый смысл
Прежде всего, скрипт проводит быструю проверку: установлен ли Secret Net Studio на целевой машине.
if not exist "\\%remoteComputer%\C$\Program Files\Secret Net Studio\Client\SnIcon.exe" (
echo SNS не установлен. Установите SNS и повторите попытку.
timeout /t 5
exit /b
)
Скрипт обращается к административному ресурсу C$ через сеть, чтобы проверить наличие исполняемого файла SNS. Если базовое условие не выполнено, нет смысла продолжать.
Шаг 3: Магия удаленного выполнения
Затем скрипт использует schtasks, чтобы «подкинуть» работу на удаленную машину:
schtasks /create /xml "C:\Users\...\DSP.xml" /tn "DSP" /S %remoteComputer%
schtasks /create /xml "C:\Users\...\ATOM.xml" /tn "ATOM" /S %remoteComputer%
Эти команды берут заранее подготовленные XML-«чертежи» и создают по ним две задачи в планировщике на компьютере клиента: одну для установки браузера «Атом», другую — для основной настройки ДСП.
Шаг 4: Установка «Атом» и ожидание
Далее начинается ключевая часть скрипта. Нужно установить браузер «Атом», но как узнать, что установка завершилась? Решение — цикл ожидания:
if not exist "\\%remoteComputer%\C$\Program Files\Mail.ru\Atom\Application\atom.exe" (
echo Atom не найден. Запускаю установку...
schtasks /run /tn "ATOM" /S %remoteComputer%
timeout /t 120 /nobreak
)
Скрипт проверяет наличие исполняемого файла «Атом». Если его нет — запускает задачу установки и терпеливо ждет две минуты. Флаг /nobreak не позволяет случайно прервать ожидание нажатием клавиши.
Шаг 5: Настройка и очистка
Когда подготовительные работы завершены, оркестратор выставляет пользователю нужный уровень доступа в Secret Net и удаляет временные задачи из планировщика:
schtasks /run /tn "DSP" /S %remoteComputer%
"\\xxx-xxx\xxx\SnMCUtil1.exe" -user -set %targetUser% -level 1
schtasks /delete /tn "ATOM" /S %remoteComputer% /f
schtasks /delete /tn "DSP" /S %remoteComputer% /f
Полный код скрипта
Скрытый текст
@echo off
@chcp 1251 :: Установка кодировки для русского языка
:: Запрос имени удаленного компьютера
set /p remoteComputer="Введите имя ПК (например, computer1): "
:: Запрос логина пользователя
set /p targetUser="Введите логин пользователя (например, ivanov): "
:: Проверка, установлен ли SNS на удаленном компьютере
if not exist "\\%remoteComputer%\C$\Program Files\Secret Net Studio\Client\SnIcon.exe" (
echo SNS не установлен. Установите SNS и повторите попытку.
timeout /t 5
exit /b
)
:: Временное сохранение логина пользователя на сервере для доступа из основного скрипта
echo %targetUser% > \\xxx-xxx\xxx\temp_user.txt
:: Пути к XML-шаблонам задач
set "xmlFilePath=C:\Users\XXXXXSN\Desktop\DSP.xml"
set "xmlFilePath2=C:\Users\XXXXXSN\Desktop\ATOM.xml"
:: Импорт задач в планировщик удаленного компьютера
schtasks /create /xml "%xmlFilePath%" /tn "DSP" /S %remoteComputer%
schtasks /create /xml "%xmlFilePath2%" /tn "ATOM" /S %remoteComputer%
:: Проверка, установлен ли Mail.Ru Atom
if not exist "\\%remoteComputer%\C$\Program Files\Mail.ru\Atom\Application\atom.exe" (
echo Atom не найден. Запускаю установку...
schtasks /run /tn "ATOM" /S %remoteComputer%
timeout /t 120 /nobreak :: Пауза 2 минуты на установку
)
:: Цикл ожидания успешной установки Atom
:checkMailruFolder
if not exist "\\%remoteComputer%\C$\Program Files\Mail.ru\Atom\Application\atom.exe" (
echo Atom все еще не установлен. Повторная проверка через 2 минуты...
timeout /t 120 /nobreak
goto checkMailruFolder
) else (
echo Atom установлен. Запускаю основную задачу DSP...
schtasks /run /tn "DSP" /S %remoteComputer%
)
:: Установка уровня доступа пользователя в SNS
"\\xxx-xxx\xxx\SnMCUtil1.exe" -user -set %targetUser% -level 1
:: Удаление временного файла с логином
del \\xxx-xxx\xxx\temp_user.txt
:: Удаление временных задач из планировщика
schtasks /delete /tn "ATOM" /S %remoteComputer% /f
schtasks /delete /tn "DSP" /S %remoteComputer% /f
pause :: Пауза для просмотра результата
Скрипт-конфигуратор
Теперь расставляем защиту на все нужные элементы системы. Этот скрипт выполняется локально на машине клиента, будучи запущенным через планировщик.
Шаг 1. Получение инструкций
Первая проблема, которую нужно решить для запуска этого алгоритма — выбрать пользователя, для которого нужно выполнить настройку.
Оркестратор решает это так: он создает на общей файловой шаре временный файл temp_user.txt, куда записывает логин целевого пользователя. Конфигуратор читает этот файл, чтобы понять, с кем работать.
Шаг 2. Основная работа — установка атрибутов безопасности
Далее начинается работа с утилитами Secret Net. Сначала с помощью SetSecAttrib.exe на ключевые папки (папку с документами ДСП и папку с приложением «Атом») устанавливаются атрибуты конфиденциальности.
"C:\Program Files\Secret Net Studio\Client\SetSecAttrib.exe" "C:\Users\%targetUser%\Documents\ДСП" -l 1 -f IF IS -r SF
Параметр -l 1 устанавливает первый уровень конфиденциальности, флаги -f IF IS и -r SF определяют правила наследования атрибутов для файлов и подпапок. Теперь система знает, что защищать.
Шаг 3. Контроль временных файлов
Но просто пометить папки недостаточно. Современные приложения создают массу временных файлов, кэшей, логов в разных местах профиля пользователя. Если их не контролировать, возможны утечки. Для этого используется команда SnMCUtil1.exe -redir -add:
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\webcache\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\office\16.0\officefilecache"
Эта команда приказывает Secret Net взять под полный контроль доступ к указанным путям. Любая попытка записать или прочитать файл из этих папок будет проходить через фильтры безопасности SNS. Длинный список таких команд в скрипте — результат анализа того, куда браузер и Office могут сохранять временные данные. Это методичное закрытие всех потенциальных каналов утечки.
Шаг 4. Аудит и проверка результатов
Последняя команда в скрипте обеспечивает контроль качества выполнения скрипта:
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -list >> \\xxx-xxx\xxx\Rules_%computerName%.txt
Она запрашивает у Secret Net текущий список всех правил перенаправления и сохраняет его в текстовый файл на общей шаре. Имя файла содержит имя компьютера, что позволяет легко идентифицировать результаты для каждой машины.
Этот файл пригодится для аудита. Администратор сможет, не подключаясь к удаленной машине, открыть файл и убедиться, что скрипт отработал корректно.
Полный код скрипта
Скрытый текст
@chcp 1251 :: Установка кодовой страницы 1251 (кириллица) для корректного отображения русских символов
@echo off :: Отключение вывода команд в консоль
set "computerName=%COMPUTERNAME%" :: Получение имени текущего компьютера
set "filePath=\\xxx-xxx\xxx\temp_user.txt" :: Путь к временному файлу с логином целевого пользователя (на сетевом ресурсе)
:: Чтение первой строки из файла temp_user.txt -- там хранится логин пользователя
for /f "usebackq delims=" %%i in (`type "%filePath%" ^| findstr /n "^"`) do (
if %%i equ 1 set "targetUser=%%j" :: Присвоение первой строки переменной targetUser
)
set "targetUser=%targetUser: =%" :: Удаление пробелов из строки (очистка логина)
:: Создание папки "ДСП" в профиле пользователя
mkdir "C:\Users\%targetUser%\Documents\ДСП"
:: Копирование ярлыка ДСП в созданную папку (подмена при необходимости)
copy "\\xxx-xxx\xxx\ДСП.lnk" "C:\Users\%targetUser%\Documents\ДСП" /y
:: Создание символической ссылки на рабочем столе, ведущей в папку "ДСП"
mklink /d "C:\Users\%targetUser%\Desktop\ДСП" "C:\Users\%targetUser%\Documents\ДСП"
:: Установка атрибутов безопасности через SetSecAttrib.exe (SNS):
"C:\Program Files\Secret Net Studio\Client\SetSecAttrib.exe" "C:\Users\%targetUser%\Documents\ДСП" -l 1 -f IF IS -r SF
:: Аналогично -- защита папки с приложением Mail.Ru Atom
"C:\Program Files\Secret Net Studio\Client\SetSecAttrib.exe" "C:\Program Files\Mail.Ru\Atom\Application" -l 1 -f IF IS -r SF
:: Добавление путей в список перенаправления SNS (SnMCUtil1.exe -redir -add)
:: Это позволяет SNS контролировать доступ к критичным папкам и кэшам
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\mail.ru\atom"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\cmf-client-ext"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\program files\cmf\client-ext2"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\vault\userprofileroaming"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\windows\system32\spool\drivers\x64"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\d3dscache"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\locallow\intel\shadercache"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\assembly"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\connecteddevicesplatform\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\deployment"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\packages"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\temp\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\documents\secret net studio\mail"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\roaming\microsoft"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\credentials"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\explorer"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\forms"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\infopath"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\internet explorer\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\onenote"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\programdata\security code\secret net studio\client"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows sidebar"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\tiledatalayer\database"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\locallow\microsoft\cryptneturlcache\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\locallow\microsoft\internet explorer\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\actioncentercache\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\webcache\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\notifications"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\inetcookies\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\inetcache\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\security code\secret net studio\client"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\office\15.0\officefilecache"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\office\16.0\officefilecache"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\temporary internet files\content.word"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\explorer\notifyicon\**"
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -add "\appdata\local\microsoft\windows\temporary internet files\content.mso"
:: Вывод текущего списка правил перенаправления в файл для аудита
"\\xxx-xxx\xxx\SnMCUtil1.exe" -redir -list >> "\\xxx-xxx\xxx\Rules_%computerName%.txt"
exit :: Завершение скрипта
Универсальность подхода
Хотя скрипт создавался под конкретную задачу, лежащий в его основе подход универсален. Его можно разложить на простую схему: изолировать проблему, найти точки входа, создать скрипт-конфигуратор, создать скрипт-оркестратор, внедрить аудит.
Эта схема работает не только для систем защиты информации. Развертывание ПО, настройка групповых политик, сбор данных с удаленных машин — принцип один и тот же.
Цифры, которые говорят сами за себя
Что получилось в сухом остатке? Время настройки рабочих мест сократилось с полного дня до 15 минут, что в 32 раза быстрее. Необходимость физически ехать к каждому пользователю исчезла полностью. Количество ошибок при настройке приблизилось к нулю — человеческий фактор исключен.
Главный результат — не в цифрах. Это наглядное доказательство простой истины: почти любую рутину можно автоматизировать, не покупая дорогое ПО и не разворачивая сложную инфраструктуру. Достаточно внимательно посмотреть на инструменты, которые уже есть под рукой.
Это не про экономию денег (хотя и про нее тоже). Это про скорость реакции на задачи и гибкость. Готовое ПО нужно покупать, согласовывать, внедрять, обучать людей. На все это уходят месяцы. А набросать работающий скрипт можно за пару дней.
Ваш ход
Сколько часов в неделю вы тратите на задачи, которые повторяются изо дня в день? Копирование файлов, создание отчетов, настройка новых пользователей, проверка статусов — список у каждого свой.
Попробуйте применить эту формулу к одной такой задаче, не самой сложной. Начните с простого. Запишите все действия, которые делаете руками, и попробуйте найти, какими встроенными утилитами их можно заменить. Потратьте пару часов на написание первого скрипта.
Возможно, вы удивитесь, сколько времени это сэкономит.
P.S. Если у вас есть похожие кейсы автоматизации с помощью стандартных средств Windows или других ОС — делитесь в комментариях. Коллективный разум Хабра способен на чудеса, и ваш опыт может стать основой для нового решения чужой проблемы.
Комментарии (2)
Houl
03.09.2025 18:39Вы бы лучше рассказали как обеспечивается защита от уязвимостей в Атоме, который уже давно заброшен.
homeles
А штатный центр управления SecretNet не мог помочь ?