domingo, septiembre 05, 2010

Máquinas virtuales en servidores sin permisos

Primero hay que descargar y compilar el emulador de CPUs Qemu en un servidor. Si hubiera algún problema de dependencias podemos consultar la entrada de instalar software limpiamente mediante GNU/Toast

wget http://download.savannah.gnu.org/releases/qemu/qemu-0.12.5.tar.gz
tar xzf qemu-0.12.5.tar.gz
cd qemu-0.12.5
./configure && make

A continuación obtenemos la ISO de instalación de algún sistema operativo. Creamos una imagen de disco y arrancamos el proceso de instalación.

wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/mini.iso
qemu-img create -f qcow ubuntu.qcow 4G
nohup qemu --cdrom mini.iso -hda ubuntu.qcow -m 256 -boot d -vnc :1 &

Para realizar la instalación desde el cliente conectaremos con el servidor usando algún cliente de VNC

vinagre nombredelservidor:1

Al finalizar podemos arrancar el sistema instalado y volver a conectarnos con VNC

nohup qemu --cdrom mini.iso -hda ubuntu.qcow -m 256 -boot c -vnc :1 &

miércoles, mayo 12, 2010

Acceso directo al driver de red

Estoy con mi proyecto de fin de carrera en el que pretendo desarrollar un inyector de paquetes (sí otro más), así que investigo bastante en este tema. Esta entrada es para aquella gente que sabe de lo que hablo porque voy a sobreentender que se saben ya bastantes cosas de redes y de programación con sockets.

He estado investigando cómo conseguir llegar a inyectar lo que yo quiera en el cable de red, y con esto me refiero a que por el cable vaya una ristra de bytes tal cual yo la he definido, sin más cabeceras ni información añadida por ningún driver, ni SO y lo he logrado.

Como muchos saben en sistemas POSIX existe o podría existir la llamada al sistema socket(domain, type, protocol), que permite iniciar un socket para la comunicación por red. Siempre la he mirado con mucho recelo porque aunque me permite una gran flexibilidad, lo máximo que yo sabía de a dónde podía llegar es a actuar por encima del nivel de red, concretamente por encima de IP mediante SOCK_RAW.

Hoy he descubierto, después de mirar mucho código, de leer mucho man y buscar en internet, que se puede llegar mas lejos (como suponía) y he logrado acceder totalmente a la red.

En el man socket se especifica el domain AF_PACKET para acceder al bajo nivel, también se comenta consultar packet(7). Ese es el dominio que hace falta para acceder a bajo nivel, en el siguiente man nos comentan que existe un type SOCK_RAW que nos permite acceder al driver ¡sin que este añada cabeceras de ningún tipo!. Pero no todo está hecho, hay que aprender a usar todo esto. El siguiente codigo es un ejemplo:

#include
#include
#include
#include
#include

#include
#include
#include

#include
#include
#include

int main(int argc, char *argv[]) {
char *buf = "Hola\0";
int fd, c;
struct ifreq ifr;
struct sockaddr_ll sa;

fd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
if (fd < 0) {
fprintf(stderr, "socket fail\n");
exit(-1);
}

memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, "eth0", strlen("eth0"));
if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0) {
fprintf(stderr, "ioctl fail\n");
exit(-1);
}

sa.sll_family = AF_PACKET;
sa.sll_ifindex = ifr.ifr_ifindex;
sa.sll_protocol = htons(ETH_P_ALL);
c = sendto(fd, buf, strlen(buf), 0, (struct sockaddr *)&sa, sizeof(sa));
if (c < 0) {
fprintf (stderr, "write fail\n");
exit(-1);
}

exit(0);
}

Primero hay que abrir el socket con las características especificadas, luego nos tenemos que enterar mediante el uso de ioctl cual es el index de la interfaz que queremos usar (eth0 en este caso). Ese número es el identificador de interfaces que ha reconocido el SO, piensen que al abrir el socket no se le especifica en ningún lado en que tarjeta debería escribir y leer, de hecho es independiente del socket. Eso se especifica en cada lectura y cada escritura como vemos en la llamada a sendto. Se ha preparado una estructura struct sockaddr_ll (ya conocen los struct sockaddr, este es el _ll link layer ;), en el campo sll_ifindex que averiguamos previamente con ioctl.

Evidentemente sobra decir que para que ese código funcione hay que ejecutarlo con permisos de root o, como documenta el manual, con CAP_NET_RAW.

Pues eso, así es como se inyecta directamente y sin pasar por bibliotecas como libnet, sino yendo directamente a los servicios del SO.

Happy hacking!

viernes, marzo 26, 2010

Acerca de la manipulación

Un día me encontré con un blog dónde se mencionaban algunas de las técnicas de manipulación que son utilizadas deliberadamente en el mundo laboral. Dichas técnicas no son infalibles pero al aplicarlas adecuadamente incrementan la probabilidad de que una persona realice un determinado comportamiento.

Dejo algunas anotaciones que podrían ser de ayuda para evitar verse involucrado en situaciones indeseables.


Principios en los que se basa la manipulación
  • Reciprocidad: Tendencia a devolver los favores recibidos.
  • Coherencia: Necesidad de mantener nuestras opiniones y actos en consonancia.
  • Prueba social: Imitar a los demás ante una situación desconocida.
  • Autoridad: Obedecer a personas que suponemos mas sabias o expertas.
  • Simpatía: Confiar en personas que nos caen bien.
  • Escasez o Rareza: Desear poseer algo que es escaso.


Algunas técnicas de manipulación

Parten de la tendencia que tiene la gente a mantener sus decisiones y la sensación de que estas son tomadas libremente.
  • Pie en la puerta: Nos piden algo que nos cuesta poco realizar antes de pedir lo que realmente quieren.
  • Puerta en las narices: Nos piden algo desorbitadamente costoso para inmediatamente después de negarnos pedirnos algo más razonable.
  • Contacto físico: Tocar en hombro el brazo de alguien al pedirle algo.
  • Temor seguido de alivio: Te ponen en una situación de miedo o estrés que resulta ser falsa. Al sentirte aliviado estarás predispuesto a ser generoso.
  • Mirar a los ojos: Mirar a los ojos de alguien antes de pedirle algo.
  • Pie en la boca: Muestran una preocupación por ti antes de pedirte algo.
  • Pie en la memoria: Te piden recordar una situación en la que no has hecho algo esperado para que no lo vuelvas a realizar en el futuro.
  • Eso no es todo: Te hacen ver que algo es bueno y que además viene con extras.
  • El etiquetado: Etiqueta especifica y relacionada con el acto esperado.
  • Es usted libre de: Te piden algo recalcando que eres libre de hacerlo o no.Vale más un poco que nada: Te recalcan que por poco que le ayudes será muy importante.


Cómo detectar a un manipulador

Isabelle Nazare-Aga señala que una persona manipuladora reunirá al menos diez de los siguientes puntos:
  1. Culpabiliza a los demás en nombre del vínculo familiar, de la amistad, del amor, de la conciencia profesional, etc.
  2. Traslada su responsabilidad a los demás o se desentiende de sus propias responsabilidades.
  3. No comunica claramente sus demandas, necesidades, sentimientos y opiniones.
  4. Responde muy a menudo de forma confusa.
  5. Cambia de opinión, de comportamiento y de sentimientos según las personas o las situaciones.
  6. Invoca razones lógicas para enmascarar sus demandas.
  7. Hace creer a los demás que tienen que ser perfectos, que no deben cambiar nunca de opinión, que deben saberlo todo y responder inmediatamente a las demandas y preguntas.
  8. Pone en duda las cualidades, la competencia y la personalidad de los demás; critica sin parecer que lo hace, desvaloriza y juzga.
  9. Hace transmitir sus mensajes a otros o los comunica de forma indirecta (por teléfono en lugar de cara a cara, dejando notas escritas).
  10. Siembra cizaña y suscita sospechas , divide para reinar mejor y puede provocar la ruptura de una pareja.
  11. Sabe hacerse la víctima para que se le compadezca (enfermedad exagerada, entorno “difícil”, sobrecarga de trabajo, etc.).
  12. Hace caso omiso de las demandas (aún cuando dice ocuparse de ellas).
  13. Utiliza los principios morales de los demás para satisfacer sus necesidades (nociones de humanidad, caridad, racismo, “buena” o “mala” madre, etc.).
  14. Amenaza de forma encubierta o hace un chantaje abierto.
  15. Cambia radicalmente de tema en el transcurso de una conversación.
  16. Elude o rehúye las entrevistas y las reuniones.
  17. Cuenta con la ignorancia de los demás y hace creer en su superioridad.
  18. Miente.
  19. Falsea los hechos para averiguar la verdad, deforma e interpreta.
  20. Es egocéntrico.
  21. Puede ser celoso aunque se trate de un pariente o un cónyuge.
  22. No soporta la crítica y niega la evidencia.
  23. No tiene en cuenta los derechos, las necesidades y los deseos de los demás.
  24. Espera frecuentemente hasta el último momento para pedir, ordenar o hacer actuar a los demás.
  25. Su discurso parece lógico o coherente, cuando sus actitudes, sus actos o su forma de vivir responden al esquema opuesto.
  26. Utiliza halagos para gustarnos, nos hace regalos o tiene muchas atenciones con nosotros.
  27. Produce un estado de malestar o una sensación de falta de libertad (trampa).
  28. Es absolutamente eficaz para lograr sus propios fines, pero a costa de los demás.
  29. Nos induce a hacer cosas que probablemente no haríamos por voluntad propia.
  30. Es constantemente objeto de conversación entre personas que lo conocen, aunque no se encuentre presente.


Cómo evitar ser manipulado
  • Saber de antemano hasta lo que se está dispuesto a hacer y lo que no. 
  • Ser capaz de negarse en el momento oportuno por muy comprometidos que nos sintamos con alguien empleando técnicas asertivas si fuera necesario (Disco Rayado, Banco de Niebla, Pregunta Asertiva).
  • Aprender a replantearse nuestras decisiones reconociendo cuándo nos hemos equivocado.
  • Plantearse decisiones sucesivas como independientes unas de las otras de manera objetiva.
  • Analizar las presiones que a las que nos hemos visto sometidos al tomar una decisión.


Algunos libros

Pequeño tratado de manipulación para gente de bien
Manipulacion: La Perversidad Del Pequeño Poder
Wikipedia

    lunes, marzo 22, 2010

    Rootedcon

    Bueno, pues ya termino la primera rootedcon, dos de los autores de este blog (arreche y yo, ole) fuimos para alla... ¿que decir?, que ya estamos ansiosos de la rootedcon el año que viene y que estamos esperando que suban todo el material alli visto para estudiarlo :)

    Gracias a los organizadores por currarselo y en especial a PatoWC. A los ponentes por compartir sus conocimientos (bueno, a Chema no, que no libera la foca xD). Y a los asistentes, se lleno al completo, lo que quiere decir que tuvo muy buena aceptacion y que el año que viene tendran que aumentar el aforo para que quepan mas personas.

    miércoles, marzo 03, 2010

    Grupos de trabajo

    Buenas a todos,

    Bueno, dos de los autores de este blog (arreche y yo) nos vamos a ir a la rootedcon :), asi que ultimamente estamos - como dice arreche - "repasando al menos los conceptos basicos" xD. Y como ha resultado que las vulnerabilidades mas comunes de 2009 fueron XSS (Cross-Site Scripting) y SQL Injection pues las estamos repasando (y aprendiendo) un poco.

    El otro dia quedamos y "repasamos" ¿no aythami? y desde luego que aprendimos cosillas (y los que nos queda aun ¿no aythami? xD). No comentare sobre donde estuvimos haciendo pruebas, aun estamos nosotros y ese es nuestro campo de batalla, pero si les dare un consejo, ¿te gusta la seguridad? pues intenta buscar algun amigo al que tambien le guste, el estudio de estas cosas entre dos personas (o mas, pero no muchas mas) tiene muchas ventajas:

    - Cada uno da sus aproximaciones y todos las aprenden
    - Cada uno conoce es mas o menos ducho en ciertos temas y todos aprenden
    - Realizar ataques muchas veces es un arte (y si estas haciendo Blind loquesea Injection mas aun), cada persona tiene un artista en potencia dentro y lo expresa de forma distinta a como lo expresaria otro.
    - Conectar con alguien da energia y ganas de seguir intentando cosas
    - Ser mas de uno el que se da de cabezazos contra una puerta cerrada (pero que sospechas que se puede abrir) hace que tengan mas energia para seguir dandole caña, si tu solo le dedicas una hora, tal vez con un compañero le hubieras dedicado 3.
    - Aumenta la sociabilidad de los individuos.

    No dire mucho de nuestros experimentos (tampoco es que sea nada del otro mundo), pero si me gustaria hacer una pequeña referencia... -- QUE TONTERIA Y CUANTO PODER!!! (no aythami? xDDD)

    Happy hacking!

    lunes, marzo 01, 2010

    Problema con la BIOS de los Acer Aspire One

    Buenas a todos, esta entrada tratará sobre un par de problemas que se dan en los Acer Aspire One y cómo solucionarlos. Es más o menos fácil encontrar por ahí fuentes que nos digan cómo hacerlo, pero creo que nunca viene mal que haya más.

    Todo surge de que mí Acer Aspire One (un netbook) de repente un día le dejó de funcionar la batería, sin saber por qué, ya no podía funcionar sin batería. Lo conectaba a la corriente y el sistema (en mi caso Ubuntu 9.10) decía que la batería estaba completa, pero como desactivara el cable se apagaba todo.

    Resulta que esto es un problema con los Acer Aspire One AOA 150 con BIOS version 3305... mira tu por donde exactamente lo que tengo (bueno, tenía). Buscando por internet encuentras información de cómo actualizar para gente que usa windows, incluso el readme.txt que trae el driver bajado directamente de la web de Acer, tiene sólo instrucciones para windows, cosa que me jode mucho porque este netbook me lo compré con linpus linux pero bueno... A saber, los pasos a seguir son:

    1- Descargar la nueva imagen de BIOS desde la página oficial (desconfía de cualquier cosa que no venga directamente de la empresa original... y también habría que desconfiar un poco de ésta última). Netbook > Aspire One > AOA150. Una vez seleccionado, aparecerá abajo los drivers del hardware para windows XP, ¡vaya mierda, nada para GNU/Linux!, le damos a la pestaña de "BIOS" y nos bajamos el archivo. En el momento de escribir ésto, la versión era la 3310. El modelo de netbook (AOA150) lo puedes ver, o en la descripción que aparece cuando accedemos a la BIOS o en una pegatina blanca en la parte de abajo del netbook donde viene el código de barras, el número de serie y el SNID, algo como "MFG.DATE..."

    2- Formatear un pendrive en FAT. Cuando yo leo acerca de ésto siempre me surge la duda de a qué formato se referirán en concreto. Hablando claro (u oscuro según lo que sepa el lector), según fdisk, formato W95 FAT32 (LBA), éste es el que usé yo, supongo que W95 FAT32 también vale, para los que no tengan fdisk a mano... identificador de formato de partición número 0xc (LBA) o 0xb (sin nada). Yo ya tenía mi pen en ese formato y con cosas dentro... las borré para asegurarme de que no interferían en el proceso, pero a lo mejor no hace falta.

    3- Descomprimimos el .zip que nos bajamos en el paso 1 en el pendrive. Ojo, según el programa que usemos para descomprimir nos creará una carpeta con todo el contenido dentro o no. Lo que tiene que contener el pendrive a partir de su raíz son unos cuantos ficheros (Dos_Flash, 3310.fd, Ding.wav, etc...)

    4- Cambiamos el nombre del fichero 3310.fd a ZG5IA32.fd. En principio da igual que versión de BIOS sea, yo la información ésta la encontré para actualizar a la versión 3304 y también era el mismo nombre, así que si vas a actualizar a alguna superior a la 3310... bueno, pase lo que pase no me hago responsable de nada, pero no creo que de problemas.

    5- En el netbook apagado, ponemos el pendrive en el conector USB del lateral izquierdo, el que está al lado del conector de red. No te rías, no me lo he inventado, estaba especificado en donde leí todo ésto. He de decir que encontré otra página también con unos pasos muy parecidos y decía en cualquier USB... yo lo hice en ése porque ya lo tenía enchufado ahí, no creo que implique nada.

    6- Pulsamos las teclas Fn + Esc y mientras las mantenemos pulsadas le damos al botón de encendido del netbook y seguimos manteniendo pulsadas Fn + Esc durante 2 segundos más. Lo de los 2 segundos lo pongo yo, hay que mantenerlas pulsadas algo de tiempo más pero lo pongo así para que si alguien lee esta guía no le vengan preguntas del tipo "¿¡PERO CUANTO TIEMPO MÁS!?" (yo también soy un paranoico con estas cosas). Veremos que la luz del botón empezará a parpadear y la pantalla se quedará en negro, sin problema, ya está actualizando, lo dejamos un tiempo (2 min? 5 min? no recuerdo en cuánto terminó el mío, pero más o menos eso) y automágicamente se reiniciará. Puedes entrar a la BIOS para comprobar que la versión ha cambiado.

    NOTA: Si no se te actualizó la BIOS, no problem, a mi la primera vez tampoco lo hizo xD. Volví a intentarlo una segunda vez y arreglado. No me preguntes por qué.

    NOTA 2: La actualización también arregla otro bug bastante cabrón que tenía esa BIOS. Cuando le ponías contraseña a la BIOS, automágicamente te cambiaba todas las minúsculas por mayúsculas. Así que si le ponías la contraseña "mama", para entrar tenías que teclear "MAMA", menuda gracia.

    Happy hacking!

    viernes, febrero 12, 2010

    ¡Comienza Javascript Jam Session!

    Se trata de un concurso en el que hay que programar una aplicación para la nueva versión del escritorio KDE. Entre los premios en juego hay un terminal Nokia N900, varios viajes a eventos de KDE y camisetas. Además todos los desarrolladores recibirán un certificado de participación

    Para los que estén interesados recomiendo que lean el log de Training session realizadas en #plasma-training de irc.freenode.net por aseigo

    domingo, enero 03, 2010

    El ataque de la señora de la limpieza

    Tal y como lo explican en el blog de dónde lo leí se trata de una combinación de teclas con la que se podría desbloquear un sistema GNU/Linux matando el proceso de salvapantallas.

    Dicha combinación ejecuta una de las llamadas al kernel destinadas a la recuperación del sistema. Para llevarla a cabo debemos pulsar las teclas Alt + SysRq + f y entonces se matará aleatoriamente un proceso con el objetivo de liberar memoria.


    La tecla SysRq puede ser localizada en la siguiente imagen.


    El resto de llamadas puede verse en la siguiente tabla extraída de la Wikipedia. Para efectuar cualquier combinación debemos presionar las teclas Alt + SysRq + el carácter correspondiente a nuestra disposición de teclado.
    Action
    QWERTY
    Dvorak
    AZERTY
    Set the console log level, which controls the types of kernel messages that are output to the console
    0 through 9
    0 through 9
    0 through 9
    (without using shift)
    Immediately reboot the system, without unmounting partitions or syncing
    b
    x
    b
    Reboot kexec and output a crashdump
    c
    j
    c
    Display all currently held Locks
    d
    e
    d
    Send the SIGTERM signal to all processes except init (PID 1)
    e
    .
    e
    Call oom_kill, which kills a process to alleviate an OOM condition
    f
    u
    f
    When using Kernel Mode Setting, provides emergency support for switching back to the kernel's framebuffer console[3]
    g
    i
    g
    Output a terse help document to the console
    Any key which is not bound to a command should also do the trick
    h
    d
    h
    Send the SIGKILL signal to all processes except init
    i
    c
    i
    Kill all processes on the current virtual console (Can be used to kill X and svgalib programs, see below)
    This was originally designed to imitate a Secure Access Key
    k
    t
    k
    Show a stack backtrace of all currently executing tasks
    l
    n
    l
    Output current memory information to the console
    m
    m
    ,
    Reset the nice level of all high-priority and real-time tasks
    n
    b
    n
    Shut off the system
    o
    r
    o
    Output the current registers and flags to the console
    p
    l
    p
    Display all active high-resolution timers and clock sources.
    q
    '
    a
    Switch the keyboard from raw mode, the mode used by programs such as X11 and svgalib, to XLATE mode
    r
    p
    r
    Sync all mounted filesystems
    s
    o
    s
    Output a list of current tasks and their information to the console
    t
    y
    t
    Remount all mounted filesystems in read-only mode
    u
    g
    u
    Output Voyager SMP processor information
    v
    k
    v
    Display list of blocked (D state) tasks
    w
    ,
    z