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

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

Аналіз можливості блокування програми для віддаленого керування комп'ютером через мережу, на прикладі AnyDesk
Додатків по віддаленому управлінню по мережі достатньо: Сhrome remote desktop, AmmyAdmin, LiteManager, TeamViewer, Anyplace Control та ін. з мережі та користувачі «скрипучи зубами» так чи інакше «світяться» у адмінів, то улюбленець багатьох для особистого користування — AnyDesk поки що вимагає особливої ​​уваги, тим більше якщо начальник сказав «Не можна!».

Аналіз можливості блокування програми для віддаленого керування комп'ютером через мережу, на прикладі AnyDesk
Якщо Ви знаєте, що таке блокування мережного пакета за його вмістом і Вас воно влаштовує, то решта матеріалу
не призначений для вас.

Пробуючи піти від зворотного, насправді сайті йдеться про те, що має бути дозволено для роботи програми, відповідно було заблоковано DNS запис *.net.anydesk.com. Але AnyDesk не простий, блокування доменного імені йому дарма.

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

Також було виявлено, що в «C:ProgramDataAnyDesk» є ряд файлів з налаштуваннями тощо, а у файл ad_svc.trace збираються події про підключення та невдачі.

1. спостереження

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

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

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

1.2. Після блокування адреси через роутер спокійно вибирається інша адреса.

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

1.3. Консоль наше ВСЕ! Визначаємо PID і тут мені трохи пощастило, що AnyDesk був встановлений сервісом, відповідно шуканий PID єдиний.
1.4. Визначаємо за PID процесом IP адресу сервера сервісів.

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

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""";

Результатом якої буде:

Аналіз можливості блокування програми для віддаленого керування комп'ютером через мережу, на прикладі AnyDesk
З рядка аналогічно кроку кроку витягаємо 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

Ключовий параметр "якщо 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.

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

Код проекту

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

Аналіз можливості блокування програми для віддаленого керування комп'ютером через мережу, на прикладі AnyDesk
Програма працювала на кількох комп'ютерах з різними ОС Windows, з версіями AnyDesk 5 і 6. За 500 ітерацій збиралося близько 80 адрес. За 2500 - 87 і так далі ...

Згодом кількість блокованих IP сягнула 100+.

Посилання на фінальний текстовий файл з адресами: раз и два

Справу зроблено! Пул 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

Додати коментар або відгук