27-го июня, 2017 года новая кибератака поразила множество компьютерных систем в Украине и других странах. Атака была вызвана зловредом, который ESET определял как Diskcoder.C (aka ExPetr, PetrWrap, Petya, или NotPetya).
Эта атака маскировалась под эпидемию обычного шифровальщика — который шифровал данные на диске и требовал 300$ в биткоинах для восстановления данных. Но на самом деле, план был в нанесении ущерба, поэтому автора сделали все что могли, чтобы усложнить расшифровку данных.
В нашем блоге, мы уже отнесли эту атаку к группе TeleBots и раскрыли детали другой похожей цепочки атак против Украины. Эта статья раскрывает детали про первичный вектор распространения, который был использован для DiskCoder.C.
Итак, рассказ о поддельном обновлении.
На своей страничке в фейсбук, Департамент киберполиции в Украине, сообщил, что на начальной фазе распространения зловреда DiskCoder.C, было использовано популярное программное обеспечение бухгалтерского учета M.E.Doc — практически монополист на Украине в области передачи отчетности в фискальные службы. Но до сих пор нет никаких деталей как именно это было проделано.
Во время нашего исследования, мы обнаружили весьма хитро скрытый бэкдор, который был внедрен в один из официальных модулей M.E.Doc. Техническое исполнение выглядит так, что без доступа к исходным кодам M.E.Doc это было бы сделать весьма затруднительно.
Файл зараженного модуля ZvitPublishedObjects.dll, написан на .NET Framework, он размером в 5 мегабайт, и содержит большое количество функций легального кода, которые используется другими компонентами ПО, включая основной файл ezvit.exe
Мы изучили все обновления M.E.Doc, которые были выпущены в 2017 году, и обнаружили как минимум три обновления, содержащих зараженный модуль:
01.175-10.01.176, от 14 апреля 2017
01.180-10.01.181, от 15 мая 2017
01.188-10.01.189, от 22 июня 2017
Распространение Win32/Filecoder.AESNI.C началось через три дня после обновления 10.01.180-10.01.181, а распространение DiskCoder.C началось через 5 дней после обновления 10.01.188-10.01.189.
Что интересно, так это то, что четыре обновления с 24 апреля 2017 по 10 мая 2017 года, и семь обновлений с 17 мая по 21 июня, НЕ содержали троянский модуль.
В обновлениях с 15 мая по 17 мая, троянский модуль есть, но после 17 мая их нет, и это вероятно одна из причин, по которой распространение первого зловреда, а именно Win32/Filecoder.AESNI.C было не таким масштабным.
Возможно, обновление от 17-го мая было неожиданным для самих атакующих. Но они снова загрузили уязвимость в обновление от 18-го мая. Тем не менее большинство пользователей M.E.Doc уже обновились «вчерашним» патчем, и первая атака прошла не особо заметно.
Метаданные файла показывают, что библиотека была скомпилирована скорее всего прямо в день обновления, или возможно на день раньше, в зависимости от часового пояса.
Timestamp показывает, что троянский модуль был создан 15 мая.
Тут мы видим разницу в классах между зараженным и нормальным модулем (мы использовали .NET декомпилятор the ILSpy). Классы зараженного модуля слева.
Основной класс бэкдора — MeCom, который расположен в пространстве имен ZvitPublishedObjects.Server, как это указано на картинке 3.
Класс MeCom с троянским кодом в ILSpy .NET Decompiler.
Методы класса MeCom вызываются из метода IsNewUpdate в пространстве имен UpdaterUtils и ZvitPublishedObjects.Server. Сам метод IsNewUpdate периодически вызывается для проверки наличия новых обновлений. Зараженный модуль от 15 мая работает немного иначе и содержит меньше функций, чем модуль от 22 июня.
Каждая зарегистрированная организация в Украине имеет уникальный код ЕДРПОУ. И это очень важно, так как используя бэкдор для указанного ЕДРПОУ, можно проводить целенаправленную атаку против конкретной компании или организации. Работая изнутри, с компьютера где установлен троянский модуль, можно использовать различную тактику, в зависимости от намерений атакующих.
С тех пор, как M.E.Doc получил большую популярность, его можно найти на компьютере практически каждого бухгалтера. Один M.E.Doc может обслуживать сразу несколько организаций, и однажды установленный троян будет знать о всех ЕДРПОУ на этой машине для отправки их злоумышленникам.
Код, который собирает ЕДРПОУ.
Кроме ЕДРПОУ, троян также собирает настройки прокси, почты, включая логины и пароли зараженного приложения M.E.Doc.
Внимание! Рекомендуется сменить пароли для всех прокси и почтовых пользователей, которые пользовались M.E.Doc!!
Также вредоносный код записывает собранную информацию в реестре Windows по адресу HKEY_CURRENT_USER\SOFTWARE\WC, используя имена ключей Cred и Prx. Если на вашем компьютере вы найдете подобную информацию реестре, значит на вашем компьютере как минимум однажды троянский код уже выполнялся, и возможно ваши данные (включая пароли) уже есть у злоумышленников.
И наконец наиболее хитрая часть. Троянский модуль не использовал никаких внешних управляющих серверов или центров. Он пользовался стандартными обновлениями приложения от M.E.Doc с официального сервера upd.me-doc.com[.]ua. Единственное отличие от легальных запросов в том, что троянский код отправлял собранную информацию назад на сервер через cookies.
HTTP-запрос от трояснкого модуля, который содержит ЕДРПОУ в cookie.
Мы не проводили судебный анализ M.E.Doc сервера. Мы уже писали в нашем блоге, что есть признаки того, что сервер обновлений был скомпроментирован. Поэтому мы можем только подозревать, что атакующие смогли подпатчить сервер обновлений, чтобы различать запросы от зараженных и не зараженных машин и пользоваться этим.
Код бэкдора, который добавляет cookie в запрос.
И конечно, атакующий должен был добавить способ контроля зараженной машины. Этот код получал бинарные данные с официального сервера обновления M.E.Doc, расшифровывал их алгоритмом Triple Des, распаковывал из GZip, в результате получался XML файл с набором инструкций. Таким образом, этот троян превращался в полномасштабную платформу для кибершпионажа и киберсаботажа.
Код трояна, который расшифровывает список инструкций для выполнения на зараженной машине.
Таблица возможных команд:
Command назначение
0 – RunCmd Выполнить shell команду (то есть любую команду на удаленном компьютере)
1 – DumpData декодировать Base64 данные и сохранить их в файл (так можно прислать на компьютер любой другой файл, включая исполняемый файл с дополнительным функционалом)
2 – MinInfo Собрать информацию о компьютере — версия ОС, разрядность, текущие привилегии, настройки UAC, настройки прокси и почты (включая логины и пароли)
3 – GetFile Получить файл с зараженного компьютера
4 – Payload Декодировать Base64 данные, сохранить их в исполняемый файл и запустить его.
5 – AutoPayload тоже, что и предыдущее, но файл должен быть сохранен в виде библиотеки и предполагался выполняться через rundll32.exe. Вдобавок он должен попытаться перезаписать конкретную DLL.
Можно отметить, что команда номер 5, названная автором зловреда как «AutoPayload», полностью соответствует тому, каким образом изначально распространялся DiskCoder.C на зеро-пациентах (первых зараженных машинах).
Метод AutoPayload, который использовался для выполнения шифровальщика DiskCoder.C.
Выводы
Как показывает наш анализ, это была очень тщательно спланированная и хорошо выполненная операция. Мы предполагаем, что атакующие имели доступ к исходным кодам M.E.Doc. Что у них было достаточно времени чтобы изучить его код и внедрить скрытую уязвимость. Полный размер установочного пакета M.E.Doc — около 1.5 гигабайта, и нет никакой возможности оперативно проверить его на другие закладки и уязвимости.
Все еще остаются вопросы. Как долго этот троян использовался? Какие другие команды, кроме отправки зловредов DiskCoder.C и Win32/Filecoder.AESNI.C были запущены через этот канал? Какие другие атаки могли пройти задолго до текущей ситуации, но остались незамеченными? Сколько коммерческих и приватных данных могли утащить злоумышленники, и сейчас эти данные все еще могут быть использованы.
Отдельная благодарность моим коллегам Frédéric Vachon и Thomas Dupuy за их помощь в расследовании.
Indicators of Compromise (IoC)
ESET detection names:
MSIL/TeleDoor.A
Legitimate servers abused by malware authors:
upd.me-doc.com[.]ua
SHA-1 hashes:
7B051E7E7A82F07873FA360958ACC6492E4385DD
7F3B1C56C180369AE7891483675BEC61F3182F27
3567434E2E49358E8210674641A20B147E0BD23C
P.S.
От переводчика:
Данная ситуация показывает, как плохо государство осознает опасность киберпреступлений, насколько плохо то, что методы борьбы с киберпреступниками не обсуждаются со специалистами, и в результате принимаются совершенно бесполезные, неэффективные и даже вредные решения в виде блокировок и запретов.
В стране сотни крупных и десятки крупнейших ИТ компаний, которые пишут отличное ПО мирового уровня. И эти компании неоднократно предлагали государству услуги по созданию государственных ИТ сервисов, со всеми аттрибутами — адекватным тендером и привлечением специалистов с экспертизой.
Даже учитывая вопрос коррупции, тендер может быть организован таким образом, чтобы для исполнения были выбраны несколько крупных компаний, чьи имена уже имеют репутацию. Кто-то как автор, кто-то как независимый аудитор.
И совершенно очевидно, что подобный диалог нужен, и ПО, которое используется настолько широко, и уж тем более, которое является практически обязательным и имеет настолько критичное значение для бизнеса практически каждой компании, должно проходить адекватную, а не фуфлыжную сертификацию как ПО национального значения, поскольку коррупция и откаты в этом вопросе теоретически могут вылиться в потери, вплоть до несовместимых с существованием отдельных компаний разного масштаба, а то и государства (M.E.Doc. также используют в госконторах всех уровней).
Update:
www.securitylab.ru/news/487160.php — файлы действительно можно расшифровать. Автора NoPetya требуют денег, и в качестве доказательства расшифровали отправленный им файл.
www.securitylab.ru/news/487159.php — С bitcoin кошелька авторов вредоноса были сняты деньги.
Update2:
blog.talosintelligence.com/2017/07/the-medoc-connection.html
Очень полезная статья на английском, где проводили исследование с подтверждениями о том, что сервер обновлений M.E.Doc. действительно был сломан, и скорее всего зараза распространялась не из его офиса, а с поддельного сервера обновлений. Пруфы в виде скриншотов логов прилагаются.
Эта атака маскировалась под эпидемию обычного шифровальщика — который шифровал данные на диске и требовал 300$ в биткоинах для восстановления данных. Но на самом деле, план был в нанесении ущерба, поэтому автора сделали все что могли, чтобы усложнить расшифровку данных.
В нашем блоге, мы уже отнесли эту атаку к группе TeleBots и раскрыли детали другой похожей цепочки атак против Украины. Эта статья раскрывает детали про первичный вектор распространения, который был использован для DiskCoder.C.
Итак, рассказ о поддельном обновлении.
На своей страничке в фейсбук, Департамент киберполиции в Украине, сообщил, что на начальной фазе распространения зловреда DiskCoder.C, было использовано популярное программное обеспечение бухгалтерского учета M.E.Doc — практически монополист на Украине в области передачи отчетности в фискальные службы. Но до сих пор нет никаких деталей как именно это было проделано.
Во время нашего исследования, мы обнаружили весьма хитро скрытый бэкдор, который был внедрен в один из официальных модулей M.E.Doc. Техническое исполнение выглядит так, что без доступа к исходным кодам M.E.Doc это было бы сделать весьма затруднительно.
Файл зараженного модуля ZvitPublishedObjects.dll, написан на .NET Framework, он размером в 5 мегабайт, и содержит большое количество функций легального кода, которые используется другими компонентами ПО, включая основной файл ezvit.exe
Мы изучили все обновления M.E.Doc, которые были выпущены в 2017 году, и обнаружили как минимум три обновления, содержащих зараженный модуль:
01.175-10.01.176, от 14 апреля 2017
01.180-10.01.181, от 15 мая 2017
01.188-10.01.189, от 22 июня 2017
Распространение Win32/Filecoder.AESNI.C началось через три дня после обновления 10.01.180-10.01.181, а распространение DiskCoder.C началось через 5 дней после обновления 10.01.188-10.01.189.
Что интересно, так это то, что четыре обновления с 24 апреля 2017 по 10 мая 2017 года, и семь обновлений с 17 мая по 21 июня, НЕ содержали троянский модуль.
В обновлениях с 15 мая по 17 мая, троянский модуль есть, но после 17 мая их нет, и это вероятно одна из причин, по которой распространение первого зловреда, а именно Win32/Filecoder.AESNI.C было не таким масштабным.
Возможно, обновление от 17-го мая было неожиданным для самих атакующих. Но они снова загрузили уязвимость в обновление от 18-го мая. Тем не менее большинство пользователей M.E.Doc уже обновились «вчерашним» патчем, и первая атака прошла не особо заметно.
Метаданные файла показывают, что библиотека была скомпилирована скорее всего прямо в день обновления, или возможно на день раньше, в зависимости от часового пояса.
Timestamp показывает, что троянский модуль был создан 15 мая.
Тут мы видим разницу в классах между зараженным и нормальным модулем (мы использовали .NET декомпилятор the ILSpy). Классы зараженного модуля слева.
Основной класс бэкдора — MeCom, который расположен в пространстве имен ZvitPublishedObjects.Server, как это указано на картинке 3.
Класс MeCom с троянским кодом в ILSpy .NET Decompiler.
Методы класса MeCom вызываются из метода IsNewUpdate в пространстве имен UpdaterUtils и ZvitPublishedObjects.Server. Сам метод IsNewUpdate периодически вызывается для проверки наличия новых обновлений. Зараженный модуль от 15 мая работает немного иначе и содержит меньше функций, чем модуль от 22 июня.
Каждая зарегистрированная организация в Украине имеет уникальный код ЕДРПОУ. И это очень важно, так как используя бэкдор для указанного ЕДРПОУ, можно проводить целенаправленную атаку против конкретной компании или организации. Работая изнутри, с компьютера где установлен троянский модуль, можно использовать различную тактику, в зависимости от намерений атакующих.
С тех пор, как M.E.Doc получил большую популярность, его можно найти на компьютере практически каждого бухгалтера. Один M.E.Doc может обслуживать сразу несколько организаций, и однажды установленный троян будет знать о всех ЕДРПОУ на этой машине для отправки их злоумышленникам.
Код, который собирает ЕДРПОУ.
Кроме ЕДРПОУ, троян также собирает настройки прокси, почты, включая логины и пароли зараженного приложения M.E.Doc.
Внимание! Рекомендуется сменить пароли для всех прокси и почтовых пользователей, которые пользовались M.E.Doc!!
Также вредоносный код записывает собранную информацию в реестре Windows по адресу HKEY_CURRENT_USER\SOFTWARE\WC, используя имена ключей Cred и Prx. Если на вашем компьютере вы найдете подобную информацию реестре, значит на вашем компьютере как минимум однажды троянский код уже выполнялся, и возможно ваши данные (включая пароли) уже есть у злоумышленников.
И наконец наиболее хитрая часть. Троянский модуль не использовал никаких внешних управляющих серверов или центров. Он пользовался стандартными обновлениями приложения от M.E.Doc с официального сервера upd.me-doc.com[.]ua. Единственное отличие от легальных запросов в том, что троянский код отправлял собранную информацию назад на сервер через cookies.
HTTP-запрос от трояснкого модуля, который содержит ЕДРПОУ в cookie.
Мы не проводили судебный анализ M.E.Doc сервера. Мы уже писали в нашем блоге, что есть признаки того, что сервер обновлений был скомпроментирован. Поэтому мы можем только подозревать, что атакующие смогли подпатчить сервер обновлений, чтобы различать запросы от зараженных и не зараженных машин и пользоваться этим.
Код бэкдора, который добавляет cookie в запрос.
И конечно, атакующий должен был добавить способ контроля зараженной машины. Этот код получал бинарные данные с официального сервера обновления M.E.Doc, расшифровывал их алгоритмом Triple Des, распаковывал из GZip, в результате получался XML файл с набором инструкций. Таким образом, этот троян превращался в полномасштабную платформу для кибершпионажа и киберсаботажа.
Код трояна, который расшифровывает список инструкций для выполнения на зараженной машине.
Таблица возможных команд:
Command назначение
0 – RunCmd Выполнить shell команду (то есть любую команду на удаленном компьютере)
1 – DumpData декодировать Base64 данные и сохранить их в файл (так можно прислать на компьютер любой другой файл, включая исполняемый файл с дополнительным функционалом)
2 – MinInfo Собрать информацию о компьютере — версия ОС, разрядность, текущие привилегии, настройки UAC, настройки прокси и почты (включая логины и пароли)
3 – GetFile Получить файл с зараженного компьютера
4 – Payload Декодировать Base64 данные, сохранить их в исполняемый файл и запустить его.
5 – AutoPayload тоже, что и предыдущее, но файл должен быть сохранен в виде библиотеки и предполагался выполняться через rundll32.exe. Вдобавок он должен попытаться перезаписать конкретную DLL.
Можно отметить, что команда номер 5, названная автором зловреда как «AutoPayload», полностью соответствует тому, каким образом изначально распространялся DiskCoder.C на зеро-пациентах (первых зараженных машинах).
Метод AutoPayload, который использовался для выполнения шифровальщика DiskCoder.C.
Выводы
Как показывает наш анализ, это была очень тщательно спланированная и хорошо выполненная операция. Мы предполагаем, что атакующие имели доступ к исходным кодам M.E.Doc. Что у них было достаточно времени чтобы изучить его код и внедрить скрытую уязвимость. Полный размер установочного пакета M.E.Doc — около 1.5 гигабайта, и нет никакой возможности оперативно проверить его на другие закладки и уязвимости.
Все еще остаются вопросы. Как долго этот троян использовался? Какие другие команды, кроме отправки зловредов DiskCoder.C и Win32/Filecoder.AESNI.C были запущены через этот канал? Какие другие атаки могли пройти задолго до текущей ситуации, но остались незамеченными? Сколько коммерческих и приватных данных могли утащить злоумышленники, и сейчас эти данные все еще могут быть использованы.
Отдельная благодарность моим коллегам Frédéric Vachon и Thomas Dupuy за их помощь в расследовании.
Indicators of Compromise (IoC)
ESET detection names:
MSIL/TeleDoor.A
Legitimate servers abused by malware authors:
upd.me-doc.com[.]ua
SHA-1 hashes:
7B051E7E7A82F07873FA360958ACC6492E4385DD
7F3B1C56C180369AE7891483675BEC61F3182F27
3567434E2E49358E8210674641A20B147E0BD23C
P.S.
От переводчика:
Данная ситуация показывает, как плохо государство осознает опасность киберпреступлений, насколько плохо то, что методы борьбы с киберпреступниками не обсуждаются со специалистами, и в результате принимаются совершенно бесполезные, неэффективные и даже вредные решения в виде блокировок и запретов.
В стране сотни крупных и десятки крупнейших ИТ компаний, которые пишут отличное ПО мирового уровня. И эти компании неоднократно предлагали государству услуги по созданию государственных ИТ сервисов, со всеми аттрибутами — адекватным тендером и привлечением специалистов с экспертизой.
Даже учитывая вопрос коррупции, тендер может быть организован таким образом, чтобы для исполнения были выбраны несколько крупных компаний, чьи имена уже имеют репутацию. Кто-то как автор, кто-то как независимый аудитор.
И совершенно очевидно, что подобный диалог нужен, и ПО, которое используется настолько широко, и уж тем более, которое является практически обязательным и имеет настолько критичное значение для бизнеса практически каждой компании, должно проходить адекватную, а не фуфлыжную сертификацию как ПО национального значения, поскольку коррупция и откаты в этом вопросе теоретически могут вылиться в потери, вплоть до несовместимых с существованием отдельных компаний разного масштаба, а то и государства (M.E.Doc. также используют в госконторах всех уровней).
Update:
www.securitylab.ru/news/487160.php — файлы действительно можно расшифровать. Автора NoPetya требуют денег, и в качестве доказательства расшифровали отправленный им файл.
www.securitylab.ru/news/487159.php — С bitcoin кошелька авторов вредоноса были сняты деньги.
Update2:
blog.talosintelligence.com/2017/07/the-medoc-connection.html
Очень полезная статья на английском, где проводили исследование с подтверждениями о том, что сервер обновлений M.E.Doc. действительно был сломан, и скорее всего зараза распространялась не из его офиса, а с поддельного сервера обновлений. Пруфы в виде скриншотов логов прилагаются.