Infraestructura de seguridad y HTTPS

https
La idea de escribir este post nace de haber conversado con diversos fabricantes de herramientas de prevención ante ataques informáticos principalmente perimetrales y a nivel de mensajes de aplicación que, después de recibir cierto feedback de su parte, me hace pensar que las implementaciones de la infraestructura no se están haciendo adecuadamente con este tipo de tecnologías.

En la actualidad existe infraestructura de protección que, con ciertas configuraciones, te permite protegerte ante algunos ataques enfocados en aplicaciones web: XSS, CSRF, Injection, session manipulation, DoS, etc. Además existe infraestructura que permite analizar la información, a nivel de aplicación, que fluye por las redes para detectar anomalías. En general tenemos una gran variedad de equipos e infraestructura tanto física como lógica que se basa en el análisis del tráfico de las redes para realizar su trabajo y proteger los activos, por ejemplo: Next Generation Firewalls, Web Application Firewalls, UTMs, Advanced Threat Protection, entre otros.

Con la infraestructura anterior se está teniendo un problema que está evitando que las herramientas hagan su labor de protección de manera adecuada y este problema es el cifrado de los canales de comunicación que evita que se pueda visualizar la información que fluye por el canal cifrado. Esto puede ser tanto bueno, cuando se trata de proteger la información sensible que viaja por canales no seguros, como malo, cuando un atacante envía algún script malicioso o payload por ese mismo canal cifrado.
Continue reading Infraestructura de seguridad y HTTPS

Herramientas para validación de HTTPS

Quizá uno de los temas más delicados en la configuración de sitios web es la implementación correcta de un dominio bajo HTTPS ya sea porque requiere cierto conocimiento criptográfico o una serie de pasos muy bien definidos para que no tenga ninguna falla.

Independientemente del tipo de tecnología de servidor que se utilice (IIS, Apache, Nginx, etc.) la configuración de certificados para HTTPS junto con el formato adecuado de ellos, el orden correcto, configuración de OCSP y de más, pueden derivar en cualquier cantidad de problemas para los clientes (user-agents) o más específicamente para su biblioteca PKI que utilice para comunicarse con el servicio HTTPS expuesto.

Por mencionar algunos problemas tenemos:

  • Cadena de confianza incompleta o incorrecta
  • Suites de cifrado (cipher-suites) no soportadas por los clientes esperados
  • Versiones del protocolo SSL/TLS inseguras
  • Vulnerabilidades como BEAST, POODLE, HEARTBLEED activas
  • HSTS mal configurado
  • entre otros.

Existe un sin fin de literatura para la instalación correcta de certificados y configuración HTTPS, de acuerdo a la tecnología involucrada, que podemos encontrar con una buena búsqueda en Google pero una vez realizada la instalación siempre es bueno validarla de forma externa para asegurarnos que nuestra implementación es adecuada y soportada por los clientes esperados.

Para ello tenemos las siguientes herramientas:
Continue reading Herramientas para validación de HTTPS

ACTUALIZACIONES TECNOLÓGICAS EN INTERNET

El objetivo de este post es comentar sobre cambios trascendentes en la forma en que Internet es procesado, cambios que han ocurrido desde hace al menos un par de años y seguirán ocurriendo por al menos otros dos. Estos pueden pasar imperceptibles para la mayoría de los usuarios de Internet sin embargo conllevan un esfuerzo relevante para la gente de TI precísamente con el objetivo de que sean transparente para los usuarios. Si aún no están al día con ellos es necesario que los conozcan y si ya saben de ellos pero no han realizado acción alguna probablemente sus competidores ya las están realizando.

Veamos de qué se trata…
Continue reading ACTUALIZACIONES TECNOLÓGICAS EN INTERNET

Conocimientos básicos para esquemas de cifrado

Últimamente se ha incrementado la demanda de servicios y soluciones de seguridad informática de una forma “esperada” debido no precísamente al incremento de los ataques ocurridos en los últimos años sino a la difusión y comunicación que ha habido de dichos ataques, derivando esto en una preocupación creciente por protegerse de ellos y no convertirse en víctima.

Una de los métodos de protección que se han visto en incremento es el uso de criptografía para proteger los datos al transmitirlos o en descanso. Comenzando por el incremento del uso del protocolo HTTPS, buzones ligeramente más seguros por SFTP, generación de <<túneles>> TLS, VPN, IPSec para transmisión de datos, entre otros. Sin embargo también el desarrollo de esquemas de seguridad (criptográficos) “propios” se ha visto en aumento. Estos esquemas pueden ser desde una simple implementación de un cifrado de un dato con AES hasta esquemas complejos para protección de datos en flujos de trabajo complejos entre diferentes ambientes, infraestructura, compañías.

Una de las vulnerabilidades más explotadas en criptografía es el mal diseño de estos esquemas de seguridad criptográfica que en ocasiones terminan siendo fatales para la tecnología. Tal es el caso del casi obsoleto WEP en tecnologías inalámbricas hoy en día.

El problema que existe con la generación de estos esquemas es la carencia de información, capacitación, conocimientos o experiencia en las partes involucradas en esta creación. No hay que olvidar que uno de los temas más complejos en seguridad informática es la criptografía pues involucra una formación un tanto distinta o mejor dicho más especializada en ciertas áreas para poder entenderla.

Haciendo un listado de los puntos que se deberían dominar para garantizar un esquema con cierto nivel aceptable de seguridad son:

  • Rendimiento de los algoritmos de cifrado según el tipo de dato a cifrar/descifrar
  • Dominio total de los modos de operación para algoritmos de cifrado por bloques
  • Completo entendimiento y manejo de la información a nivel de bytes
  • Generación de entropía e información pseudo-aleatoria criptográficamente segura
  • Administración, generación y protección de llaves de cifrado
  • Dominio del poder computacional existente y en incremento
  • Conocimiento y entendimiento de vulnerabilidades en los algoritmos de cifrado
  • Entendimiento total de los protocolos actuales que utilizan esquemas de encripción: IPSec, SSH, TLS, Kerberos, WPA, etc.
  • Conocimiento e implementación de tipos de encripción: privada, pública, hashes, híbridos, etc.
  • Limitaciones y rendimiento computacional en los diferentes estados de la información: en descanso, en transmisión, en procesamiento.
  • Manejo de bibliotecas PKI y todo lo que conlleva como son:
    – Certificados Digitales
    – Listas de revocación
    – Cadenas de confianza
    – X.509
    – …
  • Manejo e implementación de codificaciones: Base64, Hex, Unicode, UTF-8, etc.

En un siguiente post mencionaré referencias para “atacar” estos temas de forma adecuada.

HTTPS – actualización inevitable

HTTPS_google

Recientemente se realizaron algunas publicaciones que involucran a este protocolo que vale la pena mencionar y detallar un poco con el objetivo de aclarar ciertas dudas que pudieran surgir.

La primer publicación sobre el tema la realizó Microsoft a finales del año pasado donde indica que eventualmente ya no aceptará certificados X.509 que hayan sido generados con SHA-1 como algoritmo de verificación de integridad tanto para HTTPS como para firma de código. Además de ello propone que ahora se utilice el algoritmo SHA-2. Algo que sabemos ya es necesario debido a las vulnerabilidades que presenta actualmente SHA-1.
Continue reading HTTPS – actualización inevitable

Base64: la codificación más útil en criptografía.

Base64 Table
El día de hoy les comentaré de una codificación, en ocasiones un poco olvidada, pero que puede llegar a ser de gran ayuda al momento de transportar datos por Internet; la llamada Base64.

Una codificación es utilizada cuando deseamos representar ciertos datos en un formato distinto al que se encuentran, se dice que los datos se codifican en otro formato. Las codificaciones más conocidas son ASCII, UTF-8, ISO-8859-1, Windows 1252, entre otras.
Base64 es una codificación como cualquiera de las anteriores sin embargo posée una característica interesante: tiene la capacidad de convertir cualquier dato definido a nivel de bytes en un formato seguro de transportar por Internet como lo son los caracteres ASCII. Esto significa que cualquier archivo ya sea, de texto plano o archivo ejecutable, archivo binario, etc. puede transportarse por Internet sin perder su “escencia”.

Por ejemplo, por definición el protocolo SMTP, utilizado para envío de correos electrónicos, antes de enviar un correo electrónico a un buzón verifica si contiene archivos adjuntos el correo que deseamos enviar. Si es así entonces el archivo adjunto lo codifica en Base64 y lo concatena al contenido del mensaje junto con sus cabeceras e información extra. Al final el mensaje termina siendo exclusivamente texto plano fácil de interpretar que viaja por Internet hasta llegar al buzón destino, donde posteriormente es decodificado y mostrado en el formato que conocemos (un e-mail con un archivo adjunto).

No entraré en detalles en la forma de trabajo de la codificación debido a que una simple búsqueda resolvería ese tema lo que sí comentaré es cómo identificarla rápidamente, sus usos y cómo se compone.

Composición:
Así como la numeración binaria o base 2 utiliza dos símbolos para representarse (0, 1), la numeración decimal o base 10 utiliza 10 símbolos para representarse (0, 1, 2, 3, …, 9), la codificación Base64 utiliza 64 símbolos para representarse:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Esta códificación utiliza un último caracter (el No. 65) pero solo como relleno y, en caso de usarse, va posicionado al final del mensaje codificado: el caracter ” = “.

Estos símbolos mostrados son parte del “alfabeto” ASCII (por no decirle codificación) y son soportados de forma íntegra por los sistemas de hoy en día así que son seguros de eviar por Internet entre diversas tecnologías cliente, servidor, sockets, URLs, etc. Se dice seguros porque no cambiará ningún símbolo en el trayecto preservando su integridad y, por consecuencia, al momento de decodificar ese texto, igual en Base64, obtendremos los bytes originales íntegros.

Identificación:
La forma más sencilla de indentificar texto codificado en Base64 es observando los caracteres dentro de él. Si encontramos, por ejemplo, símbolos de “=” al final de la cadena es casi un hecho que son datos codificado en Base64: aHR0cDovL2FsYmVydHgubXgvYmxvZw==
Conociendo los caracteres que se utilizan para codificar nos permite identificarlo observando símbolos de “+”, “/”, caracteres en mayúsculas, minúsculas y numéricos dentro de la cadena.

Usos:
Base64 se utiliza en diversos medios y protocolos volviéndose un estándar al momento de querer transportar principalmente datos que no son texto (archivos, bytes cifrados, etc.) debido a que tenemos otras formas de transportar el texto por las redes.

  • La autenticación Basic del protocolo HTTP utiliza Base64 para el envío de credenciales (por cierto uno de los métodos de autenticación más inseguros que existen hoy en día en Internet).
  • El protocolo SMTP, que mencioné anteriormente, también utiliza Base64 para adjuntar archivos y que lleguen de forma íntegra.
  • En criptografía se utiliza después de haber cifrado información por algún medio y querer transportar cifrada esa información por las redes para, una vez que llega a su destino, descifrarla y obtener el dato original.
  • entre otros…

Es importante notar que el codificar información en Base64 no significa que estés protegiendo la información, cifrándola o asegurándola de alguna forma ya que la codificación es simplemente una forma alterna de mostrar los datos y cada codificación tiene su respectivo modo de decodificar que no utiliza llaves, ni algoritmos complejos por lo que el dato original se obtendrá fácilmente. De hecho el codificar en Base64 no debe ser visto como método para proteger la información sino como método para transportarla.

Puedes utilizar el Cheat Sheet de OpenSSL publicado en este sitio para practicar y utilizar esta codificación.

Entrenamiento en criptografía

Crypto
Como algunos de ustedes saben uno de mis temas favoritos (quizá el mayor) dentro del área de seguridad informática es la criptografía. Todo lo relacionado a algoritmos criptográficos, la matemática dentro de ellos, permutaciones, sustituciones, matrices y sus alrededores. Es realmente impresionante la manera en la que uno puede llegar a utilizar operaciones relativamente sencillas para generar un muro casi impenetrable que proteja, de manera digital, prácticamente cualquier cosa.
Continue reading Entrenamiento en criptografía

Microsoft Office documents encryption

Encrypt with password

This is a short post just for showing how you can protect your documents created with Microsoft Word, Excel and PowerPoint.

People love working with Microsoft Office documents. I think it’s a matter of simplicity and habit. So, one of my tasks is to give the user a safe way to protect their documents. We can use special tools for encrypting documents at byte level or hardware encryption or any other kind of tools but all of them will fail if they are not easy enough to implement.

Some Microsoft office programs have a feature called “Encrypt with password”. This isn’t neater the typical protect document functionality that just prompts you for a password if you want to open a document (although it requires a password) nor the previous protect with password that used RC4 40-bit encryption. This is a complete encryption functionality that encrypts the whole document using the password as the key. This feature is available since Microsoft Office 2007 using AES for the encryption algorithm and by default 128 bits.

If you want to encrypt a document just go to the File menu, click on Info, then Document protect and finally Encrypt with password. A box will be shown and you just have to type and confirm a strong password. Be careful because as this is an encryption mechanism that will encrypt at byte level your file if you lost the password it can take years to decrypt your file in case it was feasible.

By default office programs don’t force a strong password to be typed but if you want users to always type a strong password you have to write some keys into the windows registry. You can read the details of these keys in this article but here is a extract.

HKEY_CURRENT_USERSoftwareMicrosoftOffice14.0CommonSecurityPasswordComplexity 
HKEY_CURRENT_USERSoftwarePoliciesMicrosoftOffice14.0CommonSecurityPasswordComplexity

	* Value name: PolicyLevel
	* Value type: DWORD
	* Value data: [ 0 | 1 | 2 | 3 ]
	* Use 0 to for no complexity (default), 1 for minimum length, 2 for minimum length plus requiring 3 of 4 character groups, and 3 for all these checks plus enforcing Windows domain password rules.


	* Value name: MinLength
	* Value type: DWORD
	* Specifies the minimum length of password required.

Well, this is all for now.

HTTPS and the TLS handshake protocol.


In the previous post I talked about how web browsers connect to the server and how a negotiation is initialized between server and client to establish a secure connection when the HTTPS protocol is used.

In this post I wil explain the SSL/TLS protocol and how a client (computer, smartphone, tablet, terminal, etc) and server can encrypt the data sent and received by an HTTPS connection.
Continue reading HTTPS and the TLS handshake protocol.

Web Browsers and HTTP/S connections


This is the first of a series of posts about HTTP/S that you will find in this blog during the next days. I will explain technical aspects about these protocols, how they work, how to test and validate connections, sites and certificates. I will also write about the encryption algorithms and more.
Continue reading Web Browsers and HTTP/S connections