seguridad

  • Cómo generar un certificado SSL/TLS gratis con certbot

    Certbot es un cliente ACME automático y fácil de utilizar, que obtiene certificados SSL/TLS gratis para tu sitio Web, provistos por Let's Encrypt. Certbot fue desarrollado por la EFF (Electronic Frontier Foundation) como "cliente oficial" de la autoridad certificante de Let's Encrypt, pero también funciona con cualquier CA que soporte el protocolo ACME (Automated Certificate Management Environment).

    Certbot (anteriormente el cliente Let's Encrypt letsencrypt-auto) es el cliente recomendado por Let's Encrypt para emitir sus certificados, y opcionalmente auto-configurar HTTPS en tu servidor Web.

    Este artículo explica cómo emitir un certificado SSL/TLS gratuito de Let's Encrypt utilizando el cliente certbot utilizando el plugin webroot en Debian 7 (wheezy).

  • Cómo implementar un acceso SSH como root

    En este artículo voy a explicar cómo implementar un acceso como root (superusuario) a través de SSH cuando el servidor sshd no lo permite (está deshabilitada la opción PermitRootLogin):

    PermitRootLogin no
    

    Por seguridad, es lógico que todo servidor SSH impida el acceso como root. Sin embargo, es posible lograr implementar un acceso como root, lo cual puede simplificar el acceso para tareas administrativas o la copia de archivos a través de SFTP hacia directorios donde un usuario común no tiene acceso (por ejemplo, directorios de aplicaciones y servicios).

    Claro está que el mecanismo propuesto en este artículo es una configuración insegura, pero sirve a fines didácticos, para comprender que no basta con un simple PermitRootLogin no para impedir un acceso como root, sino que es posible evitar esta restrición con una simple configuración de sudo. Un ejemplo de cómo utilizar sudo con fines maliciosos.

  • Cómo instalar el agente de backup de Bacula en FreeBSD

    En el artículo anterior expliqué cómo montar un servidor de backup open source con Bacula en Debian. Ahora voy a demostrar los sencillos pasos para instalar el agente de backup en un servidor FreeBSD y lanzar un trabajo de backup desde el director.

  • Cómo instalar y configurar Bacula en Debian

    Este (extenso) artículo cubre la instalación, configuración y puesta en funcionamiento de todos los componentes de un servidor de backup Bacula sobre Debian con PostgreSQL. Además de una breve introducción de cada uno de sus componentes y funcionamiento.

  • Cómo loguear todo el correo saliente con UFW o iptables

    Sospechamos que posiblemente se esté enviando SPAM desde uno de nuestros servidores (tal vez desde un sitio Wordpress comprometido) y queremos monitorear y registrar (loguear en Spanglish) todo intento de conexión TCP saliente hacia puertos 25 (SMTP) y 587 (SMTPS). Para ello es posible recurrir a la capacidad de logueo de iptables (o UFW en Ubuntu y derivados), a través de reglas simples.

  • Cómo permitir que un servicio escuche peticiones en puertos bajos corriendo como usuario no privilegiado

    En sistemas Unix y derivados (Linux, *BSD, etc.) la implementación de TCP/IP considera especiales a los puertos debajo del 1024 (llamados "puertos privilegiados"), en el sentido de que a los usuarios no privilegiados no se les permite iniciar servicios o escuchar peticiones en los mismos. Los puertos TCP y UDP entre 1 y 1023 están reservados para procesos corriendo con privilegios de superusuario (es decir, como root). A aquellos procesos corriendo con un ID de usuario distinto de 0 no se les permite escuchar peticiones en dichos puertos (bind).

    Esta característica de seguridad es una especie de protección para los clientes en el sentido de que, si se conectan a un servicio escuchando en un puerto bajo, pueden estar seguros de que se trata de un servicio confiable (y no uno falso levantado por un impostor) ya que para ello debe haber sido autorizado por el administrador del servidor. Esta protección es importante, ya que en la mayoría de los servicios los clientes envían credenciales de autenticación. Si un usuario no privilegiado es capaz de recibir conexiones entrantes en puertos privilegiados, podría llegar a impersonar servicios y robar credenciales.

    Sin embargo, la implicancia que tiene esta protección (desde el lado servidor), es que todos los servicios deben correr como superusuario (root). Ante un bug o vulnerabilidad en cualquiera de los servicios, resulta comprometido todo el servidor, ya que se logra automáticamente el acceso como root.

    Lo que la mayoría de los servicios implementan para minimizar la superficie de ataque (por ejemplo Apache), consiste en iniciar primero un proceso mínimo corriendo como root (el cual abre el puerto bajo necesario para trabajar) para luego iniciar hijos corriendo con un usuario no privilegiado, los cuales se encargan de procesar las peticiones. De esta forma, ante una vulnerabilidad en el procesamiento, resulta comprometido un proceso corriendo como usuario no privilegiado.

    root@www:~# ps -C apache2 -o user,pid,time,stat,start,comm
    USER       PID     TIME STAT  STARTED COMMAND
    www-data  7681 00:00:00 S    10:32:04 apache2
    www-data  7808 00:00:00 S    10:36:53 apache2
    www-data  7812 00:00:00 S    10:36:54 apache2
    www-data  7819 00:00:00 S    10:37:01 apache2
    www-data  7832 00:00:00 S    10:37:32 apache2
    www-data  7833 00:00:00 S    10:37:33 apache2
    www-data  7846 00:00:00 S    10:38:13 apache2
    www-data  7849 00:00:00 S    10:38:35 apache2
    www-data  7851 00:00:00 S    10:38:39 apache2
    www-data  7852 00:00:00 S    10:38:39 apache2
    www-data  7853 00:00:00 S    10:38:40 apache2
    www-data  7854 00:00:00 S    10:38:40 apache2
    www-data  7857 00:00:00 S    10:38:59 apache2
    www-data  7871 00:00:00 S    10:39:01 apache2
    www-data  7872 00:00:00 S    10:39:01 apache2
    www-data  7873 00:00:00 S    10:39:01 apache2
    www-data  7874 00:00:00 S    10:39:01 apache2
    www-data  7877 00:00:00 S    10:39:02 apache2
    www-data  7879 00:00:00 S    10:39:02 apache2
    www-data  7881 00:00:00 S    10:39:02 apache2
    www-data  7883 00:00:00 S    10:39:02 apache2
    www-data  7885 00:00:00 S    10:39:07 apache2
    root     19377 00:07:40 Ss     May 28 apache2
    

    El proceso principal (el cual escucha en los puertos 80 y 443) corre como root, y sus hijos (los cuales se encargan de procesar las solicitudes) corren como el usuario no privilegiado "www-data" (o "apache" en Red Hat y derivados). Notar además, en las fechas de inicio (STARTED), que los procesos hijos pueden ser iniciados a demanda, e incluso "reciclados" cada determinado período de tiempo.

    Pero, ¿qué pasa si tenemos un servicio que requiere escuchar en un puerto bajo y no implementa esta separación de privilegios? Por ejemplo, alguna bazofia desarrollada en Java (mi experiencia dicta que los desarrolladores Java son los que menos idea tienen o menos se preocupan por la seguridad, a tono con dicha tecnología, por cierto). Lógicamente no queremos que dicho servicio tenga privilegios de root en nuestro servidor (si no es capaz de implementar una separación adecuada de privilegios, poco podemos esperar de su seguridad, confiabilidad y robustez en general). Ante estos casos afortunadamente existen diferentes técnicas que permiten implementar una correcta separación de privilegios, por fuera del servicio. En este artículo se presenta la herramienta authbind. Otra técnica conocida consiste en levantar el servicio en un puerto alto e implementar una redirección de tráfico con iptables (siempre que el servicio permita configurar su rango de puertos de trabajo).

  • Cómo permitir sudo

    Como agregar un usuario a la lista sudoers? Una simple pregunta que tiene una simple respuesta. Utilizar el comando "visudo".

  • Cómo permitir y denegar listado de directorios en Apache

    Este artículo explica cómo habilitar y deshabilitar el listado de directorios en un servidor Web Apache.

  • Cómo prevenir el hotlink de imágenes

    Revisando el tráfico de mi blog descubrí algunos gusanos que copiaron varios de mis artículos (notablemente mi artículo dedicado a OpenVPN) sin siquiera dejar un triste enlace, referencia al artículo original, o nombre del autor, violando claramente la licencia Creative Commons Attribution-ShareAlike 3.0 Unported con la que se publica el contenido de linuxito.com:

      "Reconocimiento — Debe reconocer adecuadamente la autoría, proporcionar un enlace a la licencia e indicar si se han realizado cambios. Puede hacerlo de cualquier manera razonable, pero no de una manera que sugiera que tiene el apoyo del licenciador o lo recibe por el uso que hace."

    En este artículo voy a explicar cómo impedir el hotlink de imágenes de forma correcta utilizando archivos .htaccess.

  • Cómo proteger el panel de administración de Joomla!

    Como muchos usuarios del CMS (Content Management System) Joomla! sabrán, no es posible cambiar la URL "/administrator" de acceso al Panel de Administración de Joomla!. El Panel de Administración es el back-end del sitio donde los administradores, redactores, editores, etc. ingresan para realizar sus tareas. Similar al "/wp-admin" de Wordpress. Debido a esto es el primer componente por donde los atacantes intentan penetrar sitios Joomla!, probando contraseñas de usuarios por defecto mediante ataques de fuerza bruta o diccionario.

    Más allá de que usemos contraseñas prácticamente irrompibles, el mayor problema de sufrir un ataque de fuerza bruta o diccionario, es que puede transformarse rápidamente en un ataque de denegación de servicio (DoS) provocado por un alto consumo de ancho de banda y/o CPU en el servidor víctima.

  • Cómo recuperar la contraseña de Administrador de Windows

    Este artículo explica cómo recuperar la contraseña del usuario Administrador de Windows Server, en caso de haberla olvidado o perdido.

  • Cómo restaurar un backup desde la consola de Bacula

    En este artículo voy a demostrar cómo restaurar la copia de respaldo más fresca de un cliente, previa a una fecha específica, desde la consola de Bacula.

  • Cómo saber qué protocolo y suite de cifrado SSL/TLS negocian los clientes HTTPS

    Un pregunta de un lector en la entrada Hardening de SSL/TLS en servidores HTTPS me llevó a buscar y probar una solución para este problema: cómo predecir el impacto, en los clientes de un sitio Web, al deshabilitar un protocolo inseguro dentro de la configuración de suites de cifrado de TLS.

    Este lector en particular, necesitaba saber si alguno de sus clientes se verían afectados al deshabilitar el algoritmo criptográfico de encriptación de flujo RC4, el cual es inseguro (vulnerable a un amplio abanico de ataques y ya sin soporte por los principales navegadores). La solución consiste en lograr que el servidor Web registre en el log de accesos el protocolo y suite de cifrado elegidas durante la negociación (handshake) para cada acceso. De esta forma es posible, luego de un tiempo, determinar si existen cliente que aún utilizan el protocolo/suite de cifrado que deseamos deshabilitar (para mejorar la seguridad).

  • Cómo setear permisos de forma selectiva en GNU/Linux

    En GNU/Linux, cuando se setean permisos sobre archivos utilizando la notación octal, se ven afectados todos los conjuntos de usuarios del sistema (user, group, others). En cambio, cuando se utiliza el modo simbólico (ugoa: user, group, others, all), es posible cambiar permisos de forma selectiva, sin afectar al resto de los conjuntos de usuarios.

  • Cómo verificar si una dirección IP figura en listas negras de spam

    Una lista negra (en inglés blacklist) es un mecanismo de control de acceso que se utiliza para impedir o denegar el acceso a un recurso.

    Los servidores de correo electrónico poseen mecanismos de filtrado de spam basados en listas negras para desechar todo el correo proveniente de direcciones sospechosas o maliciosas. Esto se hace para mejorar la experiencia del usuario, optimizar el uso de recursos y prevenir brechas de seguridad. Todo correo proveniente de direcciones o nombres de host que figuran en listas negras es desechado, se previene la llegada a su destino.

    Las listas negras de spam son mantenidas generalmente por organizaciones sin ánimo de lucro, con la única intención de mantener una Internet limpia y segura.

    En ocasiones puede suceder que alguna de las direcciones IP pertenecientes a nuestra organización aparezca en una lista negra. Esto puede ocurrir por diversos motivos: puede que un host en nuestra red haya sido comprometido a través de una brecha de seguridad y luego sido utilizado para enviar spam; una cuenta de un usuario haya sido comprometida y utilizada para enviar spam; algún host fue infectado con malware y está enviado tráfico sospechoso o malicioso hacia Internet; entre otros.

    Sea cual sea el motivo, necesitaremos comprobar si la dirección IP o nombre de host comprometido aparece en alguna blacklist, para luego solicitar la baja o remoción. El problema es que existen muchas listas negras de diferentes organizaciones. Por ello, en este artículo voy a presentarles un servicio que permite verificar en todas las listas negras más importantes con un solo clic.

  • Conectarse a una VPN L2TP/IPsec con strongSwan en Linux

    El protocolo de red L2TP (Layer 2 Tunneling Protocol) es un protocolo de tunneling utilizado para soportar redes privadas virtuales (VPNs) o como parte de los servicios de red de los proveedores de Internet (ISPs). No provee confidencialidad ni cifrado por sí mismo, sino que se basa en otro protocolo de encriptación que pase a través del túnel. Este artículo explica cómo configurar un cliente de VPN L2TP/IPsec utilizando strongSwan+xl2tpd para acceder a una red privada virtual desde un sistema Debian y derivados.

    strongSwan es una solución de VPN open-source basada en IPsec multiplataforma. Funciona en Linux, FreeBSD, IOs y Windows. Además tiene un cliente para Android. Implementa los protocolos de intercambio de claves IKEv1 e IKEv2.

  • Crear un par de claves, firmar y verificar mensajes con GnuPG

    Este artículo demuestra el funcionamiento y uso básico de GnuPG, particularmente para firmar y verificar mensajes de Internet (mails, mensajes en foros, etc.)

    GnuPG (o GPG) es una herramienta para cifrado y firma digital de mensajes que surge como reemplazo libre a PGP. GPG cifra los mensajes utilizando criptografía de clave pública, es decir un par de claves asimétricas (pública/privada) generadas por los usuarios. La clave privada debe ser secreta y mantenerse protegida, ya que allí radica la seguridad de la suite de cifrado, mientras que la clave pública debe ser conocida por la mayor cantidad de usuarios posibles. Estas pueden ser compartidas con otros usuarios a través de servidores de claves públicas.

  • Desenredando la telaraña

    Untangling the Web: An Introduction to Internet Research es un documento desclasificado por la NSA que conforma una guía completa para investigar y recopilar información en Internet. Este documento, que comenzó como una guía y terminó siendo un libro de 651 páginas luego de una década de investigación, contiene toneladas de información útil para pentesters, investigadores, hackers y mentes inquietas. Su contenido cubre una gran cantidad de tópicos: desde una introducción al funcionamiento de los motores de búsqueda; pasando por Google Dorks y Yahoo Hacks; técnicas y herramientas de búsqueda e investigación especializadas; descubrimiento de sitios ocultos; búsqueda en diccionarios, traductores y blogs; hasta técnicas para encontrar personas, compañías y sitios políticos; DNS; geolocalización; y seguridad y privacidad.

  • Detectar intentos de acceso fallidos a tu sitio Web

    Se me ocurrió buscar intentos de acceso fallidos a paneles de control de diversos CMSs y no creerás lo que sucederá...

  • Detectar vulnerabilidades XSS en aplicaciones Web utilizando XSSer

    Cross Site "Scripter" (XSSer) es un framework automático para detectar, explotar y reportar vulnerabilidades de tipo Cross-Site Scripting (XSS) en aplicaciones Web. Contiene opciones para tratar de saltear ciertos filtros, y varias técnicas de inyección de código.

    Este artículo explica cómo instalar XSSer y cómo escanear un target en búsqueda de vulnerabilidades XSS utilizando esta herramienta.