Как обнаружить подделку (переходы) системных часов для продукта безопасности с использованием C++20?C++

Программы на C++. Форум разработчиков
Anonymous
Как обнаружить подделку (переходы) системных часов для продукта безопасности с использованием C++20?

Сообщение Anonymous »

Я разрабатываю кроссплатформенный агент безопасности, ориентированный в основном на Windows. В будущем мне может понадобиться аналогичный подход для macOS. Одной из важнейших функций является режим «временной приостановки», которым управляет ИТ-администратор, при котором агент прекращает мониторинг на определенный период времени.
Проблема: Пользователи могут попытаться продлить периоды приостановки, вручную изменив системные часы (настенные часы), пока агент находится в автономном режиме. (Я могу использовать доверенный сервер для получения текущего времени, когда агент находится в сети.) Поскольку мой продукт использует логику, основанную на времени, мне необходимо убедиться, что системное время не было изменено.
Текущий подход: В настоящее время я использую фоновый поток, который опрашивает каждые 2 секунды. Он сравнивает std::chrono::system_lock (на который может влиять пользователь) с std::chrono::steady_lock (который является монотонным и не должен прыгать). Этот подход не кажется правильным. Я ищу более идиоматический способ C++20 или альтернативный подход, который мог бы использовать внутренние события, специфичные для ОС, не жертвуя при этом слишком большой переносимостью.
Ниже приведен минимально воспроизводимый пример моей текущей логики, которую я пишу с помощью чат-бота. Он компилируется на VS2022 C++20. Есть ли более стандартный или надежный способ реализовать это для контекста, чувствительного к безопасности? Действительно ли мне нужно иметь дело с собственными вещами для Windows?
#include
#include
#include

using namespace std::chrono_literals;

int main() {
auto last_system = std::chrono::system_clock::now();
auto last_steady = std::chrono::steady_clock::now();

std::cout

Подробнее здесь: https://stackoverflow.com/questions/798 ... -using-c20

Вернуться в «C++»