Mostrando las entradas con la etiqueta amenazas y riesgos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta amenazas y riesgos. Mostrar todas las entradas

25 de septiembre de 2019

No utilizar el número IMEI como identificador de usuario en aplicaciones móviles

Es una indudable ventaja el hecho de poder obtener el número IMEI de un dispositivo móvil desde una aplicación para cualquiera de las plataformas móviles de la actualidad, sin embargo utilizarlo como identificador único para acceder a un servicio web puede ser un error bastante costoso.

La realidad es que si bien el Numero IMEI (International Mobile Equipment Identity)
es un número único e irrepetible pregrabado en todos los equipos GSM que lo identifica a nivel mundial, es muy tentador asociar ese número a un usuario determinado, por lo que empieza a ser una práctica convencional.

Sin embargo, el paso de este número específico como parámetro de identificación a un servicio web o rutina, inclusive a través de una conexión por socket sin utilizar cifrado es una práctica muy riesgosa, por una parte debido a que dicho número es de fácil obtención por parte de cualquier persona con acceso al dispositivo, y por otra porque la intercepción de dicho número por parte del atacante puede implicar serios riesgos en sistemas de identificación que lo usen.

Empecemos con un simple ejemplo que funciona en absolutamente todos los teléfonos GSM. Simplemente pulsemos la secuencia de caracteres *#06# en el teclado de un dispositivo e inmediatamente obtendremos una ventana en la que aparece nuestro número IMEI.

Pero eso no es todo, el número IMEI además en su composición guarda información específica acerca del dispositivo, que al cotejarse en una base de datos puede revelar demasiados datos acerca de nuestro teléfono. Para comprobarlo, obtengan su número IMEI mediante la secuencia de teclado que explicamos en el párrafo anterior e introduzca el mismo en este sitio: http://www.imei.info/ . Obtentrán una pantalla informativa impresionante como la que les muestro a continuación:



Definitivamente asociar un usuario a un teléfono móvil puede ser extremadamente útil en aplicaciones de seguridad de todo tipo entre ellas aplicaciones para realizar transacciones desde el teléfono o para obtener acceso. La mayoría de los sistemas operativos móviles permiten acceder a números únicos de identificación del dispositivo derivados del IMEI o de algún otro número como por ejemplo la identificación del dispositivo de red wireless. Si aún así decides usar el IMEI, entonces no lo pases jamás como parámetro sin combinar y cifrar.




4 de septiembre de 2019

Confiar en que el viewState de una página en Asp.NET está cifrado: ¡Error!

Uno de los errores más comunes de seguridad de los programadores de Asp.NET que utilizan "web forms" en sus aplicaciones, es creer que el "viewState" (ese campo oculto que se puede ver en todas las páginas desarrolladas con "web forms" que contiene un cantidad apreciable de caracteres ilegible) está cifrado.

El viewState es un repositorio de información en el que se apoyan los "web forms" para guardar los datos de los diferentes componentes o áreas de una página entre llamada y llamada al servidor. Incluso es accesible desde el código y podemos guardar información allí para usarla en de forma eficiente en nuestras páginas por ejemplo:

ViewState["password"] = thepassword;

Pero no es una buena práctica colocar información sensible como un password en dicho repositorio, debido a que la creencia de que el viewState está cifrado es completamente errónea. El viewState no es cifrado entre viaje y viaje al servidor sino codificado. Si usted conoce algo de criptografía entenderá que la diferencia entre cifrar y codificar es muy obvia, caso contrario permítame explicarle de forma muy resumida un importante detalle a la hora de proteger sus datos: para descodificar solo es necesario conocer el algoritmo en el cual el texto fue codificado, mientras que pare descifrar es necesario conocer una clave de cifrado además del algoritmo y esta no viaja junto al texto cifrado. 

Por lo anterior entenderá que si sabemos el algoritmo con el que el viewState es codificado, solo tenemos que usarlo en reversa para decodificarlo. Y bien ese algoritmo es el conocido Base64. Compruébelo usted mismo introduciendo el viewState de una página Asp.NET en este decodificador de viewState gratuito en línea: http://ignatu.co.uk/ViewStateDecoder.aspx 

Ante este problema tenemos dos soluciones: 
  1. No colocar nunca información delicada en el viewState
  2. Cifrar el viewState o cifrar la información que coloquemos en él.

La primera opción no necesita explicación, la segunda si amerita de algo de información adicional. El viewState, desde la versión de Asp.NET 2.0 en adelante también puede ser cifrado. Usted puede decidir hacerlo en absolutamente todo el sitio web colocando el siguiente atributo en la sección <pages> del archivo web.config:

<pages viewStateEncryptionMode="Always">

Sin embargo hay que tomar en cuenta que el cifrado puede reducir la velocidad de respuesta sobretodo si estamos en un sitio de alto consumo, por lo que podemos también utilizar el cifrado del viewState a nivel de cada página colocando el siguiente atributo en la cabecera <% @ Page >

<% @ Page Language="C#" AutoEventWireup="true" CodeBehind="login1.aspx.cs" ViewStateEncryptionMode="Always" %>

Espero que este truco e información sean de utilidad para los desarrolladores en Asp.NET.

8 de febrero de 2016

OWASP Dirbuster - Escaneando directorios y archivos ocultos de una aplicación web

Uno de los problemas más comunes a la hora de programar es la creencia de que una página o directorio al que no lleva ningún enlace, jamás serán vistos. Pues si esto fuera cierto, lo sería solo en parte, y esa parte dependería de la facultad del programador de escoger nombres complejos y difíciles de adivinar por los expertos en seguridad y por supuesto los atacantes.

La idea de este artículo, es la de encarar al programador con herramientas capacitadas para descubrir la mayor parte del árbol de directorios de nuestra aplicación así como muchas de las rutinas y páginas de esta, por el simple motivo de que todos los programadores usamos casi las mismas herramientas, venimos de una misma corriente de pensamiento o leemos los mismos artículos y vemos las mismas películas y libros. En pocas palabras que debido a que usamos Macromedia Dreamweaver o Visual Studio, nombramos los directorios y archivos de una forma específica.

Este tipo de herramientas trabajan con diccionarios de nombres de archivos y directorios (en varios idiomas) los cuales se prueban solos o con extensiones comunes. Por ejemplo, este tipo de aplicaciones no tardaría prácticamente nada en descubrir un archivo cuyo nombre fuera "admin.zip" en donde un programador incauto podría haber dejado copia de respaldo de todas las rutinas del backoffice de su aplicación. Ejemplos como este hay muchos y algunos espeluznantes, ya que los aciertos no necesariamente son tan sencillos de imaginar como el anterior.

En fin, la intención es que ustedes mismos puedan descubrir cuan vulnerables son esas rutinas administrativas que damos por ocultas o inalcanzables desde la web, y para ello no hay mejor maestro que la experiencia. Y precisamente para que podamos experimentar con nuestras aplicaciones web,  OWASP (quien más podría ser) ha puesto uno de sus proyectos  de seguridad al alcance de todos, y en este caso se trata específicamente del Proyecto "Dirbuster". Disbuster (según palabras de sus creadores) es una aplicación Java multi hilo diseñada para obtener por fuerza bruta los nombres de directorios y archivos en servidores de aplicaciones web.

Puede descargarla en formato comprimido zip en este enlace.

Recuerde, Dirbuster no es más que una aplicación eficiente que nos muestra las posibles fallas de seguridad en la forma en que nombramos nuestras rutinas y directorios, pero cualquier herramienta de análisis de vulnerabilidades seria cuenta con rutinas para el mismo fin y algunas veces suelen ser muy superiores a esta.

Ejecute Dirbuster sobre su aplicación web de forma local, para evitar demoras por problemas de ancho de banda o bloqueo de firewalls, y verá como su forma de nombrar sus archivos y directorios cambiará para siempre.

Hasta la próxima...

13 de junio de 2012

¿Que es el Cross Site Request Forgery (CSRF)?

Cuando apenas empezamos a controlar el dolor de cabeza generado por el XSS (Cross Site Scripting) nos vemos las caras con otra amenaza que aunque lleva tiempo en el ruedo de la seguridad web últimamente pareciera tomar auge definitivo para convertirse en una de las peores amenazas de los próximos años. El CSRF o Cross Site Request Forgery también conocido como XSRF, al contrario del XSS que explota la confianza del usuario en un sitio en particular, explota la confianza del sitio en un usuario en particular. Convencionalmente el CSRF utiliza a un usuario validado para a través de este introducir solicitudes "válidas" que modifiquen el comportamiento de la aplicación a favor del atacante.

En palabras simples, el atacante usa a la victima para que sea ella misma la que realice la transacción dañina cuando la víctima se encuentra validada en el servidor y en la aplicación específica. El proceso es simple, muchos usuarios no finalizan correctamente (o no pueden hacerlo) sus sesiones en las aplicaciones bancarias o de otra índole que puedan ser afectadas por esta vulnerabilidad y las mantienen activas mientras navegan otros sitios, más aún en tiempos en que las pestañas de los navegadores son muy utilizadas, por tanto desde cualquier otra ventana en el navegador se pudiera inducir al usuario a pulsar un enlace con una orden a sitios en los que el usuario ha ya autenticado, para que el usuario ejecute sin saberlo la acción de ataque.


¿Cómo evitar el CSRF?

Uno de los mejores consejos para los usuarios es simplemente hacer una sola cosa a la vez cuando se trate de manejar sus cuentas en línea, y salir de las aplicaciones haciendo el respectivo "logout" que casi siempre significa pulsar un simple botón de "salir" o "abandonar la aplicación". Por ejemplo: No pulsar un enlace recibido mediante en "Messenger" o en otra pestaña del navegador cuando estamos utilizando la aplicación de nuestro banco puede ser la mejor solución imaginable ante un ataque de CSRF.

Sin embargo para el programador es un poco más difícil prevenir este tipo de ataque. Lo primero indudablemente es darle al usuario la posibilidad de cerrar su sesión. Aunque parezca raro, usted se asombraría de la cantidad de sitios y aplicaciones que no disponen de esta opción una vez que el usuario ha validado su ingreso a las mismas.

En cuanto a código, el mejor de los aliados para controlar el CSRF es el control estricto del Session TimeOut de la aplicación, de forma que si el usuario no se conecta nuevamente y olvida "salir" correctamente de la aplicación, el servidor deberá en un lapso corto de tiempo dar dicha sesión por finalizada.

Otra eficiente forma de controlar el CSRF es la introducción de un "token" dinámico adicional en las solicitudes del cliente que se asocia a la sesión de éste en el servidor y se agrega a todos los enlaces y solicitudes. Este token será siempre diferente por sesión y por usuario por lo que de esta forma se le hace más difícil al atacante tratar de emular el enlace necesario para efectuar el ataque debido a que el token es variable.

Muchos programadores hacen públicos los enlaces privados, y esta es también una razón para que los atacantes utilicen estos enlaces privados a discreción. Los enlaces privados solamente deben ser vistos si un usuario ha validado su sesión y jamás deben ser expuestos en e-mails o páginas públicas. Esto también parece obvio pero se asombraría al ver la cantidad de enlaces "privados" de un sitio que se pueden obtener mediante técnicas de GHDB (Google Hacking Database).

Hasta la próxima.

Cuando el hacker utiliza los respaldos para vulnerar una aplicación web!

Es una técnica tradicional y hasta podría decirse que una costumbre, renombrar algunas rutinas agregándoles la extensión .bak cuando deseamos hacer nuevos ajustes para no perder el código escrito con anterioridad. Algunos de nosotros como programadores utilizamos esta y otras extensiones y simplemente las adosamos a la rutina existente de forma que por ejemplo un archivo "index.php" pasa a ser "index.php.bak" o "index.php.old". El problema reside en que dejar estas rutinas con dichas extensiones puede ser un peligro latente para la seguridad de nuestro sitio.

Los servidores web, pre-procesan los archivos del tipo php, asp, asp.net, jsp y otros, de forma que el contenido que llega al navegador cliente sea simple HTML (en nuestra jerga HTML plano). Como es conocido, dependiendo del tipo de servidor y tecnología, los archivos con estas extensiones (y algunas otras) son procesados del lado del servidor y definen lo que conocemos como rutinas "server-side", sin embargo al cambiar la extensión de los mismos a ".bak", ".old" o cualquier otro tipo de extensión no asociada a un proceso en el servidor, simplemente hacemos que el servidor entregue el archivo "como es", entregando el código "tal cual" lo hemos escrito". Para ello el atacante posee herramientas que intentan obtener nuestras rutinas con una serie de extensiones comúnmente usadas para archivos de respaldo. Inclusive apoyado en otra vulnerabilidad, podría obtener dichos listados directamente en Google (ver artículo sobre Google Hacking Database).

De esta forma puede llegar a obtener información de calidad acerca de nuestra aplicación y de nuestro servidor, como nombres de conexiones y bases de datos, directorios físicos de nuestro servidor y muchas otras cosas que pudieran abrir una brecha razonable de seguridad.

Sin embargo el anterior es el menor de los casos. Muchas veces existen respaldos completos de un sitio en formato "zip" o "rar" ubicados bajo el directorio principal, con el mismo nombre de alguna de las carpetas o directorios bajo este.

Por ejemplo, si el programador creó un sub-directorio en donde lleva todo el control administrativo llamado "admin" (por cierto admin es un mal nombre para un directorio administrativo de la aplicación) es probable que desde la interfaz de escritorio del servidor haya hecho un respaldo de dicho directorio con solo pulsar el botón derecho del ratón y ubicar la opción por defecto de enviar a carpeta comprimida en formato "zip". Por tanto todo lo que hay que hacer es intentar ubicar el archivo "admin.zip" bajo dicho directorio para obtener una copia completa y funcional de dicha aplicación.

Lo que pudiera suceder en este caso de que el atacante obtenga una copia actualizada del código completo del sitio, lo dejo a su imaginación... Este último punto pareciera un absurdo, sin embargo se sorprenderían de saber la cantidad de sitios que han sido vulnerados por esta razón.

¿Cómo protegernos?

  • De ahora en adelante, si es necesario dejar archivos de respaldo de las rutinas en el servidor de producción (debiera ser un absurdo, para eso existen los entornos de desarrollo) entonces deberemos renombrar los mismos sin cambiar la extensión, ejemplo: index.old.php, index.bak.aspx. De esta forma siempre será procesado el código y al navegador cliente llegará solo HTML plano.
  • Bajo ningún pretexto dejar cualquier tipo de respaldo comprimido del sitio web en el sitio web. Esto no tiene otra solución razonable. No se debe hacer y punto! Hacerlo es como dejar los planos de nuestros puestos de avance en manos del enemigo.

Hasta la próxima...

14 de julio de 2011

DoS producido por fallas de la Aplicación (Application Failure DoS)

Uno de los métodos más eficientes de bloquear o conseguir que una aplicación quede fuera de servicio, consiste en ubicar fallas comunes de aplicación que ejecutadas repetitivamente dejen a la aplicación y/o al servidor de la misma sin los suficientes recursos como para seguir prestando el servicio a sus usuarios.

A continuación enumeraremos y daremos una breve explicaciçon de las variantes de este tipo de ataque y la falla de programación en la que se basan para causar el daño perseguido por el atacante.

SQL wildcard attack:
Se basan en consultas que consumen gran cantidad de recursos del servidor SQL del que se alimenta la aplicaión, creando consultas con "wilcards" disponibles en las sentencias LIKE. Unos de los servidores más vulnerables a este tipo de ataque es el MSSQL debido a que posee unos tipos de caracteres wildcard muy potentes (%,[],[^],_).

Una consulta como:

SELECT * FROM Article WHERE Content LIKE '%foo%'

puede ser resuelta en una tabla con unos 10000 registros en menos de un segundo, mientras que la siguiente consulta puede amarrar al CPU hasta por 6 segundos en una tabla de apenas 2500 registros:

SELECT TOP 10 * FROM Article
WHERE Content LIKE
'%_[^!_%/%a?F%_D)_(F%)_%([)({}%){()}£$&N%_)$*£()$*R"_)][%](%[x])%a][$*"£$-9]_%'

DoS Locking Customer Accounts (DoS mediante bloqueo de cuentas de usuario):
Muchas aplicaciones bloquean al usuario si este o un atacante que se trate de hacer pasar por él cometen errores en la validación por más de un número determinado de veces. Este tipo de ataques convierte este mecanismo en un arma de negación de servicio creando intentos de ingreso con identificadores de usuarios conocidos.

DoS Buffer Overflow (DoS mediante desbordamiento del buffer):
Intentan generar errores de Buffer Overflow en las rutinas que solicitan datos, convirtiéndose en un arma que no permita que dichas rutinas completen su ciclo y liberen los recursos solicitados antes de que dicho error aparezca. El Buffer Overflow se genera cuando el atacante logra introducir datos en campos no suficientemente bien validados, que superan la capacidad del contenedor o variable creada para contenerlos. Por ejemplo si una variable se declara como entero simple de 16 bits, no podrá soportar que el atacante introduzca en un campo sin validar un número de 7 cifras.

DoS User Specified Object Allocation (DoS mediante creación de recursos específicos por el usuario):
Sucede cuando un usuario puede solicitar múltiples copias de un determinado objeto sin límite superior, lo que es utilizado para consumir toda la memoria asignada a la aplicación. Por ejemplo, si un usuario solicita un acceso a un determinado recurso que se guarda temporalmnete en una variable de sesión sin que exista un límite para la cantidad de veces que pueda hacerlo.

User Input as a Loop Counter (Utilizar el input de usuario como contador de bucles):
Se produce al forzar a la aplicación a entrar de forma repetitiva en un bucle de código que consuma gran cantidad de recursos. Se genera cuando se utiliza un parámetro que provee el usuario, como contador de un bucle y este es forjado por el atacante para aumentar radicalmente el numero de interacciones del bucle de código. Un ejemplo práctico puede ser un parámetro utilizado como contador de un sistema de paginación que se reciba por el URL. Si el atacante lo modifica podría lograr que en vez de mostrar una cantidad limitada de datos se muestre el contenido completo de una determinada consulta. Este ataque puede ser utilizado en conjunto con el SQL wildcard Attack.

Writing User Provided Data to Disk (Escribir datos que provee el usuario a disco):
Este tipo de ataque obliga al servidor a quedar sin suficiente espacio en disco, escribiendo datos provistos por el usuario, o llenado los archivos de logs.
Por ejemplo, uno de los problemas de un ataque por fuerza bruta que guarda los intentos fallidos en un archivo de registro, es que aunque no logre dar con la clave de acceso de un determinado sistema, puede dejar sin espacio en disco al servidor, debido a que el archivo de registro puede alcanzar un tamaño insospechado. Los formularios públicos que guardan datos en disco, deben ser controlados para que no puedan ser llenados por BOTs (sistemas de llenado automáticos) ya que pudieran agregar millones de datos basura al disco.

DoS Failure to Release Resources (DoS por fallas al liberar recursos):
Se debe a fallas del programador o del entorno en liberar eficientemente los recursos utilizados por la aplicación. Suele suceder con frecuencia al no liberar conexiones y sets de registros de bases de datos. Esta falla es muy simple de descubrir aunque no lo parezca, a veces el hacker todo lo que necesita es utilizar una herramienta de escaneo de vulnerabilidades para darse cuenta que los requerimientos excesivos de un recurso o página determinada al servidor lo hacen cada vez más lentos.

Storing too Much Data in Session (Guardar demasiados datos en sesión):
Sucede cuando se guardan demasiados datos en la sesión del usuario, específicamente si el usuario no es un usuario autentificado, por lo cual el atacante no necesita de mucho esfuerzo para dejar a la aplicación sin recursos en el pool de memoria.

13 de julio de 2011

OWASP Appsec Serie de Tutoriales - Episodio 3: Cross Site Scripting (XSS)

Ya acaba de ser publicado el tercer episodio de OWASP Appsec Tutorial Series que trata específicamente acerca de XSS o mejor conocido como Cross Site Scripting. No dejes de verlo es muy interesante y sencillo de entender.



Hasta la próxima...

14 de junio de 2011

Curso de Seguridad de Aplicaciones Web en Quito y Guayaquil

Un gran éxito (debo confesar aunque a mi no me toca decirlo), han sido los cursos de "Seguridad de Aplicaciones Web" dictados en Guayaquil y Quito, a los que asistieron buena parte de los programadores, desarrolladores y expertos en seguridad de sistemas del área bancaria del hermano país de Ecuador.

Promocionado por Banred y E-Securing C.A. en el curso se trató principalmente cada uno de los puntos del OWASP Top 10 con ejemplos y descripciones de cada uno de los puntos del conocido documento. Sin embargo la temática a diferencia de otros cursos de seguridad para aplicaciones web se basó esta vez en técnicas pro defensa del usuario. Consejos importantes acerca de como combatir el phishing, pharming, tab-nabbing, clickjacking y otras técnicas que no dependen directamente de las vulnerabilidades de las aplicaciones web, fueron parte importante de la segunda fase del curso y captaron fuertemente el interés de la audiencia, que por demás está aclarar fue una de las mejores que he tenido el honor de tutelar en este tipo de eventos.

En realidad fue un placer dictar los cuatro cursos (2 en cada ciudad) para un grupo de profesionales que además de captar en gran medida mi exposición, hicieron del curso una plataforma de discusión muy interesante aportando sus experiencias y dudas.

Debo agradecer ante todo a la gente de Banred, que fueron quienes coordinaron todo lo referente a la logística y en especial a Lizzie Noblecilla (Lider de Proceso Revisión y Control de Banred) y al Lic. Pablo Narvaez (Gerente General de Banred) sin cuya ayuda seguramente los cursos no hubieran sido posibles.

Ya estamos pensando en preparar una serie de talleres de seguridad de aplicaciones web, en los que les prometo que hablaré mucho menos... :D

Muchas gracias nuevamente a todos los asistentes, organizadores y en especial a la gente de las hermosas ciudades de Guayaquil y Quito, ah sin olvidar a la gente que asistió al evento por vídeo conferencia desde Loja.

Hasta la próxima...

19 de marzo de 2011

Diez razones por las que las aplicaciones web son tan vulnerables.

¿Está su organización gastando más en café que en seguridad de aplicaciones web?

Según un estudio reciente de Ponemon Institute que encuestó a más de 600 profesionales en seguridad IT que trabajan en un vasto rango de industrias, las empresas si bien empiezan a estar concientes del problema que envuelve a la seguridad de sus sistemas y clientes, no están gastando suficiente en la seguridad de sus aplicaciones web. El estudio revela que el presupuesto para café de la empresa es considerablemente más alto que el utilizado (cuando lo hay) para proteger sus aplicaciones web de ataques y corregir vulnerabilidades.


  1. Mientras el 73% de las organizaciones de los encuestados han sido hackeadas por lo menos una vez en los pasados 24 meses 72% de ellas testean la seguridad en menos del 10% de sus aplicaciones web.
  2. 20% de las organizaciones no testean la seguridad sus aplicaciones web para nada.
  3. 40% de las organizaciones solo testean la seguridad del 5% de sus aplicaciones web.
  4. El porcentaje extrapolado de todas las aplicaciones web testeadas por seguridad es menos del 13%. La razón principal es falta de presupuesto y de conocimientos necesarios.
  5. De aquellas organizaciones que hacen tests de seguridad a sus aplicaciones web solo el 13% lo hace en estado de producción.
  6. 21% de los que respondieron no sabían que tanto tarda corregir una vulnerabilidad y el 6% dijeron que nunca han podido corregir una vulnerabilidad o eliminarla.
  7. Las decisiones para corregir vulnerabilidades en aplicaciones web son tomadas informalmente (46%) o no existe esfuerzo alguno en priorizar su corrección.
  8. En el 88% de los casos los presupuestos para café ($30 por empleado al més) son mayores que el gasto en seguridad de aplicaciones web.
  9. 69% de los participantes confía en los firewalls de red para brindar seguridad a sus aplicaciones web.
  10. Solamente el 29% de los encuestados cree que los firewalls para aplicaciones web son críticos para la seguridad de la infraestructura de red de la organización.


Como podrá observar, existe poca o muy poca conciencia acerca de la necesidad de testear la seguridad de las aplicaciones web. Si usted está por contratar servicios "outsourcing" para desarrollo de aplicaciones web en su organización, la solución puede ser tan simple como agregar en su contrato de servicios las cláusulas necesarias para que la aplicación pase por un proceso de testeo una vez haya sido finalizada. En el momento anterior a la firma de dicho contrato las empresas de desarrollos serán indudablemente mucho más flexibles y los costos serán muy inferiores a los de adaptar la seguridad a una aplicación ya hecha. Además si se toma en cuenta la seguridad desde el momento mismo de el diseño de la aplicación su organización podrá ahorrarse una cantidad importante de dinero y preocupaciones futuras.


El artículo completo y presentación en inglés se encuentran en el siguiente enlace:


Redactado por Mauro Maulini R.

3 de marzo de 2011

OWASP Appsec Serie de Tutoriales - Episodio 2: Injection Attacks

Lo prometido es deuda. Luego del primer e interesante episodio de la serie de tutoriales de seguridad de aplicaciones web de OWASP aquí tenemos el siguiente episodio sobre un tema muy interesante: Ataques de Inyección o Injection Attacks.

Disfrútenlo.



Hasta la próxima

2 de marzo de 2011

7 Peligrosos Mitos de la Seguridad de Aplicaciones Web

A continuación aclararemos algunos mitos de seguridad con los cuales tropezamos a diario en nuestra profesión, tratando así de evitar que este tipo de presunciones erróneas puedan convertirse en vulnerabilidades explotadas y empresas o usuarios víctimas de una errónea política de seguridad de aplicaciones web:


Mito 1: Cumplimiento de estándares = Seguridad
Es de anticipar sin mucho cálculo que la velocidad de crecimiento del medio es muy superior a la capacidad de las organizaciones de crear estándares adaptados a las tecnologías que diariamente emergen en el desarrollo web, por lo tanto el hecho de que se apliquen ciertos estándares no garantiza seguridad en las aplicaciónes web y a veces inclusive produce brechas debido a que no aplica el refrán de "lo que fué bueno para mis padres y abuelos...". Los estándares deben aplicarse en el contexto para el que fueron creados, aplicar estándares fuera de contexto o tratar de adaptarlos sin un estudio serio puede ser inclusive un riesgo en sí mismo.

Mito 2: ¡Nosotros no tenemos brechas de seguridad!
Creer que las aplicaciones que utiliza o produce su empresa no tienen vulnerabilidades, es como creer que la tierra es plana o algo así. Ambas son visiones que se tienen porque nuestro conocimiento de la realidad se limita a un ámbito muy específico. Si usted utiliza software de terceros y/o desarrolla software con plataformas de terceros (lo que casi todos hacemos) entonces su software es inequívocamente vulnerable. No hay términos medios. Ah, y esto es suponiendo que usted sea una estrella de la seguridad, porque si usted es un simple mortal como yo entonces el problema es mayor de lo que piensa, y definitivamente la tierra es esférica.

Mito 3: Las defensas de red nos protegerán.
Creer que un sistema con SSL bien implementado lo protegerá de errores en el desarrollo de la aplicación web es muy peligroso. El SSL y los Firewalls o Routers no lo protegerán de vulnerabilidades en el aplicativo. Inclusive los Firewalls de Aplicaciones lo protegerán de inyecciones SQL y XSS en casos limitados, pero si la lógica de su aplicativo presenta fallas estructurales estas herramientas poco pueden hacer para protegerle. Además debe pensar que sus aplicaciones son utilizadas por miles de diferentes entornos y usted además debe prevenir fallas del lado del cliente o la utilización por parte del atacante de usuarios genuinos a manera de puente para intentar penetrar su aplicación, como en el caso del XSRF.

Mito 4: La Seguridad de Aplicaciones Web es problema de otros.
Esta es un de las fallas más recurrentes en el proceso de desarrollo de aplicaciones web. Los desarrolladores no programan defensivamente debido a que piensan que los expertos de seguridad se preocuparán del problema y estos últimos asumen que la aplicación debe bastarse por si sola en lo referente a seguridad. Ni lo uno ni lo otro es cierto. La seguridad bien entendida proviene de una  acumulación de capas concéntricas que se protegen unas a otras.

Mito 5:  La teoría de la solución mágica.
Frases como las siguientes son síntomas inequívocos de problemas de seguridad presentes y futuros:

  • Java y C# son lenguajes seguros, usarlos elimina la mayoría de las posibles vulnerabilidades.
  • Un test de penetración descubrirá todas las vulnerabilidades
  • Un escanner de código encontrará todos las posibles brechas de seguridad de la aplicación
  • Nosotros hicimos tal cosa y por ende la seguridad es un tema cubierto.

Los lenguajes como C# y Java ayudan a mitigar los problemas de seguridad en aplicaciones, pero nada pueden hacer si el desarrollador no conoce o tiene un conocimiento limitado acerca de las excelentes herramientas que estos lenguajes ofrecen.

Un test de penetración hallará las vulnerabilidades en proporción directa a la experiencia del experto en seguridad que lo efectúe.

Sucede igual con el resto de las herramientas, su éxito depende de la pericia de quien las utiliza, y aunque esta pericia sea de la mayor posible, la rapidez evolutiva del medio puede y suele sobrepasar cualquier nivel de experiencia.

Un sistema mágico e inexpugnable que resuelve absolutamente todos los aspectos de la seguridad se reconoce porque nos deja "mágicamente" desnudos cuando es vulnerado. No podemos ni debemos creer en una seguridad proveniente de una única solución mágica.

Mito 6: La seguridad es demasiado costosa, por lo que prefiero correr el riesgo.
Aparte del hecho de que un ataque que perjudique los datos sensibles de nuestros usuarios y nuestra empresa siempre es mucho más costoso que los costos de implantar las soluciones y herramientas necesarias para prevenirlo, la seguridad es siempre una buena inversión. Los altos costos de la seguridad son un mito. Organismos como OWASP, WASC pueden con sus tutoriales y herramientas de código abierto ayudar de gran manera en la reducción del costo relativo a la protección de aplicaciones web. Por otro lado empresas como Microsoft ponen a la orden sin costo alguno sus conocimientos con el SDL Software Development Life Cycle, inclusive algunos gobiernos ponen a disposición listados de prácticas seguras y de tipos de vulnerabilidades. En este blog podrá hallar también muchos documentos sobre el tema completamente gratis.

Mito 7: El Código Contratado por Outsourcing es completamente vulnerable (o completamente seguro)
Las empresas contratadas para desarrollo de aplicaciones web, no necesariamente están en una de las vertientes completamente opuestas de este mito. La responsabilidad de la seguridad en el software contratado a terceros empieza en nuestra empresa a la hora de establecer por escrito los requerimientos. Lo que normalmente sucede es que las empresas que desarrollan software se ajustan a los requerimientos de los contratos y rara vez estos tienen cláusulas específicas referidas a posibles técnicas de seguridad necesarias en la aplicación. Por tanto si se descubre una falla en este tipo de aplicaciones, la empresa contratada pasará un presupuesto para corregirla porque simplemente "esa protección o atributo no estaba contemplado en el contrato inicial". Como verá la seguridad empieza por establecer en el contrato las cláusulas correspondientes a la seguridad de la aplicación, y es un hecho que una empresa contratada tomará las medidas necesarias para cumplir dichas cláusulas y no verse demandada a futuro. Para saber qué cláusulas hay que colocar todo lo que debe hacer es leer detenidamente un "checklist" de prácticas de seguridad en desarrollo de aplicaciones web.

Espero que esta visión desde un punto de vista diferente le sea de ayuda a la hora de tomar las decisiones correctas en la materia.

Hasta la próxima...

30 de enero de 2011

OWASP Appsec Security Tutorials: 1er Episodio - AppSec Basics

Nuevamente OWASP toma la delantera en lo referente a Seguridad de aplicaciones web. A continuación les referiré al primer episodio de la nueva serie de tutoriales de Seguridad de Aplicaciones Web, puesto en línea recientemente por Jerry Hoff, lider del proyecto.

La idea de estos tutoriales es ir presentando uno a la vez los más importantes proyectos de OWASP de forma amena e interesante. El próximo capítulo tratará del proyecto del que mucho hemos hablado en este blog OWASP Top 10 List. Estén pendientes.

A medida que vayan saliendo los capítulos se los iré presentando por este medio, pero pueden obtenerlos directamente desde la página del proyecto.



Hasta la próxima!

3 de enero de 2011

¿Cómo se calcula un riesgo en base al modelo DREAD?

Es importante cuando se habla de amenazas en aplicaciones web y otras, establecer un sistema de cálculo estándar que permita a los interesados (programadores, técnicos de seguridad y otros) medir el riesgo que dicha amenaza representa, de manera de priorizar las posibles respuestas ante cada tipo de ataque así como el ajuste del código o la plataforma una vez descubierta la amenaza.


DREAD es un esquema de clasificación para cuantificar, comparar y dar prioridad a la cantidad de riesgo que presenta una amenaza específica. El acrónimo DREAD se forma a partir de la primera letra del nombre en inglés de cada una de las categorías evaluadas.

El algoritmo de cálculo de riesgo DREAD que se muestra a continuación, se fija en base a un promedio de las cinco categorías contempladas en el modelo de cálculo:

Riesgo_DREAD = (Daño Potencial + Reproductibilidad + Explotabilidad + Usuarios Afectados + Detectabilidad) / 5

El cálculo de cada una de las categorías de riesgo siempre produce un número entre 0 y 10; cuanto mayor sea el número, más grave es el riesgo.

Éstos son algunos ejemplos de cómo cuantificar las categorías de riesgo:

Daño potencial:
Si una amenaza fuese explotada, ¿Cuánto daño causaría?
0 = Nada
5 = Datos de los usuarios individuales comprometidos o afectados.
10 = Destrucción de datos del sistema comleto

Reproductibilidad:
¿Es fácil de reproducir la amenaza a explotar?
0 = Muy difícil o imposible, incluso para los administradores de la aplicación.
5 = Uno o dos pasos necesarios, puede ser necesario un usuario autorizado.
10 = Sólo un navegador web y la barra de direcciones es suficiente, sin necesidad de autenticación.

Explotabilidad:
Lo que se necesita para aprovechar esta amenaza.
0 = Conocimientos avanzados de programación y de redes, con herramientas de ataque personalizadas o avanzadas.
5 = Malware existente en el Internet, o un exploit fácil de realizar con las herramientas disponibles en la web.
10 = Sólo un navegador web.

Usuarios a los que afecta:
¿Cuántos usuarios se verán afectados?
0 = Ninguno
5 = Algunos usuarios, pero no todos.
10 = Todos los usuarios.
En esta categoría se aplica matemáticamente un punto por cada 10% de posibles usuarios afectados.

Detectabilidad:
¿Es fácil descubrir esta amenaza?
0 = Muy difícil o imposible, requiere el código fuente o acceso administrativo.
5 = ¿Se puede averiguar de adivinar o mediante el control de trazas de red?
9 = Detalles de fallas de este tipo son ya de dominio público y puede ser fácilmente descubierto usando un motor de búsqueda.

Información más detallada sobre DREAD:


Hasta la próxima...

18 de diciembre de 2010

Tipos de ataques de DoS basados en fallas de la aplicación.

Cuando hablamos de DoS y DDoS podemos referirnos a muchos tipos diferentes de ataque que en definitiva lo que buscan es obligar al servidor a dejar de ofrecer el servicio. Sin embargo desde el punto de vista de la seguridad de aplicaciones web hay ciertos tipos de DoS (los más comunes) en los que no entraremos en explicaciones ya que no atacan directamente a la aplicación sino a los diferentes servicios necesarios para que esta pueda seguir en línea. Este tipo de ataques se denominan "Network based DoS Attacks" o Ataques de Dos basados en Redes y tratan primordialmente de explotar vulnerabilidades o limitaciones de los protocolos de red de las diferentes capas del protocolo TCP/IP.

Hablaremos hoy de un tipo de ataque de DoS que como programadores nos conciernen directamente y que se apoyan en fallas o vulnerabilidades de la aplicación. Aunque menos populares dichos ataques, son mucho más eficientes, ya que basados en vulnerabilidades en código de aplicación o de base de datos, suelen en muchos menos intentos consumir los recursos del servidor de forma muy eficaz.

Podemos dividirlos según OWASP en los siguientes:
NOTA: todos los enlaces llevan a la página correspondiente de OWASP en la que se trata acerca de cómo verificar y corregir el tipo de fallo que pudiera ocasionar estos tipos de ataque.

  1. SQL Wildcard Attacks.
    Son aquellos que se basan en desarrollar consultas que consumen gran cantidad de recursos del servidor SQL y aunque atacan a varios tipos de servidor SQL suelen preferir el MS-SQL por la cantidad de "wilcards" disponibles en las sentencias LIKE.
  2. DoS Locking Customer Accounts.
    Uno de los sistemas de defensa de las aplicaciones con validación de usuarios es la utilización de bloqueo de estos luego de una cantidad de intentos fallidos. Este mecanismo de defensa se convierte en un arma de negación de servicio bajo este tipo de ataque.
  3. DoS Buffer Overflows.
    La intención es hacer que una vulnerabilidad de Buffer Overflow en el control de la capacidad de los datos recibidos, se convierta en un arma que no permita que las rutinas completen y por ende liberen los recursos solicitados.
  4. DoS User Specified Object Allocation.
    Suele suceder cuando un usuario tiene la capacidad de solicitar multiples copias de un objeto a ser creado en el entorno del servidor sin un límite superior, lo que podría generar que dicho entorno quedara sin memoria disponible.
  5. User Input as a Loop Counter.
    Se produce al forzar a la aplicación a entrar de forma repetitiva en un bucle de código que consume gran cantidad de recursos.
  6. Writing User Provided Data to Disk.
    El objeto de este tipo de ataque es obligar al servidor a quedar sin suficiente espacio en disco, bien escribiendo datos provistos por el usuario, o llenado los archivos de logs de forma que crezcan lo suficiente como para acaparar el espacio en disco.
  7. DoS Failure to Release Resources.Este ataque se debe a la falla del programador o del entorno de desarrollo en liberar eficientemente los recursos utilizados por la aplicación. Suele suceder con mucha frecuencia especialmente al no liberar conexiones y sets de registros de bases de datos que consumen recursos por encima del promedio de otro tipo de objetos.
  8. Storing too Much Data in Session.
    Sucede cuando como el nombre lo indica, se guardan demasiados datos en la sesión del usuario, específicamente si el usuario no es un usuario autentificado, por lo cual el atacante no necesita de mucho esfuerzo para dejar a la aplicación sin recursos en el pool de memoria.

Hasta la próxima...

14 de diciembre de 2010

Los diez(10) tipos de vulnerabilidades de bases de datos más comunes

Aunque el tema no está relacionado directamente con las aplicaciones web, es importante para su sano funcionamiento, proteger de forma correcta los datos que estas utilizan y definitivamente proteger las bases de datos no es una tarea fácil, sobretodo porque a menudo los ataques que van tras las más simples vulnerabilidades son lo que tienen más éxito.

De acuerdo con Alex Rothacker, gerente AppSec's Team SHATTER (Security Heuristics of Application Testing Technology for Enterprise Research), su equipo ha encontrado 10 tipos comunes de vulnerabilidades base de datos por las que las organizaciones padecen ataques una y otra vez.

El hilo común de esta lista es que rara vez las bases de datos salen al mercado "security ready", y su configuración de seguridad no es un un trabajo de "hacer y olvidar" para los administradores de base de datos.

Las organizaciones deben evaluar continuamente los paquetes de su software de base de datos para determinar si son realmente necesarios y desactivar los que no son necesarios para reducir las superficies de ataque. Tienen que ser cuidadosos en controlar los campos en las búsquedas para prevenir inyecciones y tener conciencia de la debilidad en las credenciales de inicio de sesión. Y lo más importante, es necesario aplicar los parches de actualización de la casa matriz con regularidad.

Alrededor de la mitad de las vulnerabilidades nombradas por Rothacker y su equipo están directa o indirectamente relacionadas con las prácticas flojas de gestión de parches en el entorno de base de datos. Ese es un pensamiento aterrador considerando sólo el 38% de los administradores aplican los ajustes de seguridad en sus bases de datos Oracle en el ciclo de revisión inicial de tres meses. Y casi un tercio de ellos toman un año o más para aplicar el primer parche.

Dele una mirada a los 10 tipos de vulnerabilidades de bases de datos más comunes.

1.- Nombre de usuario/password en blanco, por defecto o débil.

No es nada raro conseguir en el día a día pares de usuario/password como sa/1234, esta el la primera línea de defensa y un punto fundamental de la armadura de nuestras bases de datos. Es importante hacer revisiones periódicas de credenciales.

2.- Inyecciones SQL.

Cuando la plataforma de base de datos falla para desinfectar las entradas, los atacantes son capaces de ejecutar las inyecciones SQL de forma similar a como lo hacen en los ataques basados en Web, lo que les permite elevar sus privilegios y obtener acceso a una amplia gama de funcionalidades. Muchos de los proveedores han dado a conocer soluciones para evitar estos problemas, pero no servirá de mucho si los parches no se aplican o no se toman los correctivos correspondientes.

3.- Preferencia de privilegios de usuario por privilegios de grupo.

Las organizaciones necesitan garantizar que los privilegios no se les den a los usuarios por asignación directa quien finalmente los recogerán como los conserjes recogen las llaves en sus llaveros. En cambio, Rothacker recomienda que los usuarios sólo reciban privilegios por parte de grupos o funciones y que  los privilegios sean manejados colectivamente. De esta forma será más fácil eliminar derechos a un usuario con simplemente eliminarlo del grupo, sin que queden derechos ocultos u olvidados asignados a dicho usuario.

4.- Características y funciones de base de datos innecesariamente habilitadas.

Cada instalación de base de datos viene con paquetes adicionales de todas las formas y tamaños que en su mayoría rara vez son utilizados por una sola organización. Dado que el nombre del juego en materia de seguridad de base de datos es el de reducir las superficies de ataque, las empresas necesitan buscar los paquetes que no utilizan y desactivarlos. Esto no sólo reduce los riesgos de ataques (0)day a través de estos vectores, sino que también simplifica la gestión de parches.

5.- Configuración de seguridad ineficiente.

Del mismo modo, las bases de datos tienen una gran cantidad opciones de configuración y consideraciones diferentes a disposición de los administradores para ajustar el rendimiento y funcionalidades mejoradas. Las organizaciones necesitan conseguir y desactivar aquellas configuraciones inseguras que podrían estar activadas por defecto para mayor comodidad de los DBA o desarrolladores de aplicaciones. Las configuraciones de bases de datos en producción y desarrollo deben ser radicalmente diferentes.

6.- Desbordamientos del búfer.

Otro favorito de los piratas cibernéticos, las vulnerabilidades de desbordamiento de búfer, son explotadas por las inundaciones de las fuentes de entrada con valores diferentes o muy superiores a los que aplicación espera - por ejemplo, mediante la adición de 100 caracteres en un cuadro de entrada pidiendo un número de Seguro Social -. Los proveedores de bases de datos han trabajado duro para solucionar los problemas técnicos que permiten estos ataques se produzcan. Esta es otra razón por la cual los parches son tan importantes.

7.- Escalada de privilegios.

Del mismo modo, las bases de datos con frecuencia exponen vulnerabilidades comunes que permiten a un atacante escalar privilegios en una cuenta con privilegios bajos hasta tener acceso a los derechos de un administrador. A medida que estas vulnerabilidades son descubiertas, los proveedores las corrigen y los administradores deben mantener las actualizaciones y parches actualizados.

8.- Ataque de denegación de servicio.

El caso del SQL Slammer es siempre un ejemplo muy esclarecedor de cómo los atacantes pueden utilizar las vulnerabilidades de los DBMS para derribar los servidores de base de datos a través de un alto flujo de tráfico. Aún más ilustrativo es el hecho de que cuando el Slammer atacó en 2003, un parche ya estaba por ahí que se dirigió a corregir la vulnerabilidad por la que se generó su ataque. Hoy en día siete años más tarde, SQL Slammer todavía está dando dolores de cabeza en los servidores no actualizados.

9.- Bases de datos sin actualizar.

Esto podría sonar repetitivo, pero vale la pena repetirlo. Los administradores de base de datos a veces no aplican un parche en el momento oportuno porque tienen miedo de este dañe sus bases de datos. Pero el riesgo de ser hackeado hoy es mucho más alto que el riesgo de aplicar un parche que descomponga la base de datos. Además existen ante esos temores los backups y las réplicas. Quizás este punto pudo haber sido válido hace cinco años, pero los proveedores ahora tienen mucho más cuidado con sus arreglos.

10.- Datos sensibles sin cifrar, tanto en reposo como en movimiento.

Tal vez sea una obviedad, pero las organizaciones no deben almacenar los datos sensibles en texto plano en una tabla. Y todas las conexiones a la base de datos siempre que manejen datos sensibles deben utilizar el cifrado.

Cualquier comentario al respecto será bienvenido...
Hasta la próxima.

1 de diciembre de 2010

¿Qué es el Google Hacking Database (GHDB)?

Google es entre muchas otras cosas el buscador con la mayor cantidad de páginas indexadas en el mundo y la mayor cantidad de búsquedas diarias, y precisamente por eso es una fuente inagotable de recursos y de información sobre cualquier tópico relacionado con la web. Es de suponer que una fuente de información de este tipo también puede ser usada para fines no muy éticos.

No hablamos de obtener información específica con fines no necesariamente legales. Tampoco se trata de utilizar las búsquedas para recoger información específica para hacer minería de datos. Esta vez hablamos (aunque pudiéramos relacionar algunos casos con las anteriores) de utilizar el mejor buscador del mundo para buscar aplicaciones web vulnerables a ciertos tipos de ataque o utilizar la información obtenida para mejorar la eficiencia de ataques pre-configurados.

¿Cómo puede ser esto? ¿Es verdad que a través de Google se pueden descubrir vulnerabilidades específicas? Pues es cierto, con el conocimiento necesario se pueden manejar las consultas para que nos provean de una lista de sitios que tienen una vulnerabilidad en común.

Es fácil, todo el tiempo oímos acerca de nuevas versiones de software (manejadores de contenido, servidores web, aplicaciones web pre-elaboradas) en las que se corrigen determinado tipo de vulnerabilidad. A veces esta información es colocada en línea para informar a los usuarios y desarrolladores lo cual es lógico, sin embargo de forma inocente al mismo tiempo se le informa a los atacantes acerca de una vulnerabilidad no conocida de la versión anterior. Así de sencillo.

Un ejemplo: El software para manejo de contenido que llamaremos "X" acaba de ser mejorado para resolver una vulnerabilidad de inyección de SQL, por tanto el atacante lo único que necesita hacer es ubicar una característica visible en la versión anterior de "X" que lo diferencie de la versión que no posee la vulnerabilidad. Algunas veces se trata de buscar una inocente cadena de texto como: "Powered by X version x.xxxx". Otras veces se trata de buscar un cambio en el nombre de un archivo o un cambio en el hash resultante del mismo.

Este tipo de búsqueda se realiza de forma sistemática y eficiente, parametrizando la cadena de búsqueda de Google con los "operadores" que pone a nuestra disposición el buscador y combinándolos de forma inteligente se puede afinar la búsqueda en un grado impresionante.

Par ver un listado de operadores de Google, puede visitar: http://www.googleguide.com/advanced_operators_reference.html
En este sitio encontrará una lista muy interesante de los operadores de Google para diferentes aplicaciones (stocks, groups, phonebook...) junto con su uso específico. Luego de apreciar algunos de los operadores que le parecerán sin dudad muy potentes, es muy posible de que no se haya percatado que estos operadores pueden además combinarse para hacer las búsquedas mucho más eficientes.

Por ejemplo, una búsqueda como: site:elsitio.com filetype:pdf  puede arrojar como resultado todos los archivos de formato "pdf" del sitio que coloquemos junto al operador "site:". Esta es una muestra de dos operadores muy potentes trabajando juntos. Con un poco de imaginación usted podrá entender con este simple ejemplo las razones por las que Google es la herramienta preferida de los atacantes y entenderá también como la distancia y el idioma dejan de ser barreras, ya que solo es necesario que un sitio tenga una vulnerabilidad detectable para que pueda ser accedido por los atacantes. Ah se me olvidaba el idioma, pero se preocupe, para eso existe Google Translator (el que además puede ser utilizado como "proxy" para evitar ser detectados en los test de penetración). Ah... se me olvidaba, si lo que quiere es ubicar un proxy ¡solo tiene que hacer la consulta correcta!

Quizás la idea es hacerle entender con lo anterior que su aplicación no se encuentra ya protegida por el enorme cúmulo de sitios web y aplicaciones en la red, tampoco la distancia ni el idioma son un obstáculo para el atacante. Ya no basta protegerse bajo la estrategia de la aguja en el pajar. Los operadores de Google pueden separar las agujas de la paja de forma rápida y hasta podría decirse que tan eficientemente como un verdugo experimentado aniquila a su víctima. 

Para más información puede acceder a la página:http://www.hackersforcharity.org/ghdb/
Allí podrá obtener información acerca de todos los tipos de consultas relacionados con vulnerabilidades que pueden ser detectadas mediante el uso de GHDB. También puede recurrir al libro Google Hacking Database for Penetration Testers, su versión "Volume 2" está bastante actualizada. Por otro lado allí podrá aprender la forma de combinar dichos operadores dependiendo del caso a tratar.

Le aseguro que no podrá volver al libro muchas veces, ya que pasará una gran cantidad de tiempo haciendo pruebas con el buscador entre un capítulo y otro, o mejor dicho, entre un párrafo y otro ;)

También es importante hacer notar que Google permanentemente hace esfuerzos por reducir la superficie de ataque proporcionada mediante los métodos de búsqueda avanzada y sus operadores por lo que algunos de los ejemplos del libro y del GHDB Central no son ya operativos. Claro aquí es donde su creatividad puede ser la diferencia.

Nota Importante: La información mostrada en el artículo se expone con fines estrictamente educacionales para ser utilizada como ayuda en la mejora de la seguridad de las aplicaciones web. No nos hacemos responsables del uso indebido de esta información por parte del lector.

26 de noviembre de 2010

El entrenamiento en seguridad web y lo que puede hacer por su empresa.

Para los negocios en línea, la seguridad es una parte vital en lo referente a la eficiencia y retorno de inversión de los mismos. Las aplicaciones web son las herramientas principales para las transacciones en línea, promoción de productos y servicios además de ser también las principales en presentar inconvenientes de seguridad que pudieran perjudicar a usted y a sus clientes a través de su aplicación. La capacitación de personal en el área de seguridad de aplicaciones web es definitivamente un valioso activo para las empresas. Proporcionar conocimientos básicos esenciales y la comprensión de las cuestiones de seguridad relacionadas, así como la capacitación práctica necesaria a su personal es actualmente imperativo. Este tipo de capacitación también ayuda al personal a entender y reconocer las posibles fallas de seguridad en sus negocios en tiempo real y por ende a evitar perjucios derivados.

¡Hacer las cosas bien antes desde el principio significa ahorrar dinero! 

La magnitud del riesgo actual es sin exageraciones demasiado alta para obviarla. Según fuentes de la industria, las aplicaciones web representan el 80% de las vulnerabilidades en línea. Su aplicación en línea puede tener cientos de vulnerabilidades latentes y por tanto una evaluación de riesgos al momento de la instalación de la misma es vital para el futuro de sus negocios en línea.

Aquí es donde la seguridad siempre es más eficaz, en la prevención de problemas antes de que sucedan. Pruebas exhaustivas y la comprobación de cada parte de su sistema para detectar las posibles deficiencias es parte primordial de una política preventiva. Los ahorros de costos pueden ser enormes. Infracciones o malas prácticas de seguridad pueden resultar en ataques tanto a las empresas en línea como a sus clientes, incurriendo en pérdidas financieras a veces muy graves. Y para añadir a los gastos, lo que usted no haya resuelto antes deberá resolverlo después, por tanto una política de prevención en el 80% de los casos significa un ahorro sin discusión.

Los problemas de seguridad en sus aplicaciones web son totalmente evitables. La mejor práctica es la prueba rigurosa y sistemática de todas las aplicaciones web antes de salir a la luz o entrer en línea de forma definitiva.

Piense en su aplicación web como en un buen submarino recién terminado: ¿Usted lo sumergiría a 5000 metros de profundidad sin haber hecho anteriormente una serie de pruebas de capacidad? Francamente no lo creo.

Tipos de entrenamiento necesarios:
La seguridad de aplicaciones web puede ser mucho más compleja de lo que parece por tanto existen varios tipos de entrenamiento dependiendo de las áreas en las que se desenvuelva el personal:
  • Entrenamiento Básico:
    Es necesario para cualquier personal a cargo de las áreas de negocios en línea conocer los riesgos a los que están expuestos así como ciertos principios fundamentales en cuanto a seguridad de las aplicaciones en línea con las que tienen relación y con las que desempeñan su trabajo cotidiano. La idea es formar una cultura de seguridad en línea sólida que forme parte a su vez de la cultura empresarial.
  • Entrenamiento Medio:
    Este es el que se brinda específicamente a las personas involucradas en las tomas de decisiones y que inciden en el tipo de aproximación al cliente y por tanto en el formato de las áreas de las aplicaciones en línea. Es importante que este personal esté al tanto de todos tipos de ataques que existen y cómo sus decisiones pudieran influir en que de una u otra forma estos tipos de ataque pudieran ser efectuados. Este entrenamiento debe convertirlos en conocedores de las posibles vulnerabilidades y las consecuencias que estas pudieran tener aunque no sean los encargados de corregirlas.
  • Entrenamiento Avanzado:
    Definitivamente, es a la hora de producir código y diseñar los procesos de la aplicación cuando se comete la gran parte de los errores que dejan abiertas las puertas a futuras complicaciones. En este tipo de entrenamiento, que es el más largo y especializado el programador o desarrollador deberá reconocer las fallas a nivel de código, pero por supuesto además deberá entender cómo evitarlas. Este entrenamiento tiene dos fases: La primera se encarga de enseñar a detectar, evaluar y evitar las fallas en forma genérica, y la segunda se basa en aquellas fallas específicas que dependen de la plataforma en la cual han sido desarrolladas o se desarrollarán la aplicación o aplicaciones.
Es importante aclarar que todo el aprendizaje debe estar basado en estándares OWASP y WASC, para que de esta forma se le haga entrega al personal de las herramientas necesarias para a su vez transmitir a otros los conocimientos adquiridos y potenciar los conocimientos en seguridad web como parte del capital de conocimientos empresarial.

Hasta la próxima...

21 de noviembre de 2010

Cuando la "S" en HTTPS no es suficiente!

Un error común de los programadores es creer que el hecho de que se ofrezca un servicio SSL/TLS en un servidor web con un certificado válido es más que suficiente para garantizar que los datos no sean interceptados por los atacantes.

Si bien en teoría y en la realidad esto es cierto, el programador debe entender que los protocolos SSL/TLS protegen la comunicación entre el navegador y el servidor hasta cierto punto. Y es que no es el navegador el encargado de cifrar el contenido y establecer la comunicación cifrada con el servidor. Los protocolos SSL/TLS se encuentran entre la capa de aplicación (en donde se halla el HTTP, SMTP, FTP y otros protocolos) y la capa de transporte, justo encima del protocolo del protocolo de comunicación TCP.

Cuando usted indica al navegador que conecte con un servidor que usa SSL usted utiliza HTTPS, la última consonante (S) indica al navegador que conecte por HTTPS que en realidad es simple HTTP con la adición de el protocolo de seguridad SSL o TLS.

Por tanto, cualquier ataque que intercepte la comunicación a nivel de la capa de aplicación podrá extraer la información sin cifrar en texto plano. Lo anterior significa que cualquier BHO (Browser Helper Object) Plug-in de Firefox o Chrome, e incluso cualquier sniffer que intercepte la mensajería del navegador fuera de este hacia las librerías de comunicación del sistema operativo, está en posibilidad de obtener la información que en un principio creeríamos que estaría protegida por el protocolo de cifrado SSL/TLS.

Es muy simple de verificar. Si usted tiene Firefox instalado en su sistema solo necesita instalar un add-on llamado Httpfox que si bien es una aplicación muy buena, útil e interesante, además de inofensiva, le permitirá verificar lo que en estas líneas intento exponer.

Esta aplicación a parte de ser extremadamente útil para los webmasters y programadores web, le permite ver todo el flujo de datos que pasa a través del protocolo HTTP. En resumidas cuentas es lo que llamaríamos un "HTTP sniffer". Utilíce Httpfox para visualizar el flujo de un sitio web que se comunica por SSL/TSL (un sitio que conecte por HTTPS) y verifique como usted podrá perfectamente visualizar los contenidos introducidos en los formularios y hasta aquellos de los de los campos de tipo "password", mientra explora el contenido de las peticiones POST.

Es lógico entender a partir de este peueño experimento que si el Httpfox está en capacidad de mostrarle esta información de forma completamente transparente y legal, eso también significa que cualquier otro add-on creado con mala intención podría tomarla la misma y enviarla a los amigos de lo ajeno. ¿Interesante no?

En futuros artículos hblaremos acerca de como proteger al usuario de este tipo de amenazas, aunque ya he mencionado algo en un artículo posterior: Man in the Browser Attack

Hasta la próxima...
Mauro Maulini R.

19 de noviembre de 2010

Vulnerabilidad de desbordamiento de enteros y cómo prevenirla.

Anteriormente hemos mencionado la importancia de la desinfección de parámetros como herramienta fundamental en el combate de las vulnerabilidades de una aplicación web, sin embargo la mayoría de las veces estamos atribuyendo que el parámetro recibido puede contener una cadena de SQL injection o XSS, sin percatarnos que hay un tipo infección utilizada para vulnerar nuestro sitio que es diferente a las anteriores: Desbordamiento de enteros o "Integer Overflow"

En palabra simples, se trata de parámetros numéricos recibidos por manipulación del querystring que desbordan la capacidad de los contenedores que hemos preparados para ellos, o que aunque no la desborden son luego utilizados en operaciones aritméticas en donde pudieran exceder la capacidad del contenedor asignado al resultado.

Es simple: Usted siempre recibe del usuario cadenas de texto por los parámetros del querystring, y si no toma las precauciones necesarias antes de convertirlas a enteros, puede tener errores. La primordial precaución que por defecto tomamos los desarrolladores es la de verificar que dicha cadena en realidad represente un número entero, sin embargo somos pocos quienes verificamos que dicho número no exceda la capacidad para la cual fue creado:

Un ejemplo de la vulnerabilidad en asp clásico. Si usted recibe un parámetro por el URL de la siguiente forma:

checkHotel.asp?idHotel=34 

Usted no solo debe preocuparse de que la cadena que contiene el parámetro idHotel sea numérica y entera sino de que soporte un intento de desbordamiento como por ejemplo:

checkHotel.asp?idHotel=642366423426423466423464

Si usted esperaba que el parámetro no superara un entero simple, se llevará una sorpresa al tratar de llamar una función como "cInt" ya que al desbordarse la capacidad de un entero la función generará un error debido a que espera un parámetro que se pueda convertir a un entero simple de 16 bits.

Quizás esta es una de las razones para dejar de una vez por todas de programar en ASP clásico, debido a que VbScript no posee una serie de funciones que permitan verificar los parámetros numéricos de forma eficiente.

Este tipo de falla puede ser utilizada para generar DoS (Denial of Service) ya que si por ejemplo el error se genera luego de haber abierto conexiones a bases de datos o requerido recursos que debido al mismo error no son liberados a tiempo, el atacante podría llamar la rutina indefinidamente hasta dejar al servidor inutilizado por falta de recursos, o al menos inutilizar la aplicación web.

Visto lo visto, mejor mudarse a ASP.NET si aún no lo ha hecho, en donde los métodos de los tipos enteros TryParse son una solución muy eficiente para convertir parámetros sin tantos dolores de cabeza. Cada tipo de entero tiene su propio método TryParse, así por ejemplo int32.TryParse es el método necesario para convertir cadenas a números de 32 bits.

En otros lenguajes como y JSP/Java podemos usar el manejo de excepciones (que si es eficiente) para verificar la validez de las conversiones con el conocido try/catch.

    public static boolean validateNumber(String num) {
        try {
            Integer.parseInt(num);
            return true;
        catch (Exception e) {
            return false;
        }
    }


En PHP una de las soluciones posibles además del manejo de excepciones es usar la librería "GMP arbitrary lenght integers" para enteros de longitud arbitraria. Hay que agregar la extensión al archivo "php.ini" des-comentando la línea:
;extension=php_gmp.dll


Una vez iniciada la librería solo resta usar los enteros:
<?php
$a 
gmp_init(123456);

$b gmp_init("0xFFFFDEBACDFEDF7200");
$c gmp_init("7756466309883824442551");
?>

De esta forma podrá manejar enteros sin importar su longitud de una forma mucho más segura ya que esta librería presenta todas las funciones matemáticas necesarias.

Hasta la próxima...

15 de noviembre de 2010

Clasificación de Amenazas WASC 2.0

La Clasificación de Amenazas WASC es un esfuerzo de cooperación para aclarar y organizar las amenazas a la seguridad de sitios web. Los miembros del Web Application Security Consortium han creado este proyecto para desarrollar y promover estándares de la industria en lo referente a la terminología para describir estos temas. Los desarrolladores de aplicaciones, profesionales de la seguridad, proveedores de software, y auditores tendrán la posibilidad de acceder a un lenguaje común y coherente, así omo a las definiciones para los problemas de seguridad relacionados con la web.


Las amenazas  traducidas al castellano son las siguientes:
  1. Autenticación insuficiente
  2. Autorización insuficiente
  3. Desbordamientos de enteros.
  4. Insuficiente protección en la capa de transporte.
  5. Inclusión de archivos remotos.
  6. Formato de cadenas.
  7. Desbordamiento del búfer.
  8. Cross-Site Scripting.
  9. Cross-Site Request Forgery.
  10. Denegación de Servicio. DoS.
  11. Fuerza bruta.
  12. Spoofing de contenido.
  13. Fuga de información.
  14. Configuración errónea del servidor.
  15. Configuración errónea de la aplicación.
  16. Indexación incorrecta de directorios.
  17. Permisos indebidos al sistema de archivos.
  18. Predicción de credenciales y/o sesión.
  19. Inyección de SQL.
  20. Manejo inadecuado de entradas.
  21. Anti-automatización insuficiente.
  22. Manejo inadecuado de salidas.
  23. XML inyección.
  24. HTTP Request Splitting.
  25. HTTP Response Splitting.
  26. Contrabando de solicitud HTTP.
  27. Contrabando de respuesta HTTP.
  28. Inyección de Byte Nulo.
  29. Inyección LDAP.
  30. Inyección de comandos de mail.
  31. Ejecución de comandos de SO.
  32. Desvío de enrutamiento.
  33. Recorrido de rutas.
  34. Localización previsible de recursos.
  35. Abuso de Arreglos SOAP.
  36. Inyección SSI.
  37. Fijación de sesión.
  38. Abuso de redireccionamiento URL.
  39. Inyección XPath.
  40. Insuficiente validación de procesos.
  41. Sobrecarga de atributos XML.
  42. Abuso de funcionalidad.
  43. Entidades externas XML.
  44. Expansión de entidades XML.
  45. Fingerprinting.
  46. Inyección XQuery.
  47. Caducidad de sesión insuficiente.
  48. Indexación Insegura.
  49. Debilidad de recuperación de contraseña.
Para conocer más de cada una de ellas específicamente, puedes visitar directamente http://projects.webappsec.org/w/page/13246978/Threat-Classification

Hasta la próxima...

Entradas populares