Conti Ransomware malware leak WITH LOCKER
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

238 lines
12 KiB

КРИПТОЛОКЕР
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
ЦЕЛЬ
Разработать простой и эффективный минималистичный криптолокер.
ТРЕБОВАНИЯ
- Минимальный размер бинарника
- Соответствие с требованиями в "оформлении кода и сборок"
Сюда относятся оформление программы как dll, а также наличие точки входа для Cobalt Strike
- Наличие билдера (конфигуратора), прошивающего настройки и создающего пару "локер-анлокер"
- использование быстрого потокового шифра (ChaCha20 или подобного), для достижения максимального быстродействия и скорости накрытия системы.
Схема управления ключами при этом может повторять REvil/Sodinokibi https://blog.amossys.fr/sodinokibi-malware-analysis.html
(симметричный ключ для накрытия файлов Chacha20 формируется при старте локера;
он зашифровывается вшитым в локер публичным ключом RSA4096 и сохраняется на диске накрытой машины;
приватный ключ RSA4096 прошит в анлокер, позволяет считать и расшифровать использованный для накрытия симметричный ключ ChaCha20)
- программа должна накрывать все доступные сетевые шары
- потоковая модель программы должна максимизировать обработку диска и сетевых шар
- ключевым качеством работы программы является ее скорость обработки дисков.
ЗАЩИТНЫЕ МЕРЫ
- Обфускация строк и системных вызовов
- Снятие АВ хуков на старте
- Митигации для защиты от инъекций
- Защита от инъекций перехватом BaseThreadInitThunk
- защита от остановки процесса (проверить под WOW64!)
- защита от перезагрузки компьютера во время работы программы (проверить под WOW64!)
- удаление теневых копий при старте (проверить под WOW64!)
- отключение режима восстановления (recovery mode) Windows
ИДЕНТИФИКАЦИЯ
Бота идентифицируется парой
1. dev-id, который рассчитывается как хэш-функция от уникальных характеристик системы - железа и ОС.
Назначение: идентифицировать компьютер.
2. ключ шифрования, прошитый на этапе сборки.
Назначение: идентифицировать атакуемую цель, найти анлокер для конкретной цели по этому отпечатку.
Подробнее:
1. Предлагается использовать md5/sha-хэш от строки "дата_создания%windir%.имя_компьютера.дата_создания%windir\system32%.имя_домена_или_workgroup".
Сюда же можно подмешать имя жесткого диска, MAC-адрес сетевых интерфейсов, и прочие аппаратные имена.
Ключевыми свойствами dev-id являются
- dev-id всякий раз должен генерироваться
- при этом он должен быть одинаков при запуске от разных пользователей системы
- он не должен сохраняться на диск
- он должен быть уникален
- он всегда генерируется одинаково на одном и том же компьютере.
2. Билдер создает пару исполняемых файлов "локер-анлокер", генерируя для них пару криптоключей и прошивая их в файлы.
Везде где ключ используется для целей идентификации (а не для целей шифрования диска), нужно использовать краткий отпечаток ключа (fingerprint).
БИЛДЕР
Билдер - это консольная программа, которая
- берет на входе два файла - локер и анлокер
- генерирует пару криптоключей, экспортирует их в файлы
- прошивает в локер и анлокер эти ключи
- обязательно нужна возможность как генерации пары ключей, так и использования пары ранее созданных ключей (из файлов)
- а также прошивает в них прочие настройки, заданные из командной строки (см.п.9 раздела АЛГОРИТМ)
- на выходе выдает прошитые локер и анлокер, с измененными именами.
В имя локера и анлокера должны быть подмешан отпечаток ключа и дата создания, например:
locker_aabbccddeeff_01012020.ex_
- расширение файлов на выходе должно быть .ex_, чтобы предотвратить случайный запуск!!!
АЛГОРИТМ
1. Проверить раскладку клавиатуры, и если она соответствует любой стране из зоны СНГ + Украина, немедленно завершиться.
Эта фича должна быть отключаемой через условную компиляцию.
2. Сгенерировать свой dev-id
3. Сгенерировать отпечаток ключа
4. Сгенерировать текст для файла лендинга в памяти, подставив в него свои идентификаторы.
(здесь оставлен пропуск намеренно)
8.3. Программа работает в одном из двух режимов: быстрый или полный.
В быстром режиме шифруется только первый мегабайт файла. Это нужно, чтобы быстро накрыть систему.
В полном режиме шифруется весь файл.
Для быстрого режима предусматриваются настройки:
- процент накрытия файла
- максимальный размер файла для полного накрытия (после этого размера файл накрывается частично)
Эти настройки лучше всего задавать в командной строке.
При частичном накрытии файла, это следует делать либо в шахматном порядке (накрыли первый 1М, далее 1М пропуск, снова 1М накрыт итд),
либо по какой-либо предсказуемой формуле (прогрессия типа золотого сечения, чтобы максимально накрываемое пространство не было сосредоточено
только в одном месте файла)
8.3.1. После обработки каталога, в нем создается лендинг-файл с текстом о выкупе.
8.4. Если происходит ошибка доступа к файлу типа Share violation (файл занят другим процессом),
программа находит блокирующий процесс и убивает его, или останавливает соответствующий сервис.
При ошибках, программа пытается повторить действие трижды с интервалом в 2 минуты, после чего пропускает файл.
Дальнешая работа не зависит от результата данного шага.
8.5. Программа сперва обрабатывает каталоги из особого "быстрого" списка - списка каталогов,
которые необходимо пройти первыми.
8.6. Программа НЕ ТРОГАЕТ файлы и каталоги из особого стоп-списка - списка файлов, которые нельзя трогать.
При этом сочетания быстрого списка и стоп-списка обрабатываются так: (*)
8.6.1. Мы накрываем все пути из быстрого списка, не указанные в стоп-списке
8.6.2. Если в стоп-списке весь диск, на этом диске накрываем только пути из быстрого списка, не трогая остальной диск
8.6.3. Если стоп-список пуст, накрываем папки из быстрого списка первыми; остальные файлы потом.
* см. также п.12 о сетевых режимах
8.7. Программа шифрует только файлы с расширениями из списка рабочих расширений; остальные игнорируются.
8.8. Программа удаляет файлы из особого списка, трижды перезаписывая их содержимое:
- первый раз константой 0
- второй раз константой FF
- третий раз случайным мусором
- на четвертый раз файл удаляется
8.9. Программа обрабатывает таким образом все диски.
Все ошибки при работе игнорируются.
8.9.1. В понятие "все диски" включаются также все доступные сетевые Shares, а также сетевые диски.
9. Список изменяемых настроек в программе:
9.1. Режим работы (быстрый/полный)
9.2. Ключ шифрования
9.4. быстрый список
9.5. стоп-список
9.6. список рабочих расширений
9.7. список на удаление
9.8. текст лендинг-файла
Все списки могут быть как путями к каталогам, так и отдельными файлами.
Во всех связанных с файлами настройках должны поддерживаться:
- wildcards (символ *)
- переменные окружения.
Должна быть предусмотрена обработка файлов без расширения (по умолчанию должны обрабатываться).
Все списки должны валидироваться на корректность (заведомо некорректные пути должны игнорироваться).
10. После завершения работы программа самоуничтожается.
11. В тестовой сборке должны быть два счетчика:
11.1. сколько данных зашифровано, в байтах
11.2. размер обработанных файлов, включая те что зашифрованы частично, пропущены, удалены итд - это показатель общей скорости обработки.
Эти счетчики нужно периодически выдавать в лог, вместе с текущей меткой времени.
Это нужно для замеров скорости.
12. Дополнительно нужно предусмотреть следующие режимы сканирования сетевых ресурсов/файловых шар
12.1. local - Шифрует только локальные файлы + приоритетный список
12.2. net - Шифрует только сетевые ресурсы + приоритетный список.
Список сетевых ресурсов задается в файле, в формате ip\хост адрес по одной строке на каждый хост.
12.3. all - Шифрует как net + local (установлено по умолчанию)
12.4. scan - Шифрует как net + автоматическое сканирование сети по маске подсети
12.5. scanext - список хостов задается в файле + как scan
Параметр можно указывать только при -m net или без параметра -m.
Файл с хостами должен содержать ip\хост адрес по одной строке на каждый хост.
Сканирование сети и обработка шар занимают длительное время, поэтому обработка локальных файлов
в сетевых режимах должна начинаться немедленно.
Следует учесть, что одни и те же сетевые диски могут быть замонтированы как локальные и быть обнаружены как отдельная сетевая шара.
В таком случае следует предотвратить повторное шифрование диска.
В целом следует уделить большое внимание обнаружению повторного шифрования уже накрытого каталога/ресурса,
т.к. шифрование может и будет запускаться в параллель с множества компьютеров.
ЛЕНДИНГ-ФАЙЛ
Это текстовый файл с текстом о выкупе.
Имя readme.<6 случайных букв и цифр>.txt.
В файле используются макросы:
%devid% - dev-id компьютера
%fingerprint% - отпечаток ключа
Вместо них подставляются созданные на шагах 2 и 3 значения.
Текст файла задается с билдера.
ИЗВЕСТНЫЕ ОШИБКИ И ОГРАНИЧЕНИЯ ОС WINDOWS
- при попытке открыть файл WOW64-процессом на 64-битных Windows 7/8/2009,
функции CreateFile/OpenFile всегда возвращают статус TRUE и не возвращают код ошибки.
при этом при попытке чтения/записи возможно падение.
как решение проблемы проверяется количество открытых дескрипторов процесса до и после попытки открытия файла.
- WOW64-процесс не может получить валидный список всех дескрипторов в системе на 64-битной Windows XP/2003
- при открытии файла WOW64-процессом с флагом FILE_FLAG_OVERLAPPED,
файл может быть открыт почти одновременно несколькими процессами на чтение/запись.
При этом файл может быть последовательно перезаписан всеми этими процессами.
Будьте осторожны при запуске нескольких локеров одновременно!
Именованный мютекс поможет только с локальными дисками!
- Большие задержки доступа к буферам при использовании виртуальной памяти, особенно заметные на Windows 10.
Лучше выделять память из кучи.
- повреждения файловой системы/файла могут привести к зависаниям при обработке таких файлов
- некоторые алгоритмы шифрования замедляются на файлах с высокой энтропией (медиа - .mp3, .mp4, .avi, архивы итд)
ИСТОЧНИКИ ИНФОРМАЦИИ
https://www.mcafee.com/blogs/other-blogs/mcafee-labs/ransomware-maze/
https://habr.com/ru/company/acronis/blog/522022/
https://www.carbonblack.com/blog/tau-threat-discovery-conti-ransomware/
https://www.carbonblack.com/blog/tau-threat-analysis-medusa-locker-ransomware/
https://blog.amossys.fr/sodinokibi-malware-analysis.html
Живее всех живых: анализируем первый сэмпл нового шифровальщика BlackMatter
https://habr.com/ru/company/group-ib/blog/571940/
ПЛАН ТЕСТИРОВАНИЯ
1. Функционал
Тестирование ведется с отключенным АВ.
Перебираются все режимы шифрования и вариации настроек.
Подтверждаются:
1.1. реакция софта на настройки
1.2. соответствие заданному режиму шифрования
1.3. корректная обработка сетевых дисков и шар
1.4. корректная отработка при нескольких одновременно запущенных экземплярах софта на одном компьютере
1.5. то же что 1.4, но одна и та же сетевая шара обрабатывается с разных компьютеров
1.6. удаление теневых копий томов операционной системы
1.7. сохранение работоспособности ОС после окончания работы
1.8. остановка локера от обычного пользователя
1.9. остановка локера от администратора
1.10. предотвращение перезагрузки/остановки машины
2. Совместимость
Проверка делается на следующих версиях ОС Windows:
2.1. Windows 10
2.2. Windows Server 2012-2018
2.3. Windows 8.1
2.4. Windows 7
2.5. Windows Server 2008 R2
2.6. Windows Server 2008 (без R2)
2.7. Windows XP
2.8. Windows Server 2003
3. Скорость
Замеряется скорость работы.
Для этого в софт должны быть встроены метрики статистики - нужен способ узнать скорость
3.1. в мегабайтах в секунду
3.2. файловых дескрипторов в секунду (т.к. файлы могут быть мелкие)
Разумеется делается поправка на то, что тест ведется на виртуальных машинах, однако можно сравнить показатели с софтом конкурентов на той же ВМ.
4. Антивирусы
4.1. Windows Defender
4.2. ESET
4.3. Sophos
4.4. Avast
4.5. BitDefender
4.6. Norton
4.7. Kaspersky
Отсутствие детектов 4.1-4.3 обязательно.
Является допустимым режим, когда АВ делает детект по поведению, но не может снять процесс до конца его отработки.