Cuando un día, el jefe plantea la pregunta: «¿Por qué algunos tienen acceso remoto a la computadora de trabajo, sin necesidad de obtener permisos adicionales para su uso?»
surge la tarea de «tapar» la brecha.

Existen muchas aplicaciones para la gestión remota a través de la red: Chrome Remote Desktop, AmmyAdmin, LiteManager, TeamViewer, Anyplace Control, entre otras. Si 'Chrome Remote Desktop' tiene un manual oficial sobre cómo lidiar con el acceso al servicio, TeamViewer tiene restricciones de licencia en tiempo y en solicitudes desde la red, y los usuarios de 'TeamViewer', a regañadientes, de alguna manera se ven 'expuestos' ante los administradores, el favorito de muchos para uso personal — AnyDesk — aún requiere atención especial, especialmente si el jefe dijo '¡No se permite!'.

Si sabe qué es la restricción del paquete de red por su contenido y está de acuerdo con ello, el resto del material
no está destinado para usted.
Intentando abordar el problema desde el otro lado, se dice que lo que debe estar permitido para el funcionamiento del programa ha sido bloqueado, en consecuencia se bloqueó la entrada DNS *.net.anydesk.com. Pero AnyDesk no es fácil, la restricción del nombre de dominio no le afecta.
En algún momento, resolví la tarea de bloquear 'Anyplace Control', que llegaba a nosotros con algún software sospechoso, y la solución fue bloquear solo unas pocas IP (complementé con antivirus). Sin embargo, la tarea con AnyDesk, después de que reuní manualmente más de una docena de direcciones IP, me animó a dejar el tedioso trabajo manual.
También se descubrió que en 'C:ProgramDataAnyDesk' hay varios archivos de configuración y similares, y en el archivo ad_svc.trace se recopilan eventos sobre conexiones y fallos.
1. Observación
Como ya se mencionó, bloquear *.anydesk.com no dio resultados en el funcionamiento del programa, se decidió analizar el comportamiento del programa en situaciones de estrés.. ¡TCPView de Sysinternals en mano y adelante!

1.1. Se puede ver que hay varios procesos de interés, y solo aquel que se conecta a una dirección externa es el que nos interesa. Los puertos a los que se conecta se están probando, de lo que vi, estos son: 80, 443, 6568. 🙂 80 y 443 definitivamente no podemos bloquear.
1.2. Después de bloquear la dirección a través del router, se elige tranquilamente otra dirección.

1.3. ¡La consola es nuestro TODO! Determinamos el PID y aquí tuve algo de suerte, ya que AnyDesk fue instalado como un servicio, por lo tanto, el PID buscado es el único.
1.4. Determinamos por el PID del proceso la dirección IP del servidor de servicios.

2. Preparación
Dado que el programa para identificar direcciones IP probablemente funcionará solo en mi PC, no tengo restricciones relacionadas con la comodidad o la pereza, así que usaré C#.
2.1. Todos los métodos para identificar la dirección IP deseada ya son conocidos, solo queda implementarlos.
string pid1_; // Conoceremos el PID del servicio 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 "Servicios"";
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(','); // traducimos la respuesta a un array
pid1_ = pid1[1].Replace(""", ""); // tomamos el segundo elemento sin comillas
}De manera similar, encontramos el servicio que estableció la conexión, solo citaré la línea principal.
p.StartInfo.Arguments = " /c " netstat -n -o | findstr /I " + pid1_ + " | findstr "ESTABLISHED"";El resultado será:
![]()
De la cadena, de manera similar al paso anterior, extraemos la tercera columna y eliminamos todo lo que está después de ":". Como resultado, obtenemos nuestra dirección IP deseada.
2.2. Bloqueo de IP en Windows. Si en Linux hay Blackhole e iptables, el método para bloquear la dirección IP en una sola línea, sin usar un cortafuegos, en Windows resultó ser inesperado,
pero, las herramientas disponibles eran las que eran...
route add nuestra_dirección_IP_encontrada mask 255.255.255.255 10.113.113.113 if 1 -pEl parámetro clave "if 1" envía la ruta al Loopback (Se pueden mostrar las interfaces disponibles ejecutando route print). ¡Y ES IMPORTANTE! Ahora es necesario ejecutar el programa con privilegios de administrador, ya que cambiar la ruta requiere elevar los privilegios.
2.3. Mostrar y guardar las direcciones IP identificadas es una tarea trivial y no requiere explicaciones. Si lo pensamos, también se podría procesar el archivo ad_svc.trace del mismo AnyDesk, pero no lo pensé de inmediato + probablemente tenga restricciones.
2.4. El extraño comportamiento inconsistente del programa radica en que al «taskkill» del proceso de servicio en Windows 10 se reinicia automáticamente, en Windows 8 finaliza, dejando solo el proceso de consola y sin reconexión, en general, es ilógico y no preciso.
Eliminar el proceso conectado al servidor permite "forzar" la reconexión a la siguiente dirección. Se implementa de manera similar a los comandos anteriores, por lo que solo cito:
p.StartInfo.Arguments = " /c taskkill /PID " + pid1_ + " /F";Adicionalmente, ejecutamos el programa AnyDesk.
//запускаем программу которая расположена по пути path_pro
if (File.Exists(path_pro)){
Process p1 = Process.Start(path_pro);}2.5. Verificaremos el estado de AnyDesk una vez por minuto (¿o más a menudo?), y si se conecta, es decir, si la conexión está ESTABLECIDA — bloquearemos esta IP y volveremos a empezar — esperar a que se conecte, bloquear y esperar.
3. Ataque
Se generó un código para visualizar el proceso, se decidió "+" indicar la IP encontrada y bloqueada, y "." — repetir la verificación sin una conexión exitosa por parte de AnyDesk.

→
Como resultado…

El programa se ejecutó en varias computadoras con diferentes versiones de Windows, con versiones de AnyDesk 5 y 6. En 500 iteraciones se recopilaron alrededor de 80 direcciones. En 2500 — 87 y así sucesivamente…
Con el tiempo, la cantidad de IP bloqueadas alcanzó más de 100.
Enlace al archivo final de texto con las direcciones: y
¡Trabajo completado! El grupo de direcciones IP a través del script se agregó a las reglas del enrutador principal y AnyDesk simplemente no puede crear una conexión externa.
Hay un momento extraño, en los registros iniciales se ve que en la transmisión de información participa la dirección boot-01.net.anydesk.com. Por supuesto, bloqueamos todos los hosts *.net.anydesk.com con una regla general, pero la rareza no está en eso. Cada vez que se hace un ping normal desde diferentes computadoras, ese nombre de dominio devuelve una IP diferente. Verificación en Linux:
host boot-01.net.anydesk.com
como lo hace DNSLookup, solo devuelve una dirección IP, pero esta dirección es variable. Al analizar las conexiones, TCPView devuelve registros PTR de direcciones IP del tipo relay-*.net.anydesk.com.
Teóricamente: dado que el ping a veces pasa a un host desconocido no bloqueado boot-01.net.anydesk.com podemos encontrar estas IP y bloquearlas, implementando esta solución como un script normal para el sistema operativo Linux, aquí ni siquiera es necesario instalar AnyDesk. El análisis mostró que estas IP a menudo "se cruzan" con las encontradas en nuestra lista. Es posible que este sea precisamente el host al que se conecta el programa antes de comenzar a "recorrer" las IP conocidas. Probablemente, más adelante completaré el artículo con la segunda parte de la búsqueda de hosts, aunque en este momento el programa en sí no establece una conexión externa en absoluto dentro de la red.
Espero que no hayan visto nada ilegal en lo expuesto anteriormente, y que los creadores de AnyDesk tomen mis acciones deportivamente.
Fuente: habr.com
