Categoría: Seguridad

  • Cómo proteger tu servidor Linux de miles de direcciones IP y no morir en el intento

    Cómo proteger tu servidor Linux de miles de direcciones IP y no morir en el intento

    Hace algunos años, comencé un proyecto llamado SIPCheck que se basaba en un programa que leía el log de Asterisk buscando cadenas de texto que aparecían cuando se recibían intentos de registro y de esta forma, obtener la dirección IP para bloquearlo en el firewall. Esto ya lo hacía Fail2Ban (con muchos más servicios) y más especialmente APIBan, pero incluso en la primera versión de SIPCheck aprendí un error que sigue ocurriendo en todos estos sistemas: Los ataques procedentes de una dirección IP se quedan en el firewall hasta que lo hace prácticamente inmanejable, además de que esa dirección IP (que la pobre sólo tiene culpa de haberle tocado un dueño al que le han metido un gol por la escuadra) pasa a ser etiquetada como hostil e inutilizándola para cualquier uso legal y razonable hasta «el fin de los días» (más o menos lo mismo que comentamos cuando hablamos de los números de teléfono que se usan para campañas de marketing). Dejaré para un futuro artículo las venturas y desventuras de lo aprendido cuando desarrollábamos el nuevo SIPCheck, porque aprendimos muchas y muy interesantes lecciones sobre como pasar de bloquear IPs a cómo evitar ataques, pero esto mejor en otro artículo.

    Así que, viendo que alguien hace uso de direcciones IP de sistemas vulnerables para arrancar sus programas de ataque a sistemas VoIP, y que cuando estos dejan de funcionar, cambian de IP y siguen atacando… ¿para qué vamos a estar guardando en el firewall una lista sin fin de direcciones IP?

    Primero, el firewall de Linux (IPTables) es de lo mejorcito que hay (razón por la cual, la mayoría de los firewalls comerciales funcionan con Linux/FreeBSD) tiene muy poca carga, es estable como lo que más (filosofía Unix: muchos programas pequeños y cada uno hace su función a la perfección) pero cuenta con un pequeño defecto cuando se almacenan «decenas o cientos de miles» de direcciones IP (lo que ocurre con SIPCheck, Fail2Ban o APIBan): se vuelve lento para aceptar o rechazar peticiones, algo que puede cargar bastante el sistema e incluso provocar problemas en las comunicaciones.

    La primera solución era evidente: usar ipset

    Qué es ‘ipset’ y cómo funciona

    El pequeño ‘ipset‘ es una herramienta fácil y sencilla, complementaria de IPTables que maneja una lista desordenada de direcciones IP como si fuera una única regla del firewall. Esto es (para que lo entendamos mejor), que cuando nuestro sistema recibe un paquete y tiene que comprobar si puede o no dejarlo pasar, recorre TODO el firewall, lo cual, si tenemos 100.000 direcciones IP bloqueadas, por cada paquete que reciba, tendrá que hacer 100.000 comprobaciones antes de dejarlo pasar, una carga bestial para un sistema que maneja miles de paquetes UDP por segundo como es un servidor de comunicaciones VoIP.

    Por lo tanto, en lugar de una «lista ordenada» de reglas, ipset sirve para manejar un «conjunto» de IP, de manera que es 10.000 veces más rápido (utiliza una búsqueda hash) que preguntar: -«¿Está esta lista en el conjunto?» y buscar secuencialmente una IP en la lista ordenada, así que no es casualidad que cuando el número de direcciones IP a bloquear sea demasiado grande, es muchísimo mejor utilizar ipset, que IPTables.

    Al final ipset debe estar conectado a IPTables para que puedan ser bloqueadas las direcciones IP guardadas en «el conjunto».
    De manera que cuando un sistema nos envía un paquete, el firewall sigue recorriendo sus líneas, pero una línea en particular dice: «Consulta el conjunto listanegra» y esa línea pregunta al conjunto si está la IP en él. La respuesta de ejecutar esa consulta es tan rápida como una simple línea de IPTables, por lo que la mejora en velocidad es muy interesante.

    Gráfica de Netfilter donde observa que a medida que crecen las reglas de IPTables, aumenta el tiempo que lleva procesarlas, mientras que con ipset, se mantiene casi constante.

    Cómo evitar los guisantes caídos en el fondo del congelador

    Tenemos el problema que comentábamos antes ¿hasta cuando vamos a bloquear una IP que nos atacó? ¿va a estar castigada para siempre? ¿hasta que hagamos un FLUSH y comencemos de nuevo? ¿no hay nada más manejable? La respuesta a esto sigue siendo la misma: ipset.

    Además, ipset tiene una funcionalidad muy interesante y es que se pueden poner tiempos de expiración a las reglas (borrarlas automáticamente al cabo de X segundos) por lo que si baneamos una IP, podemos dejar a ipset que la saque de la lista negra al cabo de 30 minutos, 6 horas o 30 días (o por poner una cantidad de tiempo en la que pensamos que no nos volverá a atacar), de esta manera, el número de registros se mantendrá automáticamente controlado y si vuelven a atacarnos, volverán a ser baneados otro buen tiempo.

    No queremos direcciones IP permanentemente bloqueadas… al cabo de un tiempo ya no vamos a recibir ataques de ahí pero siempre estará consumiendo ciclos de CPU al comparar cada paquete con esa regla. Vale que con ipset hemos reducido al máximo este consumo, pero aún así, ¿realmente es necesaria una cadena perpetua a una pobre IP por haber sido vulnerable una vez? (no es una pregunta filosófica, moralista ni política…)

    Los atacantes son inteligentes, no importa si bloqueamos con IPTables, con ipset o con NFTSet, ganan mucho si consiguen lo que quieren, así que nunca hay que subestimarlos: prueban con una IP, que no lo consiguen, prueban con otra y así hasta que se dan por vencidos… luego probarán otras cosas: prueban contraseñas genéricas, contraseñas robadas de otros lugares, combinaciones de valores (por si bloqueásemos el UserAgent, o permitiésemos llamadas con un prefijo «secreto») ya sabéis que «la técnica de ocultación, realmente es una vulnerabilidad retardada en el tiempo«.

    Ahora vamos con la práctica

    Lo primero que tenemos que hacer es lo mismo que cuando jugamos con un firewall: Jamás hacer pruebas en un sistema en producción, puede parecer evidente, pero os sorprendería la de routers de Facebook que se han quedado aislados por hacer pruebas donde no debían. 😛

    Ahora sí, lo primero que tenemos que hacer es instalar ipset con nuestro gestor de paquetes: apt install ipset o bien yum install ipset, una vez esté instalado, ya podemos empezar a hacer pruebas:

    1.- Creamos un conjunto de IPs al que vamos a llamar: listanegra

    # Si queremos crear un conjunto con un timeout máximo de 1 hora
    ipset create listanegra hash:ip timeout 3600
    # Si no queremos que tenga timeout, basta con no ponérselo.
    # ipset create listanegra hash:ip

    2.- Una vez creado el «conjunto», podemos ver todos los conjuntos que tenemos:

    ipset list

    3.- A continuación, enlazamos el conjunto «listanegra» con nuestro iptables:

    # Para dar de alta el conjunto 'listanegra' en el iptables:
    iptables -I INPUT -m set --match-set listanegra src -j DROP
    # Siempre podemos eliminar el conjunto del iptables con:
    # iptables -D INPUT -m set --match-set listanegra src -j DROP

    4.- Por último, tenemos que añadir las direcciones IP al conjunto mediante el propio comando ipset:

    ipset add listanegra 248.248.248.247 timeout 30
    ipset add listanegra 248.248.248.248 timeout 20
    ipset add listanegra 248.248.248.249 timeout 10

    La primera IP será eliminada en 30 segundos, la segunda en 20 y la tercera en 10.
    Si no se le define un «timeout», utilizará el timeout general que se puso al crear el conjunto: 3600.

    5.- Recuerda que para borrar manualmente una IP del conjunto:

    ipset del listanegra 248.248.248.247

    y de esta manera, hemos visto cómo podemos banear de forma automática a cientos de miles de direcciones IP sin preocuparnos de eliminarlas manualmente.

    En nuestro firewall, tan sólo aparecerá una línea indicando que tiene que «dropear» aquellas direcciones del conjunto ‘listanegra’

    iptables -L -n
    
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    DROP       all  --  0.0.0.0/0            0.0.0.0/0            match-set listanegra src
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    
    

    Cómo hacer persistente la lista negra en caso de reinicio

    Si reiniciamos el sistema, todo se borra, así que lo suyo sería almacenarla y restaurarla cuando reiniciemos, así que vamos a modificar el script de ipset de systemd:

    # Modifícalo en lo que consideres necesario
    [Unit]
    Description=ipset persistancy service
    DefaultDependencies=no
    Requires=netfilter-persistent.service
    Requires=ufw.service
    Before=network.target
    Before=netfilter-persistent.service
    Before=ufw.service
    ConditionFileNotEmpty=/etc/ipsets.conf
     
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/sbin/ipset restore -f -! /etc/ipsets.conf
     
    # save on service stop, system shutdown etc.
    ExecStop=/sbin/ipset save listanegra -f /etc/ipsets.conf
     
    [Install]
    WantedBy=multi-user.target
     
    RequiredBy=netfilter-persistent.service
    RequiredBy=ufw.service

    También estaría bien meter la siguiente línea en el crontab para que periódicamente haga una copia de seguridad de las IPs que tenemos baneadas… aunque esto tampoco es tan vital. 🙂

    /sbin/ipset save listanegra -f /etc/ipsets.conf

    Y con esto, ya nos tocará buscar la forma de añadir de forma automática las direcciones IP al conjunto, bien mediante un sipcheck modificado, bien mediante un script automatizado que busque intentos de registro fallidos, o de alguna otra forma. ¿se te ocurre alguna forma de ejecutar un comando para añadir direcciones IP al conjunto de ipset cuando se recibe un ataque a Asterisk, Kamailio o a otro servicio? Dínoslo en los comentarios, que estamos en las puertas de navidad y puede que si te portas bien, te traigan regalitos muy pronto. 😉

  • Vulnerabilidad de Mitel VoIP es utilizada para desplegar un ransomware

    Vulnerabilidad de Mitel VoIP es utilizada para desplegar un ransomware

    Ransomware attack in mitel voip systems

    El pasado mes de abril se anunció una vulnerabilidad de tipo «zero day» en el sistema de comunicaciones VoIP de Mitel (CVE-2022-29499) en la que, a través de una petición HTTP se conseguía la ejecución de código remoto mediante la obtención de comandos falsos de la infraestructura controlada por el atacante.

    Obviamente, siempre que se ejecuta código remoto sin comprobar hay alguien que lo aprovecha para instalar software no demasiado legal como es un ransomware.

    El descubrimiento fue realizado por una empresa de ciberseguridad llamada Crowdstrike que rápidamente informó a la empresa Mitel quien a su vez ha desarrollado un parche para corregir este fallo, no obstante, si hay empresas que no disponen de un mantenimiento actualizado y no tiene acceso a estas mejoras, están literalmente en peligro.

    Más información: https://www.crowdstrike.com/blog/novel-exploit-detected-in-mitel-voip-appliance/

  • Por qué la voz humana ya no sirve para identificar a alguien

    Por qué la voz humana ya no sirve para identificar a alguien

    Hace unos años dí una conferencia en el VoIP2DAY sobre el uso de la Inteligencia Artificial en el campo de la VoIP en el que hablaba que existen bancos (HSBC por poner un ejemplo) que comprueba durante una llamada, si la persona con la que hablamos es realmente quien dice ser, aprovechando un análisis de la voz telefónica (Voice ID Fingerprinting).

    Esto hoy día ya no es una aplicación válida, ya que alguien le ha dado dos vueltas de tuerca a esto de la Inteligencia Artificial y ha conseguido que, aprovechando una conversación telefónica de 5 segundos, poder generar casi en tiempo real un modificador de audio para cambiar la voz de un TTS de forma que tenga exáctamente el mismo tono y el mismo timbre de voz que en la grabación de 5 segundos. Esto es, cualquiera con esa aplicación podría generar una conversación con nuestra voz y confundir y poder hacerse pasar por una persona.

    Hay soluciones comerciales que ya hacen esto y que nos permite generar locuciones con la voz que queramos (incluso con una propia) por lo que si necesitamos generar nuevas locuciones para nuestro sistema, aquí tendríamos todo lo necesario.

    No obstante, la aplicación «Real Time Voice Cloning» junto con toda la documentación de la tesis está disponible desde la página web del proyecto: https://github.com/CorentinJ/Real-Time-Voice-Cloning y un vídeo demostrativo de cómo funciona.

    Así que, si tenéis un rato aburrido, os recomiendo que lo probéis porque es una herramienta tan útil como curiosa para frikear un buen rato.

  • InstantByte ofrece webinars, charlas y talleres sobre videovigilancia

    InstantByte ofrece webinars, charlas y talleres sobre videovigilancia

    Pese a que ya se empiezan a realizar algunos eventos profesionales muy concretos y muy puntuales, guardando las distancias, con medidas y todas las precauciones del mundo para evitar contagios y brotes por seguridad y responsabilidad, llevamos más de un año celebrando eventos virtuales.

    También acabamos de recibir la invitación para finales de octubre de un evento híbrido: la ClueCon 2021, que se celebrará del 25 al 29 de octubre, simultáneamente en el InterContinental Hotel Chicago y On-Line y que ya está todo disponible para registrarse

    A falta de eventos, nuestros amigos de InstantByte han decidido dedicar el mes de Abril al tema de la videovigilancia bajo el lema: En abril, ojos mil. con charlas, webinars, talleres y ofertas semanales para ayudar a implantar este tipo de soluciones.

    El calendario de los talleres y sus webinars son:

    • 9 de Abril a las 10:00 : Primeros pasos para un proyecto de videovigilancia
      Webinar sobre cómo afrontar desde 0 un proyecto de videovigilancia. (registro)
    • 15 de Abril a las 10:00 : Webinar sobre como debería ser servicio de videovigilancia para particulares y comercios que incluye la cámara y los planes de almacenamiento. (registro)
    • 16 de Abril a las 10:00 : Configuración de las distintas soluciones de videovigilancia
      Webinar/taller sobre cómo configurar las cámaras: Hikvision, Dahua, Unividew y Hilook (registro)
    • 23 de Abril a las 10:00 : Funciones de Inteligencia Artificial en los sistemas de videovigilancia.
      En este webinar veremos diferentes soluciones de videovigilancia con sistemas de Inteligencia Artificial: Reconocimiento facial, Lector de matrículas, Imágenes térmicas y Detección de movimiento. (registro)
    • 29 de Abril a las 10:00 : Soluciones de Videovigilancia para un hogar inteligente de Ezviz
      Webinar, impartido por María Simón, donde se verán qué soluciones de videovigilancia se pueden introducir en un hogar inteligente de la marca Ezviz, desde cámaras WiFi con audio bidireccional, hasta purificadores de aire, pasando por mirillas inteligentes y videoporteros. (registro)
    • 30 de Abril a las 10:00 : Control de Acceso y Presencia: Puesta en marcha y configuración
      Cómo poner en marcha diferentes dispositivos de control de acceso y presencia, además de la configuración de los mismos en base a los requerimientos de cada empresa: Hikvision y Dahua (registro)

    Toda la información sobre estos webinars la podéis encontrar en su página web:
    https://www.instantbyte.com/enmarcador.php?page=news&id=1592

  • Autentificación en dos pasos en Debian 10

    Autentificación en dos pasos en Debian 10

    Siempre he sido de la opinión que no hay que ser un paranoico de la seguridad, simplemente intentar que todo lo que se hace debe ser lo más seguro posible: «La seguridad no es un lema, es una forma de vida» y por esta razón, cuando vi el siguiente gráfico de tiempos que tardaría una máquina en conseguir una contraseña, me entró la curiosidad sobre qué se puede hacer normalmente para evitarlo.

    Visto lo visto, con las GPUs que hay hoy día y la potencia de cálculo que tienen los sistemas cloud comerciales, crear una contraseña de menos de 12 caracteres es básicamente instalar una bomba de relojería a la espera de que venga un bot con algo de tiempo y acceda a nuestros sistemas.

    Uno puede pensar en contraseñas largas y complejas con más de 15 caracteres, mayúsculas, números, símbolos, alguna coma, un signo dólar y alguna Ñ, pero a la vista de la cantidad de contraseñas que hay que escribir, al final lo mejor y más cómo para evitar repetir la misma contraseña, es utilizar una herramienta que sirva como «llavero» y que contenga las contraseñas que utilizamos, tan grande y complejas como queramos, de manera que no haya que recordarlas.

    Herramientas llavero

    Suelo utilizar la herramienta KeePass que permite crear varias bases de datos cifradas con las contraseñas que uso para diferentes motivos (empresa, servidores, personal, clientes, loqueseteocurra, etc.) y tras una contraseña maestra para cada base de datos, poder acceder a toda la lista de accesos con total seguridad. Esas bases de datos están en archivos cifrados dentro del sistema de ficheros local, por lo que la seguridad es mucho mejor que tenerlo en un Post-it en el monitor, en una libreta de papel o en una hoja Excel (ya que ésta última no suele ir cifrada).

    El problema de este tipo de herramientas es que, cada vez que hace falta acceder a un sitio, hay que abrir la aplicación, meter la contraseña, buscar el acceso que necesitas y gracias al «copy+paste«, poder pegar la contraseña y así, autentificarte de forma segura. No es la fórmula más práctica. (aunque luego explicaré cómo soluciono esto).

    2 contraseñas: la segunda, varía con el tiempo

    Yubikey con las llaves de casa

    No obstante, investigando un poco cómo lo harán en las grandes empresas de seguridad, recuerdo el caso de un amigo que trabaja en Google y que, cuando entró, en el pack de bienvenida, le entregaron además de un montón de merchandising, un portátil y algunas cosas más, una Yubikey: una mochila USB que sirve como sistema de dos pasos automático.

    Introduces el login, la contraseña y cuando se comprueba que es correcto, además te pide un código que, en lugar de enviarte un código al móvil, sólo tienes que «tocar» la Yubikey y ésta rellena la parte del código de segundo paso. Si alguien te roba la contraseña no podrá hacer nada, ya que no tendrá tu móvil o la mochila USB para saltarse el segundo paso, y la Yubikey suele ir como una llave más del llavero, por lo que siempre la llevas contigo, igual que tus llaves de casa.

    El sistema de autentificación de dos pasos siempre me ha parecido muy interesante desde que hace muchos años (hace más de 13 años) un amigo belga me enseñaba cómo utilizaba la autentificación en dos pasos para sacar dinero de su banco. Un aparato especial le generaba un código que tenía que meter como «segundo pin de seguridad«.

    Ahora se ha visto que el hecho de enviar un SMS al móvil no es lo más seguro, ya que hay quien incluso te clona la tarjeta SIM para poder recibir el mensaje y hacerte verdaderos desfalcos (lo que significa que ya tienen tu usuario y contraseña y sólo les para esa doble autentificación), así que me puse a mirar el sistema de Google para el tema de generar el código necesario.

    A falta de tener una Yubikey de esas para hacer pruebas, tengo un móvil con el que generar los códigos de segunda autentificación, y una lista interesante de servidores personales y máquinas a las que accedo normalmente por SSH, voy a ver cómo dotarla de algo más de seguridad.

    Autentificación de dos pasos para acceder por SSH al servidor

    Para ello, se me ocurrió usar la doble autentificación (o autenticación, que es lo mismo) en el acceso SSH, lo único que, en lugar de enviar un SMS, voy a utilizar una aplicación en el móvil que genere un código de seguridad válido gracias a un token.

    Para esto existen dos aplicaciones comunes: GoogleAuthentication y FreeOTP (las dos funcionan igual, aunque utilizaré FreeOTP por ser software libre y darme algo más de confianza).

    Lo que vamos a hacer será configurar el sistema de acceso por SSH, de manera que una vez introduzca la contraseña, se añada una verificación extra (de ahí lo de «los dos pasos») que me solicite un número variable que sólo tendré yo gracias a la aplicación FreeOTP.

    1. Instalación de los paquetes necesarios

    Para configurar esto en una Debian, lo primero es instalar un paquete básico:

    ~$ sudo apt update
    ~$
    sudo apt install libpam-google-authenticator

    Este «libpam-google-authenticator» es uno de los módulos del sistema PAM (Pluggable Authentication Modules) de manera que se ejecute después de la autentificación estándar para poder permitir el acceso.

    2. Configuración del SSH y del PAM

    Acto seguido, vamos a editar el archivo de configuración del demonio SSH /etc/ssh/sshd_config para decirle que queremos utilizar el sistema de módulos PAM.
    Para ello, nos aseguramos que tenemos estas opciones habilitadas:

    UsePAM yes
    ChallengeResponseAuthentication yes

    Nada más asegurarnos de esto, editamos el archivo: /etc/pam.d/common-auth donde añadiremos las siguientes líneas:

    # Autentificacion OTP mediante Google Authenticator
    auth required pam_google_authenticator.so

    3. Instalar la aplicación FreeOTP o GoogleAuthenticate.

    En mi caso, utilizo FreeOTP que es software libre y se encuentra tanto en Google Play como en la App Store.

    Una vez instalado, y ejecutado, hay que dar permisos para utilizar la cámara, ya que tendremos que escanear un código QR que nos saldrá por pantalla con el «token» del servidor al que nos vamos a conectar y que se utilizará para generar las contraseñas en función del tiempo.

    Ahora bien, nos logueamos por SSH con el usuario que queramos y ejecutamos el comando:

    ~$ google-authenticator
    Do you want authentication tokens to be time-based (y/n) y

    Tras esto, nos saldrá por pantalla un código QR que tendremos que escanear desde nuestra aplicación.

    Le decimos que «yes» a todo… y guardamos bajo llave los códigos de «emergencia» por si no tenemos nuestro móvil a mano para generar la clave. (Estos códigos sólo se pueden utilizar una vez cada uno, por lo que hay que guardarlos muy bien o volver a generar el token)

    4. Reiniciar el servidor para aplicar cambios

    Vale, nuestro usuario ya tiene habilitado el token de seguridad, ahora lo último que tenemos que hacer es reiniciar el servidor SSH para que utilice el sistema PAM con el módulo que hemos añadido.

    ~$ systemctl ssh restart

    5. Comprobamos el acceso

    Ahora que ya está todo funcionando, volvemos a acceder con el mismo usuario que hemos activado el token y veremos que una vez introducida la contraseña, nos pedirá un código.

    En este momento, habrá que buscar el código en la aplicación.

    Captura del FreeOTP

    Tendremos 30 segundos para introducir el código tras lo cual, tendremos acceso al sistema.

    En resumen

    Vale, lo primero… muy intuitivo no es, y rápido tampoco, pero si es más seguro que un acceso normal.

    El hecho de tener que acceder a una aplicación del móvil para poder acceder a nuestra cuenta, no es algo que sea muy práctico si nos pasamos el día accediendo a ella, de ahí la utilidad de la Yubikey. Para este tipo de cosas está la autorización de llave pública y de esta manera evitamos tener que meter contraseñas (incluso utilizando la autentificación que hemos visto) y accedemos rápidamente al sistema que queramos validando directamente la clave de nuestro ordenador con el servidor.

    Por lo que, para sistemas en los que necesitemos un extra de seguridad, seguramente sea una buena fórmula.

    Si aplicamos este sistema (OTP – One-Time-Password) a otros servicios, posiblemente aumentaremos bastante la seguridad. Como decía al principio, la idea no es ser un paranoico de la seguridad, si no aprender a ser seguros en todo lo que hagamos.

  • Si utilizas PJSIP, probablemente deberías actualizar

    Si utilizas PJSIP, probablemente deberías actualizar

    Hace algún tiempo avisamos que Sinologic no publicaría noticias relacionadas con seguridad. Principalmente porque uno debe ser responsable de estar al día de todo lo que surge en cuanto a vulnerabilidades, fallos de seguridad, etc. Por este motivo, todos deberíamos tener en nuestras pantallas un sistema tipo «telex» que nos informe en tiempo real de los problemas que ocurren.

    No obstante, y por diversos motivos y proyectos personales, estoy un poco más en el día a día de ciertos temas relacionados con la seguridad, el fraude telefónico y cómo evitarlos, por lo que acabo de ver una vulnerabilidad que merece la pena comentar aquí:

    Una vulnerabilidad de PJSIP en un paquete INVITE malintencionado podría provocar un crash de Asterisk.

    https://downloads.asterisk.org/pub/security/AST-2020-001.html

    Concretamente, este repositorio lo explica con un ejemplo para probarlo:

    https://github.com/EnableSecurity/advisories/tree/master/ES2020-02-asterisk-tcp-invite-crash

    Este bug ha sido resuelto en las versiones: 13.37.1, 16.14.1, 17.8.1, y 18.0.1

    Así que si tenéis una versión anterior y utilizáis PJSIP como el 33% de los usuarios encuestados de Sinologic, os recomendamos actualizar a la siguiente versión cuanto antes.

  • Wahay: un sistema de multiconferencia descentralizado y seguro

    Wahay: un sistema de multiconferencia descentralizado y seguro

    Hace poco escuché hablar sobre Wahay, un proyecto de software libre que acaba de nacer y que permite a varios usuarios conectarse entre sí y poder hablar en una sala común de forma descentralizada y segura.

    La mayoría de sistemas VoIP utilizan un sistema centralizado que aporta determinadas ventajas (gestión, control, identificación, grabación, etc.) es por esto por lo que la mayoría de los sistemas de centralitas incorporan una plataforma de multiconferencia que permita realizar reuniones en grupo.

    Solución habitual de multiconferencia segura

    No obstante, hay otro usuarios que pueden preferir algo menos gestionado y menos centralizado, razón por la cual existen otras soluciones que se adaptan más a lo que ellos necesitan. A mí así en bruto se me ocurre la solución WebRTC que transmite los streams entre los usuarios en lugar de a un servidor central, aunque en este caso también se sigue exigiendo la existencia de un servidor central.

    Para estos usuarios está orientado este proyecto, aquellos que requieren una solución P2P real (sin pseudonodos ni servidores centrales) además de un extra de seguridad ya que, Wahay pasa toda la información a través de pasarelas de Tor para anonimizar la conexión.

    Solución que propone Wahay

    Wahay se basa en Mumble, una solución libre de multiconferencia similar a TeamSpeak, que es un sistema muy utilizado principalmente por jugadores para hablar entre ellos durante una partida, aunque no es muy utilizado en el entorno empresarial. No obstante, esta solución y el hecho de que esté detrás de Tor me hace pensar que está orientado a otro tipo de soluciones que buscan la seguridad y privacidad ante conversaciones algo más «delicadas».

    El proyecto lo pueden encontrar en la web de github:
    https://github.com/digitalautonomy/wahay

    Más información, en su página web:
    https://wahay.org/

  • c0r0n4con: El congreso de cyberseguridad que recauda fondos para luchar contra el COVID19

    c0r0n4con: El congreso de cyberseguridad que recauda fondos para luchar contra el COVID19

    Es evidente que esta pandemia global que nos afecta a todos, ha tirado por tierra muchos eventos y actos que se habían planificado en estas fechas. Esto ha hecho que, en el mejor de los casos, se pospongan a una fecha posterior (Julio, Agosto, Septiembre…) pero en otros casos, que sean cancelados debido a la dificultad para prever cuándo se podría celebrar nuevamente.

    Del 9 al 12 de abril vía streaming

    Ante esto, aprovechando los medios técnicos y la capacidad organizativa de muchas personas, se ha conseguido planificar y preparar la C0r0n4Con, un evento de cyber-seguridad de carácter solidario que planea reunir a más de 100 profesionales y entusiastas de la seguridad informática (ver lista de ponentes) y que se celebrará en riguroso directo vía streaming desde el 9 al 12 de Abril aprovechando estas fechas en la que hay gente que descansa debido a los festivos propios de los días de Semana Santa.

    Se trata de un evento internacional que contará con la colaboración de hackers españoles, colombianos, argentinos, brasileños y chilenos que, ofreciendo charlas, buscan recaudar fondos para luchar contra la epidemia que asola nuestros países y que se está cebando con colectivos desfavorecidos que en estos momentos necesitan ser ayudados por instituciones como Cruz Roja.

    Más de 3000 horas de charlas sobre cyber-seguridad

    El evento se retransmitirá a través de internet, desplegando ​más de 3000 horas de contenidos (ver programa) y tendrá acceso gratuito para todas aquellas personas que quieran asistir a las charlas y talleres.

    Se animará a que los asistentes donen fondos, que serán recogidos directamente por los medios dispuestos por Cruz Roja y mediante los cuales se pueda ampliar el proyecto RESPONDE frente al Covid-19 que está desarrollando la entidad.

    Proyecto Plan Cruz Roja RESPONDE frente al COVID-19

    Desde el comienzo de esta crisis Cruz Roja aseguró el mantenimiento de sus programas esenciales e intensificó su actividad con las personas más vulnerables ante el COVID19.

    En el marco del Estado de Alarma Nacional, lanzando el Plan Cruz Roja RESPONDE frente al COVID19 para las personas en situación de vulnerabilidad y población general, en coordinación con todas las administraciones públicas. Un plan concreto de actuación y respuesta para los próximos dos meses y que pretende alcanzar a más de 1.350.000 personas con un presupuesto estimado de 11.000.000€, al que podrá sumarse a todo aquel que quiera contribuir.

    El plan pretende movilizar a más de 40.000 personas voluntarias que materializan las respuestas previstas en todo el Estado a través de sus más de 1.400 puntos de atención. Casi un millón de personas recibirán atención y acompañamiento telefónico, 25.000 familias recibirán bienes básicos, 16.000 personas serán apoyadas en materia de empleo y 3.000 personas sin hogar tendrán un lugar para dormir

    Captación de fondos

    Se puede colaborar con el proyecto utilizando las siguientes páginas web:

    También realizando un ingreso en las cuentas bancarias dispuestas por Cruz Roja España.

    Más información

    Más información en la web: https://c0r0n4con.com/

    y también en twitter: @C0r0n4CON

  • SIPCheck 3 : La herramienta que asegura tu Asterisk ante ataques externos

    SIPCheck 3 : La herramienta que asegura tu Asterisk ante ataques externos

    Por mucho que pase el tiempo, y más ahora que el número de sistemas VoIP en la nube (o en remoto) aumenta, el número de ataques también aumenta considerablemente y es entonces cuando se hace necesario el uso de herramientas que nos ofrezcan la seguridad que necesitamos para poder estar seguro que nuestro sistema está controlado y no vamos a ser víctimas de un ataque mientras no estamos pendientes. Esta es la función de SIPCHECK, una herramienta que se conecta a Asterisk y vigila de accesos ilegítimos de direcciones IP desconocidas manteniendo nuestro Firewall actualizado con las direcciones IP de los atacantes.

    En 2010, durante una comida en el curso de Asterisk Advanced de Bilbao, surgió una idea muy simple pero efectiva. Uno de los principales problemas que tenían muchos de ellos era la inseguridad que producía recibir ataques en los Asterisk que debían estar expuestos por Internet.

    Ni que decir tiene que surgieron muchas ideas: utilizar VPN, cambiar a puertos no estándar, etc. y tras la exposición de los problemas y las posibles soluciones, una de ellas se presentó tan sencilla como fácil de implementar: Generar una aplicación que analizara el log de Asterisk y cuando detectara errores de autentificación, baneara automáticamente esa IP compartiendo dicha IP con el resto de la comunidad.

    Esto fue una gran idea y así se hizo en la versión inicial de SIPCheck. Cuando el sipcheck detectaba un ataque, obtenía la dirección IP y la compartía con el resto de la comunidad para que todos pudieran tomar nota y rechazarla en los firewalls.

    El resultado de esto fue algo más inesperado de lo que pensábamos: miles de direcciones IP baneadas (incluso algunas legítimas) y firewalls con tablas inmensas que incluían direcciones IP que, en algún momento del pasado atacaron a alguien. Estaba claro que tener un firewall con decenas de miles de direcciones IP que, en algún momento pudieron ser víctimas de un ataque y sirvieran de proxy para otro atacante no era la solución, ni siquiera para tenerlo en una tabla ACL de «IPs denegadas» ya que el 90% de esas direcciones IP no van a volver a atacarnos. La solución a esto, sin duda, era otra.

    Ante esto, sucedieron varias modificaciones (añadir IPs con un registro de fecha y hora para que expiraran pasado un tiempo, introducir únicamente aquellas direcciones IP comunes que hayan sido baneadas por varios usuarios distintos, etc.) y los resultados fueron interesantes, aunque seguía sin obtenerse el resultado esperado.

    Para ello, en 2014 se publicó SIPCheck 2, una versión nueva que incluía un registro sobre las direcciones IP baneadas en una web local que se podía consultar y añadir o eliminar aquellas IPs en tiempo real. Se eliminó la parte comunitaria ya que entendimos que si a un usuario de Japón le ataca una IP, no tiene por qué atacar a otro de Nápoles y, de esta manera se reducía el número de direcciones IP en el firewall. Se añadió soporte IPSet que mejora el funcionamiento de grandes listas de direcciones IP baneadas y aún así, la lista seguía sin ser efectiva (seguían apareciendo nuevas direcciones y seguíamos teniendo en el firewall direcciones que ya no se usaban). Al menos con SIPCheck v.2 podíamos eliminar manualmente aquellas direcciones antiguas.

    Es en 2019 que, tras algunos cambios y nuevos proyectos surgió la idea de renovar el SIPCheck para paliar algunos defectos del SIPCheck inicial (que todavía hay gente utilizándolo) así como para reducir la carga al mínimo (muy inferior al de SIPcheck 2 y por supuesto al de Fail2Ban), empezamos a desarrollar la tercera versión nuevamente pero con todas las mejoras.

    SIPCheck v.3

    Funcionamiento

    Esta versión de SIPCheck utiliza dos mecanismos diferentes para controlar los eventos:
    Mánager de Asterisk: (el 99% de los ataques) Con esto se controlan los intentos de login erroneos, los correctos y gracias a esto evitamos sobrecargar el sistema cuando el Asterisk es muy grande y genera mucha información en el log.
    Archivo /var/log/asterisk/messages: (el 1% restante) Con esto se controlan los INVITES sin autentificar y que no aparecen en el manager. Está claro que con el parámetro ‘allowguest = no‘ ni siquiera aparecerán estos INVITES, pero de alguna manera había que controlar este caso.

    El funcionamiento de esta versión se basa en la gestión automática de 3 listas:

    • Lista blanca : con direcciones IP confiables y que no deben estar baneadas aunque se reciban peticiones de registro con contraseña erronea. (Esta lista blanca la formarán aquellos que incluyamos en el archivo ‘whitelist.txt’ y aquellas direcciones IP que se hayan registrado correctamente.)
    • Lista de sospechosos : con direcciones IP procedentes de algunos ataques pero no los suficientes como para considerarlos ataques. Cuando se recibe un intento de registro con una contraseña inválida, se almacena aquí hasta que el número de intentos supere un número determinado /y configurable/. Si un sospechoso deja de enviar los intentos, el sistema lo eliminará de la lista de sospechosos pasado un tiempo.
    • Lista negra : con direcciones IP oficialmente considerados como ataques. Estos son auténticos atacantes y cuando están en la lista negra, el SIPCheck también lo incluye en el firewall impidiendo volver a acceder al sistema, por lo que el sistema es autónomo y no tenemos que preocuparnos. En esta lista permanecerá un tiempo configurable tras el cual se eliminarán tanto de la lista negra como del firewall, manteniendo a este limpio de atacantes antiguos.

    Cuando SIPCheck detecte un ataque procedente de una IP, lo añadirá a la Lista de sospechosos y permitirá seguir recibiendo tráfico. Si recibe varias peticiones idénticas entonces pasará a considerarlo como un ataque oficial y lo añadirá a la lista negra y al firewall impidiendo más tráfico procedente de esa IP.

    Si una IP se ha registrado correctamente en nuestro sistema, entonces se considera que esa IP pertenece a alguien «confiable» por lo tanto lo añadiremos a la Lista Blanca durante un tiempo evitando considerarlo atacante durante el tiempo en el que esa IP esté en la lista blanca. Esto impedirá banear una dirección IP de una empresa únicamente porque un teléfono tenga una contraseña errónea.

    Todos los valores son configurables: número de contraseñas erroneas, tiempos en cada una de las listas, etc.

    Se tiene incluso un archivo ‘whitelist.txt‘ donde podremos indicar las direcciones IP que jamás deberán serán baneadas por el SIPCheck (operadores, IPs de gestión, etc.)

    Objetivos

    El objetivo de esta aplicación son varios:

    • Orientado a sistemas de alta carga: Probándolo en sistemas de alta carga, el consumo se disparaba, por lo que había que buscar una forma alternativa de minimizarla. Para ello se utiliza principalmente el ‘manager’ de Asterisk y para algunos casos puntuales el messages como complemento y evitar la sobrecarga de analizar cada línea del log de Asterisk.
    • Evitar falsos positivos: En versiones anteriores, si un teléfono enviaba varias veces una contraseña erronea, el SIPCheck baneaba la IP entera. En esta versión, si una IP es registrada correctamente, pasa a una lista blanca que impide activar el protocolo de ataque en dicha IP compartida por varios teléfonos, seguramente de la misma empresa. De esta manera evitamos que un teléfono mal registrado en una empresa banee la IP del resto de la empresa.
    • Persistente en el tiempo: Si se reinicia la aplicación, todos los datos y direcciones IP de todas las listas se mantienen y se vuelven a banear en firewall (si no lo estaban ya).
    • Configurable: Se ha añadido un archivo sipcheck.conf donde poder configurar prácticamente cualquier parámetro que permita personalizar la aplicación.

    La instalación es bastante sencilla ya que tan solo hay que seguir las 4 instrucciones del README para instalarla.

    Y para comprobar qué está haciendo, todo queda registrado en un archivo de log en /var/log/sipcheck.log

    Con esta aplicación, en varios Asterisk expuestos en Internet a modo de honeypot sin ningún otro tipo de protección, el sistema ha detectado y bloqueado cientos de ataques y lo mejor es que mantiene un firewall bastante reducido ya que las direcciones IP desde donde se producen los ataques dejan de atacar cuando empiezan a ser bloqueadas. Gracias a estos honeypots hemos aprendido muchas cosas nuevas sobre estos ataques que nos permitirán seguir mejorando el SIPCheck para conseguir detectar nuevas formas de ataques.

    Si tienes comentarios o quieres dejarnos un feedback sobre esta aplicación puedes escribirnos un issue en Github, un comentario en el canal Telegram de @sinologic o en el correo electrónico sipcheck@sinologic.net

    Para descarga y más información: https://github.com/sinologicnet/sipcheck

  • SIPPTS: Un conjunto de herramientas para ayudarnos con la seguridad de nuestro sistema VoIP

    SIPPTS: Un conjunto de herramientas para ayudarnos con la seguridad de nuestro sistema VoIP

    Nuestro gran colega @Pepelux acaba de publicar la versión 2.0.2 de SIPPTS, un set de herramientas libres para auditar la seguridad de nuestra infraestructura VoIP. Estas herramientas están disponible en su página de GitHub: https://github.com/Pepelux/sippts

    Las herramientas que forman el paquete SIPPTR son:

    • Sipscan un scanner para servicio SIP que puede comprobar varias IPs y rangos de puertos tanto UDP como TCP.
    • Sipexten para comprobar si existe una extensión en un servidor SIP, así como si necesita identificación o no.
    • Sipcracker un crackeador de contraseñas remotas capaz de probar contraseñas para muchos usuarios en distintas IPs y puertos.
    • Sipinvite comprueba si un servidor nos permite hacer llamadas sin autentificación, también si puede hacer llamadas salientes.
    • Sipsniff un simple pero útil sniffer SIP.
    • Sipspy un servidor SIP muy simple que nos permite ver las peticiones y respuestas recibidas.
    • SipDigestLeak Herramienta para explotar la vulnerabilidad SIP descubierta por Sandro Gauci que afecta a un gran número de hardware y software.

    Un kit muy completo y recomendable para hacer pruebas y revisar la seguridad. 😉