Как стать автором
Обновить

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

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


Приложений по удаленному управлению по сети предостаточно: С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 отнесутся к моим действиям по-спортивному.
Теги:
Хабы:
+5
Комментарии 47
Комментарии Комментарии 47

Публикации

Истории

Работа

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн