Skip to content

RatioVibrantis/AdminGate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AdminGate

License: MIT

English | Русский


🇬🇧 English

Privileged Application Launcher for Active Directory

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.


Why AdminGate?

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

How It Works

┌──────────────────┐        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)

Architecture

Components

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

Project Structure

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

Configuration File

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).


Requirements

  • 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

Installation & Setup

Step 1 — Deploy Files

Copy to the target machine (e.g., C:\Program Files\AdminGate\):

admingate.exe
admingate_svc.exe

Step 2 — Install the Service (as Administrator)

Open an elevated command prompt:

cd "C:\Program Files\AdminGate"
admingate_svc.exe install
admingate_svc.exe start

The service will start automatically on Windows boot (startup type: Automatic).

Verify status:

sc query AdminGateSvc

Step 3 — Add Allowed Applications

Launch admingate.exe (as any user):

  1. Click "Add..."
  2. Browse to the desired .exe file
  3. In the dialog, enter administrator credentials:
    • Login: DOMAIN\adminuser (domain) or adminuser (local)
    • Password: admin password

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:

  1. Select the app in the list
  2. Click "Remove..."
  3. Enter the same admin login and password that were used when adding
  4. The app will be removed from the whitelist

Step 4 — Distribute GUI to Users

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.


End-User Guide

  1. Double-click admingate.exe
  2. Select the desired application from the list
  3. 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.


Service Management

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 run

You can also manage the service via standard Windows tools:

sc start AdminGateSvc
sc stop  AdminGateSvc

Or via services.mscAdminGate Privileged Launcher.


Security

Threat Model

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

Audit Log

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.

Encryption Model

apps.yaml (entire file)  ←── DPAPI machine key
    │
    └── password field   ←── DPAPI machine key + base64

Service Privileges

The service runs as LocalSystem and uses:

  • SeAssignPrimaryTokenPrivilege — for CreateProcessAsUser
  • SeIncreaseQuotaPrivilege — for CreateProcessAsUser

These privileges are available to LocalSystem by default and require no additional configuration.


Building from Source

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.


FAQ

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

Tech Stack

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)


🇷🇺 Русский

Привилегированный лаунчер приложений для Active Directory

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

Установка и настройка

Шаг 1 — Подготовка файлов

Скопируйте на целевую машину (например, в C:\Program Files\AdminGate\):

admingate.exe
admingate_svc.exe

Шаг 2 — Установка сервиса (от имени администратора)

Откройте командную строку с правами администратора:

cd "C:\Program Files\AdminGate"
admingate_svc.exe install
admingate_svc.exe start

Сервис будет запускаться автоматически при старте Windows (тип запуска: Automatic).

Проверить статус:

sc query AdminGateSvc

Шаг 3 — Добавление разрешённых приложений

Запустите admingate.exe (можно от имени обычного пользователя):

  1. Нажмите кнопку «Добавить...»
  2. В диалоге выбора файла найдите нужный .exe
  3. В появившемся окне введите учётные данные администратора:
    • Логин: DOMAIN\adminuser (для доменного) или adminuser (для локального)
    • Пароль: пароль администратора

AdminGate автоматически:

  • Вычислит SHA-256 выбранного файла
  • Зашифрует пароль через DPAPI
  • Сохранит запись в C:\ProgramData\AdminGate\apps.yaml

Важно: Пароль вводится только один раз. При последующих запусках приложения пользователь ничего не вводит.

Удаление приложения из списка:

  1. Выберите приложение в списке
  2. Нажмите «Удалить...»
  3. Введите тот же логин и пароль администратора, что использовались при добавлении
  4. Приложение будет удалено из белого списка

Шаг 4 — Распространение GUI пользователям

Разместите admingate.exe на рабочих столах доменных пользователей любым удобным способом:

  • Через GPO (Software Deployment)
  • Через сетевую папку
  • Вручную

Пользователи запускают admingate.exe — сервис уже работает и готов обрабатывать запросы.


Использование (для конечного пользователя)

  1. Дважды кликните на admingate.exe
  2. Выберите нужное приложение из списка
  3. Нажмите «Запустить»

Приложение запустится с правами администратора. Больше ничего делать не нужно.

Кнопка «Свернуть» (или нажатие «×» на окне) сворачивает программу в системный трей — значок остаётся в правом нижнем углу экрана. Правая кнопка мыши по значку → «Выход» для полного закрытия.

Если в строке статуса написано ● Сервис: не запущен — обратитесь к 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.mscAdminGate 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 — для CreateProcessAsUser
  • SeIncreaseQuotaPrivilege — для 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)

About

Privileged Application Launcher for Active Directory

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages