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

Содержание 

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

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

  • Создатели троянца стали применять технологии автоматической кражи денег с банковских аккаунтов жертв – технологии так называемых «автозаливов».
  • Троянец использовал модульную структуру: в его состав входил собственно установочный модуль, модуль-банкер, модуль-спамбот, модуль для кражи адресных книг из MS Outlook и модуль, предназначенный для организации DDoS-атак (Nitol DDoS bot).
  • Создатели троянца прикладывали усилия для того, чтобы остаться незамеченными: сознательно не атаковали пользователей в зоне RU, атаки были нацелены на небольшое число немецких и австрийских банков (другие известные троянцы-банкеры не отличаются подобной избирательностью), доменное имя сервера автозаливов троянца часто менялось (один или несколько раз в сутки).

Далее будем называть эту модификацию Emotet версией 2 (бот содержит и передает на C&C числа 1 и 7, что, видимо, означает, что автор троянца считает эту сборку версией 1.7).

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

Мы внимательно наблюдали за версией 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, приведены ниже.

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

banker_emotet_pic01

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

banker_emotet_pic02

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

banker_emotet_pic03
banker_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.10
hxxp://66.54.51.172
hxxp://108.161.128.103
hxxp://195.210.29.237
hxxp://5.35.249.46
hxxp://5.159.57.195
hxxp://206.210.70.175
hxxp://88.80.187.139
hxxp://188.93.174.136
hxxp://130.133.3.7
hxxp://162.144.79.192
hxxp://79.110.90.207
hxxp://72.18.204.17
hxxp://212.129.13.110
hxxp://66.228.61.248
hxxp://193.171.152.53
hxxp://129.187.254.237
hxxp://178.248.200.118
hxxp://133.242.19.182
hxxp://195.154.243.237
hxxp://80.237.133.77
hxxp://158.255.238.163
hxxp://91.198.174.192
hxxp://46.105.236.18
hxxp://205.186.139.105
hxxp://72.10.49.117
hxxp://133.242.54.221
hxxp://198.1.66.98
hxxp://148.251.11.107
hxxp://213.208.154.110

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

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

Общение с C&C при запуске на виртуальной машине

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

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

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

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

banker_emotet_pic05

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

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

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

Мы подобрали имена процессов для некоторых хэшей. Так, хэш 0xBCF398B5 соответствует процессу vboxservice.exe, хэш 0x2C967737 – процессу vmacthlp.exe, хэш 0xE3EBFE44 – процессу vmtoolsd.exe, 0x61F15513 – процессу vboxtray.exe.

Передаваемые данные

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

banker_emotet_pic07

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

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

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

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

banker_emotet_pic08

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

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

banker_emotet_pic09

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

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

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

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

Некоторые MD5

Emotet версия 2:
7c401bde8cafc5b745b9f65effbd588f
34c10ae0b87e3202fea252e25746c32d
9ab7b38da6eee714680adda3fdb08eb6
ae5fa7fa02e7a29e1b54f407b33108e7
1d4d5a1a66572955ad9e01bee0203c99
cdb4be5d62e049b6314058a8a27e975d
642a9becd99538738d6e0a7ebfbf2ef6
aca8bdbd8e79201892f8b46a3005744b
9b011c8f47d228d12160ca7cd6ca9c1f
6358fae78681a21dd26f63e8ac6148cc
ac49e85de3fced88e3e4ef78af173b37
c0f8b2e3f1989b93f749d8486ce6f609
1561359c46a2df408f9860b162e7e13b
a8ca1089d442543933456931240e6d45

Emotet версия 3:
177ae9a7fc02130009762858ad182678
1a6fe1312339e26eb5f7444b89275ebf
257e82d6c0991d8bd2d6c8eee4c672c7
3855724146ff9cf8b9bbda26b828ff05
3bac5797afd28ac715605fa9e7306333
3d28b10bcf3999a1b317102109644bf1
4e2eb67aa36bd3da832e802cd5bdf8bc
4f81a713114c4180aeac8a6b082cee4d
52f05ee28bcfec95577d154c62d40100
772559c590cff62587c08a4a766744a7
806489b327e0f016fb1d509ae984f760
876a6a5252e0fc5c81cc852d5b167f2b
94fa5551d26c60a3ce9a10310c765a89
A5a86d5275fa2ccf8a55233959bc0274
b43afd499eb90cee778c22969f656cd2
b93a6ee991a9097dd8992efcacb3b2f7
ddd7cdbc60bd0cdf4c6d41329b43b4ce
e01954ac6d0009790c66b943e911063e
e49c549b95dbd8ebc0930ad3f147a4b9
ea804a986c02d734ad38ed0cb4d157a7

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

Публикации на схожие темы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *