Детектим ваш сервер через WebSocket

Moved Other
  • Чтобы не показалось, что мир состоит из розовых пони...

    В общем есть такая штука, называется WebSocket. WebSocket — протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и веб-сервером, используя постоянное соединение (определение из ВИКИ) , но тебе это знать незачем, перейдем к самому главному, как это можно заюзать, чтобы спалить твой многопоточный бот :)

    САЙТ в интернете через браузер при помощи WS можно попытаться сделать запросы на такие адреса 127.0.0.1 и еще на 192.168.xxx.xxx, но в теме речь пойдет только о 127.0.0.1

    Screenshot_2.png

    127.0.0.1 - это что? 
    

    А это, мой друг, твоя локальная машина (localhost) на которой собственно крутится BAS в многопотоке.

    Ну крутится и что? 
    

    Дело в том, что у этого адреса 127.0.0.1 есть свои порты. Пример 127.0.0.1:7070. Если не вдоватся в дебри, то каждая программа на твоём пк которая выходит в интернет использует порты, какие-то программы используют случайные порты, а какие-то статичные.

    Ну пусть используют порты, какое это отношение имеет к моему многопоточному скрипту? 
    

    Чтобы ответить на такой вопрос, давай используем следующую команду в PowerShell (это еще можно сделать в CMD, но в PS красочнее таблица)

    Get-NetTcpConnection | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}} | Sort-Object -Property LocalPort | Format-Table
    

    Screenshot_1.png
    Скриншот обрезан, демонстрировать все порты нет смысла, сами посмотрите у себя.

    Видишь на порту 7070 висит AnyDesk, на порту 5939 висит TeamViver, а еще на порту висит 9010 висит программа для работы с Logitech устройствами.

    Ну висит, а дальше что?
    

    Выше я уже упоминал, что некоторые программы могут иметь статичный порт, а некоторые случайный. Мы через JS скрипт может просканировать список популярных портов, которые занимают популярные программы по умолчанию (3389 RDP, 7070 AnyDesk, 17500 (Dropbox) и т.д.). Поскольку запрос уходит в локальную машину ответ приходит мгновенный, большинство таких запросов – шифрованные, и для их расшифровки требуются ключи, само собой сайту ты не давал разрешения на соединения с портами, но ведь суть в том что это займет время и скрипт из браузера сможет узнать, что у тебя что-что висит на этом порту. Не будем вдавятся в дебри, а что если юзер пк сам свою кастомную программу повесил на порт, который занет по умолчанию популярной программой на пк, но сколько так людей делает? И сколько людей меняют этот порт после установки программы? 0.01%? Способ довольно эффективный.

    Я ничо не понял, как это может спалить мой многопоточный бот?
    

    Представь ситуацию ты крутишь BAS в многопотоке на системе в которой отрыт 3389 RDP порт, открыт AnyDesk 7070, открыт DropBox (17500) и открыт еще темвивер TeamViver (5939). Таких программ на самом деле много, которые садятся на статичный порт. Сайт может составить "отпечаток" твои портов и выяснить, что регистрации/лайки/сообщения идут с 1 системы, там плевать на твои канвасы, прокси, профили, но ведь это даже еще не всё, если копнуть еще глубже, выяснится что у серверной Windows и обычной Windows 10 тоже разные порты, т.е ты признаешься сайту, "эй - я тут на серверной винде кручу браузер - это ведь ничо, ок?"
    А если например ты используешь мобильные отпечатки, а у тебя отвечает порт с программой которая есть только на ПК? Простор на самом деле большой.

    НИЧОСИ, а что делать?
    

    Один из вариантов, это закрыть или переместить все порты у софтов, которые использует статичный порт, например в настройках AnyDesk можно поменять порт по умолчанию.
    Screenshot_4.png
    RDP тоже можно переместить с 3389 и т.д. Сайт не будет сканировать все твои 65к портов, есть еще варианты специализированных софтов, которые могут случайно отвечать на таких порты, но в такие дебри, мой друг не лезь, хватит тебе и первого варианта.

  • Ну конкурс статей можно считать открытым :) теперь и на форуме баса - осталось определить список тем и призовой фонд :)

    А так то это давно все знают, что лучше рдп перевешивать куда нить на другой порт - не забыть закрыть заодно в файрволе - и главно не закрыть доступ самому себе в процессе :)
    Но это тоже не спасет от пароноидальной системы - так как только ты освободишь порт например рдп - то на него может залезть какая нить прога. Главное чтоб эти порты извне закрыты били.

    Я вот чето не понял - запустил твою команду - смотру а у меня дофигища woker ов висит на разных портах.
    Запущено две копии баса - в каждом один поток, одна вкладка. То есть всего 2 потока получается, по одной вкладке в каждом - сколько там woker ов должно быть ?
    И вот откуда еще и другие браузер автоматин студии взялись ...

    Screen Shot 2023-05-13 at 12.15.49.png

    это не весь список ...

  • Я на своем Контабо тоже меняю РДП по-умолчанию, но чтобы не палить провайдеру пиратскую винду и что оплачиваю только линуксовую машину у них. Оказывается есть и приятные подобные эффекты)

  • @DuckDuck это нормальное явление, у меня реал хром тоже открывает кучу портов.

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

  • я вот подумал, что у вендоров облачных вычислений (IBM, Oracle, AWS,Azure) вполне могут быть меченные системы, якобы Windows 10 PRO, verfied provider(microsoft,мы) ,а там где-то какой-то портик один из 65к пометили, и это только один из возможных вариантов. Вывод - на облака искать способ ставить свои образы системы, которые как у всех. А что это за сайт такой хитрый, ни разу за все время такого в network не видел?

  • ех, а вот если бы все в мире использовали кривые заголовки, шум в канвасе - какой там детект делать то?

  • А узнать, что порт на компе открыт - просто на все 9999 портов отправить websocket запрос?

  • Будет продолжение статьи, через другую механику (не вебсокет) можно вытянут локальное окружение браузера

    Пояснение о чем речь:
    1)Установлен BAS на машине с проводным интернет с IP адрес 192.168.0.100. Провод от ПК идет в роутер с 192.168.1.1 или 192.168.0.1 шлюзом.
    2)Далее к роутеру полюбому подключен еще смартфон с IP адресом условным 192.168.0.71 или еще какой-нить устройство (второй пк, умная розетка/телевизор)
    3)Скриптик JS тянет все твои локальные IP и делает с них отпечаток. Там пофигу ставил ты прокси/отпечаток/канвас/, ты задетекчен по набору локальных адресов

  • @FastSpace тогда решение одно) разделить локалки, чтобы сервер бас не мог достучаться во вторую js скриптом... костыль конечно, вроде может помочь)

  • Фаерволом разрешить только прокси-порты. Понятно, что и их можно просканировать, но окружение будет недоступным.
    Проверил: внутри локальной машины фаерволом порты не блокируются, т.е. всё, что до сетевой карты можно просканировать.

  • @mangol1167 Достаточно слезть с 192.168.0.xxx и 192.168.1.xxx адресов. Весь диапазон никто не будет сканить (там 65к адресов). Здесь такая же аналогия как и с 127.0.0.1 - скан только популярных портов типо 3389,7070, только тут популярных IP

    В качестве паранои если использовать резидетные прокси, то оставить 192.168.0.1 или 192.168.1.1 (у 80% тут сидит роутер), если мобильные то оставить 192.168.8.1. Но это только эмуляция ПК, для андройда само собой никакой 192.168.8.1 не должен отвечать. Модем в телефон напрямую нельзя подключить.

    Вот скрипт - https://github.com/samyk/webscan

  • ModeratorM Moderator moved this topic from Off topic on

  • 1 Votes
    7 Posts
    1083 Views
  • 0 Votes
    30 Posts
    2816 Views
  • 0 Votes
    2 Posts
    437 Views
  • 0 Votes
    2 Posts
    900 Views
  • 0 Votes
    2 Posts
    704 Views