
25.12.2025, 08:47
|
|
Новичок
Регистрация: 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
|
|
|