Показать сообщение отдельно

  #270  
Старый 25.12.2025, 08:47
guidesoul
Новичок
Регистрация: 26.07.2025
Сообщений: 0
С нами: 423479

Репутация: 0
По умолчанию

Реализован алгоритм SecureHeapSanitize для борьбы с остаточными данными в куче

Стандартные контейнеры C++ (как std::string или std::vector) при переаллокации могут оставлять копии данных в памяти, помеченной как "свободная", но физически не перезаписанной.
Функция выполняет серию быстрых аллокаций с флагом HEAP_ZERO_MEMORY, заставляя менеджер памяти Windows (LFH) отдать недавно освобожденные блоки под новые нужды и немедленно занулить их.
Атака ведется только на блоки размеров 16–256 байт (типичный размер криптографических ключей и парольных фраз), что делает очистку мгновенной и стабильной.

Данное решение (SecureHeapSanitize) является эффективным методом зачистки в рамках текущей архитектуры на стандартных STL контейнерах.
Если вы планируете использовать код в своих разработках, существует способ решения проблемы "призраков" в памяти — использование кастомных аллокаторов (Custom Allocators).

Вместо:
std::wstring password;

Рекомендуется использовать структуру с аллокатором, который выполняет RtlSecureZeroMemory при деаллокации:
std::basic_string, SecureAllocator> secure_password;

Это предотвратит попадание чувствительных данных в стандартную кучу и исключит необходимость её последующего "скрабинга".

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Ответить с цитированием