Agregando una capa de protección contra los clones: antiClon v0.8.2

Leinier Cruz Salfran
Guión, RouterOS, Tutoriales
04-ago-2020

Tabla de contenidos

Introducción

Hoy en día es existe una práctica muy mala que se ha generalizado y esparcido a todas las zonas Wi-Fi de ETECSA en nuestro país, como si de una plaga se tratara, afentando el correcto establecimiento y desarrollo de las conexiones inalámbricas tanto para móviles como enrutadores inalámbricos, entre los que se encuentra el, comúnmente usado, Mikrotik.

Con un poco de esfuerzo y dedicación, se ha creado un guión para RouterOS que intenta mitigar en la mayoría de los casos y erradicar, en otros, esa mala práctica ejercida por algunas personas inescrupulosas.

Preparación del sistema

Lo primero será limpiar o deshabilitar todas las entradas (método usado en este tutorial) del listado de conexiones permitidas en la sección inalámbrica. Para ello, ejecutaremos las siguientes líneas de código en una sesión de consola.

{
    :local entrada;

    :foreach entrada in=[/interface wireless connect-list find disabled=no] do= {
        /interface wireless connect-list disable $entrada;
    }
}

Luego de esto, ya estamos en condiciones de crear el guión, y para ello, accederemos a System -> Scripts y crearemos una entrada a la cual le introduciremos los siguientes datos:

  • Nombre: leiniercs-antiClon-0.8.2
  • Permisos: lectura, escritura

En el campo Guión introduciremos todo el texto que se muestra en la siguiente sección.

Guión

# Fecha: 4-ago-2020 5:06 pm
# Autor: Leinier Cruz Salfran <leiniercs@gmail.com>
# Nombre: antiClon
# Version: 0.8.2
# Licencia: GPLv3
# Grupo en Telegram: https://t.me/ccari_cuba
#
# Logica:
#   Iterar por todas las interfaces inalambricas existentes en el sistema que usen alguno
#   de los modos de operacion de estacion, y:
#     - Verifica las propiedades de conexion del punto de acceso al que esta conectada la
#      interfaz por la que se itera y si se detectan los patrones de conexion a un clon
#      entonces:
#       * Agrega la MAC del punto de acceso del clon a la lista de conexiones no permitidas
#         en todas las interfaces inalambricas existentes en el sistema que usen alguno de
#         los modos de operacion de estacion.
#       * Desconecta del punto de acceso.
#       * Libera la concesion DHCP si se obtuvo.
#
# Variables no modificables para uso en el guion
#
:local interfazInalambrica1;
:local interfazInalambrica2;
:local nombreWLAN1;
:local nombreWLAN2;
:local macAddress;
:local bridge;
:local radioName;
:local routerOSVersion;
:local txSignalStrength;
:local signalStrength;
:local equipoOrigen;
#
# Itera por cada una de las interfaces inalambricas detectadas para comprueba los parametros del enlace
#
:foreach interfazInalambrica1 in=[/interface wireless find where (mode=station || mode=station-bridge || mode=station-pseudobridge || mode=station-pseudobridge-clone || mode=station-wds) && running=yes && disabled=no] do={
  :set nombreWLAN1 [/interface wireless get $interfazInalambrica1 name];
  :set macAddress [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] mac-address];
  :set bridge [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] bridge];
  :set radioName [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] radio-name];
  :set routerOSVersion [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] routeros-version];
  :set txSignalStrength [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] tx-signal-strength];
  :set signalStrength [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] signal-strength-ch0];
  #
  # Establece el origen del clon
  #
  :if ($bridge = true or [:len $routerOSVersion] > 0 or [:len $radioName] > 0 or [:len $txSignalStrength] > 0) do={
    :if ([:len $routerOSVersion] > 0) do={
      :set equipoOrigen "RouterOS"
    } else={
      :set equipoOrigen "desconocido"
    }

    :log warning "$macAddress@$nombreWLAN1: detectada una red inalambrica clonada desde un origen $equipoOrigen. Agregandolo a la lista negra y desconectando..."
    #
    # Itera nuevamente por cada una de las interfaces inalambricas detectadas para agregar el clon a la lista negra en cada una
    #
    :foreach interfazInalambrica2 in=[/interface wireless find where (mode=station || mode=station-bridge || mode=station-pseudobridge || mode=station-pseudobridge-clone || mode=station-wds) && running=yes && disabled=no] do={
      :set nombreWLAN2 [/interface wireless get $interfazInalambrica2 name];
      /interface wireless connect-list add interface="$nombreWLAN2" mac-address="$macAddress" signal-range="$signalStrength..0" connect=no disabled=no
      /interface wireless registration-table remove [find ap=yes interface="$nombreWLAN2"]
      /ip dhcp-client release [find interface="$nombreWLAN2"]
    }
  }
}

Ejecución automática

Una vez creado el guión, todavía no seremos capaces de hacerlo funcionar. He aquí cuando entra a jugar la planificación del guión en aras de obtener la ejecución automática. Para ello, accederemos a System -> Schedulers y crearemos una entrada a la cual le introduciremos los siguientes datos:

  • Nombre: leiniercs-antiClon-0.8.2
  • Fecha de inicio: Jan/01/1970
  • Hora de inicio: startup
  • Intervalo: 00:01:00
  • Permisos: lectura, escritura
  • Evento: /system script run leiniercs-antiClon-0.8.2

Conclusiones

Este guión es efectivo en algunos casos en donde el dispositivo que clona no posee las condiciones óptimas para generar caos total, siendo ésta una herramienta útil del administrador. En otros casos en donde las condiciones del equipo clonador son óptimas, este guión prevendrá al Mikrotik de conectarse al clon de forma efectiva, aunque, será casi imposible conectarse al punto de acceso de ETECSA original debido a los devastadores estragos del clon.