Category Archives: Web security

Ocultamiento de ataques web bajo HTTPS

Desde hace un par de años al día de hoy ha habido una fuerte apoyo de parte de las grandes empresas de tecnología para la adopción de HTTPS por todo Internet. Google, Microsoft, Mozilla, Cloudflare, Akamai, entre muchas otras, han decidido habilitar el protocolo para sus clientes o facilitar el acceso a este protocolo, sin embargo como profesionales en seguridad es necesario estar atento a cualquier cambio fuerte de cualquier índole, no nada más tecnológico. Sabemos que cualquier cambio, tendencia, adopción masiva, situaciones insólitas, etc. pueden potencialmente ser un foco de infección o punto compromiso para los sistemas informáticos y la rápida adopción de HTTPS no ha sido la excepción a esta regla.

Algo que he estado viendo en la red es el incremento de ataques a aplicaciones web utilizando HTTPS como transporte para el ataque, lo cual es, hasta cierto punto, obvio ya que los mismos atacantes están cifrando los comandos o exploits por HTTP bajo el protocolo TLS que evita que el ataque sea visualizado durante el transporte y, peor aún, si la entidad atacada tiene mal configurada su infraestructura de seguridad, este ataque también será invisible a sus herramientas de seguridad.

Un caso muy común es cuando herramientas como UTMs, NGFWs, WAFs o cualquier otra herramienta con protección a nivel aplicación web es instalada y los ingenieros desean visualizar HTTPS y proteger las aplicaciones bajo ese protocolo también. En la mayoría de los casos, y por facilidad en la implementación, configurarán el protocolo e instalarán los certificados para que la herramienta pueda “abrir” el tunel HTTPS y visualizar las peticiones de entrada, sin embargo, la configuración correcta va mucho más allá de eso. Para que la herramienta funcione correctamente y cubra todo el tráfico HTTPS es necesario configurala como punto de negociación HTTPS para la infraestructura, de no ser así, como atacante, uno puede forzar a utilizar ciertos algoritmos criptográficos y suites de cifrado, al momento de la negociación HTTPS, para que la herramienta no pueda visualizar las peticiones.

UN POCO DE TECNICISMO:

En términos generales tenemos dos formas de establecer un tunel TLS para HTTP (HTTPS): En el protocolo handshake de TLS podemos utilizar algoritmo RSA para el intercambio de llaves criptográficas cuya llave pública está en el certificado y la privada instalada en la herramienta de seguridad o servidor, y algoritmo Diffie-Hellman y variantes (ECDHE, DHE, etc) cuya negociación se hace directamente en la memoria RAM del punto de negociación de HTTPS en el lado server y el user-agent del lado cliente. Las suites de cifrado más “fuertes” están hechas para que ni obteniendo la llave privada puedas descifrar el contenido que pasa por el tunel TLS y mejor aún, si logras tener una llave privada podrás descifrar contenido por pocos segundos ya que las llaves de cifrado de mensaje están cambiando frecuentemente. 

La forma de realizar un ataque sobre una infraestructura mal configurada para HTTPS es utilizar una suite de cifrado suficientemente robusta que realice el intercambio de llaves durante la negociación TLS utilizando el algoritmo Diffie-Hellman, ya sea efímera o con curvas elípticas. Cuando ocurre esta negociación el mensaje client-key-exchange del protocolo TLS handshake no utiliza la llave pública que recibió del certificado para enviar los bytes “pre-master secret”, si no que las memorias RAM de ambos entidades (punto de negociación server y user-agent) serán las únicas que tendrán los datos para generar la llave de cifrado principal de los mensajes y en las herramientas, aún teniendo el certificado y llave privada correspondiente, no serán capaces de llegar a la misma llave criptográfica, por ende no serán capaces de visualizar el tráfico en claro y proteger las infraestructura.

Usualmente estas herramientas mostrarán un mensaje del tipo “Unable to decrypt HTTPS” y, a pesar de que verán pasar el tráfico no verán su contenido. 

La forma en la cual podemos forzar a utilizar una suite de cifrado en particular es:

$ openssl s_client -cipher ECDHE-RSA-AES256-GCM-SHA384 -connect albertx.mx:443

Al realizar eso tendremos el escenario como el siguiente:

Por lo que lo recomendable es que la mejor solución de seguridad para aplicaciones que tenga su infraestructura sea el punto de negociación HTTPS. Con esto, independientemente de la suite de cifrado que utilicemos para negociar TLS, la herramienta podrá visualizar por completo todo el contenido bajo ese protocolo y proteger las aplicaciones de forma correcta.

Security in payment data for e-commerce applications

ecommerce security

Every day a new e-commerce application is published on Internet and more people are using these applications to acquire any kind of products, at the end that is the goal, but to get there you need to introduce some of your information, from personal information to payment information. You need to type in your address, your name, your age sometimes and your credit card (CC) information of course.

In Card Not Present transactions the information must be protected in a different way than card present transactions, that is because the information processed is in fact different.

Many of these web and mobile applications don’t follow protocols and rules to protect the customer information, not even moderately. In this post I will focus on the best practices for protecting this kind of critical information.
Read more »

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.
Read more »

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:
Read more »

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…
Read more »

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.
Read more »

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.

Saludos.

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.
Read more »

PassMark en la banca por Internet de Santander

Recientemente Santander comenzó a liberar una actualización en su banca por Internet llamada Supernet. La actualización se enfoca específicamente en el modelo de seguridad que utiliza para proporcionar acceso a los usuarios a su cuenta. De qué trata este nuevo modelo de seguridad? Originalmente con las credenciales fortalecidas que nos solicitan ahora los bancos para acceder a nuestras cuentas + los tokens que nos proporcionan para teclear el número que nos arroja + algún número de cuenta, número de cliente, num de tarjeta, etc etc etc, lo que los bancos quieren lograr es garantizar que el usuario correcto, en este caso nosotros, estamos accediendo a nuestra cuenta y no que cualquier otra persona, un hacker por ejemplo, pueda acceder a nuestra cuenta, es decir, esos mecanismos garantizan hasta cierto punto que el cliente o usuario es quien dice ser. Pero, quien nos garantiza a nosotros que la aplicación es a la que realmente queremos acceder ? No por el hecho de que en nuestra barra de direcciones aparezca el dominio completo y correcto de la aplicación implica que es la aplicación real del banco. Existen ataques como el pharming o algunos tipos de Man In the Middle que podrían falsificar la aplicación y enviarla al usuario aparentando ser la aplicación real cuando realmente es otra preparada específicamente para obtener nuestros datos confidenciales. Bueno, esa actualización de seguridad que se liberó es precisamente para garantizar, hasta cierto punto, eso.

Este método de seguridad surgió hace ya varios años e irónicamente se supuso que no iba a dar los resultados esperados ya que tiende a ser muy sencillo (sin tanta criptografía o mecanismos complejos de por medio). Se le llamó PassMark y poco a poco las instituciones bancarias lo fueron adoptando hasta ahora llegar a México.
Read more »

Curso de Seguridad en aplicaciones en Activ

Seguridad en webapps

Por fin, después de un buen tiempo de planeación, generación de material, ejemplos y de más, está disponible el primer curso de Seguridad en el Desarrollo de Aplicaciones Web el cual impartiré en Activ.

Este curso es una recopilación de técnicas que ayudan a proteger las aplicaciones web contra ataques automatizados o dirigidos. Para ello será necesario conocer las diferentes arquitecturas utilizadas en Internet, las herramientas que existen para dichos ataques, entender criptografía y los protocolos involucrados en la transmisión, almacenamiento y procesamiento de información.

Basado en estándares de seguridad internacionales como NIST, SANS, OWASP, entre otros, se generó este curso bastante práctico que les permitirá generar y administrar sistemas web de forma segura evitando así incidentes que pudieran afectar su integridad.

Espero poder ver a algunos de ustedes por allá.

Centro de capacitación: Activ
Información del curso: http://activ.com.mx/cursos/web/seguridad-en-el-desarrollo-de-aplicaciones-web/