Porque es importante para las empresas contar con una certificación ISO 27001

La certificación ISO 27001 es importante para las empresas porque ayuda a garantizar la seguridad de la información. Esta norma internacional específica los requisitos para un sistema de gestión de seguridad de la información (SGSI) y proporciona un marco para la implementación de controles de seguridad adecuados para proteger información confidencial. Al contar con una certificación ISO 27001, las empresas pueden demostrar a sus clientes y reguladores que están tomando medidas para proteger la información confidencial y cumplir con los estándares internacionales de seguridad de la información. Además, puede ayudar a las empresas a mitigar riesgos de seguridad y a mejorar la confianza de los clientes en la capacidad de la empresa para proteger su información.

¿Por donde podemos empezar?

Para empezar a implementar la norma ISO 27001 en su empresa, se necesitarán los siguientes pasos:

  1. Realizar un análisis de riesgos: Es necesario identificar los activos de información importantes de la empresa, los riesgos que enfrentan y cómo se pueden mitigar.
  2. Establecer un alcance: Determinar qué sistemas, procesos y activos estarán cubiertos por el SGSI y establecer políticas y objetivos de seguridad de la información.
  3. Implementar controles de seguridad: Seleccionar y implementar controles de seguridad adecuados para mitigar los riesgos identificados en el análisis de riesgos.
  4. Documentar el SGSI: Documentar el SGSI, incluyendo políticas, procedimientos y controles de seguridad implementados.
  5. Capacitar al personal: Capacitar al personal en seguridad de la información y en las políticas y procedimientos del SGSI.
  6. Evaluar continuamente el SGSI: Realizar pruebas y revisiones periódicas para asegurar que el SGSI está funcionando correctamente y para identificar y corregir cualquier problema.
  7. Certificarse: Opcionalmente, si se desea obtener la certificación ISO 27001, se debe solicitar una auditoría de un organismo acreditado para determinar si se cumplen con los requisitos de la norma.

¿En que consiste un análisis de riesgos?

Un análisis de riesgos es un proceso mediante el cual se identifican, evalúan y priorizan los riesgos que podrían afectar a una organización o un proyecto. El objetivo de un análisis de riesgos es determinar cómo proteger a la organización o proyecto de eventos potencialmente dañinos y minimizar sus consecuencias si ocurren.

En el contexto de un sistema de gestión de seguridad de la información (SGSI) de acuerdo a ISO 27001, un análisis de riesgos es un proceso mediante el cual se identifican los activos de información importantes de la empresa, los riesgos a los que están expuestos y cómo se pueden mitigar. El proceso implica:

  1. Identificar los activos: Identificar los activos de información importantes, incluyendo información confidencial, crítica para el negocio y regulada.
  2. Identificar los riesgos: Identificar los riesgos potenciales que podrían afectar a los activos, incluyendo amenazas internas y externas, vulnerabilidades y impactos.
  3. Evaluar los riesgos: Evaluar la probabilidad y el impacto de los riesgos identificados, teniendo en cuenta factores como la gravedad, la frecuencia y la detectabilidad.
  4. Priorizar los riesgos: Priorizar los riesgos de acuerdo a la evaluación, para determinar qué riesgos deben ser mitigados de manera prioritaria.
  5. Mitigar los riesgos: Identificar y implementar medidas para mitigar los riesgos priorizados.

¿Cómo puedo determinar el alcance de mi SGSI?

Para determinar el alcance de su sistema de gestión de seguridad de la información (SGSI) según ISO 27001, se recomienda seguir los siguientes pasos:

  1. Identificar los activos de información importantes: Identificar los activos de información importantes para su empresa, incluyendo información confidencial, crítica para el negocio y regulada.
  2. Identificar los procesos y sistemas relacionados: Identificar los procesos y sistemas que están relacionados con la gestión de los activos de información identificados, incluyendo los sistemas de almacenamiento, transmisión y procesamiento de información.
  3. Identificar las regulaciones y requisitos legales aplicables: Identificar las regulaciones y requisitos legales aplicables a su empresa, incluyendo las leyes y normas de seguridad de la información.
  4. Establecer objetivos de seguridad de la información: Establecer objetivos de seguridad de la información, en función de los activos, procesos, sistemas y regulaciones identificadas.
  5. Definir el alcance del SGSI: Definir el alcance del SGSI, especificando los activos, procesos, sistemas y regulaciones que estarán cubiertos por el SGSI.
  6. Documentar el alcance: Documentar el alcance del SGSI, incluyendo una descripción detallada de los activos, procesos, sistemas y regulaciones cubiertos.

Es importante tener en cuenta que el alcance debe ser revisado y actualizado periódicamente para asegurar que sigue siendo relevante y adecuado a los cambios en la organización.

¿Qué son los controles de seguridad?

Los controles de seguridad son medidas implementadas para mitigar los riesgos identificados en un análisis de riesgos, y proteger activos de información importantes. Estos controles pueden ser tanto administrativos como técnicos.

Los controles administrativos son aquellos que se basan en políticas, procedimientos y estándares, y su objetivo es establecer responsabilidades, proporcionar instrucciones y garantizar la supervisión y el cumplimiento. Ejemplos de controles administrativos incluyen políticas de seguridad de la información, procedimientos de gestión de incidentes, y programas de capacitación y concientización.

Los controles técnicos son aquellos que se basan en tecnología, y su objetivo es prevenir, detectar y responder a riesgos de seguridad. Ejemplos de controles técnicos incluyen el uso de firewalls, sistemas de detección de intrusos, cifrado de datos y sistemas de autenticación y autorización.

Algunos ejemplos de controles típicos que se aplican en un SGSI de acuerdo a ISO 27001 son:

  • Políticas y procedimientos
  • Evaluación de riesgos
  • Clasificación de la información
  • Seguridad física y ambiental
  • Seguridad lógica y de la gestión de accesos
  • Protección frente a incidentes
  • Control de dispositivos
  • Backup y recuperación
  • Seguridad en las comunicaciones
  • Cumplimiento legal
  • Revisión de seguridad periódica

La elección de los controles a implementar dependerá de los riesgos identificados y de los objetivos de seguridad de la información establecidos para la organización.

He aquí un pequeño articulo explicando muy encima 3 puntos básicos de que es una ISO 27001 y por donde enfocar su implantación a la empresa, si queréis saber más solo dejadme en comentarios vuestras preguntas e intentaré responderlas.

Hablemos sobre DevOps

Aprovechando que este año voy a empezar a preparar la certificación de Microsoft Devops Engineer Expert empezaré a escribir una serie de articulos sobre Devops.

Devops

DevOps es una filosofía de trabajo que busca unir a las personas encargadas del desarrollo de software (desarrolladores) y la gestión de sistemas (operaciones). La idea es que estos dos equipos trabajen juntos de manera más eficiente, mejorando la calidad del software y reduciendo los tiempos de entrega.

DevOps se basa en la automatización y en la utilización de herramientas y prácticas especializadas para mejorar la comunicación y la colaboración entre desarrolladores y operadores. Algunos de los principios clave de DevOps incluyen:

  • Infraestructura como código: esto significa que la configuración de la infraestructura debe ser tratada como cualquier otro código y puede ser versionada, probada y desplegada de manera automatizada.
  • Integración y despliegue continuo: los cambios en el código deben ser integrados y desplegados de manera continua, lo que permite una mayor agilidad y una menor interrupción del servicio.
  • Monitoreo y medición en tiempo real: es importante monitorear la aplicación y el sistema en tiempo real para poder detectar y solucionar problemas rápidamente.
  • Colaboración y comunicación: DevOps promueve la colaboración y la comunicación entre desarrolladores y operadores para lograr una mayor eficiencia y una mejor calidad del software.

DevOps es un enfoque muy popular en el desarrollo de software y ha ayudado a muchas empresas a mejorar su ciclo de vida del software y a entregar valor al negocio de manera más rápida.

Hablemos un poco más sobre la infraestructura como código

La infraestructura como código (IaC, por sus siglas en inglés) es un enfoque que trata la configuración de la infraestructura de una aplicación o sistema como cualquier otro código. Esto significa que la configuración de la infraestructura se puede versionar, probar y desplegar de manera automatizada, lo que permite un mayor control y una mayor flexibilidad.

Algunas de las ventajas de la IaC incluyen:

  • Mayor reproducibilidad: la configuración de la infraestructura se puede documentar y reproducir de manera sencilla, lo que es útil en caso de necesitar volver a un estado anterior o replicar el entorno en otro lugar.
  • Mayor flexibilidad: al tratar la configuración de la infraestructura como código, es más fácil realizar cambios y probar nuevas configuraciones de manera rápida y sencilla.
  • Mayor control: al versionar la configuración de la infraestructura, es más fácil realizar un seguimiento de los cambios y determinar quién hizo qué cambio y cuándo.
  • Mayor colaboración: al tratar la configuración de la infraestructura como código, es más fácil colaborar en equipo y compartir cambios y mejoras.

Para implementar la IaC, es común utilizar herramientas especializadas como Terraform o CloudFormation. Estas herramientas permiten definir la configuración de la infraestructura mediante el uso de un lenguaje de programación o de un archivo de configuración. Luego, estas herramientas se encargan de aplicar los cambios de manera automatizada.

Un ejemplo de despliegue de un LAMP (linux Apache Mysql Php) usando terraform en el cloud de Amazon sería el siguiente:

# Crear una máquina virtual en AWS EC
resource "aws_instance" "web" {
  ami           = "ami-0e55e373"
  instance_type = "t2.micro"
  key_name      = "mykey"

  # Instalar Apache y PHP en la máquina
  provisioner "remote-exec" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y apache2",
      "sudo apt-get install -y php libapache2-mod-php"
    ]
  }
}

# Crear una base de datos MySQL en AWS RDS
resource "aws_db_instance" "db" {
  engine                  = "mysql"
  engine_version          = "5.7"
  instance_class          = "db.t2.micro"
  name                    = "mydb"
  username                = "myuser"
  password                = "mypass"
  allocated_storage       = 20
  storage_type            = "gp2"
  db_subnet_group_name    = "mydb-subnet-group"
  parameter_group_name    = "default.mysql5.7"
  backup_retention_period = 7
  skip_final_snapshot     = true
}

# Crear un grupo de seguridad para la máquina y la base de datos
resource "aws_security_group" "web" {
  name        = "web"
  description = "Security group for web server"

  # Abrir el puerto 80 para permitir el tráfico HTTP
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_security_group" "db" {
  name        = "db"
  description = "Security group for database"

  # Abrir el puerto 3306 para permitir el tráfico de MySQL
  ingress {
    from_port   = 3306
    to_port     = 3306
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

# Asociar el grupo de seguridad a la máquina y a la base de datos
resource "aws_security_group_rule" "web" {
  type              = "ingress"
  security_group_id = aws_security_group.web.id
  from_port         = 80
  to_port           = 80
  protocol          = "tcp"
  cidr_blocks       = ["0.0.0.0/0"]
}

resource "aws_security_group_rule" "db" {
  type              = "ingress"
  security_group_id = aws_security_group.db.id
  from_port         = 3306
  to_port           = 3306
  protocol          = "tcp"
  cidr_blocks       = ["0.0.0.0/0"]
}

Integración y despliegue continuo

La integración y despliegue continuo (CI/CD, por sus siglas en inglés) es un enfoque para el desarrollo de software que se basa en la integración y el despliegue de cambios de manera continua. Esto significa que cada vez que se realiza un cambio en el código, este cambio es integrado y desplegado de manera automatizada, sin necesidad de intervención manual.

La implementación de un proceso de CI/CD puede ayudar a mejorar la calidad del software y acelerar el tiempo de entrega. Algunas de las ventajas de la CI/CD incluyen:

  • Mayor rapidez: al integrar y desplegar cambios de manera continua, es posible entregar nuevas funcionalidades y solucionar problemas de manera más rápida.
  • Mayor confianza: al automatizar la integración y el despliegue, es posible asegurarse de que el código se integra y despliega de manera consistente y sin errores.
  • Mayor flexibilidad: al automatizar la integración y el despliegue, es más fácil realizar pruebas y experimentos de manera rápida y sencilla.

Para implementar un proceso de CI/CD, es común utilizar herramientas especializadas como Jenkins o GitLab. Estas herramientas permiten configurar un flujo de trabajo que incluye tareas como la integración del código, la ejecución de pruebas y el despliegue del código en producción.

Además, es importante utilizar herramientas de monitoreo y medición en tiempo real para poder detectar y solucionar problemas rápidamente.

Monitoreo y medición en tiempo real

El monitoreo y medición en tiempo real es una parte importante del enfoque DevOps, ya que permite detectar y solucionar problemas rápidamente y asegurar la disponibilidad y el rendimiento del sistema.

Para llevar a cabo el monitoreo y medición en tiempo real, es necesario utilizar herramientas especializadas que permitan recopilar y analizar datos sobre el sistema en tiempo real. Algunos de los aspectos que suelen monitorear incluyen:

  • Disponibilidad: se mide la cantidad de tiempo que el sistema está disponible y se alerta si el sistema no está disponible.
  • Rendimiento: se mide el tiempo que tarda el sistema en responder a las solicitudes y se alerta si el rendimiento se encuentra fuera de los límites establecidos.
  • Uso de recursos: se mide el uso de recursos como la CPU, la memoria y el almacenamiento y se alerta si el uso de estos recursos se encuentra fuera de los límites establecidos.
  • Errores: se monitorean los logs del sistema y se alerta si se producen errores críticos o excepciones no controladas.

Para llevar a cabo el monitoreo y medición en tiempo real, es común utilizar herramientas como New Relic o Splunk. Estas herramientas permiten recopilar y analizar datos sobre el sistema y ofrecer informes y alertas en tiempo real.

Además, es importante establecer umbrales y alertas para detectar problemas rápidamente y poder solucionarlos antes de que afecten negativamente al usuario final. También es importante tener un proceso definido para la resolución de problemas y un equipo dedicado que se encargue de atender las alertas y solucionar los problemas lo más rápido posible.

Y por último pero no menos importante hablemos sobre la comunicación y colaboración

La comunicación y colaboración son aspectos clave en el enfoque DevOps, ya que permiten mejorar la eficiencia y la calidad del software.

Para fomentar la comunicación y colaboración, es importante establecer canales de comunicación abiertos y efectivos entre los distintos equipos y roles involucrados en el desarrollo del software. Algunas de las prácticas que pueden ayudar a mejorar la comunicación y colaboración incluyen:

  • Reuniones regulares: es importante reunirse regularmente para discutir el progreso del proyecto, intercambiar ideas y solucionar problemas.
  • Documentación compartida: es importante documentar el proceso de desarrollo y los cambios realizados en el código para facilitar la colaboración y el seguimiento de cambios.
  • Herramientas de colaboración: es útil utilizar herramientas de colaboración como Slack o Microsoft Teams para facilitar la comunicación y el trabajo en equipo.
  • Retroalimentación continua: es importante brindar retroalimentación continua sobre el trabajo realizado para mejorar la calidad y eficiencia del software.

En resumen, la comunicación y colaboración son fundamentales para el éxito de un enfoque DevOps. Es importante establecer canales de comunicación abiertos y utilizar herramientas y prácticas especializadas para facilitar la colaboración y mejorar la calidad y eficiencia del software.

Feliz 2021 = (21+22)·(23+24)

· El número 2021 tiene cifras repetidas, igual que 2020.


· El número 2021 se escribe uniendo dos números consecutivos de dos cifras (20 | 21).

• Si escribimos ahora la fecha de un día cualquiera del año con el formato “ddmmaaaa”, es decir, dos cifras para el día del mes, dos cifras para el mes y cuatro cifras para el año; este año tendrá una fecha capicúa (se lee igual de izquierda a derecha que de derecha a izquierda).

• No es un número primo, es un número compuesto: “2021 = 43 · 47”. Como es producto de dos números primos se dice que es un número biprimo.

• Tiene 4 divisores: 1, 43, 47 y 2021. Es un número deficiente: la suma de sus divisores, excepto el mismo número, es menor que dicho número:

1 + 43 + 47 = 91 < 2021

• Se puede expresar como diferencia de cuadrados y, por tanto, como producto de una suma por una diferencia:

2021 = 43 · 47 = ( 45 – 2 ) · ( 45 + 2 ) = 452 – 22

• Su expresión en base 2 (sistema binario) es 11111100101. Es un número malvado porque contiene un número par de 1.

• Es un número infeliz, no se obtiene 1 al final de la secuencia de operaciones:

Explicaciones:

Sistema binario: https://es.wikipedia.org/wiki/Sistema_binario

Número deficiente: https://es.wikipedia.org/wiki/N%C3%BAmero_defectivo

Número malvado: https://www.gaussianos.com/tipos-de-numeros/#:~:text=N%C3%BAmero%20malvado%3A%20todo%20n%C3%BAmero%20natural,2%20y%2015%3D11112.

Número feliz: https://es.wikipedia.org/wiki/N%C3%BAmero_feliz

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

HSTS – ¿Cómo Utilizar HTTP con Seguridad de Transporte Estricta?

Asegurar la seguridad de su sitio WordPress es muy importante, especialmente si se trata de protegerse de hackers. Hay varias mejoras distintas y las mejores prácticas de seguridad WordPress que se puede aplicar para asegurar la seguridad de su sitio. Si su sitio WordPress funciona con HTTPS una de las mejoras que recomendamos aplicar es un encabezado de seguridad HSTS que puede prevenir los ataques de intermediarios (MitM) y secuestros de cookie.

¿Qué Es HSTS (Seguridad de Transporte Estricta)?

HSTS se refiere a la Seguridad de Transporte HTTP Estricta (HTTP Strict Transport Security) y estuvo especificado por IETF en RFC 6797 en 2012. Lo crearon como una manera para reforzar el navegador para que utilice conexiones seguras cuando sitio funciona con HTTPS. Es un encabezado de seguridad (security header) que se añade al servidor web y se refleja en el encabezado de respuesta como Seguridad de Transporte Estricta. HSTS es importante porque puede abordar las siguientes cuestiones:

  • Cualquier intento por parte de los visitantes para usar la versión insegura (HTTP://) de una página en su sitio será automáticamente redirigido a la versión segura (HTTPS://).
  • Antiguos «favoritos» HTTP y personas usando la versión HTTP de su sitio puedes causar ataques de intermediarios. En estos ataques el atacante altera la comunicación entre las partes y las engaña haciendolas pensar que todavía se comunican entre ellos.
  • No permite la anulación de mensajes sobre certificado inválido que por su parte realmente protege al visitor.
  • Secuestros de cookie: esto puede pasar si alguien roba un cookie de sesión a través de una conexión insegura. Cookies pueden contener todo tipo de información valiosa como información de tarjetas de crédito, nombres, direcciones, etc.

Cómo Añadir HSTS a Su Sitio WordPress

Técnicamente usted añade HSTS al propio servidor web, que luego se aplica a solicitudes HTTP a su sitio WordPress. Cuando se hace una redirección de HTTP a HTTPS, normalmente se añade una redirección 301. Google oficialmente ha comunicado que se puede usar al mismo tiempo tanto las redirecciones 301 del servidor como el encabezado HSTS.

Aunque nuestros sistemas prefieren la versión HTTPS por defecto, usted puede también aclararlo para otros motores de búsqueda redirigiendo su sitio HTTP a su versión HTTPS e implementando el encabezado HSTS en su servidor. Zineb Ait Bahajji, Equipo de Seguridad Google.

Hay diferentes tipos de directivas y/o niveles de seguridad que se puede aplicar para el encabezado HSTS. Abajo es el más básico que usa la directiva max-age. Esto define el tiempo en segundos por lo cual el servidor web debería entregar a través de HTTPS.
Activar HSTS en Apache
Añada el siguiente código a su archivo de hosts virtuales.

Header always set Strict-Transport-Security max-age=31536000

Activar HSTS en NGINX
Añada el siguiente código a su configuración NGINX.

add_header Strict-Transport-Security max-age=31536000

Si usted es un cliente de Kinsta y desea añadir encabezado HSTS a su sitio WordPress puede abrir un ticket de soporte y nosotros lo añadimos para usted. De hecho agregar un encabezado HSTS tiene beneficios de rendimiento. Si alguien está visitando su sitio a través de HTTP simplemente será redirigido a la versión HTTPS.

Precargar HSTS

preload hsts

Hay también la precarga HSTS, que básicamente pone su sitio web y/o dominio en una lista HSTS autorizada que está integrada en el navegador. Google oficialmente crea esta lista y la utilizan Chrome, Firefox, Opera, Safari, IE11 y Edge. Envíe su sitio a la lista de precarga HSTS oficial.

Sin embargo usted tiene que cumplir con algunos requisitos adicionales para que le elijan.

  • El servidor debe tener un certificado SSL/TLS válido.
  • Redirigir todo el tráfico a HTTPS.
  • Servir HSTS en el dominio base.
  • Servir todos los subdominios con HTTPS, incluyendo especialmente el subdominio www si existe.
  • El vencimiento debe ser al menos 1 año (31536000 segundos).
  • La directiva de token „includeSubdomains” debe ser especificada.
  • La directiva de token de precarga debe ser especificada.

Esto requiere añadir los subdominios adicionales y las directivas de precarga a su encabezado HSTS. Abajo es un ejemplo del encabezado HSTS actualizado.

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Advertencia: Puede ser un proceso largo y difícil tener su dominio eliminado de la lista precargada así que asegúrese de usar HTTPS a largo plazo.

Verificar el Encabezado HSTS

scan security headers

Existen unas maneras fáciles de revisar si HSTS está funcionando en su sitio WordPress. Se puede lanzar Google Chrome Devtools, pulse la pestaña „Network” y vea la pestaña encabezados. Como se puede ver abajo en nuestro sitio web se aplica el valor HSTS sigueinte: «strict-transport-security: max-age=63072000».

También se puede escanear su sitio WordPress con una herramienta online gratuita securityheaders.io que le hará saber si el encabezado de seguridad de transporte estricta se está aplicando o no.

Soporte de Navegadores HSTS

hsts browser support

Según Caniuse, soporte de navegadores para HSTS es muy fuerte, globalmente un 80%, en los Estados Unidos un 95% lo está aplicando. IE11 soporta HSTS desde 2015. El único navegador moderno hoy que no soporta HSTS es Opera Mini.

También recomendamos ver el siguiente artículo de Tim Kadlec sobre HSTS and Let’s Encrypt.

El Impacto de HSTS en SEO y Redirecciones

Una vez que su sitio web haya sido aprobado e incluido en la lista de precarga de HSTS, es posible que observe advertencias en la Google Search Console o cualquier servicio de terceros de redirecciones 307. Esto se debe a que cuando alguien intenta visitar su sitio a través de HTTP una redirección 307 sucede en el navegador, en lugar de una redirección 301 (como se ve a continuación).

HTTP con Seguridad de Transporte Estricta redirección 307

HTTP con Seguridad de Transporte Estricta redirección 307

Normalmente, una redirección 307 solo se usa para redirecciones temporales. Se utiliza una redirección 301 para las URL que se han movido permanentemente. Entonces, ¿no deberían estar usando una redirección 301? ¿Y qué hay de las ramificaciones relacionadas con SEO de esto?

De hehco la redirección 307 está ocurriendo entre bastidores. Puede ejecutar el sitio a través de una herramienta que verifica la redirección en el nivel del servidor, como httpstatus, y verá que, de hecho, todavía está ocurriendo una redirección 301. Así que no debe preocuparse por el impacto en SEO de los encabezados HSTS.

HSTS redirección 301

[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