SCROLL
Среднее время на прочтение: 2 мин.

Как вызвать BSOD на Windows машине пользователя.

Опишу свой конкретно случай для которого мне собственно и подумалось реализовать программу, чтобы было удобно по необходимости «блокировать» так сказать компьютер пользователя.

Предисловие

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

Реализация выглядит следующим образом, на компьютере пользователя размещается специальный файл, который при запуске вызывает BSOD в системе и создаётся задание в Планировщик задач Windows что при входе в систему или разблокировки ее, запускать эту самую программу.

Для вызова BSOD мы явно инициируем «жесткую» ошибку системы с кодом STATUS_ASSERTION_FAILURE, используя низкоуровневый системный вызов NtRaiseHardError, код достаточно простой:

C++
EXTERN_C NTSTATUS NTAPI RtlAdjustPrivilege(ULONG, BOOLEAN, BOOLEAN, PBOOLEAN);
EXTERN_C NTSTATUS NTAPI NtRaiseHardError(NTSTATUS ErrorStatus,
    ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
    PULONG_PTR Parameters, ULONG ValidRespnseOption, PULONG Response);

int main()
{
	ShowWindow(GetConsoleWindow(), SW_HIDE);

	BOOLEAN b;
	unsigned long response;

	RtlAdjustPrivilege(19, true, false, &b);
    NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, 0, 6, &response);
}

Программа BadDay

Написана программа на C++ с использованием только WinAPI. Суть программы простая и заключается в удобном включении режима BSOD на удаленной машине пользователя.

На машине пользователя должны быть включены следующие правила Firewall:
Remote Scheduled Tasks Management (RPC)
Remote Scheduled Tasks Management (RPC-EPMAP)

В противном случае подключение к удаленному Task Schedule завершится неудачей. В доменной среде это легко можно включить при помощи GPO.

При активации режима BadDay программа вызывающая BSOD копируется на удаленную машину в каталог — C:\Windows\System32\bcry.exe и создается задание в Task Schedule работающее от имени SYSTEM и запускает bcry.exe при входе пользователя в систему или если он заблокировал ПК и при последующей его разблокировки.

Описание действия кнопок:

  • "-" : очистить поле ввода IP-адреса.
  • Valid : проверить сетевую доступность введенного IP адреса.
  • Test Connection : проверить возможность удаленной настройки задания в Task Schedule.
  • GetTask : проверить наличие задания [BadDay] на указанной машине.
  • RunTask : принудительно запустить задание [BadDay] на указанной машине, если оно там имеется.
  • Activate [BadDay] : создать задание [BadDay] на указанной машине.
  • De-Activate [BadDay] : удалить задание [BadDay] на указанной машине.
Успешно протестировано на Windows 10/11 (в доменном окружении), но и не в доменном тоже будет работать, главное чтобы были открыты порты на Firewall и имелась учётная запись с правами локального администратора.
Скачать “BadDay” badday.zip – Загружено 7 раз – 1,85 МБ

Если есть вопросы, предложения и нашли «баг», прошу в комментарии.

 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.