Security in payment data for e-commerce applications

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.
Continue reading Security in payment data for e-commerce applications

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

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.

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.

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/

IceScrum and browsers troubles.

Few months ago I realized that the iceScrum version I use for job stop working on modern browsers.
When I tried to “Connect” with my account the system threw the next screen:


After trying different options, logs reviewing and more I could find a solution for the problem. I haven’t had time to dig into the iceScrum code but If you want to log into the system with modern browsers you just need to force the browsers to make all the requests with a different User-Agent in their headers.
As a former web developer I use to have all popular browsers installed just in case. I found the easiest way to change the User-Agent header is using Safari as web browser and activate the “Develop menu bar” from the Advanced tab in the preferences menu.


After that you just need to change the User-Agent in the Develop menu and try, for example, Safari 5.0.6. If you can not view the whole Menu Bar just press the <Alt> key.


And then just try to Connect again in iceScrum. You’ll have no more troubles.

Well, that’s all for now.

Protección en los smartphones. Móvil perdido/robado ?

Inspirado un poco por algunos artículos recientemente leidos y por la inquietud de concientizar a la gente de los peligros que implica el utilizar dispositivos “smartphones” y las redes sociales sin la seguridad adecuada, escribo este post para mostrar algunos ejemplos de lo que podría suceder en sucesos desafortunados donde nuestros dispositivos fueran utilizados con otros fines, digamos, maliciosos y algunas formas de evitar catástrofes en este sentido.

Comenzaré con una simple pregunta. Qué pasaría si, por alguna razón, perdieran su smartphone ?

Conozco a infinidad de personas que han estado bajo esa situación ya sea porque les robaron su maleta o bolsa y se encontraba ahí dentro, o porque lo dejaron olvidado en algún lugar o se les cayó en algún transporte, etc. Después del pánico inmediato al darte cuenta de eso viene la preocupación y en lo primero que normalmente piensa uno es “Mis contactos!!!” y lo pensamos porque la gran mayoría de la gente no respalda sus contactos en algún otro medio y únicamente los deja en el móvil porque es lo más “a la mano” que tiene para anotar. Pues les diré algo: “el hecho de no haber respaldado sus contactos es lo último por lo que deberían de preocuparse si perdieron su smartphone o fue robado”.

Supongamos que su smartphone cae en manos de algún delincuente por alguna de las razones citadas previamente. Supongamos que es un delincuente curioso y quiere conocer un poco de su víctima. De primer instancia tomará el celular y, si está encendido, bastará con oprimir alguna tecla para que se ilumine la pantalla y pueda ver la pantalla de home desde la cuál se puede visualizar si hay algún mensaje de texto en espera de ser leído, algún correo electrónico en la bandeja de entrada y, en el caso de las redes sociales, si existe algún DM, reply o mensaje esperando a ser leído.

Hoy en día la usabilidad de estos dispositivos ha sido muy bien implementada y no se requieren amplios conocimientos o conocimientos técnicos para poder manejar, a nivel de usuario, estos equipos por lo que facilmente cualquier persona puede acceder a las aplicaciones instaladas en el dispositivo.
Al ser un dispositivo móvil al cual accedemos en muchas ocasiones durante el día casi siempre dejamos las aplicaciones con la opción de “recordar contraseña” activa para no tener que estar escribiendo las credenciales cada que queramos ver información por medio de esa aplicación. Esto provoca que cualquier persona que inicie la aplicación podrá acceder al contenido incluyendo, mensajes, actualizaciones, modificacion de cuenta y credenciales y más.

Otro punto importante es la cantidad de datos personales que contiene nuestro dispositivo móvil: los mensajes de texto, los correos electrónicos descargados, imágenes, archivos, contactos, etc. La mayor parte de esta información no se almacena directamente en la memoria del dispositivo sino en una memoria extraíble (comúnmente mini o micro SD), es decir, ni siquiera necesitamos el equipo para acceder a esos datos. Con el simple hecho de desmontar la memoria del dispositivo e introducirla en una computadora podremos acceder a toda esa información, normalmente, sin ningún “candado”, “password” o barrera que impida que sea leía por cualquier persona.

Con estos sencillos pasos, sin ningún tipo de seguridad, una persona podría tener en sus manos información de:

  • Todos los SMS enviados y recibidos desde y hacia nuestro dispositivo
  • Todas las imágenes capturadas con las cámaras de nuestro equipo
  • Todos los correos electrónicos descargados al equipo para visualización junto con sus archivos adjuntos
  • Los contactos almacenados en la libreta de direcciones y toda la información de cada entrada
  • Acceder a las cuentas configuradas en el dispositovo y a los datos de cada servicio por ejemplo, en el caso de facebook acceder a los mensajes, amigos, actualizar status, etc; en el caso de Twitter: generar post, los replies que nos han enviado, los DMs recibidos y enviados; en el caso de 4square: acceder a los lugares donde han estado y la cantidad de acompañantes con los que estuvieron
  • En el caso de otros servicios la información básica a la que alguien podría acceder es al perfil de la persona incluyendo la modificación de los datos
  • El historial de llamadas y, por supuesto, la o las personas con quien más se comunican quien, usualmente, es una persona cercana
  • Poder suplantar la identidad de la víctima al poder realizar llamadas, enviar mensajes, e-mails, postear, públicar y enviar información como si se tratara de la persona correcta pudiendo así engañar y/o estafar a personas cercanas a nosotros.
  • Podría enlistar unas cuantas cosas más pero con esto será suficiente para tratar el siguiente punto: “la técnicas de protección de esa información”

    Para mitigar el daño que puede causar el perder un smartphone y todos los datos dentro del dispositivo mencionaré algunas sencillas técnicas:

    Activar la contraseña de desbloqueo.Esta opción obliga a que, si el equipo se encuentra apagado o en modo standby, introduzcamos una contraseña para poder acceder a las aplicaciones, configuraciones y datos almacenados en él.Esto forzará al delincuente a pasar algunas horas de su tiempo intentando “adivinar” o “romper” (si cuenta con el equipo y conocimientos adecuados) la contraseña y así acceder a la información. Cabe destacar que solo ayudará a impedir parcialmente el acceso a los datos almacenados en el dispositivo y no los datos que se encuentren en la memoria extraíble.

    Almacenar la información de contactos y mensajes en la memoria del teléfono y no la memoria extraíbleSi bien a muchos no nos gusta esta opción porque la memoria del teléfono usualmente es ocupada para la instalación de aplicaciones y configuraciones, es muy recomendable, por seguridad, almacenar esos datos en el teléfono ya que así evitaremos que con el simple hecho de extraer la memoria externa puedan acceder a este tipo de datos.

    Eliminar remotamente la información en la memoria del dispositivo y la memoria extraíble.Existen programas precisamente creados para esto. Aquí podrán encontrar una lista de algunos de ellos para diferentes sistemas operativos de smartphones. Solo añadiría tres excelente aplicaciones. En primero lugar Lookout disponible para Windows Mobile, Blackberry y Android; en segundo lugar WaveSecure de McAfee mismos OS +SymbianOS y para Windows Phone 7 existen los servicios de Skydrive. Estas aplicaciones/servicios tiene extraordinarias funcionalidades para proteger nuestro equipo de virus, robos o pérdidas.

    Cifrar la información de nuestro equipo y tarjeta extraíbleTambién existen aplicaciones para este fin: SecuBox, SD Card Store Optimizer. Estas aplicaciones permiten cifrar los datos, configuraciones y aplicaciones de nuestro equipo y memoria extraíble permitiéndonos establecer una contraseña para descifrar los datos y hacerlos legibles. Así, aunque se extraiga la memoria externa del equipo y se inserte en una computadora no se podrá acceder a la información sensible ya que dicha información estará cifrada.

    Cambiar todas las contraseñas de las cuentas de servicios que teníamos configuradas en el smartphonePara evitar la suplantación de nuestra identidad en esos servicios o sistemas es recomendable realizar esta acción lo antes posible. Si bien, el cambiar la contraseña, no evita el acceso inmediato a nuestra información desde el equipo pero, con un poco de suerte, se terminará la batería, o apagarán el teléfono para no recibir llamadas buscándolo. Posteriormente, cuando se encienda el equipo las aplicaciones tendrán que re-autenticarse en los servicios y se encontrarán con que la contraseña almacenada en el equipo y “recordada” por la aplicación ya no es la misma con la cuál pueden acceder al servicio web llámese e-mail, exchange, twitter/facebook/4square/buzz, dropbox, o cualquier otro servicio que hayan configurado desde su móvil.

    Desactivar la tarjeta SIM y no almacenar datos sensibles en ellaLas tarjetas SIM (Subscriber Identity Module) son chips portátiles que utilizan los smartphones, o casi cualquier otro celular en el mundo, para poder recibir llamadas por medio del operador contratado. Las tarjetas SIM contienen información como el número telefónico pero pocos saben que puede contener practicamente cualquier otro tipo de información. Algunos equipos permiten guardar contactos y mensajes en la tarjeta SIM por lo tanto hay que evitar almacenar información confidencial o importante en esa tarjeta ya que desde los smartphones no tenemos tanto control de la información almacenada en ellos como lo tenemos con las tarjetas extraíbles y no podemos cifrar esa información de manera sencilla.Existen lectores de SIM con los cuales se pueden obtener facilmente información de las tarjetas por lo que es muy importante reportar inmediatamente el robo del equipo para que el operador desasocie la información contenida en el SIM con la victima.

    Estos fueron solo algunos consejos para asegurar sus equipos y preocuparse considerablemente menos por la información contenida en el smartphone perdido.

    Si tienen algún otro los invito a complementar este post con algún comentario.

    Megabytes vs Megabits [Cultura general en sistemas]

    El día de ayer decidí llamar por teléfono a una empresa para contratar su servicio de Internet de banda ancha. Como era de esperarse inmediatamente me atendieron y me comenzaron a proporcionar los datos para realizar la transferencia electrónica a lo cual respondí que primero me interesaba que me resolvieran unas dudas técnicas que tenía referente a su servicio.
    Debido a que eran dudas técnicas me transfirieron al area de soporte técnico para que me pudieran ayudar. Una vez ahí la plática transcurrió más o menos como sigue:

  • soporte: Buenas tardes. Mi nombres es […] en qué le puedo ayudar ?
  • yo: Que tal, buenas tardes. El objetivo de mi llamada es aclarar unas dudas técnicas que tengo ya que me interesa contratar un plan de Internet con ustedes.
  • Continue reading Megabytes vs Megabits [Cultura general en sistemas]