Lecturas para este inicio de año

Lecturas inicio de año

Buenas tardes, primer post del año 2020, primer objetivo: leerme estos 4 libros en el primer trimestre….

  • Metaliderazgo de Ignacio Campoy
  • Hacking web tecnhologies de Enrique Rando, Pablo González, Amador Aparicio, Ricardo Martín y Chema Alonso
  • Hardening de servidores GNU/Linux de Carlos Álvarez Martín y Pablo González Pérez
  • Sinfonier (Procesado y generación de inteligencia para analistas de ciberseguridad) de Francisco Jesús Gómez, Alberto Joaquín Sánchez, Pedro Jesús Martínez y Eva Suárez

Metaliderazgo (La ruta del exíto)

  • Autor: Ignacio Campoy
  • ISBN: 9788409164592
Metaliderazgo

Este libro que tienes en tus manos es la mejor guía para encontrar el camino hacia el metaliderazgo. ¿Cómo? Ayudándote a determinar tu comportamiento de personalidad y el de los que te rodean gracias a la Teoría DISC, porque nada mejor que conocernos a nosotros mismos para poder ajustar o modificar aquellos comportamientos que impiden generar los resultados deseados para un liderazgo efectivo.

Habilidades, valores, emociones, inteligencia emocional, fortalezas y talentos, hábitos… En el Libro del Metaliderazgo iremos haciendo el ascenso hasta la cima a través de la evalucación y el autoconocimiento mostrándose, como un precios sherpa, la Ruta del Éxito. Una vez que te encuentres en lo más alto de la montaña, habrás sacado a ese metalíder que llevas dentro y podrás conducir a tu organización a la excelencia.

Hacking Web Technologies

  • Autores: Enrique Rando, Pablo González, Amador Aparicio, Ricardo Martín y Chema Alonso
  • ISBN: 9788460884187

Una auditoría web es un proceso largo, extendido y complejo, el cual está compuesto de varios subprocesos. No todo es encontrar una inyección SQL, si no que el proceso está compuesto de activos, de evaluación de información y leaks, de otro tipo de pruebas que verifican el estado de seguridad de los activos que componen o sustentan las aplicaciones web de tu organización

Este libro se tratan técnicas avanzadas sobre el fuzzing a aplicaciones web, el descubrimiento de leaks en las aplicaciones de la organización que en muchas situaciones suponen pequeñas fugas de información, pero que en otras ocasiones pueden suponer un hackeo y robo de información sensible. Las técnicas de ejecución de código siguen estando en el orden del día y pueden suponer el final del juego en una auditoría web.

El lector recorre diferentes escenarios que se puede encontrar en una auditoría web y se enfrenta a diferentes posibilidades. Los escenarios son presentados de forma práctica para un aprendizaje eficiente.

Hardening de servidores GNU/Linux

  • Autores: Carlos Álvarez Martín y Pablo González Pérez
  • ISBN: 9788461715183

Mantener una infraestructura informática segura y al margen de atacantes siempre es una tarea complicada. Son muchos los aspectos a tener en cuenta. A los diferentes dispositivos en un entorno en red hay que añadirle la heterogeneidad de los sistemas operativos que la componen y los servicios prestados.

Este libro trata sobre la securización de entornos Linux siguiendo el modelo de Defensa en Profundidad. Es decir, diferenciando la infraestructura en diferentes capas que deberán ser configuradas de forma adecuada, teniendo como principal objetivo la seguridad global que proporcionarán. Durante el trascurso de esta lectura se ofrecerán bases teóricas, ejemplos de configuración y funcionamiento, además de buenas prácticas para tratar de mantener un entorno lo más seguro posible. Sin lugar a dudas, los entornos basados en Linux ofrecen una gran flexibilidad y opciones, por lo que se ha optado por trabajar con las tecnologías más comunes y utilizadas.

En definitiva, este libro se recomienda a todos aquellos que deseen reforzar conceptos, así como para los que necesiten una base desde la que partir a la hora de securizar un entorno Linux.

Sinfonier: Procesado y generación de inteligencia para analistas de ciberseguridad

  • Autores: Francisco Jesús Gómez, Alberto Joaquín Sánchez, Pedro Jesús Martínez y Eva Suárez
  • ISBN: 9788460864820

El procesamiento en tiempo real era hasta hace poco una tarea ardua y compleja. Con el tiempo esto está cambiando, facilitando la labor de analistas con proyectos como Sinfonier.

Sinfonier-Project es un proyecto abierto que pretende democratizar el procesamiento de datos en tiempo real. Creando para ello una comunidad de usuarios donde compartir conocimiento y, por supuesto, reutilizarlo. Basado en el sistema de procesamiento de datos en tiempo real Apache Storm, Sinfonier permite interactuar con un cluster de Storm de forma sencilla, creando nuevos módulos y topologías de manera intuitiva.

Sinfonier-Project nace en el contexto del procesamiento de datos focalizado en ciberseguridad, con el objetivo de dar soporte al procesado de información en tiempo real relacionada con eventos de fraude y otras amenazas . Sin embargo, pronto se convierte en un proyecto abierto a cualquier tipo de información.

Este libro no es más que un recorrido por el camino del procesamiento de datos de la mano del paradigma del procesamiento en tiempo real. El objetivo que persigue es comprender y utilizar, en parte gracias a las facilidades de Sinfonier, una tecnología tan compleja y potente como es Apache Storm

[nodeJS] Buenas prácticas de seguridad para poner aplicaciones nodeJS en producción

Visión general

El término “producción” hace referencia a la etapa del ciclo de vida del software donde una aplicación o una API tiene disponibilidad general para sus consumidores o usuarios finales. Por su parte, en la etapa de “desarrollo”, todavía está escribiendo y probando activamente el código, y la aplicación no está abierta para el acceso externo. Los entornos del sistema correspondientes se conocen como los entornos de producción y desarrollo, respectivamente.

Los entornos de desarrollo y producción se configuran normalmente de forma diferente y tiene requisitos también muy diferentes. Lo que funciona en el desarrollo puede que no sea aceptable en la producción. Por ejemplo, en un entorno de desarrollo, puede que desee el registro detallado de errores a efecto de depuración, mientras que el mismo comportamiento puede suponer un problema de seguridad en un entorno de producción. De la misma forma, en el desarrollo, no es necesario preocuparse por la escalabilidad, la fiabilidad y el rendimiento, mientras que estos son clave en la producción.

En este artículo se describen las mejores prácticas de seguridad para las aplicaciones Express desplegadas en producción.

No utilizar versiones en desuso o vulnerables de Express

Express 2.x y 3.x ya no se mantienen. Los problemas de seguridad y rendimiento en estas versiones no se solucionarán. No las utilice. Si no ha cambiado todavía a la versión 4, siga la guía de migración.

Asimismo, asegúrese de que no está utilizando ninguna de las versiones vulnerables de Express que se listan en la página Actualizaciones de seguridad. Si las utiliza, actualícese a uno de los releases estables, preferiblemente el más reciente.

Utilizar TLS

Si la aplicación maneja o transmite datos confidenciales, utilice Transport Layer Security (TLS) para proteger la conexión y los datos. Esta tecnología cifra los datos antes de enviarlos desde el cliente al servidor, lo que evita algunos de los ataques de pirateo más comunes (y sencillos). Aunque las solicitudes Ajax y POST no sean obvias visiblemente y parezca que están “ocultas” en los navegadores, su tráfico de red es vulnerable para los rastreos de paquetes y los ataques de intermediarios.

Es posible que esté familiarizado con el cifrado SSL (Secure Socket Layer). TLS es simplemente el siguiente paso después de SSL. Es decir, si antes utilizaba SSL, se recomienda actualizar a TLS. En general, se recomienda Nginx para manejar TLS. Encontrará una buena referencia para configurar TLS en Nginx (y otros servidores) en la wiki de Mozilla Recommended Server Configurations.

Asimismo, una herramienta muy útil para obtener un certificado de TLS gratis es Let’s Encrypt, una entidad emisora de certificados (CA) abierta, automatizada y gratuita proporcionada por Internet Security Research Group (ISRG).

Utilizar Helmet

Helmet ayuda a proteger la aplicación de algunas vulnerabilidades web conocidas mediante el establecimiento correcto de cabeceras HTTP.

Helmet es realmente una colección de nueve funciones de middleware más paquetes que establecen cabeceras HTTP relacionadas con la seguridad:

  • csp establece la cabecera Content-Security-Policy para evitar ataques de scripts entre sitios y otras inyecciones entre sitios.
  • hidePoweredBy elimina la cabecera X-Powered-By.
  • hpkp añade cabeceras Public Key Pinning para evitar ataques de intermediarios con certificados falsos.
  • hsts establece la cabecera Strict-Transport-Security que fuerza conexiones seguras (HTTP sobre SSL/TLS) con el servidor.
  • ieNoOpen establece X-Download-Options para IE8+.
  • noCache establece cabeceras Cache-Control y Pragma para inhabilitar el almacenamiento en memoria caché del lado de cliente.
  • noSniff establece X-Content-Type-Options para evitar que los navegadores rastreen mediante MIME una respuesta del tipo de contenido declarado.
  • frameguard establece la cabecera X-Frame-Options para proporcionar protección contra el clickjacking.
  • xssFilter establece X-XSS-Protection para habilitar el filtro de scripts entre sitios (XSS) en los navegadores web más recientes.

Instale Helmet como cualquier otro módulo:


$ npm install --save helmet

A continuación, utilícelo en el código:


...
var helmet = require('helmet');
app.use(helmet());
...

Como mínimo, inhabilitar la cabecera X-Powered-By

Si no desea utilizar Helmet, como mínimo, inhabilite la cabecera X-Powered-By. Los atacantes pueden utilizar esta cabecera (que está habilitada de forma predeterminada) para detectar las aplicaciones que ejecutan Express e iniciar ataques con destinos específicos.

Por lo tanto, se recomienda desactivar la cabecera con el método app.disable():


app.disable('x-powered-by');

Si utiliza helmet.js, lo hace automáticamente.

Utilizar cookies de forma segura

Para garantizar que las cookies no abran la aplicación para ataques, no utilice el nombre de cookie de sesión predeterminado y establezca las opciones de seguridad de las cookies correctamente.

Hay dos módulos de sesión de cookies de middleware principales:

  • express-session, que sustituye el middleware express.session incorporado en Express 3.x.
  • cookie-session, que sustituye el middleware express.cookieSession incorporado en Express 3.x.

La principal diferencia entre los dos módulos es cómo guardan los datos de sesión de las cookies. El middleware express-session almacena los datos de sesión en el servidor; sólo guarda el ID de sesión en la propia cookie, no los datos de sesión. De forma predeterminada, utiliza el almacenamiento en memoria y no está diseñado para un entorno de producción. En la producción, deberá configurar un almacenamiento de sesión escalable; consulte la lista de almacenes de sesión compatibles.

Por su parte, el middleware cookie-session implementa un almacenamiento basado en cookies: serializa la sesión completa en la cookie, en lugar de sólo una clave de sesión. Utilícelo sólo cuando los datos de sesión sean relativamente pequeños y fácilmente codificables como valores primitivos (en lugar de objetos). Aunque se supone que los navegadores pueden dar soporte a 4096 bytes por cookie como mínimo, para no exceder el límite, no supere un tamaño de 4093 bytes por dominio. Asimismo, asegúrese de que los datos de la cookie estén visibles para el cliente, para que si se deben proteger u ocultar por cualquier motivo, se utilice mejor la opción express-session.

Si utiliza el nombre de cookie de sesión predeterminado, la aplicación puede quedar abierta a los ataques. El problema de seguridad que supone es similar a X-Powered-By: un posible atacante puede utilizarlo para firmar digitalmente el servidor y dirigir los ataques en consecuencia.

Para evitar este problema, utilice nombres de cookie genéricos, por ejemplo, con el middleware express-session:


var session = require('express-session');
app.set('trust proxy', 1) // trust first proxy
app.use( session({
   secret : 's3Cur3',
   name : 'sessionId',
  })
);

Establecer las opciones de seguridad de las cookies

Establezca las siguientes opciones de cookies para mejorar la seguridad:

  • secure – Garantiza que el navegador sólo envíe la cookie a través de HTTPS.
  • httpOnly – Garantiza que la cookie sólo se envíe a través de HTTP(S), no a través de JavaScript de cliente, para la protección contra ataques de scripts entre sitios.
  • domain – Indica el dominio de la cookie; utilícelo para compararlo con el dominio del servidor donde se está solicitando el URL. Si coinciden, compruebe el atributo de vía de acceso a continuación.
  • path – Indica la vía de acceso de la cookie; utilícela para compararla con la vía de acceso de la solicitud. Si esta y el dominio coinciden, envíe la cookie en la solicitud.
  • expires – Se utiliza para establecer la fecha de caducidad de las cookies persistentes.

A continuación, se muestra un ejemplo de uso del middleware cookie-session:


var session = require('cookie-session');
var express = require('express');
var app = express();

var expiryDate = new Date( Date.now() + 60 * 60 * 1000 ); // 1 hour
app.use(session({
  name: 'session',
  keys: ['key1', 'key2'],
  cookie: { secure: true,
            httpOnly: true,
            domain: 'example.com',
            path: 'foo/bar',
            expires: expiryDate
          }
  })
);

Asegurarse de que las dependencias sean seguras

El uso de npm para gestionar las dependencias de la aplicación es muy útil y cómodo. No obstante, los paquetes que utiliza pueden contener vulnerabilidades de seguridad críticas que también pueden afectar a la aplicación. La seguridad de la aplicación sólo es tan fuerte como el “enlace más débil” de las dependencias.

Utilice una o las dos herramientas siguientes para garantizar la seguridad de los paquetes de terceros que utiliza: nsp y requireSafe. Las dos herramientas hacen prácticamente lo mismo.

nsp es una herramienta de línea de mandatos que comprueba la base de datos de vulnerabilidades de Node Security Project para determinar si la aplicación utiliza paquetes con vulnerabilidades conocidas. Instálela de la siguiente manera:


$ npm i nsp -g

Utilice este mandato para enviar el archivo npm-shrinkwrap.json para su validación a nodesecurity.io:


$ nsp audit-shrinkwrap

Utilice este mandato para enviar el archivo package.json para su validación a nodesecurity.io:


$ nsp audit-package

requireSafe se utiliza de la siguiente manera para auditar los módulos de Node:


$ npm install -g requiresafe
$ cd your-app
$ requiresafe check

Consideraciones adicionales

A continuación, se muestran algunas recomendaciones para la excelente lista de comprobación Node.js Security Checklist. Consulte el post de este blog para ver todos los detalles de estas recomendaciones:

  • Implemente el límite de velocidad para evitar ataques de fuerza bruta contra la autenticación. Una forma de hacerlo es utilizar StrongLoop API Gateway para forzar una política de limitación de velocidad. También puede utilizar middleware como express-limiter, aunque para ello deberá modificar el código de alguna forma.
  • Utilice el middleware csurf para protegerse contra la falsificación de solicitudes entre sitios (CSRF).
  • Filtre y sanee siempre la entrada de usuario para protegerse contra los ataques de scripts entre sitios (XSS) e inyección de mandatos.
  • Defiéndase contra los ataques de inyección de SQL utilizando consultas parametrizadas o sentencias preparadas.
  • Utilice la herramienta sqlmap de código abierto para detectar vulnerabilidades de inyección de SQL en la aplicación.
  • Utilice las herramientas nmap y sslyze para probar la configuración de los cifrados SSL, las claves y la renegociación, así como la validez del certificado.
  • Utilice safe-regex para asegurarse de que las expresiones regulares no sean susceptibles de ataques de denegación de servicio de expresiones regulares.

Evitar otras vulnerabilidades conocidas

Esté atento a las advertencias de Node Security Project que puedan afectar a Express u otros módulos que utilice la aplicación. En general, Node Security Project es un excelente recurso de herramientas e información sobre la seguridad de Node.

Por último, las aplicaciones de Express, como cualquier otra aplicación web, son vulnerables a una amplia variedad de ataques basados en web. Familiarícese con las vulnerabilidades web conocidas y tome precauciones para evitarlas.

Entrada basada y traducida desde https://expressjs.com/en/advanced/best-practice-security.html

Montando este blog (parte 1)

Buenas días o tardes o lo que sean en el momento que leas este articulo. Con motivo de mi retiro estival y propósito de año nuevo 2020 he comenzado un nuevo proyecto sobre «Personal Branding» y que mejor manera de hacerlo que montando un blog donde explicar todos los proyectos que llevo a cabo en mis ratos libres y en mi día a día.

Un buen punto de partida y como primer articulo de esto es explicar como he montado este blog usando una raspberry pi 2 que tenía por casa y linux ubuntu server 19.10

Paso 1: Descargar Ubuntu Server 19.10:

Visitamos la web dedicada de ubuntu https://ubuntu.com/download/raspberry-pi para nuestro pequeño dispositivo y descargarmos la versión que se adapta a nuestras necesidades (en mi caso al ser un rasp2 he bajado la versión de 32 bits que es la que le da soporte a nuestro SOC (system on chip))

Paso 2: Grabar nuestra imagen en la microSD

Yo en mi uso cotidiano utilizo Windows 10 (Si… microsoft Windows 10… me parece un buen sistema operativo, y aunque el 50% del tiempo tengo abierto el bash de ubuntu …. WSL, el otro 50% me debato entre algun programa de Adobe, Microsoft Office o incluso algún juego, y si algo tengo que decir es que en esta versión de windows las cosas han mejorado mucho mucho mucho) Volviendo al tema de las raspberry y grabar la imagen en la microSD. Descomprimimos el tar.gz de la imagen que hemos bajado de la página oficial de ubuntu, puedes utilizar la trial eterna de winRar o cualquier otro software para descomprimir…. o incluso de desde la Bash de WSL un tar -xvf «nombre_de archivo» eso a gusto del consumidor, pero lo que si es cierto es que nos hace falta tener el archivo IMG que viene dentro del archivo comprimido.

Una vez descomprimido tenemos distintas alternativas para grabar la imagen en la tarjeta de memoria, yo en este caso he utilizado Win32 Disk Imager que es bastante sencillo, pero también podemos utilizar otras alternativas como BALENA Etcher

Win32 Disk Imager
Balena Etcher (otra alternativa a grabar imagenes para raspberry pi)

Tenemos distintas opciones de configuración para personalizar antes del primer arranque si montanos la SD desde el explorardor y editamos el archivo userdata que no deja de ser un archivo YAML, pero este paso es opcional y otro día lo analizaremos con más detenimiento porque me dá casi para más de un articulo

Acto seguido montamos la SD en las raspberry pi 2 y encendemos. El primer inicio es superimportante y tardará mucho más de lo normal porque tiene que hacer las tareas iniciales… entre otras redimensionar las particiones para adaptarse al tamaño de nuestra SD…. IMPORTANTE NO INTERRUMPIR

Paso 3: Configurando nuestro servidor Linux

Paso 3.1: Estableciendo una IP estática a nuestra ubuntu.

Ubuntu Server 19.10 no usa el antiguo sistema de networkmanager para acogerse a lo que parece un nuevo standard denominado NETPLAN. Para configurar dicho sistema solo basta con editar el fichero /etc/netplan/50-cloud-init.yaml

sudo nano /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: no
            addresses: [192.168.1.9/24]
            gateway4: 192.168.1.1
            nameservers:
                search: [xdev.local]
                addresses: [192.168.1.1,8.8.8.8]
            optional: true
    version: 2
    renderer: networkd

Probamos nuestra configuración

sudo netplan try

(cuando ejecutamos el try, aplica los cambios 10 minutos y luego todo vuelve a su ser….. si todo está correcto aplicamos los cambios definitivos

sudo netplan aply

Paso 3.2: Instalado los paquetes necesarios en nuestra ubuntu

Vamos a proceder a instalar los paquetes necesarios para montar nuestro servidor LAMP (Linux Apache Mysql PHP). Yo en particular por comodidad utilizo TASKSEL que en un solo click instalamos todos los servicios con sus dependencias y se configuran sobre la marcha, existen mucho más métodos pero aquí solo voy a mencionar este

Primero actualizamos nuestros repositorios e instalamos tasksel y lo ejecutamos

sudo apt update
sudo apt install tasksel
sudo tasksel
Tasksel

Elegimos de entre todas las opciones LAMP Server y le damos a OK… y «et voilé» ya tenemos todos nuestros servicios configurados para desplegar nuestra web

En el siguiente POST confiuraremos el Site dentro de Apache, arrancaremos la configuración básica para la mysql e instalaremos WordPress