В пятницу, 2 октября, в 09:35 утра 333 заражённых выходных узла Tor одновременно начали перехватывать SSH-подключения и собирать как можно больше незашифрованных данных.

Для масштаба: во всей сети Tor около 3000 выходных узлов, то есть атакующие контролировали примерно каждый десятый.

Доступ к серверам у них был ещё с августа, за два месяца до атаки. Всё это время на машинах тихо лежал Ebury 1.8.3 — бэкдор для OpenSSH и похититель учётных данных под Linux.

Атака

Судя по всему, у атаки было две главные цели:

  • собрать как можно больше незашифрованного почтового трафика;

  • перехватывать SSH-подключения (MITM).

Атакующие закрыли на своих выходных узлах часть портов, так что через них шла только почта без шифрования. Одна из жертв, оператор узлов Tor с большим стажем, подробно разобрала эту часть в рассылке tor-relays.

Я же расскажу о второй атаке, перехвате SSH. Если ваша цепочка выходит в интернет через один из 333 заражённых узлов, сначала вы ничего не заметите. Зашифрованный веб-трафик проходит как обычно, но стоит подключиться по SSH на порт 22, и вас незаметно перенаправляют на один из 12 серверов-перехватчиков.

Инфраструктура атакующих: порт 22 с заражённых выходных узлов уходит на 12 перехватчиков SSH, остальной трафик идёт как обычно
Инфраструктура атакующих: порт 22 с заражённых выходных узлов уходит на 12 перехватчиков SSH, остальной трафик идёт как обычно

Именно это случилось со мной в ту пятницу утром. Моё SSH-подключение перенаправили, и меня встретило вот такое предупреждение:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:6baCZCPsl+AfQuujUS81fMEE/C7UeJ+AwjrImqmDB3E.
Please contact your system administrator.

Если же проигнорировать предупреждение и всё-таки войти, атакующий делает три вещи:

  • крадёт ваш пароль;

  • открывает своё подключение к вашему серверу и видит каждую команду, которую вы набираете (MITM);

  • открывает второе подключение к серверу и заражает его Ebury.

Как их сняли

В пятницу вечером я отправил свои находки команде Tor Project, которая следит за здоровьем сети. Там подтвердили, что столкнулись с чем-то новым, и начали связываться с операторами заражённых узлов.

«Атаку такого рода мы раньше не видели». — команда Tor Network Health

Заражённые выходные узлы уходят из сети: со 2 по 7 октября
Заражённые выходные узлы уходят из сети: со 2 по 7 октября
  • Пт, 2 октября: начался перехват.

  • Вс, 4 октября: команда опубликовала объявление для операторов, и те начали выключать свои выходные узлы.

  • Вс, 4 октября: узлам поставили флаг BadExit, и клиенты перестали выпускать через них трафик.

  • Пн, 5 октября: атакующие снова подняли многие узлы, но с уже выставленными флагами они годились только в промежуточные.

  • Пн, 5 октября: все заражённые серверы были выключены — частью операторами, частью самими атакующими.

В объявлении команда описала закономерность:

«Похоже, атакующий получает доступ к машинам на Linux и, если на них работает не выходной узел, правит файл torrc и превращает его в выходной, чтобы проводить атаку на SSH». — Tor Network Health, в объявлении

Отключение 333 выходных узлов хорошо видно на metrics.torproject.org: 4 октября там явный провал, и с тех пор число выходных узлов так и не восстановилось.

Число выходных узлов Tor проседает 4 октября
Число выходных узлов Tor проседает 4 октября

Можете поднять свой узел: community.torproject.org/relay/setup/

Техническая часть: как я их нашёл

Теперь подробно о том, как я нашёл все заражённые выходные узлы.

На основе exitmap я написал простой скрипт. Он закреплял в цепочке конкретный выходной узел и открывал через него SSH-подключение с моего сервера A на мой сервер B:

  • сервер A проверял, получил ли он правильный отпечаток ключа сервера B;

  • сервер B проверял, откуда пришло подключение: с закреплённого выходного узла или с одного из 12 серверов-перехватчиков.

Я прогнал скрипт по каждому из ~3000 выходных узлов. Около дюжины отдали поддельный отпечаток, а больше 300 ничего не подменяли, но пропускали подключение через те же серверы-перехватчики. Одного такого перенаправления хватало, чтобы считать узел заражённым.

Дальше я поставил ловушку на sshesame. Когда MITM удалось заманить в эту приманку и он залогинился, стало видно, что атакующие используют paramiko (библиотеку SSH для Python) и как они пытаются установить Ebury через Perl:

> echo "U=$(id -u) S=$(command -v sudo >/dev/null 2>&1 && (sudo -n true 2>/dev/null && echo nopass || echo maybe) || echo none)"
> sudo bash -c 'echo <base64> | base64 -d | perl'

Сначала проверить права, потом выполнить команду, закодированную в base64.

Открытые вопросы

Главный вопрос до сих пор без ответа: как они попали на все эти серверы. Одна версия — взломали саму хостинговую компанию (это обсуждали в рассылке). Но это лишь гипотеза. Правды не знает никто.

Второй вопрос — кто за этим стоит. Ebury и массовый сбор незашифрованных данных указывают на преступную группу, которая работает ради денег. Хотя и это тоже догадки.

«Учитывая, на скольких серверах стоял Ebury с 2009 по 2023 год (400 000!), в сети, скорее всего, есть и другие скомпрометированные узлы Tor». — Marc-Etienne M. Léveillé (tor-relays)

Подозреваю, что атаку намеренно начали в пятницу в расчёте, что никому не захочется портить себе выходные разбирательством. Тем больше уважения команде Tor за то, как быстро они среагировали.

Вывод

Вывод всё тот же: дополнительная защита окупается. Отключите вход по паролю и пользуйтесь SSH-ключами. Я, например, сегодня же иду покупать аппаратные ключи :-)

«В конечном счёте к узлам и мостам надо относиться как к продакшн-машинам, активно подвергающимся целенаправленным атакам». — George (tor-relays)

Комментарии (0)