viernes, 29 de junio de 2018

Ataques Web - Ausencia de control de acceso a funciones

La mayoría de aplicaciones web verifican los derechos de acceso a nivel de función antes de hacer visible en la misma interfaz de usuario. A pesar de esto, las aplicaciones necesitan verificar el control de acceso en el servidor cuando se accede a cada función. Si las solicitudes de acceso no se verifican, los atacantes podrán realizar peticiones sin la autorización apropiada.

Como detectarlo


La mejor manera de determinar si una aplicación falla en restringir adecuadamente el acceso a nivel de funcionalidades es verificar cada funcionalidad de la aplicación. Usando un proxy, navegue su aplicación con un rol privilegiado. Luego visite reiteradamente páginas restringidas usando un rol con menos privilegios. Si el servidor responde a ambos por igual, probablemente es vulnerable. Algunas pruebas de proxies apoyan directamente este tipo de análisis.

También puede revisar la implementación del control de acceso en el código. Intente seguir una solicitud unitaria y con privilegios a través del código y verifique el patrón de autorización. Luego busque en el código para detectar donde no se está siguiendo ese patrón.

Las herramientas automatizadas no suelen encontrar estos problemas.


Como prevenirlo


La aplicación debería tener un módulo de autorización consistente y fácil de analizar, invocado desde todas las funciones de negocio.
Frecuentemente, esa protección es provista por uno o más componentes externos al código de la aplicación.


  1. El proceso para gestión de accesos y permisos debería ser actualizable y auditable fácilmente. No lo implemente directamente en el código sin utilizar parametrizaciones. 
  2. La implementación del mecanismo debería negar todo acceso por defecto, requiriendo el establecimiento explícito de permisos a roles específicos para acceder a cada funcionalidad. 
  3. Si la funcionalidad forma parte de un workflow, verifique y asegúrese que las condiciones del flujo se encuentren en el estado apropiado para permitir el acceso.
NOTA: La mayoría de las aplicaciones web no despliegan links o botones para funciones no autorizadas, pero en la práctica el “control de acceso de la capa de presentación” no provee protección. Debería implementar chequeos en los controladores y/o lógicas de negocios.

lunes, 25 de junio de 2018

Ataques Web - Configuración de Seguridad incorrecta

Una buena seguridad requiere tener definida e implementada una configuración segura para la aplicación, marcos de trabajo, servidor de aplicación, servidor web, base de datos, y plataforma. Todas estas configuraciones deben ser definidas, implementadas, y mantenidas ya que por lo general no son seguras por defecto. Esto incluye mantener todo el software actualizado, incluidas las librerías de código utilizadas por la aplicación.


Como detectarlo


¿Cuenta su aplicación con el apropiado fortalecimiento en seguridad a través de todas las capas que la componen? Incluyendo:

  1. ¿Tiene algún software sin actualizar? Esto incluye el SO, Servidor Web/Aplicación, DBMS, aplicaciones, y todas las librerías de código. 
  2. ¿Están habilitadas o instaladas alguna característica innecesaria (p. ej. puertos, servicios, páginas, cuentas, privilegios)? 
  3. ¿Están las cuentas por defecto y sus contraseñas aún habilitadas y sin cambiar? 
  4. ¿Su manejo de errores revela rastros de las capas de aplicación u otros mensajes de error demasiado informativos a los usuarios? 
  5. ¿Están las configuraciones de seguridad en su framework de desarrollo (p. ej. Struts, Spring, ASP.NET) y librerías sin configurar a valores seguros? 
Sin un proceso repetible y concertado de configuración de seguridad para las aplicaciones, los sistemas están en alto riesgo.

Como prevenirlos


Las recomendaciones primarias son el establecimiento de todo lo siguiente:
  1. Un proceso rápido, fácil y repetible de fortalecimiento para obtener un entorno apropiadamente asegurado. Los entornos de Desarrollo, QA y Producción deben ser configurados idénticamente (con diferentes contraseñas usadas en cada entorno). Este proceso puede ser automático para minimizar el esfuerzo de configurar un nuevo entorno seguro. 
  2. Un proceso para mantener y desplegar las nuevas actualizaciones y parches de software de una manera oportuna para cada entorno. Debe incluir también todas las librerías de código. 
  3. Una fuerte arquitectura de aplicación que proporcione una separación segura y efectiva entre los componentes. 
  4. Considere ejecutar escaneos y realizar auditorías periódicamente para ayudar a detectar fallos de configuración o parches omitidos.

viernes, 22 de junio de 2018

Ataques Web - Referencia directa insegura a objetos

Una referencia directa a objetos ocurre cuando un desarrollador expone una referencia a un objeto de implementación interno, tal como un fichero, directorio, o base de datos. Sin un chequeo de control de acceso u otra protección, los atacantes pueden manipular estas referencias para acceder a datos no autorizados. 


Como detectarlo


La mejor manera de poder comprobar si una aplicación es vulnerable a referencias inseguras a objetos es verificar que todas las referencias a objetos tienen las protecciones apropiadas. Para conseguir esto, considerar:
  1. Para referencias directas a recursos restringidos, la aplicación necesitaría verificar si el usuarios está autorizado a acceder al recurso en concreto que solicita. 
  2. Si la referencia es una referencia indirecta, la correspondencia con la referencia directa debe ser limitada a valores autorizados para el usuario en concreto.
Un análisis del código de la aplicación servirá para verificar rápidamente si dichas propuestas se implementan con seguridad. También es efectivo realizar comprobaciones para identificar referencias a objetos directos y si estos son seguros. Normalmente las herramientas automáticas no detectan este tipo de vulnerabilidades porque no son capaces de reconocer cuales necesitan protección o cuales son seguros e inseguros.

Como prevenirlos


Requiere seleccionar una forma de proteger los objetos accesibles para cada usuario (identificadores de objeto, nombres de fichero):

  1. Utilizar referencias indirectas por usuario o sesión. Esto evitaría que los atacantes accedieron directamente a recursos no autorizados. Por ejemplo, en vez de utilizar la clave del recurso de base de datos, se podría utilizar una lista de 6 recursos que utilizase los números del 1 al 6 para indicar cual es el valor elegido por el usuario. La aplicación tendría que realizar la correlación entre la referencia indirecta con la clave de la base de datos correspondiente en el servidor. 
  2. Comprobar el acceso. Cada uso de una referencia directa a un objeto de una fuente que no es de confianza debe incluir una comprobación de control de acceso para asegurar que el usuario está autorizado a acceder al objeto solicitado.

miércoles, 20 de junio de 2018

Git - Como se usa?

Git Init



Esto crea un nuevo subdirectorio llamado .git que contiene todos los archivos necesarios del repositorio un esqueleto de un repositorio Git. Todavía no hay nada en tu proyecto que esté bajo seguimiento.


Git Clone



Si deseas obtener una copia de un repositorio Git existente el comando que necesitas es git clone. Si estás familizarizado con otros sistemas de control de versiones como Subversion, verás que el comando es clone y no checkout. Es una distinción importante, ya que Git recibe una copia de casi todos los datos que tiene el servidor. Cada versión de cada archivo de la historia del proyecto es descargado cuando ejecutas git clone.


Git Status



Tu principal herramienta para determinar qué archivos están en qué estado es el comando git status.


Git add



Para empezar el seguimiento de un nuevo archivo se usa el comando git add
Existen los comandos git rm que remueve archivos y git mv modifica archivos.


Git diff



git diff te muestra exactamente las líneas añadidas y eliminadas


Recuerda que cada archivo de tu directorio de trabajo puede estar en uno de estos dos estados: bajo seguimiento (tracked), o sin seguimiento (untracked). Los archivos bajo seguimiento son aquellos que existían en la última instantánea; pueden estar sin modificaciones, modificados, o preparados. Los archivos sin seguimiento son todos los demás —cualquier archivo de tu directorio que no estuviese en tu última instantánea ni está en tu área de preparación—. La primera vez que clonas un repositorio, todos tus archivos estarán bajo seguimiento y sin modificaciones, ya que los acabas de copiar y no has modificado nada.
A medida que editas archivos, Git los ve como modificados, porque los has cambiado desde tu última confirmación. Preparas estos archivos modificados y luego confirmas todos los cambios que hayas preparado, y el ciclo se repite.


Git commit



La confirmación (commit) registra la instantánea de tu área de preparación. Cualquier cosa que no preparases sigue estando modificada; puedes hacer otra confirmación para añadirla a la historia del proyecto. Cada vez que confirmas, estás registrando una instantánea de tu proyecto, a la que puedes volver o con la que puedes comparar más adelante


Git log



Con esta herramienta puedes ver el historial del repositorio Git. Y ver que cambios se realizaron (-p) y quienes los realizó.


Gitk



Es una herramiento visual muy potente que permite ver el historial, los archivos que fueron modificados y quien lo hizo, en fin se puede ver todo el repositorio con su historico.


Git push



Cuando tu proyecto se encuentra en un estado que quieres compartir, tienes que enviarlo a un repositorio remoto. El comando que te permite hacer esto es sencillo: git push [nombre-remoto][nombre-rama]. Si quieres enviar tu rama maestra (master) a tu servidor origen (origin).


Git branch


Te permite crear un branch con el nombre que le pases como parámetro.


Git checkout



Te permite ir a un branch específica el cual le pasas como parámetro.

lunes, 18 de junio de 2018

Ataques Web - Secuencia de comandos en sitios cruzados (XSS)

Las fallas XSS ocurren cada vez que una aplicación toma datos no confiables y los envía al navegador web sin una validación y codificación apropiada. XSS permite a los atacantes ejecutar secuencia de comandos en el navegador de la víctima los cuales pueden secuestrar las sesiones de usuario, destruir sitios web, o dirigir al usuario hacia un sitio malicioso.

Como detectarlo


Es vulnerable si no asegura que todas las entradas de datos ingresadas por los usuarios son codificadas adecuadamente; o si no se verifica en el momento de ingreso que los datos sean seguros antes de ser incluidos en la página de salida. Sin la codificación o validación debida, dicha entrada será tratada como contenido activo en el navegador. De utilizar una API de JavaScript insegura, se deben realizar la codificación o validación de las entradas.

Mediante el uso de herramientas automatizadas se pueden identificar ciertas vulnerabilidades de XSS. Sin embargo, cada aplicación construye las páginas de salida de forma diferente y utiliza distintos intérpretes en el navegador como JavaScript, ActiveX, Flash o Silverlight, dificultando la detección automática. Una cobertura completa requiere además de enfoques automáticos, una combinación de técnicas como la revisión manual de código y de pruebas de penetración.

Las tecnologías Web 2.0 como Ajax, hacen que XSS sea mucho más difícil de detectar mediante herramientas automatizadas.


Como prevenirlo


Prevenir XSS requiere mantener los datos no confiables separados del contenido activo del navegador.
  1. La opción preferida es codificar los datos no confiables basados en el contexto HTML (cuerpo, atributo, JavaScript, CSS, o URL) donde serán ubicados. 
  2. También se recomienda la validación de entradas positiva o de “lista blanca”, considerando que esta técnica no es una defensa completa ya que muchas aplicaciones requieren aceptar caracteres especiales como parte de las entradas válidas. Dicha validación debe, en la medida de lo posible, validar el largo, los caracteres, el formato y reglas de negocio que debe cumplir el dato antes de aceptarlo como entrada. 
  3. Para contenido en formato enriquecido, considere utilizar bibliotecas de auto sanitización como AntiSamy de OWASP o el proyecto sanitizador de HTML en Java. 
  4. Considere utilizar políticas de seguridad de contenido (CSP) para defender contra XSS la totalidad de su sitio.

Como instalar un Plugin en Jenkins

Antes de realizar cualquier instalación lo mejor es frenar toda ejecución que se realiza en el servidor de Jenkins, para ello se debe ir a “Manage jenkins” y luego presionar en el último icono que dice “Prepare for Shutdown”


Para poder instalar un plugin en jenkins es necesario ir a la parte de configuración de Jenkins, ingresando en “Manage Jenkins”. Luego tendremos que ir a “Manage Plugins”:






En la pantalla que le sigue veremos cuatro solapas “Update”, “Available”, “Installed” y “Advanced”:


Update: Los plugins que se encuentran en esta solapa son los plugins que están instalados y que tienen una nueva versión del mismo para ser actualizada.

Available: Los plugins que se encuentran aquí son todos los que están disponibles para instalarse, en cada uno de ellos tiene una breve descripción, la última versión y el link a la página oficial del plugin.

Installed: Los plugins que se encuentran en esta solapa son los plugins actualmente instalados dentro de Jenkins.

Advanced: Aquí se encuentra una configuración avanzada que se puede hacer en el proyecto, por ejemplo poner un proxy, subir un plugin manualmente, agregar un sitio donde haya más plugins, etc.


Una vez que elegiste el o los plugins que queres instalar, solo tiene que ir debajo de todo y presionar el siguiente botón “Donwload now and install after restart”. Que lo instala y reinicia el server para que se configuren estos plugins.

viernes, 15 de junio de 2018

Ataques Web - Pérdida de Autenticación y gestión de sesiones

Las funciones de la aplicación relacionadas a autenticación y gestión de sesiones son frecuentemente implementadas incorrectamente, permitiendo a los atacantes comprometer contraseñas, claves, token de sesiones, o explotar otras fallas de implementación para asumir la identidad de otros usuarios.


Como detectarlo



  1. Las credenciales de los usuarios no están protegidas cuando se almacenan utilizando un cifrado. 
  2. Se puede adivinar o sobrescribir las credenciales a través de funciones débiles de gestión de sesion (ejemplos: creación de usuarios, cambios de contraseñas, id de sesiones débiles). 
  3. Los Id de sesión son expuestos en la URL (ejemplo: reescritura de las URL) 
  4. Los Id de sesión son vulnerables a ataques de fijación de la sesión. 
  5. Los Id de sesión no expiran, o las sesiones de los usuarios o los tokens de autenticación. En particular, los tokens de inicio de sesión único (SSO), no son invalidados durante el cierre de sesión. 
  6. Los Id de sesiones no son rotados luego de una autenticación exitosa. 
  7. Los contraseñas. Id de sesión y otras credenciales son transmitidas a través de canales no cifrados.

Como prevenirlo



La recomendación principal para una organización es facilitar a los desarrolladores:

1. Un único conjunto de controles de autenticación y gestión de sesiones fuerte. Dichos controles deberán conseguir:

a. Cumplir con todos los requisitos de autenticación y gestión de sesiones definidos en el Application Security Verification Standard (ASVS) de OWASP, secciones V2 (Autenticación) y V3 (Gestión de sesiones).

b. Tener una interfaz simple para los desarrolladores. Considerar el uso de ESAPI Authenticator y las API de usuario como buenos ejemplos a seguir, utilizar o sobre los que construir.

2. Se debe realizar un gran esfuerzo en evitar vulnerabilidades de XSS que podrían ser utilizadas para robar ID de sesión. Vers sección XSS.



jueves, 14 de junio de 2018

Git - Como funciona?

Control de Versiones



Los sistemas de control de versiones centralizados, como CVS, Subversion, y Perforce, tienen un único servidor que contiene todos los archivos versionados, y varios clientes que descargan los archivos desde ese lugar central. Durante muchos años éste ha sido el estándar para el control de versiones.


sistema de control de versiones centralizado


Esta configuración ofrece muchas ventajas, especialmente frente a VCSs locales. Por ejemplo, todo el mundo puede saber (hasta cierto punto) en qué están trabajando los otros colaboradores del proyecto. Los administradores tienen control detallado de qué puede hacer cada uno; y es mucho más fácil administrar un CVCS que tener que lidiar con bases de datos locales en cada cliente.
Sin embargo, esta configuración también tiene serias desventajas. La más obvia es el punto único de fallo que representa el servidor centralizado. Si ese servidor se cae durante una hora, entonces durante esa hora nadie puede colaborar o guardar cambios versionados de aquello en que están trabajando. Si el disco duro en el que se encuentra la base de datos central se corrompe, y no se han llevado copias de seguridad adecuadamente, pierdes absolutamente todo,cuando tienes toda la historia del proyecto en un único lugar, te arriesgas a perderlo todo.


Sistemas de control de versiones distribuidos



Es aquí donde entran los sistemas de control de versiones distribuidos. En un DVCS (como Git, Mercurial, Bazaar o Darcs), los clientes no sólo descargan la última instantánea de los archivos: replican completamente el repositorio. Así, si un servidor muere, y estos sistemas estaban colaborando a través de él, cualquiera de los repositorios de los clientes puede copiarse en el servidor para restaurarlo. Cada vez que se descarga una instantánea, en realidad se hace una copia de seguridad completa de todos los datos.
Sistemas de control de versiones distribuidos


Es más, muchos de estos sistemas se las arreglan bastante bien teniendo varios repositorios con los que trabajar, por lo que puedes colaborar con distintos grupos de gente simultáneamente dentro del mismo proyecto. Esto te permite establecer varios flujos de trabajo que no son posibles en sistemas centralizados, como pueden ser los modelos jerárquicos.


Instantáneas, no diferencias



La principal diferencia entre Git y cualquier otro VCS (Subversion y compañía incluidos) es cómo Git modela sus datos. Conceptualmente, la mayoría de los demás sistemas almacenan la información como una lista de cambios en los archivos. Estos sistemas (CVS, Subversion, Perforce, Bazaar, etc.) modelan la información que almacenan como un conjunto de archivos y las modificaciones hechas sobre cada uno de ellos a lo largo del tiempo.
instantaneas copias diferencias en svn


En cambio, Git modela sus datos más como un conjunto de instantáneas de un mini sistema de archivos. Cada vez que confirmas un cambio, o guardas el estado de tu proyecto en Git, él básicamente hace una foto del aspecto de todos tus archivos en ese momento, y guarda una referencia a esa instantánea. Para ser eficiente, si los archivos no se han modificado, Git no almacena el archivo de nuevo, sólo un enlace al archivo anterior idéntico que ya tiene almacenado.


instantaneas copias diferencias en svn


Esta es una distinción importante entre Git y prácticamente todos los demás VCSs. Hace que Git reconsidere casi todos los aspectos del control de versiones que muchos de los demás sistemas copiaron de la generación anterior. Esto hace que Git se parezca más a un mini sistema de archivos con algunas herramientas tremendamente potentes construidas sobre él, que a un VCS.


Casi cualquier operación es local



La mayoría de las operaciones en Git sólo necesitan archivos y recursos locales para operar. Por lo general no se necesita información de ningún otro ordenador de tu red. Si estás acostumbrado a un CVCS donde la mayoría de las operaciones tienen esa sobrecarga del retardo de la red, este aspecto de Git te va a hacer pensar que los dioses de la velocidad han bendecido Git con poderes sobrenaturales. Como tienes toda la historia del proyecto ahí mismo, en tu disco local, la mayoría de las operaciones parecen prácticamente inmediatas.
Por ejemplo, para navegar por la historia del proyecto, Git no necesita salir al servidor para obtener la historia y mostrarla, simplemente la lee directamente de tu base de datos local. Esto significa que ves la historia del proyecto casi al instante. Si quieres ver los cambios introducidos en un archivo entre la versión actual y la de hace un mes, Git puede buscar el archivo hace un mes y hacer un cálculo de diferencias localmente, en lugar de tener que pedirle a un servidor remoto que lo haga, u obtener una versión antigua desde la red y hacerlo de manera local.
Esto también significa que hay muy poco que no puedas hacer si estás desconectado o sin VPN. Si te subes a un avión o a un tren y quieres trabajar un poco, puedes confirmar tus cambios felizmente hasta que consigas una conexión de red para subirlos. Si te vas a casa y no consigues que tu cliente VPN funcione correctamente, puedes seguir trabajando. En muchos otros sistemas, esto es imposible o muy doloroso. En Perforce, por ejemplo, no puedes hacer mucho cuando no estás conectado al servidor; y en Subversion y CVS, puedes editar archivos, pero no puedes confirmar los cambios a tu base de datos (porque tu base de datos no tiene conexión). Esto puede no parecer gran cosa, pero te sorprendería la diferencia que puede suponer.


Git tiene integridad



Todo en Git es verificado mediante una suma de comprobación (checksum en inglés) antes de ser almacenado, y es identificado a partir de ese momento mediante dicha suma. Esto significa que es imposible cambiar los contenidos de cualquier archivo o directorio sin que Git lo sepa. Esta funcionalidad está integrada en Git al más bajo nivel y es parte integral de su filosofía. No puedes perder información durante su transmisión o sufrir corrupción de archivos sin que Git lo detecte.
El mecanismo que usa Git para generar esta suma de comprobación se conoce como hash SHA-1. Se trata de una cadena de 40 caracteres hexadecimales (0-9 y a-f), y se calcula en base a los contenidos del archivo o estructura de directorios. Un hash SHA-1 tiene esta pinta:


24b9da6552252987aa493b52f8696cd6d3b00373
Verás estos valores hash por todos lados en Git, ya que los usa con mucha frecuencia. De hecho, Git no guarda todo por nombre de archivo, sino por el valor hash de sus contenidos.


Git generalmente sólo añade información



Cuando realizas acciones en Git, casi todas ellas sólo añaden información a la base de datos de Git. Es muy difícil conseguir que el sistema haga algo que no se pueda deshacer, o que de algún modo borre información. Como en cualquier VCS, puedes perder o estropear cambios que no has confirmado todavía; pero después de confirmar una instantánea en Git, es muy difícil de perder, especialmente si envías (push) tu base de datos a otro repositorio con regularidad.
Esto hace que usar Git sea un placer, porque sabemos que podemos experimentar sin peligro de fastidiar gravemente las cosas. Para un análisis más exhaustivo de cómo almacena Git su información y cómo puedes recuperar datos aparentemente perdidos, ver “Entre bambalinas” en el Capítulo 9.


Los tres estados



Ahora presta atención. Esto es lo más importante a recordar acerca de Git si quieres que el resto de tu proceso de aprendizaje prosiga sin problemas. Git tiene tres estados principales en los que se pueden encontrar tus archivos: confirmado (committed), modificado (modified), y preparado (staged). Confirmado significa que los datos están almacenados de manera segura en tu base de datos local. Modificado significa que has modificado el archivo pero todavía no lo has confirmado a tu base de datos. Preparado significa que has marcado un archivo modificado en su versión actual para que vaya en tu próxima confirmación.
Esto nos lleva a las tres secciones principales de un proyecto de Git: el directorio de Git (Git directory), el directorio de trabajo (working directory), y el área de preparación (staging area).
operaciones locales en git, working directory, staging, git directory


El directorio de Git es donde Git almacena los metadatos y la base de datos de objetos para tu proyecto. Es la parte más importante de Git, y es lo que se copia cuando clonas un repositorio desde otro ordenador.
El directorio de trabajo es una copia de una versión del proyecto. Estos archivos se sacan de la base de datos comprimida en el directorio de Git, y se colocan en disco para que los puedas usar o modificar.
El área de preparación es un sencillo archivo, generalmente contenido en tu directorio de Git, que almacena información acerca de lo que va a ir en tu próxima confirmación. A veces se le denomina índice, pero se está convirtiendo en estándar el referirse a ella como el área de preparación.
El flujo de trabajo básico en Git es algo así:
Modificas una serie de archivos en tu directorio de trabajo.
Preparas los archivos, añadiendolos a tu área de preparación.
Confirmas los cambios, lo que toma los archivos tal y como están en el área de preparación, y almacena esas instantáneas de manera permanente en tu directorio de Git.
Si una versión concreta de un archivo está en el directorio de Git, se considera confirmada (committed). Si ha sufrido cambios desde que se obtuvo del repositorio, pero ha sido añadida al área de preparación, está preparada (staged). Y si ha sufrido cambios desde que se obtuvo del repositorio, pero no se ha preparado, está modificada (modified). En el Capítulo 2 aprenderás más acerca de estos estados, y de cómo puedes aprovecharte de ellos o saltarte toda la parte de preparación.


miércoles, 13 de junio de 2018

Excluir archivos del análisis de sonar

Para poder sacar archivos del análisis de sonar es necesario desde Jenkins poner un parámetro en el analizador de sonar en la configuración de la tarea. El parámetro que se debe agregar es sonar.exclusions=_path_de_archivos, un ejemplo muy utilizado en los analizadores de sonar son los que analizan JavaScript, ya que en el código mismo suele haber librerías externas como jquery u otras que están mitificadas, por lo que para excluirlas se debe agregar lo siguiente:

**/*jquery*.js,**/*min*.js

Como se puede ver se puede agregar más de un path.

lunes, 11 de junio de 2018

Ataques Web - Inyección de SQL

Las fallas de inyección, tales como SQL, OS, y LDAP, ocurren cuando datos no confiables son enviados a un intérprete como parte de un comando o consulta. Los datos hostiles del atacante pueden engañar al intérprete en ejecutar comandos no intencionados o acceder datos no autorizados.

Como detectarlo


La mejor manera de averiguar si una aplicación es vulnerable a una inyección es verificar que en todo uso de intérpretes se separa la información no confiable del comando o consulta. Para llamados SQL, esto significa usar variables parametrizadas en todas las sentencias preparadas (prepared statements) y procedimientos almacenados, evitando las consultas dinámicas.

Verificar el código es una manera rápida y precisa para ver si la aplicación usa intérpretes de manera segura. Herramientas de análisis de código pueden ayudar al analista de seguridad a ver como se utilizan los intérpretes y seguir el flujo de datos a través de la aplicación. Los testadores pueden validar estos problemas al crear pruebas que confirmen la vulnerabilidad.

El análisis dinámico automatizado, el cual ejercita la aplicación puede proveer una idea de si existe alguna inyección explotable. Los analizadores automatizados no siempre pueden alcanzar a los intérpretes y se les dificulta detectar si el ataque fue exitoso. Un manejo pobre de errores hace a las inyecciones fáciles de descubrir.


Como prevenirlo


Evitar una inyección requiere mantener los datos no confiables separados de los comandos y consultas.

  1. La opción preferida es usar una API segura la cual evite el uso de intérpretes por completo o provea una interfaz parametrizada. Sea cuidadoso con las APIs, como los procedimiento almacenados, que son parametrizados, pero que aún pueden introducir inyecciones en el motor del intérprete. 
  2. Si una API parametrizada no está disponible, debe codificar cuidadosamente los caracteres especiales, usando la sintaxis de escape específica del intérprete. 
  3. La validación de entradas positiva o de "lista blanca" también se recomienda, pero no es una defensa integral dado que muchas aplicaciones requieren caracteres especiales en sus entradas. Si se requieren caracteres especiales, sólo las soluciones anteriores 1. y 2. harían su uso seguro.

miércoles, 6 de junio de 2018

Seguridad Ataques Web

Porque cuando programamos no pensamos en la seguridad. Por desconocimiento ? o creemos que ya esta solucionado? o decimos a nosotros no nos pasa?. Es un grave error pensar así, es tarea del desarrollador pensar que la aplicación puede tener estas vulnerabilidades 

Top 10 de Ataques



Aquí listamos los 10 ataques más detectados en el año 2013 según OWASP.


  • Inyección de SQL 
  • Pérdida de Autenticación y gestión de sesiones 
  • Secuencia de comandos en sitios cruzados (XSS) 
  • Referencia directa insegura a objetos 
  • Configuración de Seguridad incorrecta 
  • Ausencia de datos sensibles 
  • Ausencia de control de acceso a funciones 
  • Falsificación de petición en sitios cruzados (CSRF) 
  • Utilización de componentes con vulnerabilidades conocidas 
  • Redirecciones y reenvíos no validados

Demostraciones

  • Fuerza Bruta
  • Command Execution
  • Sql Inyection
  • CSRF
  • XSS Almacenado
  • Sql Injection Blind
  • XSS Reflected

Vulnerabilidades en empresas importantes



Movistar: Expuso movimientos de lineas



El incidente fue reportado por un estudiante de ingeniería en informática de la UBA; la vulnerabilidad, que está siendo analizada por la compañía, permitía acceder al registro de actividades de cualquier línea de la operadora.

Cualquier usuario con acceso a la página de consultas online.movistar.com.ar podía tener acceso al registro de cualquier otro cliente de la compañía.

Alcanzaba con tener un usuario y contraseña de Movistar y tipear la dirección :
https://online.movistar.com.ar/services/movimientoServlet?fechaDesde=14042014&fechaHasta=14042014&categoria=&orden=0&numeroLinea=XXXXXXXXXX
para acceder a todos los movimientos de una línea determinada.