Эксперты Group-IB проанализировали троян, атакующий клиентов банков США, и выложили в публичный доступ результаты глубокого разбора формата динамических конфигурационных данных с Python-скриптами и информацию по CnC-серверам.
![image](https://habrastorage.org/r/w1560/webt/b0/4i/rd/b04ird-g1xlcbwcd27zrl3rzg90.png)
В ноябре 2017 года команда исследователей из IBM X-Force опубликовала отчет по новому трояну — IcedID, который нацелен преимущественно на клиентов американских банков. Бот обладает многими возможностями печально известного вредоносного ПО Zeus, в том числе: загружает и запускает модули, собирает и передает на сервер аутентификационные данные, информацию о зараженном устройстве, осуществляет атаку man-in-the-browser (MITB). Несмотря на то, что по своим функциональным возможностям новый троян оказался похож на другие популярные банкеры — Trickbot, GOZI, Dridex, активно атакующие клиентов банков, IcedID использует нестандартный бинарный формат хранения конфигурационных данных. Другой отличительной особенностью этого вредоносного ПО является возможность развертывания прокси-сервера прямо на зараженной машине для проведения атаки MITB.
Текст: Иван Писарев, специалист по анализу вредоносного кода Group-IB
Сразу отметим, что IcedID не так сильно распространен по сравнению с другими троянами, однако уже сейчас имеет достаточно функциональных возможностей для достижения поставленных перед ним задач, из которых главной является кража учетных данных жертв. Достигнуть этого можно многими способами, начиная от банальной кражи файлов и записей реестра с зараженного компьютера, и заканчивая перехватом и изменением зашифрованного трафика браузера (атака man-in-the-browser).
В случае IcedID происходила кража данных из учетных записей: Windows Live Mail, Windows Mail, RimArts, Poco Systems Inc, IncrediMail, The Bat! и Outlook. Атака MITB производится при помощи Proxy-сервера, который троян поднимает на зараженном устройстве, тем самым пропуская весь сетевой трафик через себя и модифицируя его. Также IcedID имеет модуль обработки команд от сервера, позволяющий удаленно загружать и запускать файл (к примеру, в исследуемом случае семпл загрузил модуль VNC, программный код которого имеет схожие участки кода с IcedID).
Использование Proxy-сервера для MITB является нетипичным поведением для данного типа троянов. Чаще происходит встраивание вредоносной программы в контекст браузера и перенаправление вызовов функций из стандартных библиотек на ее функции-обработчики (пример: WinHttpConnect(), InternetConnect(), InternetReadFile(), WinHttpReadData() и т.д.). Ранее трюк с Proxy-сервером уже был использован в GootKit.
IcedID распространялся с помощью другого вредоносного ПО — Emotet (в настоящее время он часто используется как загрузчик, хотя имеет расширенные функциональные возможности) и уже на старте включал в себя обширный список современных методов хищения пользовательских данных.
Сейчас троян имеет достаточно слабые механизмы противодействия анализу (шифрование строк, header corrupt) и не имеет никаких методов VM-detect. С точки зрения исследователя, вредоносное ПО все еще находится в разработке и данные механизмы защиты будут добавлены позже.
Система киберразведки Group-IB Threat Intelligence не обнаружила продажи IcedID на тематических форумах, что означает либо появление новой группы на арене банковских троянов, либо продажу трояна по приватным каналам. Цели бота, судя по динамическим конфигурационным данным (далее – конфиги), расположены в основном в США.
Данная статья включает в себя подробный анализ трояна, глубокий разбор формата динамических конфигов с Python-скриптами и информацию по CnC.
Изначально секция .data трояна зашифрована. В первую очередь после запуска он расшифровывает секцию по алгоритму:
![image](https://habrastorage.org/r/w1560/webt/a-/q0/ix/a-q0ixeg0onp--szzafmr9on6os.png)
Переменные initial_seed и size_seed находятся вначале секции данных (первые 8 байт секции), после чего находятся зашифрованные данные размером size байт. Функция make_seed() – уникальная функция генератора псевдослучайных чисел (ГПСЧ) для IcedID, к которой мы еще неоднократно вернемся. Python-вариант функции вы можете найти тут.
Изначально бот содержит зашифрованные строки. С целью облегчения анализа для IDA Pro был написан скрипт, расшифровывающий строки (необходимо вставить адрес функции расшифрования в вашем семпле).
Следующий этап – добавление обработчика исключений при помощи функции SetUnhandledExceptionFilter(). При возникновении любого исключения в процессе работы приложения просто происходит его перезапуск.
После добавления обработчика исключений троян собирает информацию о зараженной системе:
Приложение создает дескриптор безопасности: D:(A;;GA;;;WD)(A;;GA;;;AN)S:(ML;;NW;;;S-1-16-0), после чего выделяет память для логирования информации в процессе работы трояна. Пример логируемых строк (строки были получены при помощи скрипта в IDA):
IcedID может принимать несколько параметров. Среди них:
тем самым обеспечивая себе персистентность в системе. Данный ключ предназначен для первоначального запуска трояна.
Похоже, данный ключ используется при обновлении банкера. Перед перезапуском троян “засыпает” на 5 секунд.
После обработки параметров приложение обращается к реестру и достает оттуда динамические конфигурационные данные, которые содержат CnC-адреса, а также Web-инжекты. Формат хранения данных в реестре описан в следующих разделах.
После обращения к реестру программа создает поток, который раз в 5 или 10 минут (в зависимости от внутреннего флага) обращается к CnC с целью получения команд. Тут стоит отметить нестандартный механизм «засыпания» бота между обращением к CnC: разработчики не стали использовать стандартную функцию Sleep(), вместо этого они создали событие в несигнальном состоянии и не переводя его в сигнальное состояние вызывают функцию WaitForSingleObject(). Функция создания потока обращения к CnC:
![image](https://habrastorage.org/r/w1560/webt/vu/bg/1_/vubg1_zk61_dw8auvz80yi1lhxc.png)
Аналог функции Sleep() в IcedID:
![image](https://habrastorage.org/r/w1560/webt/yd/if/f3/ydiff39eemw9rymerxmj82rintw.png)
Долгий промежуток обращения к серверу, а также нестандартная «функция засыпания» скорее всего предназначены для противодействия анализу.
Для скрытия трафика между сервером и приложением используется протокол SSL.
После запуска потока бот «поднимает» на локальной машине Proxy-сервер с целью обработки трафика на зараженной машине.
Протокол общения сервера и зараженного устройства будут разобраны в следующих разделах. Однако стоит отметить, что вредоносная программа по команде сервера может обновлять конфиги, запускать и останавливать VNC-сервер, исполнять команды cmd.exe, загружать файлы.
Список CnC-адресов хранится в теле банкера в зашифрованном виде, а также в реестре в виде динамического конфига. Взаимодействие между сервером и трояном осуществляется при помощи протокола HTTPS. Данные отправляет на сервер POST-запросами, для получения данных использует GET.
Строка запроса к серверу имеет следующий вид:
Значение полей:
Далее значения полей зависят от поля «a». Если оно равно 0 либо 1, то запрос выглядит следующим образом:
Тело запроса содержит информацию о зараженной машине. Информация предоставляется в виде:
Где:
Если поле равно 2 либо 3, то запрос выглядит следующим образом:
В противном случае запрос выглядит следующим образом:
Примеры запросов представлены на рисунках ниже. Заголовок пакета при обращении к серверу:
![image](https://habrastorage.org/r/w1560/webt/4t/yj/cw/4tyjcwlgccfqrer5fkblehqaza0.png)
Тело сообщения:
![image](https://habrastorage.org/r/w1560/webt/nx/iu/7r/nxiu7r72nmfovwhqcz85fdjwoga.png)
Троян может принимать команды от сервера. Команды представлены в виде целочисленных значений. Все команды приходят боту в виде строк, параметры которой разделены символом «;». Программа может обрабатывать 23 команды:
В случае успешного исполнения команды троян отправляет на сервер строку «True», иначе «False».
В случае получения команды на запуск модуля расширенных команд приложение отправляет на сервер два байта, после чего ожидает ответ. Первый полученный от сервера байт соответсвует расширенной команде из таблицы:
VNC-сервер может запускаться двумя возможными способами (в зависимости от внутреннего флага):
где <%param%> — 16 байт в строковом представлении, заполняются следующим образом:
![image](https://habrastorage.org/r/w1560/webt/4o/st/i2/4osti2buinqlg7gegp8decyoiio.png)
Сразу после запуска VNC-модуль проверяет наличие ключа -s, после чего читает передаваемый параметр, проверяет условие:
и при помощи функции DuplicateHandle() создает копию хендла сокета для дальнейшего взаимодейтсвия с сервером.
Параметр StartupInfo функции CreateProcessA() содержит имя специально сгенерированного Desktop'a: Default<%flag%>. Также в параметр ProcessInformation перед вызовом функции помещется адрес VNC-модуля:
![image](https://habrastorage.org/r/w1560/webt/na/fd/zu/nafdzutb3bptvxfmbis9ver33v8.png)
Как видно из представленного списка IcedID обладает широким спектром возможностей для полного управления зараженной машиной. Даже если оператор столкнется с проблемой отсутствия какой-либо функции, он просто загрузит при помощи трояна другую программу и выполнит поставленные перед ним задачи. К примеру, в конце декабря 2017 года нами было зафиксировано распространение с помощью данного банкера TrickBot’a.
Все конфигурационные данные, которые программа получает от сервера, хранятся в реестре зараженного устройства (за исключением VNC-модуля, который хранится в директории %TEMP% в формате tmp%0.8X01.dat).
Имена ключей реестра, в которых хранятся интересующие нас конфигурационные данные, вычисляются при помощи следующей функции:
Как видно из представленного рисунка, имя ключа – MD5-хеш значение от двух переменных – str и computerSeed. От значения первой переменной зависит какого типа данные хранятся в переменной реестра. К примеру, при значении переменной – *cfg0 или *cfg1 ключ реестра хранит Web-инжекты, при значении *rtd ключ хранит список CnC.
computerSeed – уникальная для конкретного пользователя переменная. Высчитывается она на основании SID’a пользователя. В скрипте представлена python-версия вычисления данной переменной.
Полный путь к конфигурационным записям в реестре:
Описанный выше алгоритм как раз и является алгоритмом генерации имени IcedID_reg(), которые неоднократно упоминался выше.
Мы обнаружили следующие значения строк, которые участвуют в генерации имен реестра важной для банкера информации:
Динамические конфиги хранятся в реестре в зашифрованном виде. VNC-сервер, который находится в %TEMP% директории, зашифрован аналогичным образом.
Для шифрования данных используются два алгоритма: собственный алгоритм трояна и RC4. Схема алгоритма расшифрования:
![image](https://habrastorage.org/r/w1560/webt/j8/2j/g8/j82jg8lcmeg3l9tv9cmge5erbbs.png)
Давайте перейдем от теории к практике. Изначально зашифрованные данные после прочтения из реестра:
![image](https://habrastorage.org/r/w1560/webt/q5/2f/7r/q52f7rrl9zsv9wqv9lf6anr9-hq.png)
После получения данных вредоносная программа расшифровывает их при помощи собственного алгоритма:
![image](https://habrastorage.org/r/w1560/webt/ji/fx/ik/jifxik3og5ezrfp9wufshxhbc5k.png)
И мы снова встречаемся с функцией make_seed()!
После расшифрования имеем (обратите внимание на адреса – расшифровывается в том же участке памяти):
![image](https://habrastorage.org/r/w1560/webt/ok/-1/ek/ok-1ek0zschromjam2tbv2am-um.png)
После уже второго расшифрования в памяти мы видим следующее:
![image](https://habrastorage.org/r/w1560/webt/kx/ct/nb/kxctnbronnbv-hovhydbmqb9wx4.png)
После данные разархивируются и парсятся. Примечательно, что перед освобождением памяти данные обратно зашифровываются по RC4 — защита от динамического анализа приложения.
Дальнейшая структура данных зависит от типа конфигурационных данных. К примеру, конфигурационные данные с префиксом rtd хранятся в формате:
Список CnC-адресов в одном из исследований:
![image](https://habrastorage.org/r/w1560/webt/ne/xi/ta/nexitapjnsiyirmq7heoidb2jcw.png)
Перед обращением к CnC-адресам из полученного списка бот проверяет цифровую подпись. Открытый ключ для проверки подписи хранится в теле бота в зашифрованном виде. После процедуры проверки подписи приложение «затирает» открытый ключ вначале случайными данными, а затем нулями:
![image](https://habrastorage.org/r/w1560/webt/oa/ns/tt/oansttaenay3ehss5praybpcenw.png)
Конфигурации с префиксом cfg хранятся в формате:
В исследуемом случае мы видели следующие данные:
![image](https://habrastorage.org/r/w1560/webt/o3/wj/qp/o3wjqphnlymrn0yeydqqsxu8-ca.png)
Данные хранятся в уникальном бинарном формате, который будет рассмотрен далее.
Алгоритм генерации ключей реестра, а также расшифрования конфигурационных данных вы можете посмотреть в скрипте.
После расшифрования данных программа парсит их и сохраняет в виде связного списка, который в дальнейшем участвует при анализе трафика на зараженном устройстве (MITB). В первую очередь данные разбиваются на блоки, которые имеют структуру:
Структура поля data зависит от флага type. Флаг в данной структуре говорит о том, что происходит при обнаружении строки в URL/теле запроса. Поле может принимать следующие значения:
Структура поля data если type равен 0x40 или 0x41:
Иначе структура поля:
Давайте поближе рассмотрим один из блоков семпла:
Обратим в первую очередь внимание на поле «Config block type» в блоке «Config block common information». Оно равно 0x11 – значит, что при загрузке пользователем страницы, URL которой попадает под правило регулярного выражения ^[^=]*\/wcmfd\/wcmpw\/CustomerLogin$ произойдет замена в теле страницы строки <body (второй аргумент) на строку <body style=«display: none;» (третий аргумент).
В памяти приложения для каждого из типов создается связный список. Алгоритм парса на связные списки представлен на рисунке ниже в виде скрина IDA Pro. Python-скрипт парса конфигурационных данных вы можете увидеть тут.
![image](https://habrastorage.org/r/w1560/webt/e9/5m/ke/e95mkeu6eqisfys7fnhe63fqvtg.png)
За несколько месяцев наблюдения за развитием IcedID мы обнаружили много доменов, которые троян включал в список динамических конфигов в раздел CnC. Домены представим в виде соответствия (e-mail с которого происходила регистрация → домен):
Давайте теперь подробно рассмотрим пользователей, на которые были зарегистрированы домены:
И наконец, рассмотрим хронологию изменения IP-адресов доменов. В таблицу были добавлены все IP-адреса начиная с ноября 2017 года:
Изучив представленные данные, можно резюмировать, что все домены регистрируются на почту, сгенерированную при помощи сервиса временной почты. Местоположение фиктивного региструющего лица — США, в то время как сами домены расположены в России, Украине, Нидерландах, Китае, Казахстане и Германии (в последнее время наблюдается тенденция «переезда» доменов на Украину и в Германию). Все домены находятся в доменных зонах «com» и «net». Алфавит, из которого состоит домен, включает в себя только буквы английского алфавита. На стороне CnC поднят Web-сервер OpenResty.
Несмотря на «древность» зевсоподобных троянов, их актуальность не падает. Как результат – появление IcedID на арене троянов, нацеленных на клиентов банков. Хотя банкер уже на старте имел обширный список возможностей, он все еще совершенствуется: усложняются методы распаковки, происходит расширение списка целей. Вероятнее всего в дальнейшем вредоносная программа обзаведется механизмами противодействия анализу, а CnC-сервер начнет избирательно отдавать Web-инжекты зараженным устройствам. Пока же троян не удовлетворяют всем требованием своих «пользователей», о чем говорит использование в декабре прошлого года TrickBot’а совместно с IcedID.
В Group-IB знают о киберпреступности всё, но рассказывают самое интересное.
Остросюжетный Telegram-канал (https://t.me/Group_IB) об информационной безопасности, хакерах и кибератаках, хактивистах и интернет-пиратах. Расследования нашумевших киберпреступлений по шагам, практические кейсы с применением технологий Group-IB и, конечно, рекомендации, как не стать жертвой в интернете.
YouTube-канал Group-IB
Фотолента Group-IB в Instagram www.instagram.com/group_ib
Короткие новости в Twitter twitter.com/GroupIB
Компания Group-IB — один из ведущих разработчиков решений для детектирования и предотвращения кибератак, выявления мошенничества и защиты интеллектуальной собственности в сети со штаб-квартирой в Сингапуре.
![image](https://habrastorage.org/webt/b0/4i/rd/b04ird-g1xlcbwcd27zrl3rzg90.png)
В ноябре 2017 года команда исследователей из IBM X-Force опубликовала отчет по новому трояну — IcedID, который нацелен преимущественно на клиентов американских банков. Бот обладает многими возможностями печально известного вредоносного ПО Zeus, в том числе: загружает и запускает модули, собирает и передает на сервер аутентификационные данные, информацию о зараженном устройстве, осуществляет атаку man-in-the-browser (MITB). Несмотря на то, что по своим функциональным возможностям новый троян оказался похож на другие популярные банкеры — Trickbot, GOZI, Dridex, активно атакующие клиентов банков, IcedID использует нестандартный бинарный формат хранения конфигурационных данных. Другой отличительной особенностью этого вредоносного ПО является возможность развертывания прокси-сервера прямо на зараженной машине для проведения атаки MITB.
Текст: Иван Писарев, специалист по анализу вредоносного кода Group-IB
Сразу отметим, что IcedID не так сильно распространен по сравнению с другими троянами, однако уже сейчас имеет достаточно функциональных возможностей для достижения поставленных перед ним задач, из которых главной является кража учетных данных жертв. Достигнуть этого можно многими способами, начиная от банальной кражи файлов и записей реестра с зараженного компьютера, и заканчивая перехватом и изменением зашифрованного трафика браузера (атака man-in-the-browser).
В случае IcedID происходила кража данных из учетных записей: Windows Live Mail, Windows Mail, RimArts, Poco Systems Inc, IncrediMail, The Bat! и Outlook. Атака MITB производится при помощи Proxy-сервера, который троян поднимает на зараженном устройстве, тем самым пропуская весь сетевой трафик через себя и модифицируя его. Также IcedID имеет модуль обработки команд от сервера, позволяющий удаленно загружать и запускать файл (к примеру, в исследуемом случае семпл загрузил модуль VNC, программный код которого имеет схожие участки кода с IcedID).
Использование Proxy-сервера для MITB является нетипичным поведением для данного типа троянов. Чаще происходит встраивание вредоносной программы в контекст браузера и перенаправление вызовов функций из стандартных библиотек на ее функции-обработчики (пример: WinHttpConnect(), InternetConnect(), InternetReadFile(), WinHttpReadData() и т.д.). Ранее трюк с Proxy-сервером уже был использован в GootKit.
IcedID распространялся с помощью другого вредоносного ПО — Emotet (в настоящее время он часто используется как загрузчик, хотя имеет расширенные функциональные возможности) и уже на старте включал в себя обширный список современных методов хищения пользовательских данных.
Сейчас троян имеет достаточно слабые механизмы противодействия анализу (шифрование строк, header corrupt) и не имеет никаких методов VM-detect. С точки зрения исследователя, вредоносное ПО все еще находится в разработке и данные механизмы защиты будут добавлены позже.
Система киберразведки Group-IB Threat Intelligence не обнаружила продажи IcedID на тематических форумах, что означает либо появление новой группы на арене банковских троянов, либо продажу трояна по приватным каналам. Цели бота, судя по динамическим конфигурационным данным (далее – конфиги), расположены в основном в США.
Список целей
Chase
Charles Schwab
Bank of America
USAA
American Express
Wells Fargo
Capital One
Td Commercial Banking
TD Bank
Central Bank
U.S. Bank
Union Bank of California
Amazon
PNC Online Banking
Synovus
BB&T Bank
Citibank
eBanking
Huntington
Сashanalyzer
E-Trade
JPMorgan Chase
CIBC
Regions OnePass
Post Oak Bank
Comerica
Discover Bank
KeyBank
Frost Cash Manager
HSBC
RBC
Halifax
Verizon Wireless
Lloyds Bank
M&T Bank
VirWoX
ADP
Charles Schwab
Bank of America
USAA
American Express
Wells Fargo
Capital One
Td Commercial Banking
TD Bank
Central Bank
U.S. Bank
Union Bank of California
Amazon
PNC Online Banking
Synovus
BB&T Bank
Citibank
eBanking
Huntington
Сashanalyzer
E-Trade
JPMorgan Chase
CIBC
Regions OnePass
Post Oak Bank
Comerica
Discover Bank
KeyBank
Frost Cash Manager
HSBC
RBC
Halifax
Verizon Wireless
Lloyds Bank
M&T Bank
VirWoX
ADP
Данная статья включает в себя подробный анализ трояна, глубокий разбор формата динамических конфигов с Python-скриптами и информацию по CnC.
Техническая часть
Общее описание работы трояна
Изначально секция .data трояна зашифрована. В первую очередь после запуска он расшифровывает секцию по алгоритму:
![image](https://habrastorage.org/webt/a-/q0/ix/a-q0ixeg0onp--szzafmr9on6os.png)
Переменные initial_seed и size_seed находятся вначале секции данных (первые 8 байт секции), после чего находятся зашифрованные данные размером size байт. Функция make_seed() – уникальная функция генератора псевдослучайных чисел (ГПСЧ) для IcedID, к которой мы еще неоднократно вернемся. Python-вариант функции вы можете найти тут.
Изначально бот содержит зашифрованные строки. С целью облегчения анализа для IDA Pro был написан скрипт, расшифровывающий строки (необходимо вставить адрес функции расшифрования в вашем семпле).
Следующий этап – добавление обработчика исключений при помощи функции SetUnhandledExceptionFilter(). При возникновении любого исключения в процессе работы приложения просто происходит его перезапуск.
После добавления обработчика исключений троян собирает информацию о зараженной системе:
- Версия ОС
- Номер сборки ОС
- Версия Service Pack
- Разрядность системы
- Тип ОС
Приложение создает дескриптор безопасности: D:(A;;GA;;;WD)(A;;GA;;;AN)S:(ML;;NW;;;S-1-16-0), после чего выделяет память для логирования информации в процессе работы трояна. Пример логируемых строк (строки были получены при помощи скрипта в IDA):
- E|C|IN|INS|ISF|CP %u
- I|C|IN|INT|CI| %u
- W|C|IN|INT|CI|CRLL
IcedID может принимать несколько параметров. Среди них:
- --svc= — сохраняет строку из параметра в реестр по ключу с именем IcedID_reg(«*p*»), где IcedID_reg(str) — функция генерации имени ключа от строки str (алгоритм генерации имен ключей реестра будет описан позже), после чего троян обращается к событию с именем Global\<%Строка из случайных символов%>. В случае возникновения ошибки бот создает копию своего процесса с параметром /w=. Если и это не удалось сделать, создает значение в реестре:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\<%Строка длины 9 из случайных символов алфавита [a-z]%>
тем самым обеспечивая себе персистентность в системе. Данный ключ предназначен для первоначального запуска трояна.
- /u – по умолчанию вредоносное ПО пытается запустить себя от имени администратора домена (посредством программы runas). Если присутствует данный флаг, троян не производит данную операцию и просто создает свою копию в директории C:\Users\<%username%>\AppData\Local\<%Строка длины 9 из случайных символов алфавита [a-z]%> с именем <%Строка длины 9 из случайных символов алфавита [a-z]%>.exe, и записывает путь к файлу в реестр, тем самым обеспечивая себе персистентность в системе.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\<%Строка длины 9 из случайных символов алфавита [a-z]%>
Похоже, данный ключ используется при обновлении банкера. Перед перезапуском троян “засыпает” на 5 секунд.
- /c – перед исполнением вредоносных функций троян «засыпает» на 5 секунд
- /w= — сохраняет строку из параметра в реестр по ключу с именем IcedID_reg(«*p*»)
После обработки параметров приложение обращается к реестру и достает оттуда динамические конфигурационные данные, которые содержат CnC-адреса, а также Web-инжекты. Формат хранения данных в реестре описан в следующих разделах.
После обращения к реестру программа создает поток, который раз в 5 или 10 минут (в зависимости от внутреннего флага) обращается к CnC с целью получения команд. Тут стоит отметить нестандартный механизм «засыпания» бота между обращением к CnC: разработчики не стали использовать стандартную функцию Sleep(), вместо этого они создали событие в несигнальном состоянии и не переводя его в сигнальное состояние вызывают функцию WaitForSingleObject(). Функция создания потока обращения к CnC:
![image](https://habrastorage.org/webt/vu/bg/1_/vubg1_zk61_dw8auvz80yi1lhxc.png)
Аналог функции Sleep() в IcedID:
![image](https://habrastorage.org/webt/yd/if/f3/ydiff39eemw9rymerxmj82rintw.png)
Долгий промежуток обращения к серверу, а также нестандартная «функция засыпания» скорее всего предназначены для противодействия анализу.
Для скрытия трафика между сервером и приложением используется протокол SSL.
После запуска потока бот «поднимает» на локальной машине Proxy-сервер с целью обработки трафика на зараженной машине.
Протокол общения сервера и зараженного устройства будут разобраны в следующих разделах. Однако стоит отметить, что вредоносная программа по команде сервера может обновлять конфиги, запускать и останавливать VNC-сервер, исполнять команды cmd.exe, загружать файлы.
Взаимодействие IcedID и CnC-сервера
Список CnC-адресов хранится в теле банкера в зашифрованном виде, а также в реестре в виде динамического конфига. Взаимодействие между сервером и трояном осуществляется при помощи протокола HTTPS. Данные отправляет на сервер POST-запросами, для получения данных использует GET.
Строка запроса к серверу имеет следующий вид:
<%CnC%> /forum/viewtopic.php?a=<%Integer%>&b=<%Long integer%>&d=<%Integer%>&e=<%Integer%>&<%Другие данные%>
Значение полей:
- a – тип запроса, данное поле может принимать значения:
Значение Действие 0,1 Отправить информацию о зараженной машине 2,3 Отправить другие данные на сервер 4 Получить последнюю версию динамических конфигов и поместить их в реестр по ключу с именем IcedID_reg(«*cfg1»)
5 Получить последнюю версию динамических конфигов и поместить их в реестр по ключу с именем IcedID_reg(«*cfg0»)
6 Получить последнюю версию динамических конфигов и поместить их в реестр по ключу с именем IcedID_reg(«*rtd») (CnC-адреса)
7 Получить последнюю версию VNC-модуля 8 Получить последнюю версию бота - b – ID бота
- d – флаг
- e – константа, находится непосредственно в коде бота
Далее значения полей зависят от поля «a». Если оно равно 0 либо 1, то запрос выглядит следующим образом:
POST /forum/viewtopic.php?a=<%0 или 1%>&b=<%BotID%>&d=<%Integer%>&e=<%Constant%>&f=<%Cfg1 Checksum%>&g=<%Cfg0 Checksum%>&h=<%Rtd Checksum%>&r=<%VNС Checksum%>&i=<%Время запроса%> HTTP/1.1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length:
Тело запроса содержит информацию о зараженной машине. Информация предоставляется в виде:
k=<%String%>&l=<%String%>%j=<%Integer%>&n=<%Integer%>&m=<%String%>
Где:
- k – имя компьютера в UNICODE
- l – участник домена в UNICODE
- m – Информация о системе:
- Версия ОС
- Номер сборки ОС
- Версия Service Pack
- Разрядность системы
- Тип ОС
Если поле равно 2 либо 3, то запрос выглядит следующим образом:
POST /forum/viewtopic.php?a=<%3 или 2%>&b=<%BotID%>&d=<%Integer%>&e=<%Constant%> HTTP/1.1
Connection: close
Content-Type: application/octet-stream
Content-Length:
В противном случае запрос выглядит следующим образом:
GET /forum/viewtopic.php?a=<%4-8%>&b=<%BotID%>&d=<%Integer%>&e=<%Constant%>&o=<%Object checksum%>
HTTP/1.1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length:
Примеры запросов представлены на рисунках ниже. Заголовок пакета при обращении к серверу:
![image](https://habrastorage.org/webt/4t/yj/cw/4tyjcwlgccfqrer5fkblehqaza0.png)
Тело сообщения:
![image](https://habrastorage.org/webt/nx/iu/7r/nxiu7r72nmfovwhqcz85fdjwoga.png)
Троян может принимать команды от сервера. Команды представлены в виде целочисленных значений. Все команды приходят боту в виде строк, параметры которой разделены символом «;». Программа может обрабатывать 23 команды:
Значение | |
---|---|
0 | Ничего не делает (вероятно в дальнейшем будет добавлен функционал) |
1 | Обновить значение по ключу реестра с именем IcedID_reg(«*cfg0») |
2 | Обновить значение по ключу реестра с именем IcedID_reg(«*cfg1») |
3 | Обновить значение по ключу реестра с именем IcedID_reg(«*rtd») |
4 | Загрузить файл, сохранить в директории AppData и исполнить |
5 | Запустить программу, имя и аргументы запуска приходят как параметры |
6 | Получить информацию о запущенных процессах, среди которых: PID и имя процесса |
7 | Выключить компьютер с информацией, в качестве параметров функции: SHTDN_REASON_FLAG_PLANNED SHTDN_REASON_MINOR_INSTALLATION SHTDN_REASON_MAJOR_APPLICATION |
8 | Записать значение в реестр (имя генерируется на основании алгоритма, описанного ниже) |
9 | Прочитать значение в реестре (имя генерируется на основании алгоритма, описанного ниже) |
10 | Удалить ключ из реестра (имя генерируется на основании алгоритма, описанного ниже) |
11 | Запустить расширенный модуль обработки команд от сервера |
12 | Остановить работу расширенного модуля обработки команд от сервера |
13 | Обновить VNC модуль (расположен в директории %TEMP%) |
14 | Получить список файлов на рабочем столе зараженного устройства |
15 | Загрузить файл, сохранить его с именем <%Строка из случайных символов%>.tmp и запустить его с ключом \u. Похоже, данная команда необходима для обновления версии бота на зараженном устройстве. |
16 | Удалить файл, имя которого содержит строку (приходит как параметр) |
17 | Запустить модуль распространения по сети. Распространение происходит посредством копирования и запуска бота в директорию Windows на другое устройство при помощи протокола LDAP. |
18 | Получить лог-данные бота |
19 | Перевести событие обращения к серверу в сигнальное состояние |
20 | Получить данные учетных записей следующих приложений: Windows Live Mail, Windows Mail, RimArts, Poco Systems Inc, IncrediMail, The Bat! и Outlook |
21 | Изменить интервал между обращением к серверу |
22 | Получить путь из переменной окружения, скачать файл и сохранить его по данному пути |
21 | Загрузить файл в директорию AppData, запустить его с параметрами /t=<%Хендл специально сгенерированного события%> /f=<%Хендл 2 специально сгенерированного события%>. После перевода событий в сигнальное состояние загруженый файл удаляется из директории AppData |
В случае успешного исполнения команды троян отправляет на сервер строку «True», иначе «False».
В случае получения команды на запуск модуля расширенных команд приложение отправляет на сервер два байта, после чего ожидает ответ. Первый полученный от сервера байт соответсвует расширенной команде из таблицы:
Значение | |
---|---|
5 | Запустить поток, исполняющий на зараженной машине команды cmd.exe. |
6 | Запустить VNC-сервер. В исследуемом случае VNC-сервер был представлен в виде DLL-библиотеки, которая имела схожий алгоритм шифрования строк. |
7 | Исполнить команду из таблице выше. Для получения обычной команды троян отправляет на сервер два символа, уведомляющих сервер о готовности принятием бота команд. |
VNC-сервер может запускаться двумя возможными способами (в зависимости от внутреннего флага):
- При помощи функции CreateProcessA() с параметром rundll32.exe kernel32,Sleep -s <%param%>
- При помощи функции CreateProcessA() с параметром svchost.exe -s <%param%>
где <%param%> — 16 байт в строковом представлении, заполняются следующим образом:
![image](https://habrastorage.org/webt/4o/st/i2/4osti2buinqlg7gegp8decyoiio.png)
Сразу после запуска VNC-модуль проверяет наличие ключа -s, после чего читает передаваемый параметр, проверяет условие:
paramValue[0] == paramValue[1] ^ (paramValue[3] | (paramValue[2] << 16))
и при помощи функции DuplicateHandle() создает копию хендла сокета для дальнейшего взаимодейтсвия с сервером.
Параметр StartupInfo функции CreateProcessA() содержит имя специально сгенерированного Desktop'a: Default<%flag%>. Также в параметр ProcessInformation перед вызовом функции помещется адрес VNC-модуля:
![image](https://habrastorage.org/webt/na/fd/zu/nafdzutb3bptvxfmbis9ver33v8.png)
Как видно из представленного списка IcedID обладает широким спектром возможностей для полного управления зараженной машиной. Даже если оператор столкнется с проблемой отсутствия какой-либо функции, он просто загрузит при помощи трояна другую программу и выполнит поставленные перед ним задачи. К примеру, в конце декабря 2017 года нами было зафиксировано распространение с помощью данного банкера TrickBot’a.
Информация о конфигурационных данных
Генерация имен для записей в реестре
Все конфигурационные данные, которые программа получает от сервера, хранятся в реестре зараженного устройства (за исключением VNC-модуля, который хранится в директории %TEMP% в формате tmp%0.8X01.dat).
Имена ключей реестра, в которых хранятся интересующие нас конфигурационные данные, вычисляются при помощи следующей функции:
![image](https://habrastorage.org/webt/v5/bf/nj/v5bfnjuhkwpc3koekqfmclrrffk.png)
Как видно из представленного рисунка, имя ключа – MD5-хеш значение от двух переменных – str и computerSeed. От значения первой переменной зависит какого типа данные хранятся в переменной реестра. К примеру, при значении переменной – *cfg0 или *cfg1 ключ реестра хранит Web-инжекты, при значении *rtd ключ хранит список CnC.
computerSeed – уникальная для конкретного пользователя переменная. Высчитывается она на основании SID’a пользователя. В скрипте представлена python-версия вычисления данной переменной.
Полный путь к конфигурационным записям в реестре:
HKEY_CLASSES_ROOT\CLSID\<%MD5-значение в формате: {%0.8X-%0.4X-%0.4X-%0.4X-%0.4X%0.8X}%>
Описанный выше алгоритм как раз и является алгоритмом генерации имени IcedID_reg(), которые неоднократно упоминался выше.
Мы обнаружили следующие значения строк, которые участвуют в генерации имен реестра важной для банкера информации:
- *cfg0 — содержит в себе общий список Web-инжектов
- *cfg1 — содержит в себе список адресов и строк для полной кражи данных страницы
- *rtd — список CnC-адресов
- *bc* — уведомляет о состоянии модуля обработки расширенных команд от сервера. Если данная запись присутствует в реестре – модуль запущен
- *p* — сохраняет параметры запуска с ключами --svc= и /w=
Структура хранения динамических конфигурационных файлов
Динамические конфиги хранятся в реестре в зашифрованном виде. VNC-сервер, который находится в %TEMP% директории, зашифрован аналогичным образом.
Для шифрования данных используются два алгоритма: собственный алгоритм трояна и RC4. Схема алгоритма расшифрования:
![image](https://habrastorage.org/webt/j8/2j/g8/j82jg8lcmeg3l9tv9cmge5erbbs.png)
Давайте перейдем от теории к практике. Изначально зашифрованные данные после прочтения из реестра:
![image](https://habrastorage.org/webt/q5/2f/7r/q52f7rrl9zsv9wqv9lf6anr9-hq.png)
После получения данных вредоносная программа расшифровывает их при помощи собственного алгоритма:
![image](https://habrastorage.org/webt/ji/fx/ik/jifxik3og5ezrfp9wufshxhbc5k.png)
И мы снова встречаемся с функцией make_seed()!
После расшифрования имеем (обратите внимание на адреса – расшифровывается в том же участке памяти):
![image](https://habrastorage.org/webt/ok/-1/ek/ok-1ek0zschromjam2tbv2am-um.png)
После уже второго расшифрования в памяти мы видим следующее:
![image](https://habrastorage.org/webt/kx/ct/nb/kxctnbronnbv-hovhydbmqb9wx4.png)
После данные разархивируются и парсятся. Примечательно, что перед освобождением памяти данные обратно зашифровываются по RC4 — защита от динамического анализа приложения.
Дальнейшая структура данных зависит от типа конфигурационных данных. К примеру, конфигурационные данные с префиксом rtd хранятся в формате:
typedef struct CNCStruct {
char signedMD5sum[128];
int checksum;
BStrings cnc[N];
} CNCStruct;
typedef struct BStrings {
int length;
char str[length];
} BStrings;
Список CnC-адресов в одном из исследований:
![image](https://habrastorage.org/webt/ne/xi/ta/nexitapjnsiyirmq7heoidb2jcw.png)
Перед обращением к CnC-адресам из полученного списка бот проверяет цифровую подпись. Открытый ключ для проверки подписи хранится в теле бота в зашифрованном виде. После процедуры проверки подписи приложение «затирает» открытый ключ вначале случайными данными, а затем нулями:
![image](https://habrastorage.org/webt/oa/ns/tt/oansttaenay3ehss5praybpcenw.png)
Конфигурации с префиксом cfg хранятся в формате:
typedef struct CfgStruct {
int checksum;
int elements_count;
char config[];
} CfgStruct;
В исследуемом случае мы видели следующие данные:
![image](https://habrastorage.org/webt/o3/wj/qp/o3wjqphnlymrn0yeydqqsxu8-ca.png)
Данные хранятся в уникальном бинарном формате, который будет рассмотрен далее.
Алгоритм генерации ключей реестра, а также расшифрования конфигурационных данных вы можете посмотреть в скрипте.
Алгоритм разбора конфигурационных данных
После расшифрования данных программа парсит их и сохраняет в виде связного списка, который в дальнейшем участвует при анализе трафика на зараженном устройстве (MITB). В первую очередь данные разбиваются на блоки, которые имеют структуру:
typedef struct BaseBlock {
int size;
char type;
char global_flag;
char data[size - 6];
} BaseBlock;
Структура поля data зависит от флага type. Флаг в данной структуре говорит о том, что происходит при обнаружении строки в URL/теле запроса. Поле может принимать следующие значения:
Значение | |
---|---|
0x10 | Частичная замена тела страницы, в качестве параметров – теги, между которыми необходимо провести замену, а также значение, на которое будет заменено тело |
|
Частичная замена тела страницы, в качестве параметров – участок страницы, который необходимо заменить, а также значение, на которое будет заменено тело |
0x12 | Полная замена тела страницы |
0x20 | Кража тела страницы. В качестве параметров – теги, между которыми находится интересующий участок страницы |
0x21 | Полная кража тела страницы |
0x22 | Полная кража тела страницы, тело сохраняется в реестр |
0x2E | Поиск в теле страницы строк с тегами 0x40 и 0x41, в случае обнаружения – кража тела страницы |
0x30 | Блокирование запроса |
0x31 | Сделать screenshot страницы |
Редирект на другую страницу (путь к странице — один из параметров). Помимо этого в качестве параметра — строка <%Registry Salt%>#<%URL%>, бот обращается к <%URL%>, загружает оттуда данные, после чего сохраняет их в реестр по ключу IcedID_reg(<%Registry Salt%>) | |
0x34 | Редирект на другую страницу (путь к странице — один из параметров) |
Строки-паттерны в теле страницы | |
0x51 | Проигнорировать страницу |
0x60 | Сохранить значение переменной в реестр (заменяет тело страницы на «True» либо «False» в зависимости от результата выполнения команды, имя генерируется на основании алгоритма, описанного выше) |
0x61 | Продемонстрировать переменную из реестра (имя генерируется на основании алгоритма, описанного выше) |
0x62 | Удалить переменную из реестра (заменяет тело страницы на «True» либо «False» в зависимости от результата выполнения команды, имя генерируется на основании алгоритма, описанного выше) |
0x63 | Запустить расширенный модуль обработки команд от сервера (заменяет тело страницы на «True» либо «False» в зависимости от результата выполнения команды) |
0x64 | Сохранить тело страницы в память бота (заменяет тело страницы на «True» либо «False» в зависимости от результата выполнения команды) |
typedef struct ConfigBlock {
BStrings patterns[N];
int(0);
} ConfigBlock;
Иначе структура поля:
typedef struct BaseBlock {
int typeSizeStr;
string urlStr;
int flagSize;
char flag[flagSize];
int firstOptStrSize;
char firstOptStr[firstOptStrSize];
int secondOptStrSize;
char secondOptStr[secondOptStrSize];
int thirdOptStrSize;
char thirdOptStr[thirdOptStrSize];
} BaseBlock;
Давайте поближе рассмотрим один из блоков семпла:
![image](https://habrastorage.org/webt/k2/um/x_/k2umx_oc-ftptuundim8rft1yaw.png)
Обратим в первую очередь внимание на поле «Config block type» в блоке «Config block common information». Оно равно 0x11 – значит, что при загрузке пользователем страницы, URL которой попадает под правило регулярного выражения ^[^=]*\/wcmfd\/wcmpw\/CustomerLogin$ произойдет замена в теле страницы строки <body (второй аргумент) на строку <body style=«display: none;» (третий аргумент).
В памяти приложения для каждого из типов создается связный список. Алгоритм парса на связные списки представлен на рисунке ниже в виде скрина IDA Pro. Python-скрипт парса конфигурационных данных вы можете увидеть тут.
![image](https://habrastorage.org/webt/e9/5m/ke/e95mkeu6eqisfys7fnhe63fqvtg.png)
Информация по CnC
За несколько месяцев наблюдения за развитием IcedID мы обнаружили много доменов, которые троян включал в список динамических конфигов в раздел CnC. Домены представим в виде соответствия (e-mail с которого происходила регистрация → домен):
Домены | |
---|---|
davidphugley@jourrapide.com | percalabia.com borrespons.com divorough.com eyrannon.com britically.com |
joshuastaube@dayrep.com | manismay.com deterhood.com marrivate.com greatoric.com phonetarif.com |
CynthiaTHeller@grr.la | binncu.net |
PatriceAAdams@grr.la | arcadyflyff.com |
LindaJRowan@dayrep.com | yutlitsi.com |
SeanHumphreys@pokemail.net | urnachay.com |
RuthFThigpen@pokemail.net | oksigur.net |
FlorenceTButler@pokemail.net | rfisoty.com |
FreidaDDelgado@pokemail.net | urnisim.net |
TinaLHobson@grr.la | cupicratings.com |
ElisaRTucker@pokemail.net | freegameshacks.net |
DaleKMontes@pokemail.net | gordondeen.net |
patrickggutierez@dayrep.com | poorloo.com dismissey.com euphratt.com detrole.com |
JustineRBoatner@pokemail.net | lumpyve.com |
MatthewAPerkins@grr.la | gooblesooq.com fzlajsf.net |
JosephLSmith@grr.la | newpctoday.com triodgt.com |
DominicNDecker@pokemail.net | onsunga.net |
MarcellaBCraighead@pokemail.net | rybatas.com |
KellyJMaldonado@grr.la | netocraze.net irtazin.net |
Давайте теперь подробно рассмотрим пользователей, на которые были зарегистрированы домены:
Информация о регистрирующих лицах
Почта davidphugley@jourrapide.com:
Почта joshuastaube@dayrep.com:
Почта CynthiaTHeller@grr.la:
Почта PatriceAAdams@grr.la:
Почта LindaJRowan@dayrep.com:
Почта SeanHumphreys@pokemail.net:
Почта RuthFThigpen@pokemail.net:
Почта FlorenceTButler@pokemail.net:
Почта FreidaDDelgado@pokemail.net:
Почта TinaLHobson@grr.la:
Почта ElisaRTucker@pokemail.net:
Почта DaleKMontes@pokemail.net:
Почта patrickggutierez@dayrep.com:
Почта JustineRBoatner@pokemail.net:
Почта MatthewAPerkins@grr.la:
Почта JosephLSmith@grr.la:
Почта DominicNDecker@pokemail.net:
Почта MarcellaBCraighead@pokemail.net:
Почта KellyJMaldonado@grr.la:
- Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com
- Name: David P. Hugley (registrant, admin, tech)
- Street: 2453 Round Table Drive (registrant, admin, tech)
- City: Hamilton (registrant, admin, tech)
- State: Ohio (registrant, admin, tech)
- Postal: 45011 (registrant, admin, tech)
- Country: US (registrant, admin, tech)
- Phone: 15138878784 (registrant, admin, tech)
Почта joshuastaube@dayrep.com:
- Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com
- Name: Joshua S. Taube (registrant, admin, tech)
- Organization:
- Street: 2173 Kyle Street (registrant, admin, tech)
- City: Hay Springs (registrant, admin, tech)
- State: Nevada (registrant, admin, tech)
- Postal: 69347 (registrant, admin, tech)
- Country: US (registrant, admin, tech)
- Phone: 13086385612 (registrant, admin, tech)
Почта CynthiaTHeller@grr.la:
- Registrar: Eranet International Limited
- Name: Cynthia Heller (registrant, admin, billing, tech)
- Organization:
- Street: 396 Tennessee Avenue (registrant, admin, billing, tech)
- City: Southfield (registrant, admin, billing, tech)
- State: MX (registrant, admin, billing, tech)
- Postal: 48034 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 12482469621 (registrant, admin, billing, tech)
Почта PatriceAAdams@grr.la:
- Registrar: Eranet International Limited
- Name: Patrice Adams (registrant, admin, billing, tech)
- Organization
- Street: 3997 Marietta Street (registrant, admin, billing, tech)
- City:Cazadero (registrant, admin, billing, tech)
- State: JL (registrant, admin, billing, tech)
- Postal: 95421 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 17076322681 (registrant, admin, billing, tech)
Почта LindaJRowan@dayrep.com:
- Registrar: Eranet International Limited
- Name: Linda Rowan (registrant, admin, billing, tech)
- Organization:
- Street: 1908 Luke Lane (registrant, admin, billing, tech)
- City: Elk City (registrant, admin, billing, tech)
- State: EK (registrant, admin, billing, tech)
- Postal: 73644 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 15802259140 (registrant, admin, billing, tech)
Почта SeanHumphreys@pokemail.net:
- Registrar: Eranet International Limited
- Name: Sean Humphreys (registrant, admin, billing, tech)
- Organization:
- Street: 4661 Kincheloe Road (registrant, admin, billing, tech)
- City: Portland (registrant, admin, billing, tech)
- State: EL (registrant, admin, billing, tech)
- Postal: 97205 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 16384273711 (registrant, admin, billing, tech)
Почта RuthFThigpen@pokemail.net:
- Registrar: Eranet International Limited
- Name: Ruth Thigpen (registrant, admin, billing, tech)
- Organization
- Street: 765 Michael Street (registrant, admin, billing, tech)
- City: Houston (registrant, admin, billing, tech)
- State: DK (registrant, admin, billing, tech)
- Postal: 77021 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 17137485876 (registrant, admin, billing, tech)
Почта FlorenceTButler@pokemail.net:
- Registrar: Eranet International Limited
- Name: Florence Butler (registrant, admin, billing, tech)
- Organization:
- Street: 4554 Par Drive (registrant, admin, billing, tech)
- City: Lompoc (registrant, admin, billing, tech)
- State: JL (registrant, admin, billing, tech)
- Postal: 93436 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 198058660048 (registrant, admin, billing, tech)
Почта FreidaDDelgado@pokemail.net:
- Registrar: Eranet International Limited
- Name: Freida Delgado (registrant, admin, billing, tech)
- Organization:
- Street: 4439 Burning Memory Lane (registrant, admin, billing, tech)
- City: Philadelphia (registrant, admin, billing, tech)
- State: BX (registrant, admin, billing, tech)
- Postal: 19115 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 12153306416 (registrant, admin, billing, tech)
Почта TinaLHobson@grr.la:
- Registrar: Eranet International Limited
- Name: Tina Hobson (registrant, admin, billing, tech)
- Organization:
- Street: 3960 Woodridge Lane (registrant, admin, billing, tech)
- City: Memphis (registrant, admin, billing, tech)
- State: TN (registrant, admin, billing, tech)
- Postal: 38110 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 19012994734 (registrant, admin, billing, tech)
Почта ElisaRTucker@pokemail.net:
- Registrar: Eranet International Limited
- Name: Elisa Tucker (registrant, admin, billing, tech)
- Organization
- Street: 3316 Corbin Branch Road (registrant, admin, billing, tech)
- City: Johnson City (registrant, admin, billing, tech)
- State: TN (registrant, admin, billing, tech)
- Postal: 37601 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 14234332211 (registrant, admin, billing, tech)
Почта DaleKMontes@pokemail.net:
- Registrar: Eranet International Limited
- Name: Dale Montes (registrant, admin, billing, tech)
- Organization:
- Street: 2719 Norman Street (registrant, admin, billing, tech)
- City: Los Angeles (registrant, admin, billing, tech)
- State: JL (registrant, admin, billing, tech)
- Postal: 90008 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 13232919311 (registrant, admin, billing, tech)
Почта patrickggutierez@dayrep.com:
- Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com
- Name: Patrick G. Gutierez (registrant, admin, tech)
- Organization:
- Street: 1146 Mount Olive Road (registrant, admin, tech)
- City: Atlanta (registrant, admin, tech)
- State: Georgia (registrant, admin, tech)
- Postal: 30328 (registrant, admin, tech)
- Country: US (registrant, admin, tech)
- Phone: 16789874672 (registrant, admin, tech)
Почта JustineRBoatner@pokemail.net:
- Registrar: Eranet International Limited
- Name: Justine Boatner (registrant, admin, billing, tech)
- Organization:
- Street: 2875 Kemper Lane (registrant, admin, billing, tech)
- City: Kearns (registrant, admin, billing, tech)
- State: YT (registrant, admin, billing, tech)
- Postal: 84118 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 18019026902 (registrant, admin, billing, tech)
Почта MatthewAPerkins@grr.la:
- Registrar: Eranet International Limited
- Name: Matthew Perkins (registrant, admin, billing, tech)
- Organization:
- Street: 2507 Locust Street (registrant, admin, billing, tech)
- City: Ellaville (registrant, admin, billing, tech)
- State: QZ (registrant, admin, billing, tech)
- Postal: 31806 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 12299379022 (registrant, admin, billing, tech)
Почта JosephLSmith@grr.la:
- Registrar: Eranet International Limited
- Name: Joseph Smith (registrant, admin, billing, tech)
- Organization:
- Street: 2808 Ruckman Road (registrant, admin, billing, tech)
- City: Oklahoma City (registrant, admin, billing, tech)
- State: EK (registrant, admin, billing, tech)
- Postal: 73102 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 14058506091 (registrant, admin, billing, tech)
Почта DominicNDecker@pokemail.net:
- Registrar: Eranet International Limited
- Name: Dominic Decker (registrant, admin, billing, tech)
- Organization:
- Street: 1169 Golden Ridge Road (registrant, admin, billing, tech)
- City: Gloversville (registrant, admin, billing, tech)
- State: NY (registrant, admin, billing, tech)
- Postal: 12078 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 15187485876 (registrant, admin, billing, tech)
Почта MarcellaBCraighead@pokemail.net:
- Registrar: Eranet International Limited
- Name: Marcella Craighead (registrant, admin, billing, tech)
- Organization:
- Street: 1659 Lilac Lane (registrant, admin, billing, tech)
- City: Savannah (registrant, admin, billing, tech)
- State: QZ (registrant, admin, billing, tech)
- Postal: 31401 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 19125956971 (registrant, admin, billing, tech)
Почта KellyJMaldonado@grr.la:
- Registrar: Eranet International Limited
- Name: Kelly Maldonado (registrant, admin, billing, tech)
- Organization: NA
- Street: 4391 Ben Street (registrant, admin, billing, tech)
- City: Albany (registrant, admin, billing, tech)
- State: NY (registrant, admin, billing, tech)
- Postal: 12207 (registrant, admin, billing, tech)
- Country: US (registrant, admin, billing, tech)
- Phone: 15182623616 (registrant, admin, billing, tech)
И наконец, рассмотрим хронологию изменения IP-адресов доменов. В таблицу были добавлены все IP-адреса начиная с ноября 2017 года:
Таблица IP-адресов
Domain | IP | Country | First seen in the wild |
---|---|---|---|
gooblesooq.com | 185.127.26.227 | RU | 11/7/2017 |
irtazin.net | 185.127.26.227 | RU | 11/7/2017 |
netocraze.net | 185.5.251.33 | RU | 11/7/2017 |
triodgt.com | 185.5.251.33 | RU | 11/7/2017 |
newpctoday.com | 185.5.251.33 | RU | 11/7/2017 |
fzlajsf.net | 185.127.26.227 | RU | 11/25/2017 |
netocraze.net | 185.48.56.139 | NL | 11/27/2017 |
triodgt.com | 185.48.56.139 | NL | 11/27/2017 |
newpctoday.com | 185.48.56.139 | NL | 11/29/2017 |
netocraze.net | 185.22.65.17 | KZ | 12/1/2017 |
triodgt.com | 185.22.65.17 | KZ | 12/1/2017 |
newpctoday.com | 185.22.65.17 | KZ | 12/1/2017 |
gordondeen.net | 185.127.26.227 | RU | 12/11/2017 |
netocraze.net | 46.148.26.106 | UA | 12/11/2017 |
arcadyflyff.com | 46.148.26.106 | UA | 12/12/2017 |
cupicratings.com | 46.148.26.106 | UA | 12/12/2017 |
freegameshacks.net | 185.127.26.227 | RU | 12/12/2017 |
newpctoday.com | 46.148.26.106 | UA | 12/13/2018 |
onsunga.net | 107.150.99.20 | CN | 12/17/2017 |
oksigur.net | 107.150.99.20 | CN | 12/17/2017 |
rfisoty.com | 107.150.99.20 | CN | 12/17/2017 |
rybatas.com | 107.150.99.20 | CN | 12/17/2017 |
urnachay.com | 107.150.99.20 | CN | 12/17/2017 |
rfisoty.com | 46.148.26.106 | UA | 1/24/2018 |
rybatas.com | 185.127.26.227 | RU | 1/24/2018 |
urnachay.com | 185.127.26.227 | RU | 1/24/2018 |
yutlitsi.com | 185.127.26.227 | RU | 1/24/2018 |
urnisim.net | 185.127.26.227 | RU | 1/24/2018 |
oksigur.net | 185.127.26.227 | RU | 1/26/2018 |
urnachay.com | 109.234.35.121 | RU | 1/31/2018 |
oksigur.net | 109.234.35.121 | RU | 1/31/2018 |
yutlitsi.com | 109.234.35.121 | RU | 2/1/2018 |
urnisim.net | 109.234.35.121 | RU | 2/1/2018 |
divorough.com | 46.148.26.106 | UA | 2/21/2018 |
percalabia.com | 109.234.35.121 | RU | 2/22/2018 |
borrespons.com | 46.148.26.106 | UA | 2/26/2018 |
britically.com | 46.148.26.106 | UA | 2/26/2018 |
eyrannon.com | 109.234.35.121 | RU | 2/26/2018 |
deterhood.com | 109.234.35.121 | RU | 3/1/2018 |
greatoric.com | 109.234.35.121 | RU | 3/1/2018 |
manismay.com | 46.148.26.106 | UA | 3/1/2018 |
marrivate.com | 109.234.35.121 | RU | 3/1/2018 |
moindal.com | 46.148.26.106 | UA | 3/1/2018 |
phonetarif.com | 46.148.26.106 | UA | 3/1/2018 |
moindal.com | 185.169.229.119 | CH | 3/5/2018 |
dismissey.com | 46.148.26.106 | UA | 4/3/2018 |
euphratt.com | 109.234.35.121 | RU | 4/4/2018 |
percalabia.com | 46.148.26.11 | UA | 4/23/2018 |
deterhood.com | 46.148.26.11 | UA | 4/24/2018 |
eyrannon.com | 46.148.26.11 | UA | 4/24/2018 |
greatoric.com | 46.148.26.11 | UA | 4/24/2018 |
marrivate.com | 46.148.26.11 | UA | 4/24/2018 |
euphratt.com | 46.148.26.11 | UA | 4/25/2018 |
borrespons.com | 185.48.56.134 | NL | 5/7/2018 |
britically.com | 185.48.56.134 | NL | 5/7/2018 |
dismissey.com | 185.48.56.134 | NL | 5/7/2018 |
divorough.com | 185.48.56.134 | NL | 5/7/2018 |
rfisoty.com | 185.48.56.134 | NL | 5/7/2018 |
detrole.com | 109.236.87.25 | NL | 5/8/2018 |
manismay.com | 185.48.56.134 | NL | 5/8/2018 |
phonetarif.com | 185.48.56.134 | NL | 5/13/2018 |
binncu.net | 46.148.26.106 | UA | 5/17/2018 |
urnisim.net | 46.148.26.11 | UA | 5/17/2018 |
urnachay.com | 46.148.26.11 | UA | 5/18/2018 |
yutlitsi.com | 46.148.26.11 | UA | 5/18/2018 |
oksigur.net | 46.148.26.11 | UA | 5/21/2018 |
greatoric.com | 5.187.0.158 | DE | 5/22/2018 |
marrivate.com | 5.187.0.158 | DE | 5/22/2018 |
percalabia.com | 5.187.0.158 | DE | 5/22/2018 |
urnachay.com | 5.187.0.158 | DE | 5/22/2018 |
yutlitsi.com | 5.187.0.158 | DE | 5/22/2018 |
lumpyve.com | 185.48.56.134 | NL | 5/24/2018 |
urnisim.net | 5.187.0.158 | DE | 5/27/2018 |
borrespons.com | 85.143.202.82 | RU | 6/7/2018 |
manismay.com | 85.143.202.82 | RU | 6/7/2018 |
phonetarif.com | 85.143.202.82 | RU | 6/7/2018 |
rfisoty.com | 85.143.202.82 | RU | 6/7/2018 |
borrespons.com | 212.83.61.213 | DE | 6/20/2018 |
manismay.com | 212.83.61.213 | DE | 6/20/2018 |
rfisoty.com | 212.83.61.213 | DE | 6/20/2018 |
lumpyve.com | 212.83.61.213 | DE | 6/20/2018 |
phonetarif.com | 212.83.61.213 | DE | 6/20/2018 |
Изучив представленные данные, можно резюмировать, что все домены регистрируются на почту, сгенерированную при помощи сервиса временной почты. Местоположение фиктивного региструющего лица — США, в то время как сами домены расположены в России, Украине, Нидерландах, Китае, Казахстане и Германии (в последнее время наблюдается тенденция «переезда» доменов на Украину и в Германию). Все домены находятся в доменных зонах «com» и «net». Алфавит, из которого состоит домен, включает в себя только буквы английского алфавита. На стороне CnC поднят Web-сервер OpenResty.
Заключение
Несмотря на «древность» зевсоподобных троянов, их актуальность не падает. Как результат – появление IcedID на арене троянов, нацеленных на клиентов банков. Хотя банкер уже на старте имел обширный список возможностей, он все еще совершенствуется: усложняются методы распаковки, происходит расширение списка целей. Вероятнее всего в дальнейшем вредоносная программа обзаведется механизмами противодействия анализу, а CnC-сервер начнет избирательно отдавать Web-инжекты зараженным устройствам. Пока же троян не удовлетворяют всем требованием своих «пользователей», о чем говорит использование в декабре прошлого года TrickBot’а совместно с IcedID.
В Group-IB знают о киберпреступности всё, но рассказывают самое интересное.
Остросюжетный Telegram-канал (https://t.me/Group_IB) об информационной безопасности, хакерах и кибератаках, хактивистах и интернет-пиратах. Расследования нашумевших киберпреступлений по шагам, практические кейсы с применением технологий Group-IB и, конечно, рекомендации, как не стать жертвой в интернете.
YouTube-канал Group-IB
Фотолента Group-IB в Instagram www.instagram.com/group_ib
Короткие новости в Twitter twitter.com/GroupIB
Компания Group-IB — один из ведущих разработчиков решений для детектирования и предотвращения кибератак, выявления мошенничества и защиты интеллектуальной собственности в сети со штаб-квартирой в Сингапуре.