AdminGate is an enterprise-grade Privileged Access Management (PAM) tool that allows domain users with limited privileges to launch specific whitelisted applications with administrator rights — without ever receiving admin rights themselves or exposing admin credentials.
In corporate Active Directory environments, some applications require administrator-level execution (installers, security utilities, diagnostic tools). Common approaches have significant drawbacks:
| Approach | Problem |
|---|---|
| Grant users local admin rights | Violates security policy |
| Delegate via GPO | Complex and inflexible |
| Let users enter the admin password | Password becomes known to the user |
| AdminGate | ✅ User launches apps with one click — password stays hidden |
┌──────────────────┐ named pipe ┌─────────────────────────┐
│ admingate.exe │ ──── "launch app.exe" ──► │ admingate_svc.exe │
│ │ │ (Windows Service) │
│ Runs as: │ ◄──── "OK / error" ────── │ Runs as: │
│ Domain User │ │ LocalSystem │
│ (no admin) │ │ │
│ │ │ 1. Verify SHA-256 │
└──────────────────┘ │ 2. Decrypt password │
│ 3. LogonUser() │
│ 4. CreateProcessAsUser │
│ (full token, │
│ UAC bypassed) │
└─────────────────────────┘
Key Principles:
- The user never sees or enters the admin password during normal operation
- The admin password is entered once by the IT administrator during initial setup
- Only applications from the whitelist can be launched
- The SHA-256 hash of the executable is verified before every launch (prevents binary substitution)
- All secrets are encrypted via Windows DPAPI (machine-bound — won't decrypt on another machine)
| File | Account | Role |
|---|---|---|
admingate.exe |
Domain User | GUI client. Displays app list, sends commands to the service |
admingate_svc.exe |
LocalSystem | Windows Service. Stores secrets, verifies hashes, spawns processes |
AdminGate/
├── cmd/
│ ├── admingate/ — GUI application (Fyne)
│ │ └── main.go
│ ├── admingate_svc/ — Windows Service
│ │ └── main.go
│ └── crypto_helper/ — CLI helper tool
│ └── main.go
├── internal/
│ ├── config/ — Configuration management
│ │ └── config.go
│ ├── crypto/ — DPAPI encryption
│ │ └── dpapi.go
│ ├── launcher/ — Process spawning and hash verification
│ │ ├── elevate.go
│ │ └── security.go
│ ├── pipe/ — Named pipe protocol
│ │ └── protocol.go
│ ├── service/ — Windows Service logic
│ │ └── svc.go
│ └── ui/ — Credential input dialog
│ └── credprompt.go
├── go.mod
└── README.md
Location: C:\ProgramData\AdminGate\apps.yaml
The file is encrypted entirely via DPAPI (CRYPTPROTECT_LOCAL_MACHINE). Decrypted content:
apps:
- name: "SomeApp.exe"
path: "C:\Program Files\SomeApp\SomeApp.exe"
sha256: "a3f5c2d1..."
login: "DOMAIN\adminuser"
password: "base64-dpapi-encrypted-password"Passwords inside the YAML are additionally encrypted with DPAPI + base64 (double protection).
- OS: Windows 10 / Windows 11 (x64)
- Domain: Active Directory (or workgroup with a local admin account)
- To build: Go 1.22+, TDM-GCC or MinGW-w64
Copy to the target machine (e.g., C:\Program Files\AdminGate\):
admingate.exe
admingate_svc.exe
Open an elevated command prompt:
cd "C:\Program Files\AdminGate"
admingate_svc.exe install
admingate_svc.exe startThe service will start automatically on Windows boot (startup type: Automatic).
Verify status:
sc query AdminGateSvcLaunch admingate.exe (as any user):
- Click "Add..."
- Browse to the desired
.exefile - In the dialog, enter administrator credentials:
- Login:
DOMAIN\adminuser(domain) oradminuser(local) - Password: admin password
- Login:
AdminGate will automatically:
- Compute the SHA-256 of the selected file
- Encrypt the password via DPAPI
- Save the entry to
C:\ProgramData\AdminGate\apps.yaml
Important: The password is entered only once. Users will never need to enter anything for subsequent launches.
Removing an application:
- Select the app in the list
- Click "Remove..."
- Enter the same admin login and password that were used when adding
- The app will be removed from the whitelist
Deploy admingate.exe to user desktops via any preferred method:
- GPO (Software Deployment)
- Network share
- Manual copy
Users simply run admingate.exe — the service is already running and ready.
- Double-click
admingate.exe - Select the desired application from the list
- Click "Launch"
The application will start with administrator rights. Nothing else is required.
The "Minimize" button (or clicking "×") minimizes the program to the system tray. Right-click the tray icon → "Exit" to close completely.
If the status bar shows ● Service: not running — contact your IT administrator.
All commands require administrator privileges:
# Install service
admingate_svc.exe install
# Uninstall service
admingate_svc.exe uninstall
# Start service
admingate_svc.exe start
# Stop service
admingate_svc.exe stop
# Run in debug mode (no SCM, console output)
admingate_svc.exe runYou can also manage the service via standard Windows tools:
sc start AdminGateSvc
sc stop AdminGateSvcOr via services.msc → AdminGate Privileged Launcher.
| Threat | Protection |
|---|---|
| User trying to obtain the admin password | Password encrypted via DPAPI, never transmitted to GUI |
| Replacing a whitelisted exe with a malicious one | SHA-256 verified before every launch |
| Copying config to another machine | DPAPI is machine-bound — won't decrypt elsewhere |
| Launching arbitrary app through the service | Service accepts only names from the config whitelist |
| Named pipe interception | Pipe is local (\\.\pipe\) — not accessible over network |
| UAC filtering of admin token | Service uses CreateProcessAsUser from LocalSystem — UAC not applied |
| Unauthorized removal of app from whitelist | Removal requires admin login/password verified against encrypted storage |
| Hidden launches without audit trail | Every action (LAUNCH/ADD/REMOVE) is logged to audit.log with timestamp and username |
All operations are logged to C:\ProgramData\AdminGate\audit.log:
2026-03-15 10:25:01 | LAUNCH | user=DOMAIN\john | app=SomeApp.exe | OK
2026-03-15 10:26:44 | LAUNCH | user=DOMAIN\john | app=OtherApp.exe | FAILED: SHA-256
2026-03-15 11:00:05 | ADD | user=DOMAIN\admin | app=NewTool.exe | OK
2026-03-15 11:05:17 | REMOVE | user=DOMAIN\admin | app=OldApp.exe | OK
The log is stored in plain text. Suitable for SIEM integration.
apps.yaml (entire file) ←── DPAPI machine key
│
└── password field ←── DPAPI machine key + base64
The service runs as LocalSystem and uses:
SeAssignPrimaryTokenPrivilege— forCreateProcessAsUserSeIncreaseQuotaPrivilege— forCreateProcessAsUser
These privileges are available to LocalSystem by default and require no additional configuration.
Important: Build from a path with no Cyrillic characters in directory names. TDM-GCC generates a broken PE binary when CGO is compiled from a Unicode path.
# Copy project to a path without Cyrillic characters
xcopy /E /I "C:\Users\User\Desktop\AdminGate" "C:\build\AdminGate"
cd C:\build\AdminGate
# GUI (Windows subsystem, no console window)
go build -ldflags="-H windowsgui -linkmode=internal" -o admingate.exe ./cmd/admingate/
# Service (console app for SCM communication)
go build -ldflags="-linkmode=internal" -o admingate_svc.exe ./cmd/admingate_svc/The -linkmode=internal flag is required on Windows 11 24H2 with TDM-GCC 10.3.0 —
the external linker generates an incompatible PE header.
Q: Does the service need to be installed on every workstation? Yes. The service must be installed on each machine where users will launch privileged applications. This can be automated via GPO (Software Installation) or a logon script.
Q: What happens if the application file is updated? On the next launch, AdminGate will report a SHA-256 mismatch error. To fix: remove the old entry from the config and add the updated executable (the hash will be recomputed automatically).
Q: Can AdminGate be used without Active Directory?
Yes. Instead of DOMAIN\user, specify .\adminuser (local account) when adding an application.
Q: Where is the config stored?
C:\ProgramData\AdminGate\apps.yaml — readable by all users, writable only by the service (LocalSystem).
Q: admingate.exe won't start — "no connection to service" error The service is not running or not installed. Run as administrator:
admingate_svc.exe install
admingate_svc.exe start| Component | Technology |
|---|---|
| Language | Go 1.22+ |
| GUI | fyne.io/fyne/v2 (OpenGL) |
| Windows API | golang.org/x/sys/windows |
| Windows Service | golang.org/x/sys/windows/svc |
| Encryption | Windows DPAPI (CryptProtectData / CryptUnprotectData) |
| Process Elevation | LogonUserW + CreateProcessAsUser (advapi32.dll) |
| IPC | Windows Named Pipe (\.\pipe\AdminGateSvc) |
| Configuration | YAML v3 (gopkg.in/yaml.v3) |
| Hashing | SHA-256 (crypto/sha256) |
AdminGate — корпоративный инструмент класса PAM (Privileged Access Management), позволяющий доменным пользователям с ограниченными правами запускать строго определённые приложения с правами администратора — без получения самих admin-прав и без раскрытия учётных данных администратора.
В корпоративных средах Active Directory часть приложений требует запуска от имени администратора (установщики, утилиты ИБ, диагностические средства). Стандартные варианты решения проблемы:
| Вариант | Проблема |
|---|---|
| Дать пользователю права локального администратора | Нарушает политику ИБ |
| Делегировать доступ через GPO | Сложно, не гибко |
| Пользователь самостоятельно вводит admin-пароль | Пароль становится известен пользователю |
| AdminGate | ✅ Пользователь запускает приложение одним кликом, пароль ему неизвестен |
┌──────────────────┐ named pipe ┌─────────────────────────┐
│ admingate.exe │ ──── "launch app.exe" ──► │ admingate_svc.exe │
│ │ │ (Windows Service) │
│ Запускается от │ ◄──── "OK / ошибка" ───── │ Работает как │
│ имени доменного │ │ LocalSystem │
│ пользователя │ │ │
│ Без admin-прав │ │ 1. Проверяет SHA-256 │
└──────────────────┘ │ 2. Расшифровывает пароль│
│ 3. LogonUser() │
│ 4. CreateProcessAsUser │
│ (полный токен, │
│ UAC не обрезает) │
└─────────────────────────┘
Ключевые принципы:
- Пользователь никогда не видит и не вводит admin-пароль при работе
- Admin-пароль вводится один раз при первичной настройке IT-администратором
- Запустить можно только приложения из белого списка
- Перед каждым запуском проверяется SHA-256 исполняемого файла (защита от подмены)
- Все секреты зашифрованы через Windows DPAPI (привязка к машине)
| Файл | Учётная запись | Роль |
|---|---|---|
admingate.exe |
Доменный пользователь | GUI-клиент. Показывает список приложений, отправляет команды сервису |
admingate_svc.exe |
LocalSystem | Windows Service. Хранит секреты, проверяет хэши, запускает процессы |
AdminGate/
├── cmd/
│ ├── admingate/ — GUI-приложение (Fyne)
│ │ └── main.go
│ ├── admingate_svc/ — Windows Service
│ │ └── main.go
│ └── crypto_helper/ — CLI-инструмент (резервный)
│ └── main.go
├── internal/
│ ├── config/ — Работа с конфигурацией
│ │ └── config.go
│ ├── crypto/ — Шифрование DPAPI
│ │ └── dpapi.go
│ ├── launcher/ — Запуск процессов и проверка хэшей
│ │ ├── elevate.go
│ │ └── security.go
│ ├── pipe/ — Протокол именованного канала
│ │ └── protocol.go
│ ├── service/ — Логика Windows Service
│ │ └── svc.go
│ └── ui/ — Диалог ввода учётных данных
│ └── credprompt.go
├── go.mod
└── README.md
Хранится по пути: C:\ProgramData\AdminGate\apps.yaml
Файл зашифрован целиком через DPAPI (CRYPTPROTECT_LOCAL_MACHINE). Внутри:
apps:
- name: "SomeApp.exe"
path: "C:\Program Files\SomeApp\SomeApp.exe"
sha256: "a3f5c2d1..."
login: "DOMAIN\adminuser"
password: "base64-dpapi-encrypted-password"Пароли внутри YAML дополнительно зашифрованы DPAPI + base64 (двойная защита).
- ОС: Windows 10 / Windows 11 (x64)
- Домен: Active Directory (или рабочая группа с локальным admin-аккаунтом)
- Для сборки: Go 1.22+, TDM-GCC или MinGW-w64
Скопируйте на целевую машину (например, в C:\Program Files\AdminGate\):
admingate.exe
admingate_svc.exe
Откройте командную строку с правами администратора:
cd "C:\Program Files\AdminGate"
admingate_svc.exe install
admingate_svc.exe startСервис будет запускаться автоматически при старте Windows (тип запуска: Automatic).
Проверить статус:
sc query AdminGateSvcЗапустите admingate.exe (можно от имени обычного пользователя):
- Нажмите кнопку «Добавить...»
- В диалоге выбора файла найдите нужный
.exe - В появившемся окне введите учётные данные администратора:
- Логин:
DOMAIN\adminuser(для доменного) илиadminuser(для локального) - Пароль: пароль администратора
- Логин:
AdminGate автоматически:
- Вычислит SHA-256 выбранного файла
- Зашифрует пароль через DPAPI
- Сохранит запись в
C:\ProgramData\AdminGate\apps.yaml
Важно: Пароль вводится только один раз. При последующих запусках приложения пользователь ничего не вводит.
Удаление приложения из списка:
- Выберите приложение в списке
- Нажмите «Удалить...»
- Введите тот же логин и пароль администратора, что использовались при добавлении
- Приложение будет удалено из белого списка
Разместите admingate.exe на рабочих столах доменных пользователей любым удобным способом:
- Через GPO (Software Deployment)
- Через сетевую папку
- Вручную
Пользователи запускают admingate.exe — сервис уже работает и готов обрабатывать запросы.
- Дважды кликните на
admingate.exe - Выберите нужное приложение из списка
- Нажмите «Запустить»
Приложение запустится с правами администратора. Больше ничего делать не нужно.
Кнопка «Свернуть» (или нажатие «×» на окне) сворачивает программу в системный трей — значок остаётся в правом нижнем углу экрана. Правая кнопка мыши по значку → «Выход» для полного закрытия.
Если в строке статуса написано ● Сервис: не запущен — обратитесь к IT-администратору.
Все команды выполняются от имени администратора:
# Установить сервис
admingate_svc.exe install
# Удалить сервис
admingate_svc.exe uninstall
# Запустить сервис
admingate_svc.exe start
# Остановить сервис
admingate_svc.exe stop
# Запустить в режиме отладки (без SCM, с выводом в консоль)
admingate_svc.exe runТакже можно управлять через стандартные средства Windows:
sc start AdminGateSvc
sc stop AdminGateSvcИли через services.msc → AdminGate Privileged Launcher.
| Угроза | Защита |
|---|---|
| Пользователь пытается узнать admin-пароль | Пароль зашифрован DPAPI, никогда не передаётся GUI |
| Подмена exe в белом списке на вредоносный | SHA-256 проверяется перед каждым запуском |
| Копирование конфига на другую машину | DPAPI привязан к машине — на другой машине не расшифруется |
| Запуск произвольного приложения через сервис | Сервис принимает только имена из конфига |
| Перехват именованного канала | Канал локальный (\\.\pipe\), недоступен по сети |
| UAC фильтрует токен администратора | Сервис использует CreateProcessAsUser из LocalSystem — UAC не применяется |
| Несанкционированное удаление приложения | Удаление требует ввода логина и пароля администратора |
| Скрытые запуски без следов | Каждое действие (LAUNCH/ADD/REMOVE) записывается в audit.log с меткой времени |
Все операции записываются в C:\ProgramData\AdminGate\audit.log:
2026-03-15 10:25:01 | LAUNCH | user=DOMAIN\john | app=SomeApp.exe | OK
2026-03-15 10:26:44 | LAUNCH | user=DOMAIN\john | app=OtherApp.exe | FAILED: SHA-256
2026-03-15 11:00:05 | ADD | user=DOMAIN\admin | app=NewTool.exe | OK
2026-03-15 11:05:17 | REMOVE | user=DOMAIN\admin | app=OldApp.exe | OK
Журнал хранится в открытом тексте. Подходит для экспорта в SIEM.
apps.yaml (весь файл) ←── DPAPI машинный ключ
│
└── password поле ←── DPAPI машинный ключ + base64
Сервис работает как LocalSystem и использует:
SeAssignPrimaryTokenPrivilege— дляCreateProcessAsUserSeIncreaseQuotaPrivilege— дляCreateProcessAsUser
Эти привилегии доступны LocalSystem по умолчанию и не требуют дополнительной настройки.
Важно: Компилировать необходимо из пути без кириллицы в названии директорий. TDM-GCC генерирует некорректный PE-бинарник при CGO из пути с Unicode-символами.
# Скопировать проект в путь без кириллицы
xcopy /E /I "C:\Users\User\Desktop\AdminGate" "C:\build\AdminGate"
cd C:\build\AdminGate
# GUI (Windows subsystem, без консоли)
go build -ldflags="-H windowsgui -linkmode=internal" -o admingate.exe ./cmd/admingate/
# Сервис (консольный, для работы с SCM)
go build -ldflags="-linkmode=internal" -o admingate_svc.exe ./cmd/admingate_svc/Флаг -linkmode=internal обязателен на Windows 11 24H2 с TDM-GCC 10.3.0 —
внешний линковщик генерирует несовместимый PE-заголовок.
Q: Нужно ли устанавливать сервис на каждую рабочую станцию? Да. Сервис должен быть установлен на каждой машине, где пользователи будут запускать привилегированные приложения. Автоматизировать можно через GPO или скрипт при входе в систему.
Q: Что произойдёт, если изменить файл приложения (обновление)? При следующем запуске AdminGate сообщит об ошибке SHA-256. Необходимо обновить запись: удалить старое приложение из конфига и добавить новое (хэш пересчитается автоматически).
Q: Можно ли использовать AdminGate без домена Active Directory?
Да. Вместо DOMAIN\user укажите .\adminuser (локальный аккаунт) при добавлении приложения.
Q: Где хранится конфиг?
C:\ProgramData\AdminGate\apps.yaml — доступен для чтения всем пользователям, для записи — только сервису (LocalSystem).
Q: admingate.exe не запускается — ошибка «нет связи с сервисом» Сервис не запущен или не установлен. Выполните от имени администратора:
admingate_svc.exe install
admingate_svc.exe start| Компонент | Технология |
|---|---|
| Язык | Go 1.22+ |
| GUI | fyne.io/fyne/v2 (OpenGL) |
| Windows API | golang.org/x/sys/windows |
| Windows Service | golang.org/x/sys/windows/svc |
| Шифрование | Windows DPAPI (CryptProtectData / CryptUnprotectData) |
| Запуск процессов | LogonUserW + CreateProcessAsUser (advapi32.dll) |
| IPC | Windows Named Pipe (\.\pipe\AdminGateSvc) |
| Конфигурация | YAML v3 (gopkg.in/yaml.v3) |
| Хэширование | SHA-256 (crypto/sha256) |