Почему это последняя линия защиты
Вы обнаружили ransomware. Компьютер изолирован. Дамп памяти лежит на чистой машине. Резервные копии скомпрометированы или недоступны.
Впереди единственное, что осталось: поиск симметричного ключа, который был использован для шифрования ваших файлов. Если вы найдёте его — данные восстановлены. Если нет — остаётся только выплата выкупа или полная потеря.
Эта статья — для форензиков, специалистов по инцидентам (Incident Responders) и технических экспертов, которые хотят понять, почему извлечение ключа является одновременно возможным и чрезвычайно сложным техническим процессом.
Часть I: Архитектура шифрования современного ransomware
Парадокс эффективности и безопасности
Когда разработчик malware строит систему для шифрования данных без интернета на скомпрометированной машине, он сталкивается с инженерной трилеммой. Необходимо выбрать баланс между скоростью, безопасностью и автономностью.
Рассмотрим три основных архитектурных подхода:
Вариант 1: Только симметричное шифрование (AES)
- Быстро: Скорость шифрования достигает 5 GB за 30 секунд (при использовании AES-NI).
- Проблема ключа: Ключ должен находиться где-то на диске или в памяти в открытом виде, чтобы процесс мог работать.
- Результат: Форензики легко находят ключ на диске → все файлы восстанавливаются бесплатно.
- История: Старые семейства ransomware использовали этот подход, что позволило антивирусным компаниям быстро выпустить декрипторы.
Вариант 2: Только асимметричное шифрование (RSA)
- Безопасно: Публичный ключ шифрует, приватный (для расшифровки) никогда не передается жертве.
- Медленно: Одна операция RSA-2048 занимает ~100 ms. На диске с 100,000 файлов это займет 2.7 часа чистого времени процессора.
- Зависимость: Требует интернет для скачивания уникального публичного ключа или генерации пар.
- Результат: Если компьютер offline → ransomware зависает или не может работать.
Вариант 3: Гибридное шифрование (HYBRID)
- Быстро: Для шифрования тела файлов используется AES.
- Безопасно: AES-ключ шифруется асимметричным алгоритмом (RSA/ECC), приватный ключ находится у атакующего.
- Автономно: Работает offline, так как ключи генерируются локально.
- Риск: Уязвимость существует только в момент генерации ключа в оперативной памяти (ОЗУ).
Все современные семейства ransomware (LockBit, Conti, BlackCat) используют Вариант 3. Мы разберем, почему это дает нам шанс.
Часть II: Гибридное шифрование — простым языком
Упрощённая аналогия с почтовым ящиком
Чтобы понять механику атаки, представим следующую ситуацию:
- Ваш дом = Компьютер жертвы.
- Ваши письма = Файлы (документы, фото, базы данных).
- Золотой ключ от ящика = AES-256 (симметричный ключ).
- Публичный почтовый замок = RSA Public Key (вшит в код malware).
- Приватный мастер-ключ = RSA Private Key (находится только у хакера).
Процесс атаки выглядит так:
- Вторжение: Ransomware приходит в ваш дом (компьютер).
- Генерация: Создает «Золотой ключ», уникальный именно для вашего дома (AES-256).
- Шифрование данных: Запирает все письма «Золотым ключом». Это происходит быстро.
- Защита ключа: Берёт «Золотой ключ» и кладёт его в специальный контейнер, запирая его Публичным почтовым замком (RSA). Это медленная операция, но так как ключ маленький (32 байта), это не тормозит процесс.
- Доставка требования: Оставляет запечатанный контейнер (зашифрованный ключ) в вашем почтовом ящике — технически это метаданные в конце зашифрованного файла.
- Уничтожение улик: Сжигает оригинальный «Золотой ключ» — удаляет plaintext-ключ из памяти и с диска.
- Отход: Уходит. У атакующего есть только мастер-ключ.
Текущая ситуация:
- Вы видите запечатанный ключ, но не можете его открыть (нет приватного RSA).
- Письма запечатаны, и вы не можете их прочитать без «Золотого ключа».
- Attacker имеет мастер-ключ и может открыть замок, достать «Золотой ключ» и расшифровать всё.
Наша работа как форензика: Найти копию или обгоревшего остатка этого «Золотого ключа» в мусоре (памяти) ДО того, как он был окончательно уничтожен.
Часть III: Симметричный ключ — «Золотой ключ»
AES-256: Главное оружие
AES (Advanced Encryption Standard) — это стандарт, используемый военными, банками и криптовалютами. Теперь это стандарт и для киберпреступников.
256 бит означают 256 нулей и единиц, случайно выбранных компьютером. Данные проходят 14 раундов трансформации.
Почему именно AES?
ПараметрAESChaCha20TwofishСкорость3–5 GB/s (аппаратное ускорение AES-NI)1.3 GB/s (всегда программно)0.3 GB/sБезопасностьСтандарт NISTБоков-безопасенРедко используетсяПопулярность в Ransomware80% семейств15% (BlueSky, Babuk)<5% (устаревший)Уязвимость (Брутфорс)2^256
попыток (невозможно)2^256
попыток (невозможно)2^128
(медленнее)
Как ключ генерируется в памяти
В момент инфекции происходит следующий процесс на низком уровне:
- Компьютер вызывает криптографически стойкий генератор: CryptGenRandom() (Windows) или /dev/urandom (Linux).
- Система выдаёт 32 байта (256 бит) полностью случайных данных.
- Эти 32 байта становятся Master AES Key.
- Процессор берёт этот ключ и производит процедуру Key Schedule Expansion:Из 32 байт создаёт массив размером 176 байт (44 раундовых ключа).
Каждый раундовый ключ используется в одном из раундов шифрования. - Процессор использует этот расширенный ключ для шифрования КАЖДОГО ФАЙЛА.
- После окончания работы (обычно через 5–30 минут) ключ должен быть стёрт.
Где находится ключ в памяти?
Типичное расположение в Heap (куче) памяти процесса Windows:
[Heap memory процесса ransomware]
├─ Original AES key (32 байта) - ЕСЛИ генерируется на лету
│ Offset: 0x12345678
│ Content: 6A9B3F2D...E8C7B9A3
│
├─ Expanded AES keys (176 байт = 44 round keys * 4 bytes)
│ Offset: 0x123456A0 (обычно рядом с оригиналом)
│ Content: сложная структура с раундовыми ключами
│
└─ Временные буферы для шифрования
Offset: различные
Content: plaintext файлов перед шифрованием
Временное окно возможности (Time of Opportunity)
Почему форензики могут найти ключ:
- 0 минут: Процесс запущен, генерирует первый ключ → ключ в памяти
- 5 минут: Генерирует 5-й файл, ключ процесса всё ещё в памяти
- 15 минут: Генерирует 15-й файл → ключ ещё в памяти
- 30 минут: Шифрование завершено → ключ ДОЛЖЕН быть удалён (но часто остаются остатки/артефакты).
- 60 минут: Процесс завершён → память помечена как свободная, может быть перезаписана
- 120 минут / Перезагрузка: Питание отключено, ВСЯ ОЗУ стёрта
Вывод: Если вы создадите дамп памяти в течение первых 30–60 минут после начала инцидента, вероятность найти ключ составляет > 80%. Если дамп сделан через 2+ часа: вероятность падает ниже 5%.
Часть IV: Асимметричный шифровальщик — Мастер-ключи
RSA-2048: Публичный + Приватный
Концепция асимметрии в ransomware:
- Attacker генерирует пару ключей.
- Публичный ключ (PUBLIC KEY):Можно отдавать кому угодно.
Вшивается в исполняемый файл malware.
Используется ТОЛЬКО для шифрования AES-ключа.
Зашифровать данные может кто угодно (сам вирус). - Приватный ключ (PRIVATE KEY):Держится в секрете у attacker.
Никогда не покидает C2-сервер.
Используется ТОЛЬКО для расшифровки.
Сравнение алгоритмов:
РазмерДлина ключаВремя на операциюБрутфорс (сложность)RSA-10241024 бита10 ms2^512
операций (Считается взломанной!)RSA-20482048 бит100 ms2^1024
операций (Безопасна)RSA-40964096 бит500 ms2^2048
операций (Очень безопасна)Curve25519256 бит50 ms2^128
операций (Быстрее RSA, надежно)
Почему Curve25519 лучше?
Эллиптическая криптография (ECC) использует математику кривых, а не факторизацию больших чисел. 256-битная кривая эквивалентна 3072-битной RSA по безопасности, но:
- Быстрее (50 ms против 100 ms).
- Ключи меньше (32 байта против 256 байт).
- Меньше векторов атак (side-channels).
Использование в семействах Ransomware:
СемействоАсимметричный алгоритмПримечаниеLockBit 3.0RSA-2048Per-victim pair (пара ключей на жертву)ContiRSA-4096Повышенная безопасностьWannaCryRSA-2048Реализация была уязвима (взломано)NotPetyaRSA-1024УЯЗВИМ! (1024 бита можно факторизовать)BlueSky/BabukCurve25519Современный подход (ECC)Ragnar LockerRSA-2048Per-victim pair
Часть V: Процесс гибридного шифрования в деталях
Разберем пошаговую схему на примере реального поведения LockBit 3.0.
ИНИЦИАЛИЗАЦИЯ
Шаг 1: Генерируется симметричный ключ
- Вызов: CryptGenRandom(32 bytes)
- Результат: AES_MASTER_KEY[256 bits] = "6A9B3F2D...E8C7B9A3"
- Хранилище: heap память процесса (адрес 0x12345678)
Шаг 2: Загружается публичный ключ RSA (встроен в malware)
- Из resource раздела: .rsrc section
- Декодируется из Base64
- Импортируется: CryptImportPublicKeyInfo()
ШИФРОВАНИЕ ФАЙЛА (повторяется для каждого файла)
Шаг 3: Открыть файл на чтение
- Файл: "document.docx" (10 MB)
- Режим: read entire file into buffer
Шаг 4: Зашифровать файл с AES
- Режим: CBC (Cipher Block Chaining)
- IV (Initialization Vector): 16 random bytes
- Алгоритм: AES-256-CBC с AES_MASTER_KEY
- Время: ~3 секунды (на современном CPU)
- Результат: encrypted_data[10 MB]
Шаг 5: Шифровать сам AES ключ
- Берём: AES_MASTER_KEY[32 bytes]
- Шифруем: CryptEncrypt(AES_MASTER_KEY, RSA_PUBLIC_KEY)
- Время: ~100 ms (медленно!)
- Результат: encrypted_aes_key[256 bytes] (выход RSA-2048 всегда 256 байт)
Шаг 6: Записать шифрованный файл + ключ
- Файл: "document.docx.locked"
- Содержимое:encrypted_data[10 MB]
encrypted_aes_key[256 bytes] ← зашифрованный ключ
footer with metadata - Оригинальный файл: удалён SecureDeleteFile()
Шаг 7: Удалить оригинальный AES ключ из памяти
- Если хороший malware: memset_s(AES_MASTER_KEY, 0, 32)
- Если плохой malware: просто «забыл» о переменной (утечка памяти)
- Результат: память может быть перезаписана ОС
Продолжение на сайте redsec.by >>>