Kiedy pewnego pięknego dnia szef porusza kwestię: „Dlaczego niektórzy mają zdalny dostęp do komputera roboczego bez uzyskiwania dodatkowych zezwoleń na jego użycie?”,
pojawia się zadanie, aby „zamknąć” lukę.

Aplikacji do zdalnego zarządzania w sieci jest pod dostatkiem: Chrome Remote Desktop, AmmyAdmin, LiteManager, TeamViewer, Anyplace Control i inne. Jeśli „Chrome Remote Desktop” ma oficjalny podręcznik dotyczący przeciwdziałania dostępowi do usługi, to TeamViewer ma ograniczenia licencyjne dotyczące czasu lub zapytań z sieci, a użytkownicy „zgrzytając zębami” w ten czy inny sposób „świecą” się przed administratorami, to ulubieniec wielu do użytku prywatnego — AnyDesk, wymaga szczególnej uwagi, tym bardziej, że szef powiedział „Nie wolno!”.

Jeśli wiesz, czym jest blokowanie pakietów sieciowych po ich zawartości i to Ci odpowiada, to pozostały materiał
nie jest przeznaczony dla Ciebie.
Próbując podejść od odwrotnej strony, mówi się o tym, co powinno być dozwolone do pracy programu, w związku z czym zablokowano rekord DNS *.net.anydesk.com . Ale AnyDesk nie jest prosty, blokada nazwy domeny mu nie straszna.Kiedyś miałem rozwiązane zadanie blokady „Anyplace Control”, które dostawało się do nas z jakimś podejrzanym oprogramowaniem i zostało ono rozwiązane przez blokację zaledwie kilku adresów IP (dodatkowo zabezpieczałem się antywirusowo). Zadanie z AnyDesk, po tym jak ręcznie zebrałem ponad dziesięć adresów IP,
podsyciło pragnienie unikania rutynowej, ręcznej pracy. Zostało również odkryte, że w „C:ProgramDataAnyDesk” znajduje się kilka plików z ustawieniami itp., a w pliku
ad_svc.trace zbierane są zdarzenia dotyczące połączeń i niepowodzeń. 1. Obserwacja
Jak już wspomniano, blokada *.anydesk.com nie przyniosła żadnych rezultatów w działaniu programu, postanowiono przeanalizować
zachowanie programu w stresowych sytuacjach. . TCPView od Sysinternals w ręce i do przodu!1.1. Widać, że „wiszą” kilka interesujących nas procesów, i tylko ten, który łączy się z zewnętrznym adresem jest dla nas interesujący. Porty, do których się łączy, są różne, z tego, co widziałem, to: 80, 443, 6568. 🙂 80 i 443 na pewno nie możemy zablokować.

1.2. Po zablokowaniu adresu przez router, spokojnie wybierany jest inny adres.
1.3. Konsola to nasze WSZYSTKO! Określamy PID i tu trochę mi się poszczęściło, że AnyDesk został zainstalowany jako usługa, więc poszukiwany PID jest jedyny.

1.4. Określamy po PID procesu adres IP serwera usług.
1.4. Określamy adres IP serwera usług po PID procesu.

2. Przygotowanie
Ponieważ program do identyfikacji adresów IP prawdopodobnie będzie działał tylko na moim komputerze, nie mam żadnych ograniczeń co do wygody i lenistwa, dlatego C#.
2.1. Wszystkie metody identyfikacji poszukiwanego adresu IP są już znane, pozostało je tylko zrealizować.
string pid1_; // poznajemy PID usługi 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(','); // przekształcamy odpowiedź na tablicę
pid1_ = pid1[1].Replace(""", ""); // bierzemy 2. element bez cudzysłowów
}Podobnie znajdujemy usługę, która nawiązała połączenie, podam tylko główną linię
p.StartInfo.Arguments = " /c " netstat -n -o | findstr /I " + pid1_ + " | findstr "ESTABLISHED""";Jej wynikiem będzie:
![]()
Z tego wiersza analogicznie, jak w poprzednim kroku, wydobywamy 3. kolumnę i usuwamy wszystko po ":". W rezultacie otrzymujemy poszukiwany IP.
2.2. Blokowanie IP w Windows. Jeśli w Linuxie mamy Blackhole i iptables, to metoda blokowania adresu IP w jednej linii, bez użycia zapory ogniowej, w Windows okazała się niezwykła,
ale cóż, takie były narzędzia...
route add nasz_znaleziony_IP_adres mask 255.255.255.255 10.113.113.113 if 1 -pKluczowy parametr "if 1" wysyła trasę do Loopback (Dostępne interfejsy można wyświetlić, wykonując route print). I WAŻNE! Teraz program musi być uruchamiany z uprawnieniami administratora, ponieważ zmiana trasy wymaga podniesienia uprawnień.
2.3. Wyświetlanie i zapisywanie zidentyfikowanych adresów IP to trywialne zadanie i nie wymaga wyjaśnień. Jeśli się nad tym zastanowić, można również przetwarzać plik zbierane są zdarzenia dotyczące połączeń i niepowodzeń. samego AnyDesk, ale o tym od razu nie pomyślałem + być może na niego występuje ograniczenie.
2.4. Dziwne, nierówne zachowanie programu polega na tym, że przy „taskkill” procesu usługi w Windows 10, jest on automatycznie restartowany, w Windows 8 kończy się, pozostawiając tylko proces konsoli, bez ponownego połączenia, ogólnie logicznie to nie ma sensu i jest to niedokładne.
Usunięcie procesu połączonego z serwerem pozwala „wymusić” ponowne połączenie na następny adres. Implementuje się to analogicznie do poprzednich poleceń, dlatego podaję tylko:
p.StartInfo.Arguments = " /c taskkill /PID " + pid1_ + " /F";Dodatkowo uruchamiamy program AnyDesk.
//запускаем программу которая расположена по пути path_pro
if (File.Exists(path_pro)){
Process p1 = Process.Start(path_pro);}2.5. Sprawdzamy stan AnyDesk raz na minutę (lub częściej?), a jeśli się połączy, tzn. połączenie ESTABLISHED — zablokuj ten adres IP i zacznij od nowa — czekaj, aż się połączy, zablokuj i czekaj.
3. Atak
Kod został "przygotowany", aby zobrazować proces, postanowiono "+" wskazywać znaleziony i zablokowany adres IP, a "." — powtórzenie kontroli bez udanego połączenia ze strony AnyDesk.

→
Wynik...

Program działał na kilku komputerach z różnymi wersjami systemu Windows i wersjami AnyDesk 5 i 6. W 500 iteracjach zbierano około 80 adresów. W 2500 — 87 i tak dalej...
Z czasem liczba blokowanych adresów IP wzrosła do 100+.
Link do finalnego pliku tekstowego z adresami: i
Zadanie ukończone! Pul adresów IP został dodany do reguł głównego routera i AnyDesk po prostu nie może nawiązać zewnętrznego połączenia.
Jest dziwna kwestia, z początkowych logów widać, że w przesyłaniu informacji uczestniczy adres boot-01.net.anydesk.com. Oczywiście zablokowaliśmy wszystkie hosty *.net.anydesk.com ogólną regułą, ale dziwność w tym, że za każdym razem przy zwykłym pingowaniu z różnych komputerów ta nazwa domenowa daje różny adres IP. Sprawdzanie w Linux:
host boot-01.net.anydesk.com
jak i DNSLookup dają tylko jeden adres IP, ale ten adres jest zmienny. Przy analizie połączeń TCPView otrzymujemy zapisy PTR adresów IP typu relay-*.net.anydesk.com.
Teoretycznie: jeśli ping czasami przechodzi na nieznany niezablokowany host boot-01.net.anydesk.com możemy znaleźć te adresy IP i zablokować je, ta realizacja może być zrobiona za pomocą zwykłego skryptu pod system Linux, tu akurat instalacja AnyDesk nie jest potrzebna. Analiza pokazała, że te IP często "przecinają się" z tymi znalezionymi w naszej liście. Możliwe, że to właśnie ten host, do którego program się łączy przed tym, jak zaczyna "przeszukiwać" znane adresy IP. Prawdopodobnie później uzupełnię artykuł drugą częścią poszukiwań hostów, chociaż w tej chwili sam program w sieci wewnętrznej w ogóle nie nawiązuje zewnętrznych połączeń.
Mam nadzieję, że nie dostrzegli Państwo nic niezgodnego z prawem w powyższym opisie, a twórcy AnyDesk podejdą do moich działań sportowo.
Źródło: habr.com
