РУССКИЙ
РУССКИЙ
ENGLISH
26.10.2017

BadRabbit: технический отчет

Рустам Миркасымов
Эксперт по киберразведке
Выводы
• За атакой вируса-шифровальщика BadRabbit 24 октября 2017 года и эпидемией вируса NotPetya, атаковавшего в июне 2017 года энергетические, телекоммуникационные и финансовые компании на Украине, стоит одна и та же группа хакеров. Мы обнаружили, что код BadRabbit был скомпилирован из исходников NotPetya, есть уникальные функции вычисления хэша, способ распространения по сети и удаление журналов. Логика извлечения модулей и сами модули также подтверждают эту связь.

• Распространение BadRabbit было массовым, хотя жертв оказалось гораздо меньше, чем в случае с NotPetya. На Украине в результате атаки BadRabbit пострадали несколько стратегических объектов (аэропорт, метро, госучреждения), в России — редакции федеральных СМИ. Также были зафиксированы факты попыток заражений банковских инфраструктур, правда, неудачные.

BadRabbit распространялся методом drive-by download, а не watering hole attack. Для распространения вируса использовались несколько популярных информационных интернет-ресурсов на Украине и в России.

• Предварительное исследование подтвердило то, что доступ к сайтам был получен в результате целенаправленной атаки — как минимум в одном из случаев компрометации легитимного ресурса был взломан компьютер разработчика сайта, а через него был скомпрометирован сайт. Это похоже на взлом системного администратора украинского разработчика системы документооборота «M.E.Doc», через которого злоумышленники получили доступ к серверу обновления и разместили свой вредоносный файл для заражения пользователей вирусом NotPetya.

• Со взломанных сайтов вредоносный JS скрипт отправлял часть информации на сервер 185.149.120.3, принадлежавший маркетинговой компании Jetmail. Предположительно, их сервер был скомпрометирован путем эксплуатации уязвимости в Apache Tomcat/Coyote JSP engine 1.1. В свое время северокорейская прогосударственная группа хакеров Lazarus воспользовались уязвимостью в этом веб-сервере для атаки на банки.

• Группа внесла изменения в свой инструмент и попыталась замаскироваться под обычную криминальную группу. Если раньше NotPetya содержал один кошелек для перевода выкупа, что позволяло предположить, что авторы и не собирались расшифровывать файлы, а их основная задача заключалась в саботаже, то теперь для каждого компьютера автоматически генерируется уникальный ключ, а для каждого ключа свой кошелек. Также в атаке BadRabbit было использовано доменное имя, которое ранее использовалось в атаках обычной киберпреступностью для фишинга и сбора трафика.

• Анализ файлов на домене в сети TOR показал, что сайт был подготовлен еще 19 октября, а сама вредоносная программа содержала дату подписи сертификатом от 25 октября, хотя сама атака началась 24 октября. Некоторые из модулей содержат дату компиляции за 22 октября. Все это говорит о том, что атака была тщательно спланирована и, скорее всего, была запланирована на 25 октября.

• Некоторые модули были скомпилированы летом 2014 года, что говорит о том, что использовались старые инструменты из предыдущих атак этой хакерской группы. Именно в 2014 году группа BlackEnergy резко начала проявлять свою активность и использовать инструменты для работы с дисками.

Схема атаки:
Пользователь заходит на новостной сайт и видит сообщение о том, что необходимо обновить Flash Player.
Осуществляются запросы на ресурсы 1dnscontrol.com/logo.png и 1dnscontrol.com/flash_install.php, после чего загружается исполняемый файл 1dnscontrol.com/install_flash_player.exe и пользователь сам запускает его на исполнение.

Вот как мы видели это на наших сенсорах:
Как видно, первую атаку мы зафиксировали еще в 11.17 утра 24 октября, и наше решение Polygon успешно обнаружило вредоносный файл еще на этапе загрузки.

Shortlist of Compromised sites:
Схема снизу демонстрирует процесс заражения вымогателем BadRabbit при посещении скомпрометрированных сайтов.

Attack schematic:
Файл install_flash_player.exe является исполняемой программой формата PE и маскируется под Adobe Flash Player инсталятор.
Сразу бросаются в глаза аномалии в виде даты подписи из будущего (25 октября, хотя файл появился 24 октября), возможно, изначально атака планировалась на 25 число, и недействительная подпись.

Дата компиляции файла – 22 октября.

SHA256: 630325cac09ac3fab908f903e3b00d0dadd5fdaa0875ed8496fcbb97a558d0da
MD5: fbbdc39af1139aebba4da004475e8839
Size: 441899 bytes

После запуска вредоносной программы происходит извлечение и сохранение файла infpub.dat в директорию %WINDOWS%. Далее запускается программа rundll32.exe с параметрами C:\Windows\infpub.dat,#1 15. То есть вызов функции с порядковым номером 1 и передачей ей аргумента 15, где 15 - число минут до перезагрузки системы.

Происходит инициализация программы: проверка процессов, проверка привилегий, антиотладочные приемы и удаление C:\Windows\infpub.dat.
Тело содержит в себе в секции ресурсов 3 модуля под ОС с разрядностями и x86 и x64:

1. Драйвер для работы с диском.
2. Программу MBR Encryptor, которая также управляет этим драйвером для шифрования MBR.
3. Mimikatz.

Модули находятся в ресурсах так же, как и раньше в NotPetya, но теперь они проксорены предварительно ключом 0xE9. Для компрессии модулей в ресурсах используется zlib 1.2.8 – та же версия, что и в NotPetya. Хотя на данный момент актуальная версия 1.2.12.

В целях антиотладки программа после запуска удаляет файл C:\Windows\infpub.dat, предварительно скопировав его в память. После чего выгружает собственное тело вызовом API функции FreeLibary() и далее передает управление на страницу памяти, куда предварительно было скопировано содержимое.

Далее идет проверка мьютекса в целях синхронизации с другими экземплярами. Если мьютекс есть, программа завершается.

При наличии прав у процесса SeDebugPrivilege происходит распаковка драйвера опенсорсного продукта https://diskcryptor.net под именем C:\Windows\cscc.dat. Причем, если файл C:\Windows\cscc.dat будет обнаружен, то программа завершится.
cscc.dat – драйвер dcrypt.sys, входящий в пакет diskcryptor, поддерживаемой ReactOS Foundation. Версия драйвера – 1.1.846.118, а цифровая подпись датируется 9 Июля 2014 года.

SHA256 682adcb55fe4649f7b22505a54a9dbc454b4090fc2bb84af7db5b0908f3b7806
MD5 b4e6d97dafd9224ed9a547d52c26ce02
Size 181448
Дата компиляции July 9, 2014 6:41:52 AM

Далее опять перечисляются все процессы в системе и если будет найден процесс с хешом от имени 0xF4713B0E, то программа попытается его завершить.

После чего будет извлечена и сохранена программа, взаимодействующая с драйвером diskcryptor, для шифрования MBR. Драйвер используется для шифрования MBR и перезаписи на свою загрузочную подпрограмму. Программа MBR Encryptor будет сохранена в %WINDOWS%\dispci.exe, после чего будет создана задача с именем rhaegal:
dispci.exe – MBR Encryptor, который отвечает за взаимодействие с драйвером, через который осуществляется шифрование MBR.

Сам злоумышленник называет программу GrayWorm
SHA256 8ebc97e05c8e1073bda2efb6f4d00ad7e789260afa2c276f0c72740b838a0a93
MD5 b14d8faf7f0cbcfad051cefe5f39645f
Size 142848 bytes
Дата компиляции October 22, 2017 2:33:09 AM

Эта программа отвечает за взаимодействие с драйвером и ее основной задачей является шифрование/расшифрование MBR. При этом в ходе своей работы она создает задачу на перезагрузку с именем viserion на перезагрузку:
Далее будет создан сервис, запускающий драйвер. Это будет сделано через SCManager или путем создания ключей реестра, если через SCManager не удастся.

Создаст сервис
имя: cscc
описание: Windows Client Side Caching DDriver
путь: C:\Windows\cscc.dat

Или создаст ключи в реестре:
HKLM\\SYSTEM\\CurrentControlSet\\services\\cdfs
После изменит следующие ключи в реестре в ноль:

HKLM\\SYSTEM\\CurrentControlSet\\Control\\Class\\{71A27CDD-812A-11D0-BEC7-08002BE2092F}\\LowerFilters

HKLM\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E965-E325-11CE-BFC1-08002BE10318}\\UpperFilters

Если ОС Vista и старше, то еще и HKLM\\SYSTEM\\CurrentControlSet\\Control\\CrashControl\\DumpFilters

Создаст задачу на выключение ПК под именем drogon
Удалит следующие журналы, чтобы затруднить восстановление данных:
Далее запускает одновременно множество потоков для распространения по сети. Используется утилита Mimikatz для извлечения данных учетных записей, а также жестко заданный список логинов и паролей.

Утилита Mimikatz присутствует в ресурсах в двух версиях: x86 и x64. Программа будет извлечена в %WINDOWS%\<4 случайных символа>.tmp и запущена с параметром в виде pipe, через который будут получены результаты.

x86:
SHA256 2f8c54f9fa8e47596a3beff0031f85360e56840c77f71c6a573ace6f46412035
MD5 37945c44a897aa42a66adcab68f560e0
Size 53624 bytes
Дата компиляции October 22, 2017 2:31:37 AM

x64:
SHA256 579fd8a0385482fb4c789561a30b09f25671e86422f40ef5cca2036b28f99648
MD5 1d724f95c61f1055f0d02c2154bbccd3
Size 410760 bytes
Дата компиляции August 5, 2014 4:54:45 PM

Перебор сетевых объектов и попытка создания на них задач и файлов через встроенные логины и пароли с целью зашифровать их:
В конце запускается процесс шифрования. Перечисляет все диски в системе от буквы C и далее по алфавиту 0x1F раз. Если диск является жестким или флешкой, то для каждого такого запускает поток, шифрующий данные на основе специально сгенерированного ключа.

Каждый такой поток шифрования рекурсивно обходит диск с корня и шифрует все файлы с расширениями:
При этом будут игнорироваться директории \\Windows, \\Program Files, \\ProgramData, \\AppData.

Также будет запущен и другой поток, создающий в корне файл Readme.txt с инструкцией. Таким образом, файл Readme.txt с инструкцией создается еще до того, как закончилось шифрование. На этом этапе можно вытащить ключ шифрования из памяти или обесточить ПК и отдать профессионалам.

При шифровании MBR и перезаписи на свою подпрограмму, исходные байты копируются, что позволяет восстановить их.
У каждого зашифрованного компьютера будет уникальный ключ для ввода, а значит и кошелек будет генерироваться уникальный. Таким образом они смогут отслеживать, что деньги переведены и автоматом выдавать ключ. Та последовательность символов, что вводится на их сайте, — содержит информацию, необходимую для расшифровки.
Злоумышленники способны извлечь исходный пароль из идентификатора только в том случае, если знают соответствующий закрытый ключ.

Как формируется ключ

С помощью функции CryptGenRandom формируется последовательность длиной 33 байта, состоящая из случайных значений.

Далее эта последовательность используется в качестве пароля для генерации ключа AES128 — на этом ключе будут зашифрованы файлы с известными расширениями.

После этого исходная последовательность зашифровывается на открытом ключе злоумышленников с помощью алгоритма RSA2048.
Зашифрованная последовательность, информация о локальной машине, информация о временной зоне используются для формирования идентификатора компьютера, подвергнутого атаке. Этот идентификатор сохраняется в файле "Readme.txt". И используется далее как Installation key.

Идентификатору предшествует следующее содержимое:

"Oops! Your files have been encrypted. If you see this text, your files are no longer accessible. You might have been looking for a way to recover your files. Don't waste your time. No one will be able to recover them without our decryption service. We guarantee that you can recover all your files safely. All you need to do is submit the payment and get the decryption password.

Visit our web service at caforssztxqzf2nm.onion
Your personal installation key#2:"

Таким образом, при каждом запуске программы формируется уникальный ключ, т.е. для каждой зараженной машины будет свой ключ, а значит и кошелек будет сгенерирован свой. Таким образом злоумышленник может контролировать поступление средств от каждого «клиента» и выдавать ключ автоматически.

Этот идентификатор требуется сообщить злоумышленникам на сайте "caforssztxqzf2nm.onion"

Сравнение с NotPetya:

При исследовании вредоносного кода BadRabbit в первую очередь бросаются в глаза сходства в выставлении флагов привилегий при инициализации с NotPetya:
Но эти функции и вправду могут совпадать случайно, поэтому тут нужны более жесткие аргументы.

Далее по коду вызывается проверка существования определенных процессов, и сходство здесь уже дает серьезные основания считать, что автор BadRabbit является и автором NotPetya или имел доступ к исходникам NotPetya.

Как видно на рисунке, функция вычисления хеш суммы от имени процесса в NotPetya полностью идентична BadRabbit с той лишь разницей, что все строки в BadRabbit widechar (2х байтовые), и в случае с BadRabbit компилятор решил выделить эту функцию в отдельную, а вектор инициализации с 0x12345678 был изменен на 0x87654321.
Очистка журналов в обеих программах выполнена схожим образом.
Как видим, те же проверки и последующее выключение.

Также стоит упомянуть, что и в случае с NotPetya, и с BadRabbit модули находятся в ресурсах и упакованы библиотекой zlib и в обоих случаях это версия 1.2.8, с единственным отличием, что в BadRabbit запакованные модули проксорены с константой 0xE9.

В целом, при ближайшем внимательном рассмотрении складывается впечатление, что код BadRabbit основан на исходных кодах NotPetya, но был скомпилирован как другой проект, при этом строки были указаны как multibyte для всего проекта.

Анализ caforssztxqzf2nm.onion:
Данный сайт содержит два JS скрипта all_lib.js и all_js.js, а сама страница обновлялась 19 октября 2017. Что говорит о том, что сайт был подготовлен как минимум за 5 дней до атаки.
Анализ 1dnscontrol.com

Для хостинга используется Bulletproof hosting Inferno. Доменное имя 1dnscontrol.com зарегистрировано 22 марта 2016 года и до сих пор пролонгируется. С ним связано множество других вредоносных доменов, первая активность которых относится еще к 2011 году:
webcheck01.net
webdefense1.net
secure-check.host
firewebmail.com
secureinbox.email
secure-dns1.net
approvedpharmacyvnx.com
trustedpharmacydlt.com
trustedpharmacydlt.com

Как мы видим, для атаки использовался домен, который уже был замечен в кибермошеннической деятельности. Возможно, домен был перекуплен у владельцев для проведения данной атаки.

Анализ скомпрометированных ресурсов:

Исследователи Eset выяснили https://www.welivesecurity.com/2017/10/24/bad-rabbit-not-petya-back/ что на скомпрометированных сайтах был внедрен вредоносный код, который отсылал User-agent, referrer, cookie и доменное имя, с которого был переход, на сервер 185.149.120.3. Если посетитель удовлетворял неким условиям, то в страницу пользователя инжектировался код, осуществляющий взаимодействие с 1dnscontrol.com.
На данном хосте установлен веб-сервер Apache Tomcat/Coyote JSP engine 1.1. Данная версия содержит уязвимости, которые позволяют получить контроль над сервером. В свое время хакерская группа Lazarus использовала хосты с этим веб-сервером для проведения своих атак на банки.
Hi-Tech Crime Trends 2017
Атаки вирусов-шифровальщиков – всего один из сбывающихся трендов и прогнозов нашего ежегодного отчета.
Экстренные меры обеспечения защиты

  1. Превентивные меры: необходимо создать файл C:\windows\infpub.dat и поставить ему права «Только для чтения». Далее нужно создать пустой файл C:\windows\cscc.dat После этого даже в случае заражения файлы не будут зашифрованы.
  2. Оперативно изолируйте зараженные компьютеры (если таковые есть), а также убедитесь в актуальности и целостности резервных копий ключевых сетевых узлов.
  3. Для устранения ключевых уязвимостей, которые эксплуатируются программами-шифровальщиками, необходимо установить обновления безопасности:
  • Обновление ОС Windows для устранения уязвимости MS17-010 (WannaCry, Petya и др.):
https://technet.microsoft.com/en-us/library/security/ms17-010.aspx

  • Обновление ОС Windows для защиты от перехвата паролей в памяти сервера:
https://technet.microsoft.com/library/security/2871997

  1. В случае распространения вредоносного ПО в сети заблокируйте IP-адреса и доменные имена источников заражения.
  2. Запретите любой удаленный вход в систему (RDP, SMB, RPC) локальным администраторам. Желательно оставить только тип входа 2 (интерактивный):
https://technet.microsoft.com/ru-ru/library/cc787567(v=ws.10).aspx

  1. Сконфигурируйте в реестре на всех ПК под управлением Windows 7 (и выше) и всех серверах под управлением Windows 2008R2 следующий параметр:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigest/UseLogonCredential=0

Данный ключ реестра запрещает хранение паролей в оперативной памяти в открытом виде (используется вредоносным ПО Mimikatz)

  1. Активируйте пользователям опцию блокировки всплывающих окон в браузере.
  2. Запретите стандартного локального администратора с ID=500 (который уязвим к атаке Pass the hash). Добавить еще одного администратора и установите патч защиты от техник атак Pass the hash: https://technet.microsoft.com/library/security/2871997#ID0E3D
  3. Минимизируйте и полностью исключите предоставление пользователям ПК административных полномочий на локальном компьютере, особенно для пользователей, работающих с внешними информационными системами (Интернет, публичная почта).
  4. Внедрите резервное копирование на оффлайн-носители без записи на общие папки. Регулярно проверяйте возможность восстановления из резервной копии.
Меры операционной безопасности

  1. Исключите использование протокола SMB1 как на серверах, так и на ПК пользователей: https://support.microsoft.com/en-us/help/2696547/how-to-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and-windows
  2. Пароли локальных администраторов на всех узлах сети должны быть разные и не должны совпадать ни с какими доменными. Если это не соблюдено – то необходимо сменить все пароли, сделать их уникальными, длинными и сложными. Для этого необходимо применять системы управления локальными паролями, например, LAPS.
  3. Исключите присвоение полномочий администратора домена обычным пользовательским учетным записям. Для выполнения административных задач в домене требуется создавать каждому администратору отдельную дополнительную учетную запись в домене, исключив при этом повседневную обычную работу администратора на своем ПК от имени учетной записи с административными полномочиями.
  4. Включите изоляцию хостов внутри одного VLAN, чтобы один рабочий ПК не мог получить доступ к другому ПК на уровнях сети L2/L3, а имел доступ только в сегменты «общего пользования» (т.е. принтеры, серверы, и др.).
  5. Наладьте процесс своевременной установки всех выпускаемых обновлений безопасности от производителей ПО (операционные системы, антивирусы, офисные приложения и др.).
  6. Сервисные аккаунты должны иметь минимальные привилегии по части типов входа в систему, а также по составу групп. Не допускается добавление сервисных учетных записей в группу локальных администраторов без крайней необходимости.
  7. Применяйте современные средства обнаружения вторжений и песочницу для анализа файлов.
TDS Polygon успешно регистрирует факты пересылки подобных вредоносных файлов и создаёт соответствующие тикеты.

Стратегические мероприятия комплексного повышения защищенности

  1. Включите режим LSA Protection Mode (https://technet.microsoft.com/en-us/library/dn408187.aspx) на всех ПК и серверах под управлением Windows 8.1/Server 2012R2 и старше.
  2. Смените пароли всех учетных записей, обладающих расширенными полномочиями в домене и/или на серверах и/или ПК (администраторы домена, администраторы отдельных серверов и прикладных систем, администраторы ПК). Ввести регламент регулярной (не реже 1 раза в месяц) смены паролей администраторов домена.
  3. Исключите использование учетных записей, обладающих полномочиями администратора домена, для администрирования ПК пользователей. Для выполнения административных задач на ПК пользователей рекомендуется создавать каждому администратору отдельную дополнительную учетную запись в домене с ограниченными административными полномочиями – только на ПК.
  4. Внедрите возможность лишения локальных администраторов привилегий отладки (по умолчанию привилегия Debug Privilege присваивается группе BUILTIN\Administrators). Можно заменить эту группу на специально созданную доменную группу (например, DOMAIN\Debug users) через групповую политику.
  5. Реализуйте возможность включения режима «Account is sensitive and cannot be delegated» для учетных записей администраторов домена.
  6. Исключите использование в домене операционных систем Windows XP для рабочих станций и серверов под управлением ОС Windows Server 2003, Windows Vista. Обеспечьте своевременный отказ от использования ПК и серверов под управлением ОС, поддержку которых производитель прекратил.
  7. Используйте только официальное лицензионное ПО, которое поддерживается и регулярно обновляется производителем. Например, лицензионная копия ОС Windows для одной рабочей станции стоит порядка 100$, в то время как выкуп программы-шифровальщика обойдется гораздо дороже: 300$ просит Petya за один хост, а Bad Rabbit – 0,05 BTC (что примерно составляет 280$).