December 18, 2018

Фишинг в .onion

Фишинг в клирнете сейчас обычное дело. Его легко обнаружить и также легко предотвратить.

Но что делать при угрозе фишинга в Даркнете?

Один из владельцев сайта в зоне .onion опубликовал у себя в блоге историю о том, как его сайт пытались использовать фишеры, и как он этому сопротивлялся.

<Далее текст идет от первого лица>

Джеймс Стэнли создатель и владелец сервисаSMS Privacy. Этот сервис предназначен для анонимного приема sms-сообщений за биткоины. У этого сервиса существует зеркало в сети Tor.

Однажды эксперт по безопасности Чарли Хотерсолл-Томас обнаружил, что поиск Google для «site:*.onion.to smsprivacy» выдает неожиданный результат.

smspriv6fynj23u6.onion — это законное имя скрытого сервиса, но есть и другой результат, который выглядит одинаково: smsprivyevs6xn6z.onion

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

Заголовок Content-Length отсутствует

Заголовок Content-Length говорит клиенту HTTP, сколько байтов контента ожидать. Глупый прокси-сервер, который намерен передать содержимое без изменений, может просто передать заголовок Content-Length без изменений: он знает, что длина не изменится, если содержимое не может измениться.

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

Но почему он просто не пишет Content-Length, соответствующий модифицированной версии контента?

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

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

Заголовок Connection неверный

Ниже приведено сравнение заголовков ответов:

Код:

$ torsocks curl -I http://smspriv6fynj23u6.onion/
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Fri, 13 Oct 2017 05:37:49 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 7387
Connection: keep-alive
Set-Cookie: [...]
X-Frame-Options: DENY

Легитимный сайт

Код:

$ torsocks curl -I http://smsprivyevs6xn6z.onion/
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Fri, 13 Oct 2017 05:37:57 GMT
Content-Type: text/html;charset=UTF-8
Connection: [object Object]
Set-Cookie: [...]
X-Frame-Options: DENY

Фишинговый сайт

Заголовок Connection изменен с keep-alive на [object Object]. Это то, что вы получаете в javascript при преобразовании объекта в строку, если объект не реализует toString(). Это может быть ключ к пониманию на каком программном обеспечении запущен прокси-сервер.

Скорее всего, он использует NodeJS. Я не смог обнаружить ничего, что могло бы вызвать эту ошибку в node-http-proxy или Harmon(промежуточное программное обеспечение для node-http-proxy для изменения ответа).

Сервер кеширует файлы Javascript (и, возможно, другие).

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

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

Адрес скрытого сервиса изменен

Прокси, похоже, переписывает все экземпляры smspriv6fynj23u6.onion в smsprivyevs6xn6z.onion.

Хотя, что интересно, он не делает то же самое для прописных букв.

Адреса биткоин-кошельков изменены

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

При первом переходе на страницу оплаты происходит небольшая задержка до того, как страница загрузится, предположительно, в то время как бэкэнд создает новый адрес биткойна (это занимает заметное количество времени, подразумевает, что он вставляется в огромную базу данных адреса, который не имеет индексов, или генерируется на медленной машине, или создается кодом, написанным на медленном языке. Если последнее, то RNG (Генератор Случайных Чисел) небезопасен). Все адреса биткойнов, отображаемые в тексте, переписываются на адреса, контролируемые злоумышленником. Примечательно, что QR-код остается неизменным и все еще декодирует законный адрес.

Я отправил платеж одному из адресов мошенника, чтобы узнать, что произойдет: 1GM6Awv28kSfzak2Y7Pj1NRdWiXshMwdGW. Он просто не появился на сайте, что добавляет больше доверия к теории о том, что сайт в основном является глупым прокси. Деньги еще не потрачены, но было бы интересно посмотреть, куда они уйдут, если будут потрачены.

Как cайт распространяется среди пользователей?

Я видел несколько разных результатов, которые отправляют referer на сервер при просмотре фишингового домена. В основном это были люди, просматривающие скрытую службу через веб-прокси (например, onion.link), но я обнаружил 2 скрытых сервиса:

  • 7cbqhjnpcgixggts.onion: «The onion crate»: это список скрытых сервисов Tor. Как старый «веб-каталог», но для Tor. Версия фишинга отмечена очень заметно как «фишинговая ссылка».
  • hss3uro2hsxfogfq.onion: «not Evil»: это поисковая система для скрытых сервисов Tor. Поиск «sms privacy» поднимает легитимный сайт вверху, а второй — фишинговый сайт. Я нажал кнопку «Сообщить о нарушении» рядом с фишинговым сайтом, но она еще не удалена.

Я надеялся найти твит, сообщение в блоге или подобное, когда кто-то выдает фишинговую ссылку вместо реальной. Маловероятно, что люди, стоящие за «The onion crate», несут ответственность за фиш. Если бы я пытался заставить людей использовать мой фишинговый сайт, я бы не отмечал его как «фишинговую ссылку». Возможно, что люди, управляющие поисковой системой «not Evil», являются исполнителями, хотя все это маловероятно. Если бы я работал с поисковой системой с целью отправки людей на фишинг-ссылки, я бы вообще не включил легитимную ссылку в поисковую выдачу.

Возможно, что фишинговая кампания еще не началась, хотя обратите внимание, что «The onion crate» обозначил фишинг-ссылку как 2017-05-17, что означает, что она существует длительное время.

Кто несет ответственность?

Скорее всего, это злобный кибер-преступник, который написал прокси-сервер, который заменяет адреса Биткойна своими собственными адресами, генерирует правдоподобные скрытые служебные адреса для различных скрытых сервисов и сидит, ожидая, когда деньги придут к нему.

Сначала я подумал, что это может быть служба разведки, надеющаяся следить за пользователями SMS Privacy. Но если вы надеялись сделать какое-то скрытое наблюдение, вы не измените адреса биткойнов до такой степени, что сайт больше не будет работать. Я предполагаю, что это может быть спроектировано, чтобы шпионить за определенным подмножеством пользователей и действовать как фишинг-сайт для всех остальных, но я думаю, что более вероятное объяснение «опытного кибер-преступника».

Фишинг скрытых сервисов гораздо проще, чем фишинг традиционных веб-сайтов, потому что нет (по дизайну) нет простого способа найти сервер скрытого сервиса, и нет централизованной системы именования, что означает, что даже у легитимных сайтов есть случайные символы в адресе. Получение правдоподобных адресов сравнительно просто. И даже после обнаружения фишингового сайта его чрезвычайно сложно закрыть. Это совершенное преступление. Единственным недостатком является то, что пользовательская база имеет тенденцию быть намного более технически подкованной, и ее не так легко обмануть, по сравнению с пользователями клирнета.

Как клиенты могут защитить себя?

Клиенты SMS Privacy должны убедиться, что они просматривают smsprivacy.org с помощью HTTPS, или, если вы используете Tor, smspriv6fynj23u6.onion является единственным легитимным адресом.

Кто-нибудь был обманут?

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

Дальнейшее расследование

Я думаю, что программное обеспечение, использующее этот прокси, также проксирует многие другие скрытые сервисы.

На самом деле, может быть интересно найти другие фишинговые сайты и посмотреть, имеют ли они одни и те же особенности (Connection: [object Object], заголовок Content-Length удален, переписывание адреса сайта только в нижнем регистре…).

Также может быть интересно попробовать обнаружить уязвимости и посмотреть, можно ли узнать полный список скрытых сервисов, которые проксируются. Существует некая вероятность того, что выбор имени хоста выполняется в прокси-коде, что означало бы, что запрос имени хоста одного фишингового сайта может вернуть содержимое другого фишингового сайта! Это будет очень сильный показатель того, что они работают на одной машине.

Вывод

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