Mortuux

Diario de un estudiante geek. Informática, tecnología, programación, redes, sistemas operativos, bases de datos…

Archivos mensuales: noviembre 2009

ARP Poisoning – Man in the Middle

Ahora aprenderemos a hacer y como funciona (básicamente) un ataque MITM.

Necesitamos ips y macs de los equipos implicados y de la gateway, en mi caso:

  • Atacante
    • IP: 172.26.0.34
    • MAC: 00:80:5a:38:3f:ed
    • S.O: GNU/Linux Ubuntu 9.10
  • Victima
    • IP: 172.26.0.33
    • S.O: Windows 7
  • Gateway
    • IP: 172.26.0.1
    • MAC: 00:60:b3:fb:43:b2

Bien ahora desde el atacante, abriremos una sesión del sniffer Wireshark con el comando wireshark &

Si no lo tienes instalado, en distribuciones basadas en Debian basta con un simple:

sudo apt-get install wireshark

Wireshark

Wireshark

Ahora en la víctima comprobaremos como está la tabla ARP, mediante el comando arp -a:

tabla arp

Tabla Arp

Y ahí podemos observar la IP y MAC del atacante y de la gateway.

 

Volvemos al equipo atacante y comenzamos el ataque con Ettercap:

ettercap

Ettercap

  • -T => Ataque desde consola
  • -q => “Quiet Mode”… Es decir no mostrará nada.
  • -i => Especificamos nuestra interfaz de red
  • -M => Selección de MITM
  • /172.26.0.33/ y /172.26.0.1/ son las víctimas.

Replays Falsos

Replays Falsos. Click para ampliar

 

Vemos como se envían Replays Falsos.

Ahora comprobemos la tabla ARP de la víctima:

Envenenado.

Equipo envenenado.

La tabla está envenenada. La MAC del gateway queda cambiada a nuestra dirección MAC, por lo que podremos interceptar el tráfico de la víctima.

Desde la víctima, por ejemplo abrimos una página web.

La victima en Internet

La victima en Internet

Ahora desde el atacante vamos a mirar si Wireshark a interceptado algo:

Tráfico interceptado

Tráfico interceptado. Click para ampliar

Y efectivamente, estamos interceptando el tráfico de la víctima.

Ahora sólo nos queda terminar el ataque:

Terminando el ataque

Terminando el ataque

Como vemos, Ettercap se encarga de restablecer los parámetros originales de la víctima.

Restablecido

Todo restablecido.

Una vez finalizado el ataque, las MACs se reestablecen.

Anuncios

Arquitectura del microprocesador: El banco de registros. (III)

Arquitectura del microprocesador: La unidad de control (I)

Arquitectura del microprocesador: Unidad aritmético-lógica (II)

Arquitectura del microprocesador: El banco de registros (III)

Arquitectura del microprocesador: Buses (IV)

Tradicionalmente el banco de registros se ha divido en dos grupos: los registros de propósito general y los que tienen una función específica. Al primer grupo pertenecen aquellos que el programador puede usar libremente para almacenar temporalmente datos, mientras que los segundos se utilizan de manera indirecta. Los registros con función específica más usuales son:

  • Contador de programa: Contiene la dirección de la memoria donde está alojada la siguiente instrucción a ejecutar. Actúa, por tanto, como un puntero y, de hecho en algunos microprocesadores se denomina puntero de instrucción. Es la unidad de control la que utiliza este registro para recuperar las instrucciones del programa, incrementando su contenido a medida que se avanza en la ejecución o modificándolo cuando se encuentra una instrucción de salto.
  • Puntero de pila: En ocasiones es necesario guardar temporalmente el contador de programa, por ejemplo al saltar a una subrutina o cuando el microprocesador debe atender una interrupción externa, con la intención de recuperarlo posteriormente. Los primeros microprocesadores contaban con una pila interna, en el propio circuito integrado, que tenía una capacidad limitada y solía permitir 5 u 8 niveles como máximo. Actualmente la pila se almacena en memoria principal, externa al microprocesador de forma que éste lo único que necesita es conocer la dirección donde está el tope o parte alta de la pila. Almacenar dicha dirección es el objetivo del registro del puntero de pila.
  • Acumulador: Puede ser utilizado como registro de propósito general en muchas situaciones, pero en otras adquiere el papel de registro específico al ser el destinatario de diferentes operaciones aritméticas, lógicas o de entrada/salida.
  • Estado: Su denominación cambia según el tipo de diseño y fabricante, pero su finalidad es siempre la misma: mantener una serie de bits indicando el estado en que se encuentra el microprocesador. Ese estado proviene normalmente de la ejecución de la última instrucción, pudiendo influir en cómo se ejecutarían las posteriores. También es posible que ciertos bits modifiquen el modo de funcionamiento del procesador, de forma general o ante determinadas instrucciones.
  • Otros registros: Si bien los cuatro citados pueden considerarse los más importantes, todos los microprocesadores disponen además de otros registros de uso específico, ocultos en su mayor parte que emplean para almacenar el código de la instrucción que está ejecutándose, contener temporalmente datos procedentes de memoria que van a intervenir en un cálculo, etc.

En un principio los microprocesadores contaban sólo con registros de 8 o 16 bits pensados para operar con aritmética entera, pero en la actualidad el tamaño ha crecido hasta los 32, 64 e incluso 80 bits, contemplándose tanto la aritmética entera como la de punto flotante.

Arquitectura del microprocesador: Unidad aritmético-lógica (II)

Arquitectura del microprocesador: La unidad de control (I)

Arquitectura del microprocesador: Unidad aritmético-lógica (II)

Arquitectura del microprocesador: El banco de registros (III)

Arquitectura del microprocesador: Buses (IV)

Conocida también como ALU (Arithmetic Logic Unit), podría decirse que es la calculadora interna del microprocesador, con capacidad para realizar operaciones aritméticas pero también de tipo lógico.

Las operaciones aritmético-lógicas que puede ejecutar por sí mismo un procesador dependerán del diseño de la ALU. Los x86 hasta el 80386, por ejemplo, contaban con una ALU que ofrecía únicamente operaciones con aritmética entera y solamente se contemplaban las cuatro operaciones aritméticas básicas. Las aplicaciones que requerían trabajar con coma flotante, y realizar operaciones más complejas, tenían que hacerlo por software, lo cual era lento, o bien requerir que el sistema contase con un coprocesador matemático.

En la actualidad los microprocesadores disponen de una ALU preparada para operara con aritmética entera y de punto flotante, ejecutando por hardware operaciones complejas que, de ser implementadas mediante software, requerirían mucho más tiempo.

La ALU cuenta con dos entradas, asumiéndose que una de ellas siempre es el acumulador y que la otra, procedente de cualquier otro registro o e la memoria, está en un registro temporal. La única salida, en la parte superior, se dirige al acumulador. En el funcionamiento de la ALU también interviene el contenido del registro de estado, si bien éste no actúa como un tercer operando sino como un agente externo que puede influir en la operación que realice la ALU. Dicha operación vendrá dictada por la unidad de control que, a través del bus interno, controla también el funcionamiento de la ALU.

Grub: Invalid Signature. Error arrancando Windows

Hoy he vuelto a instalar Windows en una pequeña partición. Como siempre que tienes instalado Linux antes, Windows machaca el grub. Así que hice el proceso de recuperación del grub.

Pero a mi sorpresa el grub al arrancar Windows me daba un error que nunca antes me había dado: Invalid Signature.

Así que decidido, fui a editar /boot/grub/menu.lst y tachán! No está. No recordaba que Ubuntu 9.10 utiliza Grub2 y ese archivo ya no existe, ahora en su lugar nos encontramos con /boot/grub/grub.cfg. Lo que hace “especial” a este archivo esque es exclusivamente de lectura, y bajo ningún concepto se puede editar, ni siquiera desde un Live CD.

Yo tengo los SS.OO en el segundo disco duro (/dev/sdb), así que comprobé el siguiente archivo: /boot/grub/device.map

Y aquí estaba el error en mi caso. El archivo apuntaba a /dev/sda, así que lo edité por /dev/sdb y guardé los cambios y después actualicé el grub:

sudo os-prober

sudo update-grub

sudo reboot

Con eso conseguí arreglarlo todo y ahora funciona perfectamente, de momento ;).

Arquitectura microprocesador: La unidad de control (I)

Un microprocesador es un circuito integrado formado por millones de componentes lógicos que es necesario coordinar para que cada uno realice su trabajo en el momento que se espera, tarea que recae fundamentalmente en la conocida CU (Control Unit) o unidad de control.
Es tarea de la CU emitir las señales necesarias para que la siguiente instrucción de un programa, cuya localización  en memoria indica un registro específico al que suele llamarse “contador de programa” o “puntero de instrucción”, sea transferida hasta el interior del microprocesador (fase de captación). A continuación esa instrucción se analiza y se preparan los operandos que precise (fase de descodificación) para a continuación ejecutarla (fase de ejecución) y generar los resultados que correspondan (fases de escritura en memoria y registros).
A través de un bus interno la unidad de control se comnica con el resto de elementos del microprocesador, estableciendo por ejemplo los registros que han de utilizarse como operandos en un cálculo o fijando la operación que debe llevar acabo la ALU sobre dichos operandos.
Un microprocesador es un circuito integrado formado por millones de componentes lógicos que es necesario coordinar para que cada uno realice su trabajo en el momento que se espera, tarea que recae fundamentalmente en la conocida CU (Control Unit)o unidad de control.Es tarea de la CU emitir las señales necesarias para que la siguiente instrucción de un programa, cuya localización  en memoria indica un registro específico al que suele llamarse “contador de programa” o “puntero de instrucción”, sea transferida hasta el interior del microprocesador (fase de captación). A continuación esa instrucción se analiza y se preparan los operandos que precise (fase de descodificación) para a continuación ejecutarla (fase de ejecución) y generar los resultados que correspondan (fases de escritura en memoria y registros).A través de un bus interno la unidad de control se comnica con el resto de elementos del microprocesador, estableciendo por ejemplo los registros que han de utilizarse como operandos en un cálculo o fijando la operación que debe llevar acabo la ALU sobre dichos operandos.

Interrupciones

Dos opciones para que los perifericos interactuen:

  1. Cada cierto tiempo el ordenador (S.O) controla si existe alguna operación pendiente con alguno de los periféricos genera mucha perdida de tiempo
  2. Cuando un periférico necesita comunicar con el ordenador se genera una petición de interrupción IRQ en el sentido de la comunicación que sigue una serie de patrones.

Interrupción: Es una comunicación especial ordenador periférico para indicar que dicho dispositivo necesita atención inmediata. Entonces en ese momento suspende lo que estuviera haciendo para atender siempre y cuando no exista petición anterior de mayor prioridad pendiente.

Prioridad de las IRQ:

De mayor a menor importancia:

Excepciones de la CPU (error en tiempo de ejecución)

Interrupción software

Interrupciones hardware (no enmascarables)

Interrupciones Hardware (enmascarables)

Funcionamiento:

  • Se genera la petición de interrupción
  • CPU STOP y gestiona la IRQ a través de lo que se llama ISR (Routine Service Interruption) vía un programa cargado en la ram o en la bios. A este programa se apunta con el lector de interrupción (este lector depende de cada de interrupción). La información de los vectores de interrupción apuntando al programa que gestiona dicha interrupción se carga al iniciar el sistema operativo. (BIOS: Sistema que se encarga de realizar las funciones básicas para que el ordenador arranque con determinado sistema operativo)
  • Se ejecuta el programa y una vez terminado la CPU continuará por donde iba.

 

Algunos vectores de interrupción:

Vector Interrupción

3 -> Punto de ruptura de interrupción

4-> Desbordamiento

9-> Teclado

14-> Fallo de página (MP)

32+255->libres

 

 

¿Cómo llega la IRQ a la CPU?

A través del bus de control y llegan a un controlador de interrupciones que también es un dispositivo hardware, de aquí a la CPU.

 

Proceso más detallado

  1. Dispositivo de E/S quiere interrumpir se le asigna una línea de interrupción en el bus
  2. Envía la interrupción vía IRQ
  3. Señal recogida, pasa al controlador de interrupciones (PIC) este lo que hace es que primero clasifica y segunda lo envía a la CPU
  4. La cpu pregunta porque tipo de interrupción al PIC
  5. El PIC contesta
  6. Se genera el vector de interrupción y se sirve la interrupción.

 

Líneas de petición de interrupción

Existe un estándar de facto donde se asignan una serie de líneas de interrupción donde se especifica el nombre de la interrupción, el hexadecimal como código de la interrupción, y la descripción..

 

La instalación de un nuevo dispositivo de E/S en nuestro sistema internamente ocurre:

Se realiza la asignación de una IRQ del sistema para dicho dispositivo.

¿Cómo se hace esto?

Antiguamente-> Conectar un jumper la placa base y el dispositivo

Hoy día-> Se resuelve vía driver o bien si el dispositivo es PnP.