Анализ возможности блокировки приложения для удаленного управления компьютером по сети, на примере AnyDesk

    Когда в один прекрасный день начальник поднимает вопрос: «Почему у некоторых есть удаленный доступ к раб.компьютеру, без получения дополнительных разрешений на использование?»,
    возникает задача «прикрыть» лазейку.


    Приложений по удаленному управлению по сети предостаточно: Сhrome remote desktop, AmmyAdmin, LiteManager, TeamViewer, Anyplace Control и др. Если у «Сhrome remote desktop» есть официальный мануал по борьбе с наличием доступа к сервису, у TeamViewer есть лицензионные ограничения по времени либо запросам из сети и пользователи «скрипя зубами» так или иначе «светятся» у админов, то любимчик многих для личного пользования — AnyDesk пока требует особого внимания, тем более если начальник сказал «Нельзя!».
    Если Вы знаете что такое блокировка сетевого пакета по его содержимому и Вас она устраивает, то остальной материал
    не предназначен для Вас.

    Пробуя пойти от обратного, на самом сайте говорится о том, что должно быть разрешено для работы программы, соответственно была заблокирована DNS запись *.net.anydesk.com. Но AnyDesk не прост, блокировка доменного имени ему нипочем.

    Update 15.08.2020
    Правильное решение по блокировке AnyDesk подсказал prymalbeets123:
    собрать адреса от хоста relays.net.anydesk.com

    [bash#]host relays.net.anydesk.com

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


    Когда-то у меня была решена задача по блокировке «Anyplace Control» который попадал к нам с каким-то сомнительным ПО и решена она была блокировкий всего нескольких IP (я подстраховывал антивирус). Задача же с AnyDesk, после того как я вручную собрал больше десятка IP адресов, подзадорила уйти от рутинного ручного труда.

    Также было обнаружено что в «C:\ProgramData\AnyDesk» есть ряд файлов с настройками и т.п., а в файл ad_svc.trace собираются события о подключениях и неудачах.

    1. Наблюдение

    Как уже было сказано блокировка *.anydesk.com не дала никаких результатов в работе программы, было решено поанализировать поведение программы в стрессовых ситуациях. TCPView от Sysinternals в руки и вперед!



    1.1. Видно что «висит» несколько интересующих нас процессов, и лишь тот который связывается с адресом извне нам интересен. Порты к которым подключается перебираются, из того что я видел это: 80, 443, 6568. :) 80 и 443 нам точно блокировать нельзя.

    1.2. После блокировки адреса через роутер, спокойно выбирается другой адрес.


    1.3. Консоль наше ВСЁ! Определяем PID и тут мне немного подфартило, что AnyDesk был установлен сервисом, соответсвенно искомый PID единственный. 1.4. Определяем по PID процесса IP адрес сервера сервисов.

    2. Подготовка

    Так как программа для выявления IP адресов вероятно будет работать только на моем ПК, у меня нет никаких ограничений в удобстве и лени поэтому C#.

    2.1. Все методы по выявлению искомого IP адреса уже известны осталось реализовать.

    string pid1_;//узнаем PID сервиса AnyDesk
    using (var p = new Process()) 
    {p.StartInfo.FileName = "cmd.exe";
     p.StartInfo.Arguments = " /c \"tasklist.exe /fi \"imagename eq AnyDesk.exe\" /NH /FO CsV | findstr \"Services\"\"";
     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardOutput = true;
     p.StartInfo.CreateNoWindow = true;
     p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding("CP866");
     p.Start();
     string output = p.StandardOutput.ReadToEnd();
     string[] pid1 = output.Split(',');//переводим ответ в массив
     pid1_ = pid1[1].Replace("\"", "");//берем 2й элемент без кавычек
    }

    Аналогично находим сервис который установил соединение, приведу только основную строку

    p.StartInfo.Arguments = "/c \" netstat  -n -o | findstr /I " + pid1_ + " | findstr \"ESTABLISHED\"\"";

    Результатом которой будет:


    Из строки аналогично перыдущему шагу извлекаем 3й столбец, и убираем все что после ":". Как результат имеем наш искомый IP.

    2.2. Блокировка IP в Windows. Если в Linux есть Blackhole и iptables, то метод блокировки IP адреса в одну строку, без использования брандмауэра, в Windows оказался непривычним,
    но уж какие инструменты были…

    route add наш_найденный_IP_адрес mask 255.255.255.255 10.113.113.113 if 1 -p

    Ключевой параметр "if 1" посылаем маршрут на Loopback (Отобразить доступные интерфейсы можно выполнив route print ). И ВАЖНО! Теперь программу требуется запускать с правами администратора, поскольку изменение маршрута требует повышения прав.

    2.3. Отображение и сохранение выявленых IP адресов задача тривиальная и пояснения не требует. Если подумать, то можно обрабатывать и файл ad_svc.trace самого AnyDesk, но об этом я сразу не подумал + возможно на него стоит ограничение.

    2.4. Странное неодинаковое поведение программы заключается в том, что при «taskkill» процесса службы в Windows 10 она перезапускается автоматически, в Windows 8 завершается, оставляя только процесс консоли и без переподключения, в общем нелогично и это неточно.

    Удаление подключившегося к серверу процесса, позволяет «форсировать» переподключение на следующий адрес. Реализуется аналогично предыдущим командам, поэтому привожу только:

    p.StartInfo.Arguments = "/c taskkill /PID " + pid1_ + " /F";

    Дополнительно запускаем программу AnyDesk.

     //запускаем программу которая расположена по пути path_pro
    if (File.Exists(path_pro)){ 
    Process p1 = Process.Start(path_pro);}

    2.5. Проверять состояние AnyDesk будем 1 раз в минуту (или чаще?), и если она подключилась т.е. соединение ESTABLISHED — этот IP блокировать, и опять все заново — ждать пока подключится, блокировать и ждать.

    3. Нападение

    Был «набросан» код, для визуализации процесса решено "+" указывать найденный и блокированный IP, а "." — повтор проверки без успешного сосединения со стороны AnyDesk.



    Код проекта

    Как результат…


    Программа работала на нескольких компьютерах с разными Windows ОС, с версиями AnyDesk 5 и 6. За 500 итераций собиралось около 80 адресов. За 2500 — 87 и так далее…

    Со временем количество блокируемых IP дошло до 100+.

    Ссылка на финальный текстовый файл (blacklist) с адресами: >>раз<< и >>два<<

    Дело сделано! Пул IP адресов через скрипт добавлен в правила основного роутера и AnyDesk просто не может создать внешнее соединение.

    Есть странный момент, по первоначальным логам видно что в передаче информации участвует адрес boot-01.net.anydesk.com. Мы конечно заблокировали все хосты *.net.anydesk.com общим правилом, но странность не в этом. Каждый раз при обычном пинге с разных компьютеров это доменное имя дает разный IP. Проверка в Linux:

    host boot-01.net.anydesk.com

    как и DNSLookup дают только один IP адрес, но этот адрес вариативен. При анализе соединенией TCPView нам возвращаются PTR записи IP адресов типа relay-*.net.anydesk.com.

    Теоретически: раз пинг иногда проходит на неизвестный незаблокированный хост boot-01.net.anydesk.com мы можем найти эти ip и заблокировать, эту реализацию сделать обычным скриптом под ОС Linux, тут как раз устанавливать AnyDesk не нужно. Анализ показал что эти IP часто "пересекаются" с найденными из нашего списка. Возможно это как раз этот хост, к которому и подключается программа до того, как начинает «перебирать» известные IP. Вероятно я позже дополню статью 2й частью поисков хостов, хотя на данный момент сама программа внутри сети не устанавливает внешнее соединение вообще.

    Update 15.08.2020: пользователь Хабра @prymalbeets123 обратил мое внимание что существует хост relays.net.anydesk.com которому соответсвует 391 IP адрес, файл с их перечнем можно найти по указанным выше ссылкам как корректный. Замечено что у меня собранных наблюдением за программой AnyDesk адресов меньше, но есть те которые не входят в общие 391 и они резолвятся «левыми» доменными именами, получается что я также «собирал» адреса тех кто инициировал подключение к моему компьютеру :).

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

    Подробнее
    Реклама

    Комментарии 37

      +1

      Великий китайский файервол заблокировал ESNI, а мы по старинке перебираем IP? Нет, спасибо, все что явно не разрешено — запрещено. Хочешь HTTPS до сайтов кроме списка — обоснуй, добавим.

        +1
        Понимаю такую позицию, но так как работаю уже в существующей сетевой инфраструктуре, которая перешла ко мне попередникив, то приходится «бегать с молотком и забивать гвозди». У нас уже и Youtube решали блокировать… потом как-то откатили назад. История говорит что через 1 месяц у тебя будет 20 видов Випов, какждому из которых нужна отдельная политика разрешений, и при этом денег на оборудование нет.
          +1
          Быстрое забывается, временное остается. Вы сами себе создаете «неоплачиваемую», «невидимую» работу по поддержанию таких списков.
          С технической стороны на «почему?» босса разумно предоставить Allow List, расчетную стоимость обслуживания каждой записи и коммерческое предложение DPI.
          С организационной стороны, разумно рекомендовать боссу издать приказ с запретом и установить ответственность за нарушение.
          +1

          Тогда проще сразу весь интернет заблокировать, ведь 99% сайтов работать и так не будет.

            0
            Чистый белый список? Серьезно? Это где такой «интернет»?
              +1
              Такой подход «работа только по белым спискам» очень дорог и возможен только там, где большой штат айтишников. Причем сотрудники (а точнее их руководители) должны понимать и соглашаться, что 1) запросы на добавление сайтов будут выполняться с задержкой 2) периодически, ранее работавшие сайты перестанут работать целиком или частично.

              Обычно такой подход (белые списки) показатель или ну очень сильно заточенной на безопасность организации или признак «мамкиного админа», который в книжках за 1997 год прочитал «про это», а на практике так и не пробовал (никого не хочу обидеть).

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

              При современном интернете (доступном с любого утюга) запрет на посещение левых сайтов может быть продиктован только безопасностью. А это решается значительно дешевле, проще, быстрее и лучше, чем белые списки (особенно с cdn, ага)
                0
                Вы рассмотрели что это просто вынужденная мера для меня, типа дешево и сердито, без понтов, сказали — сделал, попросил купить — не купили. :)
              +1
              Что-то мне кажется, что РКН начинал блокировать Telegram ровно такими же методами.
                0
                Хорошо если на 1 IP один сайт, в реальности это не так, как-то не мог попасть на тематический сайт, начинали разбираться, оказалось что на єтом же IP хостится заблокированый по полт.соображениям сайт, и все… Написал админу тематического сайта, он расплывчато пообещал «Будем думать». Суровые будни ограничений.
                +2
                Бегать с молотком за молью — это конечно очень спортивно и развивающе. Но комплексная проблема нуждается в комплексном решении — ставьте прокси, настраивайте политики/группы/доступы и блокируйте остальное. В интернете много и софтовых и аппаратных решений.
                  0
                  и просим отдельную ставочку для человека который будет это админить. «Бегать с молотком за молью» — надо запомнить.
                  0
                  Ого, скок труда. Я хз как наши админы это быстро сделали, но как боссы сказали НЕТ удаленке, то буквально через 10 минут все известные удаленки типа Team Viewer, AnyDesk, Ammy Admin резко перестали работать. На мой вопрос, админ сказал «На Микротике это не сложно».
                    0
                    Так на микротике спокойно всё фильтровать на 7 уровне OSI можно, а тут человек решил сделать всё на 3 уровне.
                      0
                      Да не сложно для известных программ. Более того, это более правильный выбор, чем устанавливать ПО на каждую машину. Но это работает ровно до тех пор, пока не станет использоваться новое ПО (или не обновиться текущее).

                      Правильный вариант (имхо) — мониторинг ПК сотрудников + орг. выводы

                      Люди должны понимать, что так делать нельзя, а если не понимают, то надо выявлять и показывать, что так делать нельзя
                        0
                        На миротике не сложно, только когда нагрузка не него серьезная, от тупо говорит что у Вас петля и перезагружает интерфейс, L7 для нас уже пройденный вариант, пользоваться да можно, но не усугублять и искать пути снижения нагрузки.
                          0
                          Ну во-первых микротику отдавать на l7 весь траффик без фильтрации изначально провальная затея, во-вторых не только он может l7 разбирать, а в-третьих не везде l7 поможет
                        +5
                        Метод windows domain админа — «а че, у вас мона запускать всяку херь, не прописанную в GPO?»
                        Метод linux админа — «а че, у вас можно запускать всяку херь, не прописанную в selinux?»
                        Метод MTCRE или CCNA — «а че, у вас __снаружи__ на х.з. какой порт клиента может коххектится х.з. кто х.з откуда?»

                        После того, как я в своей жизни прошел все 3 метода, я пришел к 4-му.
                        «Шеф, это не техническая, это административная проблема! Зачем они это делают? Ну не фильмы ве они смотрят, а работу работают. Шеф, ты порешай вопрос, почему в рабочее время народ не успевает сделать работу.»
                          +3
                          Совершенно верно. Бороться с занятиями на рабочем месте методом блокировок в компьютере бесполезно. У каждого в кармане телефон. Другое дело в рамках безопасности это закрывать, но там тоже административными действиями можно добиться гораздо большего эффекта, причем дешевле, быстрее и эффективнее.
                            0
                            Метод MTCRE или CCNA — «а че, у вас __снаружи__ на х.з. какой порт клиента может коххектится х.з. кто х.з откуда?»

                            Так ведь это же исходящее соединение от софтины на компе до сервера разработчиков софтины. И уже к серверу подключаются клиентом. Соответственно, сетевое железо это не посчитает входящим соединением и не отрежет.
                            0

                            мне больше нравятся два других способа:


                            1. Установить приложение удаленного доступа, прописать пароль для подключения и запретить удалять приложение, изменять настройки и подключаться с другим паролем. Пароль никому не сказать
                            2. Запретить пользователям установку приложений и разрешить запуск приложений только из тех мест, что разрешены
                              0
                              Это легко реализуется для обычных пользователей и называется SRP.

                              Но чаще всего проблема возникает с «необычными пользователями» — разработчиками/программистами/техподдержкой и пр. Тем, кому приходится давать права на запуск от админа (в том или ином виде). Не все разработчики, даже в 2020 понимают, что программа не должна требовать прав админа для своей штатной работы. Например, медицинские программы, идущие с дорогим оборудованием вообще, по ощущениям, писались студентами на коленке в год выхода windows xp.

                              Это не техническая, а административная проблема. Решается мониторингом запущенных процессов/портов и соответствующими оргвыводами
                                0
                                Дело в том, что некоторым разработчикам надо давать права локального админа в любом случае: ну как я без них буду к примеру писать драйвера?
                                  0
                                  Я про это и написал. Надо решать административно: «приказ. запрет на установку и использование ПО, предоставляющего...»

                                  и мониторить выполнение приказа.
                                    0
                                    AnyDesk, TeamViewerQS устанавливать не нужно. С TeamViewerQS проще, он пітается распаковаться и запуститься из TEMP сто запрещено политиками, а вот AnyDesk — интереснее.
                                      +2
                                      В винде просто запрещается запуск ПО кроме как из разрешенных каталогов, куда обычные пользователи писать не могут. И все — не будет разницы распаковывается, запускается или еще что-то делается. А если человек админ, то технические меры это не решение. Не надо на это тратить усилия (*кроме некоторых случаев, но это не та ситуация).

                                      Смотрите, статья соответствует теме (хотя ProcessMonitor-ом и скриптом это бы нашлось быстрее и универсальнее). А вот комментарии говорят о том, что не все понимают, что это не механизм обеспечения запрета удаленного доступа. Это частная задача. Невозможно техническими средствами гарантированно ограничить удаленный доступ к своему ПК в обычной корпоративной сети* *(без dlp и прочего).

                                      Количество стороннего ПО, которое может предоставлять доступ к ПК много. Оно появляется ежеминутно. Достаточно просто погуглить и установить его просто «накликав». Более того, есть сырцы того же vnc, которые скомпилировать сможет и школьник (со своим портом и названием процесса). Таким образом, выбирать «любимчика» (как сказано в статье) — это решение частной задачи, не имеющей никакого отношения к ИБ. Умные «несогласные» выберут редкоиспользуемый софт, на который никто не обратит внимание. Кстати, известный софт удаленного доступа более безопасен (с точки зрения его неправомерного использования третьими лицами), нежели кустарные поделки.

                                      Кроме того, сейчас большое количество ПО имеет или может иметь встроенный функционал удаленного доступа. Банальный пример — хром. Сейчас скайп позволяет демонстрировать свой рабочий стол. А кто гарантирует, что при обновлении версии скайпа не станет доступна возможность управлять этим столом? А тот же зум?

                                      Один из главных механизмов обеспечения безопасности это административные меры. Кроме шуток. А для того, чтобы люди относились к этому серьезно — есть механизм контроля по выполнению этих мер. Это мониторинг. После нескольких разговоров с руководством, «неспрошальщики» перестанут делать глупости.

                                      ps блокировать по ip это плохой вариант, т.к. anydesk может в любое время что-то поменять в своей cdn а вы потом будете искать — почему не открывается какая-то менюшка рабочего сайта
                                        0
                                        Достойный комментарий внимательного человека! Я просто поделился некоторыми соображениями, бегло перед своими действиями посерфив инет. Был бы адекватный для меня рецепт, мне не нужно было бы «играться» — проблем и так хватает. Анализ, соображение
                                        , дейстивие. Про печальный опыт блокировки могу поделиться, как-то блокируя ссылки вредоносных сайтов дошли мы до серверов amazon, и сразуже вылезли прблемы с Viber-ом. Нет абсолютных вариантов решения проблем, это как игра в шашки, раз-два и ты ничего не понял как это получилось (и проиграл:)… Шахматы отдадим почтовым системам.
                              0
                              NGFW вам в помощь.
                                0
                                А что мешает использовать прокси (например SQUID), и в нем запретить хождение напрямую по ip, вместо имени сайта? Именно так я и блокировал и этот AnyDesk и тот же Teamviewer.
                                  0
                                  У нас есть задачи для которых и даже прозрачный прокси недопустим, поэтому и решается все маршрутизатором-балансировшиком с файрволом.
                                  0
                                  Настройте через GPO разрешенные/запрещенные приложения, в конце концов можно и ФВ в винде по app настроить. Решение выглядит как костыль, смазанный коричневым.
                                    0
                                    и так все нервные и если в чем-то «усекать» права можно стать причиной мирового кризиза, да костыль — на производительности сети не сказывается, мне лично вспоминается идея Льва Тольстого про дубину против шпаги. Ребя Вы эстеты, потому что можете себе это позволить! Не нужно говорить что GPO спасет мир, это удобый инструмент, но по протоколу у меня не входят ноуты в доменную сеть, и думайте теперь как быть.
                                      0
                                      Как быть?
                                      Менять работу, так как из коротких штанишек здешних задач ты вырос. Задержишся еще на пару лет — и «ну чо. дворники тоже нужны»
                                    0
                                    подымаем впн на промежуточный хост с которого руководим процессом, трафик шифруем c анти dpi. При очень большом желании используя DDNS и хост с выходом на какого нибудь мобильного оператора, можно дополнить список заблокированных ip парой миллионов адресов :-). Т.е. чисто технически проблема не решается. А что делать если чел, вообще свой телефон с модемом прикрутит и проксик подымет, чтоб только трафик тимвьюва шел через телефон?
                                      0
                                      пригласить работать человека в свой отдел
                                      0
                                      спасибо всем за внимание, прошу отметить что были изложены лишь соображения о наблюдении за сервисом, закрыть все нельзя, можно лишь затруднить нерекомендумые действия для пользователя
                                        0
                                        Попробуйте pfsense + pfblocker или pi-hole\adguard home
                                        Про pfsense и не только — forum.netgate.com/topic/120102/proxmox-ceph-zfs-pfsense-и-все-все-все/

                                        Зы. Для блокировки по ДНС достаточно завернуть все dns запросы от клиентов на адрес pfsense. И уже на нем запрещать доступ. Но остается вопрос с DoH.
                                        +1
                                        норм статья. но конкретно с AnyDesk'ом так заморачиваться не обязательно.
                                        У них для этих целей выделено специальное доменное имя:
                                        relays.net.anydesk.com
                                        оно резолвится в 391 ip-адрес специально чтобы нам удобнее было блокировать работу Anydesk'а))

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое