Банкер Emotet: развитие угрозы

Летом 2014 года компания Trend Micro сообщила об обнаружении новой угрозы — банковского троянца Emotet. В описании было указано, что зловред похищает банковские учетные данные пользователей путем перехвата трафика. Будем условно называть эту модификацию версией 1.

Осенью того же года мы обнаружили новую версию Emotet, которая привлекла наше внимание следующим:

Создатели троянца стали применять технологии автоматической кражи денег с банковских аккаунтов жертв — технологии так называемых «автозаливов». Троянец использовал модульную структуру: в его состав входил собственно установочный модуль, модуль-банкер, модуль-спамбот, модуль для кражи адресных книг из MS Outlook и модуль, предназначенный для организации DDoS-атак (Nitol DDoS bot). Создатели троянца прикладывали усилия для того, чтобы остаться незамеченными: сознательно не атаковали пользователей в зоне RU, атаки были нацелены на небольшое число немецких и австрийских банков (другие известные троянцы-банкеры не отличаются подобной избирательностью), доменное имя сервера автозаливов троянца часто менялось (один или несколько раз в сутки). Далее будем называть эту модификацию Emotet версией 2 (бот содержит и передает на C&C числа 1 и 7, что, видимо, означает, что автор троянца считает эту сборку версией 1.7).

Обе версии троянца атаковали клиентов немецких и австрийских банков.

#Банкер #Emotet нацелен на клиентов некоторых немецких, австрийских и швейцарских банков

Tweet

Мы внимательно наблюдали за версией 2 Emotet, однако в декабре 2014 года она свою активность завершила — командные серверы перестали отвечать зараженным компьютерам. Последняя команда, переданная с командных центров, была зафиксирована нами 10.12.2014 в 11:33:43 MSK.

Однако то, насколько серьезно авторы подошли к разработке этого троянца, и высокий уровень автоматизации его работы, не оставляли сомнений в том, что это еще не конец. Так и случилось — после небольшого перерыва в январе 2015 года Emotet появился снова! Присвоим этой модификации условный номер версии 3 (бот содержит и передает на C&C числа 1 и 16, что, видимо, означает, что автор троянца считает эту сборку версией 1.16).

По сути, Emotet версии 3 не сильно отличается от версии 2 — основные отличия направлены на повышение скрытности троянца. Из замеченных нами новшеств выделим следующие:

Троянец имеет новый встроенный публичный RSA-ключ, и, хотя протоколы общения Emotet версий 2 и 3 с командными центрами идентичны, в случае использования старого ключа бот не получит корректного ответа от командного центра. Скрипты автозаливов частично очищены от отладочной информации и комментариев. Новые мишени! Emotet теперь нацелился и на клиентов швейцарских банков. Слегка изменена технология внедрения кода в адресное пространство (АП) explorer.exe. Версия 2 использовала классическую схему внедрения кода: OpenProcess+WriteProcessMemory+CreateRemoteThread. Версия 3 использует только два шага из предыдущей схемы — OpenProcess+WriteProcessMemory; запуск внедренного кода обеспечивается при помощи модификации кода функции ZwClose в АП процесса explorer.exe, что также достигается при помощи WriteProcessMemory. Emotet версии 3 сопротивляется исследованию: если троянец обнаруживает, что запущен на виртуальной машине, он работает как обычно, но использует другой список адресов командных центров (C&C). Однако все эти адреса поддельные и нужны только для обмана исследователя. Троянец почти не содержит в себе текстовых строк: все строки, которые могли бы насторожить исследователя, зашифрованы при помощи RC4 и расшифровываются в выделенной памяти непосредственно перед их использованием, после использования — уничтожаются. В целом, у нас создалось впечатление, с помощью версии 2 были отработаны в «боевых» условиях основные технологии, используемые банкером, и на основании этой версии была написана версия 3, отличающаяся большей скрытностью.

Продуктами «Лаборатории Касперского» рассматриваемый троянец, независимо от версии, детектируется как Trojan-Banker.Win32.Emotet. Кроме того, мы детектируем отдельные составляющие Emotet:

Модуль для модификации HTTP (S)-трафика — Trojan-Banker.Win32.Emotet. Спам-модуль — Trojan.Win32.Emospam. Модуль для сбора почтовых адресов — Trojan.Win32.Emograbber. Модуль для кражи учетных записей электронной почты — Trojan-PSW.Win32.Emostealer. Модуль, предназначенный для организации DDoS-атак, — Trojan.Win32.ServStart. По поводу последнего модуля отметим следующее: этот модуль мы видели также в связке с другим вредоносным ПО. Мы предполагаем, что он добавляется к Emotet криптером. Вполне возможно, что авторы Emotet ничего не знают о наличии этого модуля в составе их вредоносного ПО. Как бы то ни было, командные центры этого модуля не отвечают, модуль не обновляется (дата компиляции — 19 октября 2014 года).

Заражение На сегодня нам известен единственный путь распространения банковского троянца Emotet — путем рассылки спам-писем с вредоносными вложениями или ссылками.

Вложенные файлы — обычные ZIP-архивы, внутри которых находится загрузчик Emotet. Файлы внутри архивов имеют длинное имя, например rechnung_november_2014_0003900028_2014_11_0029302375471_03_444_0039938289.exe. Это сделано сознательно: пользователь, открывший архив в стандартном Проводнике Windows, может не увидеть расширение .exe, так как избыточная часть имени файла может быть не отображена. Иногда вложение отсутствует, а в тексте письма содержится ссылка на вредоносный исполняемый файл или архив.

Банковский троянец #Emotet распространяется путем рассылки спам-писем с вредоносными вложениями или ссылками

Tweet

Примеры писем, использующихся для распространения троянца Emotet, приведены ниже.

Версия 2 (ссылка на зловред):

banker_emotet_pic01

Версия 2 (вложенный архив):

banker_emotet_pic02

Версия 3 (ссылка на зловред):

banker_emotet_pic03banker_emotet_pic04

Обнаруженные нами письма почти полностью копируют письма от известных компаний — Deutsche Telekom AG и DHL International GmbH. Даже изображения, содержащиеся в письмах, загружаются с официальных серверов telekom.de и dhl.com соответственно.

В случае, когда письмо содержало ссылку на вредоносный файл, он скачивался с адресов взломанных легитимных сайтов: hxxp://*******/82nBRaLiv (для версии 2)или с адресовhxxp://*******/dhl_paket_de_DE и hxxp://*******/dhl_paket_de_DE (для версии 3).

В Emotet версии 3 при обращении к адресам вида hxxp://*/dhl_paket_de_DE пользователю отдавался ZIP-архив с адреса видаhxxp://*/dhl_paket_de_DE/dhl_paket_de_DE_26401756290104624513.zip.Архив содержал в себе EXE-файл с длинным именем (чтобы скрыть расширение) и иконку PDF-документа.

Загрузка троянца Файл троянца упакован криптером, основное назначение которого — сбить детекты антивирусного продукта. После запуска и отработки криптера управление получает основной модуль Emotet — загрузчик. Он должен закрепиться в системе, соединиться с командным сервером, скачать дополнительные модули и запустить их.

Закрепление в системе реализовано довольно стандартно — Emotet версии 2 сохраняет себя в »%APPDATA%\Identities» со случайным именем из 8 символов (например — wlyqvago.exe), добавляет себя в автозагрузку (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run) и удаляет свой исходный файл при помощи запуска bat-файла, который создается в %APPDATA% с именем «ms[7_случайных_цифр].bat».

Emotet версии 3 сохраняет себя в »%APPDATA%\Microsoft\» с именем формата «msdb%x.exe» (например — C:\Documents and Settings\Administrator\Application Data\Microsoft\msdbfe1b033.exe), добавляет себя в автозагрузку (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run) и удаляет себя при помощи запуска bat-файла (который создается в %APPDATA%\del%x.bat).

После закрепления в системе Emotet получает список имен всех запущенных в ней процессов и считает хэш от имени каждого процесса, сравнивая полученное значение с жестко зашитым 0xB316A779 — этот хэш соответствует имени процесса explorer.exe. Таким образом Emotet находит процесс для внедрения своего тела. Далее троянец распаковывает свое основное тело и внедряет его в процесс explorer.exe.

Общение с командным центром Основной модуль троянца — загрузчик — осуществляет общение с C&C с использованием RC4 шифрования.

Порт, к которому обращается загрузчик, жестко зашит в его коде — 8080.

Адреса командных центров IP-адреса командных серверов Emotet жестко зашиты в коде бота. Их несколько, в одном из исследованных нами образцов версии 2 их было 30 (отметим, что 3 адреса из этого списка принадлежат известным легитимным ресурсам):

hxxp://109.123.78.10hxxp://66.54.51.172hxxp://108.161.128.103hxxp://195.210.29.237hxxp://5.35.249.46hxxp://5.159.57.195hxxp://206.210.70.175hxxp://88.80.187.139hxxp://188.93.174.136hxxp://130.133.3.7hxxp://162.144.79.192hxxp://79.110.90.207hxxp://72.18.204.17hxxp://212.129.13.110hxxp://66.228.61.248hxxp://193.171.152.53hxxp://129.187.254.237hxxp://178.248.200.118hxxp://133.242.19.182hxxp://195.154.243.237hxxp://80.237.133.77hxxp://158.255.238.163hxxp://91.198.174.192hxxp://46.105.236.18hxxp://205.186.139.105hxxp://72.10.49.117hxxp://133.242.54.221hxxp://198.1.66.98hxxp://148.251.11.107hxxp://213.208.154.110

В исследованном нами образце версии 3 командных центров было 19:

hxxp://192.163.245.236hxxp://88.80.189.50hxxp://185.46.55.88hxxp://173.255.248.34hxxp://104.219.55.50hxxp://200.159.128.19hxxp://198.23.78.98hxxp://70.32.92.133hxxp://192.163.253.154hxxp://192.138.21.214hxxp://106.187.103.213hxxp://162.144.80.214hxxp://128.199.214.100hxxp://69.167.152.111hxxp://46.214.107.142hxxp://195.154.176.172hxxp://106.186.17.24hxxp://74.207.247.144hxxp://209.250.6.60

Общение с C&C при запуске на виртуальной машине Emotet версии 3 содержит в себе еще один список адресов «командных центров», он выглядит следующим образом:

hxxp://142.34.138.90hxxp://74.217.254.29hxxp://212.48.85.224hxxp://167.216.129.13hxxp://91.194.151.38hxxp://162.42.207.58hxxp://104.28.17.67hxxp://8.247.6.134hxxp://5.9.189.24hxxp://78.129.213.41hxxp://184.86.225.91hxxp://107.189.160.196hxxp://88.208.193.123hxxp://50.56.135.44hxxp://184.106.3.194hxxp://185.31.17.144hxxp://67.19.105.107hxxp://218.185.224.231

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

Если #Emotet запущен на виртуальной машине, он обращается к некорректным адресам C&C, чтобы обмануть аналитика

Tweet

Обнаружение виртуальных машин организовано довольно просто — по именам процессов, характерных для различных виртуальных машин. От имени каждого процесса в системе считается хэш по следующему алгоритму:

banker_emotet_pic05

Алгоритм расчета хэш-значения от имени процесса

Полученное хэш-значение последовательно сравнивается со списком жестко зашитых в троянец значений: banker_emotet_pic06

Хэши от имен процессов, используемых для обнаружения виртуальных машин

Мы подобрали имена процессов для некоторых хэшей. Так, хэш 0xBCF398B5 соответствует процессу vboxservice.exe, хэш 0×2C967737 — процессу vmacthlp.exe, хэш 0xE3EBFE44 — процессу vmtoolsd.exe, 0×61F15513 — процессу vboxtray.exe.

Передаваемые данные Запрос к командному центру выглядит в трафике следующим образом (приведен пример для версии 2, однако запрос версии 3 выглядит аналогично):

banker_emotet_pic07

Диалог бота Emotet и его командного центра

URL-путь, к которому обращается бот, выглядит так:»/722ffc5e/355c7a0a/», где 722ffc5e — число, вычисленное на основе информации из маркера доступа пользователя, а 0×355c7a0a = 0×722ffc5e xor 0×47738654 (значение 0×47738654 жестко зашито в теле бота).

Данные, которые передаются ботом и командным центром, зашифрованы при помощи RC4, ответы, приходящие от командного центра, подписаны цифровой подписью. Вероятно, это сделано для того, чтобы усложнить перехват контроля над ботнетом: для того, чтобы пакет был принят ботом, он должен быть подписан, а для этого необходимо иметь секретный ключ.

В теле бота находится публичный RSA-ключ. В формате PEM для версии 2 он выглядит следующим образом:

banker_emotet_pic08

PEM-представление открытого RSA-ключа, зашитого в теле бота версии 2

Как уже отмечалось выше, в версии 3 ключ изменился. В формате PEM он выглядит так:

banker_emotet_pic09

PEM-представление открытого RSA-ключа, зашитого в теле бота версии 3

Пакет, отправляемый на сервер, формируется следующим образом:

Генерируется запрос, включающий в себя идентификатор зараженного компьютера, значения, предположительно являющиеся версией бота, информацию о системе (версия ОС, версия сервис-паков, product type), жестко зашитый dword (значение в исследованном сэмпле — 7), контрольные суммы модуля «банкер» и информации о веб-инжектах. Информация об инжектах содержит: адрес страницы (с джокерами), на которую надо делать инжект; данные, идущие до внедряемых; данные, идущие после внедряемых, и внедряемые данные. От составленного запроса рассчитывается SHA1-хэш. Запрос шифруется при помощи сгенерированного случайным образом RC4-ключа длиной 128 бит. Сгенерированный RC4-ключ шифруется при помощи открытого RSA-ключа. Итоговый пакет представляет собой конкатенацию результатов, полученных на шагах 4, 2 и 3. Таким образом, пакет запроса можно представить в виде схемы:

banker_emotet_pic10_ru

Структура запроса от бота к серверу

В ответ от сервера приходит пакет со следующей структурой:

banker_emotet_pic11_ru

Структура ответа сервера боту

В ответе может содержаться информация о веб-инжектах Emotet, модули Emotet и ссылки для загрузки внешних модулей (например, спам-бот или обновления загрузчика).

Модули Как и подавляющее большинство современных троянцев-банкеров, Emotet имеет модульную структуру. На сегодняшний день мы обнаружили следующие модули:

Название Описание Способ доставки на заражаемую систему loader загрузчик В спам-письмах или путем скачивания по ссылке со скомпрометированных сайтов (в случае обновления). nitol-like-ddos-module DDoS-бот mss спам-модуль Скачивается со скомпрометированных сайтов модулем loader email_accounts_grabber граббер email-аккаунтов, использует Mail PassView — легитимное ПО, предназначенное для восстановления забытых паролей к аккаунтам почтовых систем Получается модулем loader в пакете-ответе от командного центра banker модуль для модификации HTTP (S)-трафика Получается модулем loader в пакете-ответе от командного центра outlook_grabber граббер адресной книги Outlook Получается модулем loader в пакете-ответе от командного центра Некоторые модули могут работать и отдельно от модуля loader, так как ничего из него не импортируют.

Все устройство бота говорит о высокой степени автоматизации его работы: автоматически собираются новые email-адреса из адресных книг жертвы, автоматически рассылается спам с загрузчиком Emotet, автоматически выводятся деньги у пользователя. Участие оператора сведено к минимуму.

Вот, к примеру, отправленный злоумышленнику отчет модуля outlook_grabber (из Emotet версии 2) с украденной адресной книгой Outlook:

banker_emotet_pic12

Украденная адресная книга Oulook, переданная на сервер злоумышленников

В качестве положительного момента отметим следующее: при попытке обратиться к одному из серверов злоумышленниковприходит ответ, содержащий «X-Sinkhole: Malware sinkhole», то есть украденные данные до злоумышленников не дойдут — данный домен, который использовался Emotet версии 2, уже не под контролем авторов троянца.

Однако для версии 3 дела обстоят иначе. Вот так выглядит отчет модуля email_accounts_grabber из Emotet версии 3:

banker_emotet_pic13

Отчет, содержащий данные о почтовых аккаунтах пользователя

Очевидно, что сервер отвечает »200 OK». Это означает, что злоумышленники успешно получили переданные данные.

Отдайте ваши деньги! Информация о внедряемых на страницу данных, полученная Emotet после распаковки, выглядит следующим образом:

banker_emotet_pic14

Расшифрованные данные о веб-инжектах Emotet версии 2

banker_emotet_pic15

Расшифрованные данные в веб-инжектах Emotet версии 3

Существенная разница в данных об инжектах разных версий заключается в следующем: Emotet версии 3 нацелился на клиентов швейцарских кредитных организаций. Пока мы не видели скриптов для автоматического хищения денег со счетов клиентов этих кредитных организаций, но мы уверены, что вскоре такие скрипты будут написаны.

Хотя отдельные фрагменты HTML-кода в расшифрованном пакете легко читаются, понять правила применения веб-инжектов по расшифрованным данным затруднительно. Ниже в формате JSON представлены несколько правил веб-инжектов для одной мишени — сайта одного из немецких банков (Emotet версии 2).

banker_emotet_pic16

Правила веб-инжектов на сайт одного из немецких банков (Emotet версии 2)

Применение данного веб-инжекта сводится к созданию нового элемента типа

, который будет иметь размер во всю видимую область страницы, а также к добавлению нового скрипта в HTML-документ. В приведенном примере скрипт загружался с адреса hxxps://*******.eu/birten/luck.php? lnk=js&id=44. И аналогичная запись нескольких правил инжектов для новой мишени — сайта крупнейшего австрийского банка (Emotet версии 3).

banker_emotet_pic17

Правила веб-инжектов на сайт одного из австрийских банков (Emotet версии 3)

Очевидно, что структура конфигурационного файла с веб-инжектами классическая — используются поля, условно называемые data_before, data_after и data_inject (то есть данные, идущие до внедряемых, данные, идущие после внедряемых, и собственно внедряемые данные).

Стоит отметить, что адрес хоста, на котором расположен файл luck.php (для версии 2) и a_00.php (для версии 3), меняется часто, остальная же часть адреса скрипта постоянна. Если исследователь обратится к скрипту напрямую, он получит лишь сообщение об ошибке. Однако в реальной атаке, когда строка

banker_emotet_code

будет добавлена в настоящую банковскую страницу, скрипт успешно загрузится.

Так происходит потому, что сервер злоумышленников проверяет поле «Referer» заголовка HTTP-запроса и отдает скрипт только в том случае, если запрос пришел со страницы одного из банков, атакуемых Emotet.

Подставив нужный Referer, можно легко получить код скрипта.

Мы в «Лаборатории Касперского» получили скрипты, предназначенные для внедрения на страницы атакуемых банков.

Таблица 1. Мишени Emotet версии 2, типы атак и идентификационные номера скриптов, загружаемых для проведения этих атак.

banker_emotet_pic18

Таблица 2. Мишени Emotet версии 3, типы атак и идентификационные номера скриптов, загружаемых для проведения этих атак.

banker_emotet_pic19

В одном из скриптов Emotet версии 2, который использовался для атаки на один из немецких банков, в комментариях присутствовала следующая строка:

banker_emotet_pic20

Артефакт из скрипта для атаки на немецкий банк (Emotet версии 2)

Очевидно, что разработчики скриптов для атаки говорят по-русски.

Обход двухфакторной аутентификации Основное назначение рассмотренных выше скриптов — провести мошеннический перевод денег со счета пользователя. Однако бот не может обойти системы двухфакторной аутентификации (Chip TAN или SMS TAN) самостоятельно, ему требуется участие пользователя. Для обмана потенциальной жертвы используются приемы социальной инженерии: сообщение, внедренное на веб-страницу при помощи скрипта, сообщает пользователю о том, что на сайте проводятся работы по внедрению новой системы безопасности, и работу нельзя продолжить до тех пор, пока пользователь не поучаствует в ее тестировании в демо-режиме.

banker_emotet_pic21

Поддельное сообщение о новой системе безопасности

Далее — просьба о вводе реальных данных Chip TAN или SMS TAN для осуществления «тестового перевода»:

banker_emotet_pic21_1

И, наконец, поздравление с тем, что работы успешно завершены:

banker_emotet_pic22

На самом деле под видом тестового перевода вредоносный скрипт оформляет реальный перевод денег со счета жертвы на счет подставного лица — так называемого «дропа», а пользователь сам подтверждает этот перевод с помощью Chip TAN или SMS TAN.

Данные о счетах для перевода украденных денег не указаны в скрипте изначально, а приходят с командного сервера злоумышленников при помощи специального запроса. В ответ на него командный сервер возвращает строку с информацией о «дропе» для каждой конкретной транзакции. В комментариях в одном из скриптов была найдена строка:

banker_emotet_pic23

Очевидно, злоумышленники тестировали свои скрипты, переводя 1500.9 EUR на тестовый счет.

Кроме того, в этом скрипте была найдена следующая информация о дропе:

banker_emotet_pic24

В соответствующем скрипте Emotet версии 3, предназначенном для атаки на тот же банк, также была найдена информация о дропе, но уже о другом:

banker_emotet_pic25

Сравним поля JSON __DropParam и поля в легитимной форме из демо-доступа в онлайн-систему атакуемого банка.

banker_emotet_pic26

Форма системы ДБО банка для переводов внутри Германии или в зоне SEPA

Таблица 3. Соответствие между данными дропа и полями на форме перевода средств, а также пояснения значений этих полей

Имя поля в __DropParam JSON Имя соответствующего поля на форме Перевод Содержание поля name Empfängername Имя получателя Реальное имя «дропа», которому уйдут похищенные деньги ibanorkonto IBAN/Konto-Nr. Международный номер банковского счета / номер счета Номер счета, международный или местный, на который будут переведены деньги bicorblz BIC/BLZ Код BIC или BLZ Международный банковский идентификационный код или идентификационный код, используемый немецкими и австрийскими банками (Bankleitzahl) description Verwendungszweck Цель Назначение платежа amount Betrag Сумма Переводимая сумма Поля JSON __DropParam соответствуют полям на форме.

Таким образом, бот получает всю необходимую информацию о дропе со своего сервера и оформляет на него перевод, а введенный в заблуждение пользователь подтверждает перевод при помощи Chip TAN или SMS TAN и навсегда расстается со своими деньгами.

Заключение Троянец Emotet представляет собой высокоавтоматизированную, развивающуюся, территориально-таргетированную банковскую угрозу. Небольшой размер, применяемые механизмы самораспространения и модульная архитектура делают Emotet весьма эффективным орудием киберпреступника.

Троянец #Emotet — высокоавтоматизированная, развивающаяся, территориально-таргетированная банковская угроза

Tweet

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

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

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

Некоторые MD5 Emotet версия 2:7c401bde8cafc5b745b9f65effbd588f34c10ae0b87e3202fea252e25746c32d9ab7b38da6eee714680adda3fdb08eb6ae5fa7fa02e7a29e1b54f407b33108e71d4d5a1a66572955ad9e01bee0203c99cdb4be5d62e049b6314058a8a27e975d642a9becd99538738d6e0a7ebfbf2ef6aca8bdbd8e79201892f8b46a3005744b9b011c8f47d228d12160ca7cd6ca9c1f6358fae78681a21dd26f63e8ac6148ccac49e85de3fced88e3e4ef78af173b37c0f8b2e3f1989b93f749d8486ce6f6091561359c46a2df408f9860b162e7e13ba8ca1089d442543933456931240e6d45

Emotet версия 3:177ae9a7fc02130009762858ad1826781a6fe1312339e26eb5f7444b89275ebf257e82d6c0991d8bd2d6c8eee4c672c73855724146ff9cf8b9bbda26b828ff053bac5797afd28ac715605fa9e73063333d28b10bcf3999a1b317102109644bf14e2eb67aa36bd3da832e802cd5bdf8bc4f81a713114c4180aeac8a6b082cee4d52f05ee28bcfec95577d154c62d40100772559c590cff62587c08a4a766744a7806489b327e0f016fb1d509ae984f760876a6a5252e0fc5c81cc852d5b167f2b94fa5551d26c60a3ce9a10310c765a89A5a86d5275fa2ccf8a55233959bc0274b43afd499eb90cee778c22969f656cd2b93a6ee991a9097dd8992efcacb3b2f7ddd7cdbc60bd0cdf4c6d41329b43b4cee01954ac6d0009790c66b943e911063ee49c549b95dbd8ebc0930ad3f147a4b9ea804a986c02d734ad38ed0cb4d157a7

Автор выражает признательность Владимиру Кускову, Олегу Купрееву и Юрию Наместникову за помощь при подготовке данной публикации.

Полный текст статьи читайте на Лаборатория Касперского