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
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 обязательно.
|
|
Является допустимым режим, когда АВ делает детект по поведению, но не может снять процесс до конца его отработки.
|