lunes, 18 de junio de 2018

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.