Русский
Русский
English
Статистика
Реклама

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

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


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

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

Когда-то у меня была решена задача по блокировке 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 сервиса AnyDeskusing (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_proif (File.Exists(path_pro)){ Process p1 = Process.Start(path_pro);}

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

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

Код проекта github.com/avk013/SpaRDP_habr.
Как результат

Программа работала на нескольких компьютерах с разными Windows ОС, с версиями AnyDesk 5 и 6. За 500 итераций собиралось около 80 адресов. За 2500 87 и так далее
Со временем количество блокируемых IP дошло до 100+.
Ссылка на финальный текстовый файл с адресами >> bitbucket.org/avk013/anydesk_ip_block/downloads/ip_080820.txt
www.dropbox.com/s/rpeqa79xx0cyaop/ip_080820.txt

Дело сделано! Пул 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й частью поисков хостов, хотя на данный момент сама программа внутри сети не устанавливает внешнее соединение вообще.

Надеюсь ничего противоправного Вы не увидели в вышеизложенном, а создатели AnyDesk отнесутся к моим действиям по-спортивному.
Источник: habr.com
К списку статей
Опубликовано: 10.08.2020 08:10:35
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Системное администрирование

Программирование

Сетевые технологии

Сетевое администрирование

Консоль windows

Удаленное управление

C

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2023, personeltest.ru