Jul 06

PixyCuando desarrollamos aplicaciones y en nuestro caso aplicaciones Web, con algun tipo de lenguaje de scripting. Nos encontramos con un serio problema, los ataques de Cross-site scripting (XSS) que aunque parezcan inofensivos, realmente no lo son si por ejemplo podemos usar la sesion de otro usuario para ver su cuenta de correo. Y con los ataques de inyecciones SQL , con lo que ya hablaríamos de algo un tanto mas serio porque se conseguiría acceso directo al servidor de base de datos y como no, a la shell para ejecutar comandos si se cuentan con los permisos necesarios. Lo que quiero decir con todo esto, es que nos encontramos con problemas de seguridad serios si no aseguramos de la manera mas adecuada nuestras aplicaciones Web, ya que no siempre podemos confiar en la seguridad del servidor con ciertos modulos, como puede ser mod_security . Principalmente porque se basan en reglas “humanas”, y de una manera u otra podriamos intentar evadir una regla especifica que bloqueara ciertos intentos (usando otro encode, etc). De esta manera podemos “confiar” más en nuestra aplicación frente a administradores <<zoquetes>> :).

Entre tantas soluciones me he decantado por una bajo licencia GPL (en realidad el cli es licencia apache y cup es licencia GPL-compatible), bajo el nombre de “Pixy”.
esta herramienta tan útil desarrollada en Java, se encargara de realizar auditorías de Código en PHP generando un “reporte” de los posibles fallos de seguridad que pudiera tener nuestra aplicación. Para ello se hace de una base de datos de practicas incorrectas de programasen y enumeran las que cumplan esa condición.

Uno de los ejemplos :

$lazaro = $_GET['lazaro'];

$Lylmik = addslashes($lazaro);

// inofensivo porque no se le pasa ninguna variable “peligrosa” a la sentencia
mysql_query(”SELECT * FROM comvive WHERE id = ‘1′”);   

// peligrosa porque la variable lazaro no se ha parseado
mysql_query(”SELECT * FROM comvive WHERE id = ‘$lazaro’”);  

 // inofensiva porque la variable Lylmik se ha parseado
mysql_query(”SELECT * FROM comvive WHERE id = ‘$Lylmik’”); 

// peligrosa por no añadir comillas simples
mysql_query(”SELECT * FROM comvive WHERE id = $Lylmik”);

Por lo tanto en el auditor obtendríamos un resultado similar a este :


directly tainted!

- fichero.php:4
- Graphs: sql2
- unconditionalindirectly tainted and dangerous!

- fichero.php:6
- Graphs: sql4
- unconditional

Donde como podemos observar nos muestra las lineas del fichero y con que tipo de problema nos encontramos. Esto es tan solo un ejemplo, como podéis observar en la Página oficial contienen bastantes ejemplos sobre todo tipo de Bugs comunes. Por lo que os aconsejo que les echéis un vistazo , no os arrepentireis.

Nota : Cuenta con una interfaz web para facilitarnos un poco la vida :

Otros enlaces de interés :

  • PHP-sat : otro auditor de código PHP
  • Rats : otro analizador de varios lenguajes :P y parecidos ITS4 y FlawFinder.

Listado de utilidades para analizar código muy interesantes : http://www.vanheusden.com/Linux/audit.html

Jul 04

MySQL-ProxyNavegando por diariolinux.com, me encuentro con esta entrada : http://diariolinux.com/2007/07/03/mysql-proxy-050/
Se trata de un Proxy para MySQL bajo licencia GPL, ¡Genial!, ¿que porque es genial?.
Básicamente gracias a un proxy para MySQL podemos monitorizar, analizar o transformar cualquier tipo de petición desde un cliente hacia el servidor de Base de datos. Como bien explica en la documentación oficial, podemos usarlo para :

  • Balanceo de carga : por ejemplo si queremos tirar de ciertas consultas mas lentas en otra maquina que tiene una replica de la base de datos.
  • Failover : supongamos que el servidor de base de datos “se cae”, podemos realizar un backup al “vuelo” de las peticiones y almacenarlas para su posterior uso.
  • Analisis de peticiones : porque no analizar que tipo de peticiones se hacen comúnmente de una forma mas “transparente” sin necesidad de tocar nuestro servidor de producción, así como por ejemplo analizar tiempos de respuesta, realizar estadísticas generales, etc.
  • Filtrado de peticiones : Podemos crear un filtro de seguridad para ciertas peticiones que no deseamos; que por ejemplo ciertos hosts realicen hacia MySQL, o algún tipo de filtro de seguridad que examine peticiones potencialmente peligrosas (escape a la shell para ejecutar comandos, inserciones en ciertas tablas…)
  • Modificación : Al igual que el filtro anterior, podemos determinar que peticiones no queremos y por lo tanto modificarlas “al vuelo”. Un divertido ejemplo seria filtrar una query a la tabla “password” entregando un hash incorrecto, para que un simpático atacante se de golpes en la cabeza pensando porque si estando crackeada la contraseña no funciona :P.

Ademas incluye algo bastante interesante, que es soporte para Lua , un lenguaje de scripting bastante rápido y fácil. En su página Web podemos encontrar algunos ejemplos muy utiles para empezar a desarrollar nuestros propios scripts :

  1. query interception
  2. query rewriting
  3. injecting queries
  4. returning a resultset
  5. executing shell commands
  6. loggin
  7. using proxy without changing port

Por lo tanto una herramienta muy muy interesante para cualquier administrador y desarrollador :). Así que en cuanto tenga un minuto prometo dedicarle un extenso documento a esta fantástica utilidad.