Copy Link
Add to Bookmark
Report

SET 026 0x06

  

-[ 0x06 ]--------------------------------------------------------------------
-[ Microcodigo]--------------------------------------------------------------
-[ by nomellames ]----------------------------------------------------SET-26-


La actualizacion del Microcodigo en chips Intel


0. Disclaimer

Esto solo es educativo. Las actualizaciones del microcodico estan bajo el
copyright de Intel, y no deben ser usadas bajo ningun otro proposito que para
que el que fueron creadas, es decidir, modificaciones legitimas del microcodigo.
Yo no he modificado el microcodigo, y en ningun caso he infringido el copyright.

1. Introduccion

A pesar de que mi especialidad es wardriving, mi primer articulo es sobre la
actualizacion del microcodigo en maquinas Intel (Intel microcode updates). Y asi
mis queridas amigas (espero que me lean solo chicas, y solteras. Mi direccion
esta mas abajo) os preguntareis que tiene que ver esto con la seguridad
informatica, y como vas a conseguir hackear con esto la cuenta de hotmail de tu
novia(o).

Pues el caso es que el susodicho microcodigo esta encriptado, con lo cual solo
Intel puede actualizar el microcodigo. En el caso de que alguien consiguiera
desencriptar el microcodigo, podriamos meter nuestro propio microcodigo en el
chip. Supongo....

Para que ? Con que objetivo ? Pues como en muchas ocasiones por pura diversion,
....con que derecho Intel nos esconde algo ?. Tambien tenemos otros motivos,
Si Intel quiere esconder algo, ... sera por algo ? Tal vez la respuesta es
simplemente que los chicos de Intel se aburren y hacen estas cosas por puro
deporte y ganas de hacer trabajar las neuronas, pero dudamos de que esto sea
cierto, por tanto tiene que existir una razon,....razonable. Como podreis
comprobar, este es el tipico articulo-provocador que con tanto frecuencia y
escaso exito se empenyan en publicar los alegres chicos de SET y sus secuaces.

Queremos comprobar si hay alguien interesado y con tiempo libre para estudiar
el problema.

Pero a ver, demos un poco de informacion,...

1.1 que es eso del microcodigo?

El microcodigo que inyectas en el chip sirve para actualizar las
microinstrucciones. Me explico:
En el mundo de la arquitectura de ordenadores hay dos corrientes, una
arquitectura RISC, y otra la arquitectura CISC.

La arquitectura RISC consta de instrucciones simples, mientras que en CISC las
intrucciones son mas complejas. En CISC dirias al ordenador : "Hackea la cuenta
de mi abuela y mi tia". En RISC dirias al ordenador: "Hackea. La cuenta. mi
abuela. Hackea. La cuenta. Mi tia"

RISC es usado por arquitecturas como ARM y Sparc. CISC es usado por x86 ( o
sea, el PC de tu casa). Cual es mejor...bueno, eso es otra historia.
El caso es que de alguna manera, en los x86, esas "Instrucciones largas" han de
ser mapeadas a instrucciones mas pequenyas que el ordenador pueda entender. Las
actualizaciones del microcodigo cambia ese mapeo, o las microinstrucciones
finales, no estoy seguro. Con ello, Intel se ahorra dinero cuando hay un bug,
llamado en nomenclatura Intel "Errata". Y son muchos Bugs. Sino, haced un
search sobre "processor Specification Update" en la pagina de Intel.

Un caso clasico fue el bug de la coma flotante en el primer Pentium, que puede
ser resuelto con los microcodigos (Usare microcodigo solo a partir de ahora en
vez de actualizacion del m...porque me canso).

El microcodigo esta explicado en el capitulo 8, seccion 10 de IA-32 Intel
Architecture Software developers manual Volume 3: Systems programming guide.
Lo podeis bajar de la pagina de Intel. Esta compuesto por 2048 bytes of data,
48 bytes componen la cabecera, y los restantes 2000 son el verdadero
microcodigo. Los microcodigos estan encriptados, o al menos "firmados"
digitalmente. Si intentas meter un microcodigo a tu ordenador que ha sido
retocado, el procesador lo rechazara. Aun mas, si el microcodigo no pertence a
el chip especificado al cual esta destinado, el chip tambien rechazara el
microcodigo.

2. Como puedo meter un nuevo microcodigo en mi ordenador?

Normalmente la BIOS se encarga de eso. Tambien hay una utilidad por ahi que
permite instalar el microcodigo desde windows usando unos ficheros que INTEL
pone a disposicion de los usuarios gratuitamente,....cosa logica ya que asi
nosotros nos encargamos de hacer el trabajo que ellos debieran haber hecho.
Os imaginais una revision de todos los chips defectuosos tipo automovil ?
No, no sonyeis, esto en el mundo de los procesadores nunca va a pasar.

No se. A mi Windows no me gusta. lo siento. O sea que se poco del tema.
Afortunadamente, Linux me gusta, y en Linux si puedes actualizar el microcodigo
de forma facil y sencilla. Como? Si tienes un Kernel 2.4.X, al instalar el
kernel puedes seleccionar la opcion de usar microcodigos. Creo que en RedHat
esta seleccionado por defecto. En tu distribucion de linux, haz

make menuconfig

y seleccionatodos todos los /dev/cpu que veas.

Luego tienes que coger el fichero ASCII con todos los microcodigos
eso lo puedes recoger de:

http://www.urbanmyth.org/microcode/

Los ficheros contienen todos los microcodigos, ademas de un controlador para el
driver. Leeros el help del controlador para ver como funciona

3- Pero como funciona el driver?

Es bastante simple. Os pongo el pseudocodigo, y luego explico las intrucciones

Mira la cabecera
Si no es el codigo para este chip o el checksum es incorrecto
Salta al siguiente microcodigo del fichero
Si es entonces
Imicializa los registros para llamar a WRMSR
EAX contiene la direccion del microcodigo
EDX contiene cero
ECX contiene 79h
Llamar WMSR (hemos actualizado el microcodigo)
Inicializa los registros para llamar a WRMSR
EAX contiene 0
EDX contiene cero
ECX contiene 8bh
Llamar WMSR (Hemos borrado lo que habia en el MSR 8bh)
Inicializar los registros para llamar a CPUID
EAX contiene 1
CPUID
Inicialiar los registros para llamar RDMSR
ECX contiene 8bh
Llamar RDMSR


A ver:

Los registros MSR (Model Specific registers) son usados internamente por el
procesador para diversas funciones. Estos registros estaban bastante
undocumentados, hasta que fueron sacados a la luz de una forma un tanto
rocambolesca que no voy a explicar aqui, pero que podeis buscar en la web
(google: MSR and appendix H). O sea que al final Intel se vio forzado a
documentarlos. Yo de vosotros echaria una vistazo al tema.
Los MSR pueden ser leidos y escritos usando RDMSR y WRMSR. Una lista completa
de los MSR puede ser encontrada en

http://chip.ms.mff.cuni.cz/~pcguts/cpu/msr.txt

O sea que lo que hacemos es escribir en el MSR 79h, que es donde hacemos la
modificacion del microcodigo.

Luego reseteamos otro registro, el 8bh y llamamos a CPUID. CPUID es una
instruccion que nos ayuda a conocer nuestro amigo el procesador. Nos devuelve
diversas cosas, entre ellas que familia.tipo/stepping de procesador tienes.
Facilmente lo podreis encontrar en

http://microcodes.sourceforge.net/CPUID.htm

Pero ademas, si le pasamos las intrucciones adecuadas, CPUID nos escupira el
microcodigo que lleva dentro en 8bh.
Si el codigo en 8bh es el mismo que has metido en 79h, felicidades! tienes un
nuevo microcodigo. En /var/log/messages o usando la instruccion

dmesg|tail 10

aparecera el nuevo microcodigo, si es correcto, como explico mas abajo.



4- Mi aportacion

Bueno, pues para ver si el microcodigo estaba realmente encriptado, he
modificado el driver para que no mire la cabecera, es decir, lo de
Si no es el codigo para este chip o el checksum es incorrecto
Salta al siguiente microcodigo del fichero
Me lo como. EL bicho metera lo que sea.
Desafortunadamente, a nivel de chip el microcodigo es rechazado si:

1-No es el indicado para la familia/stepping

2-Ha sido modificado

O sea, que definitivamente hay un mecanismo de seguridad dentro del chip. La
gente rumorea que este mecanismo debe ser sencillo, o sino necesitariamos un
numero elevado de puertas que seria prohibitivo.
He analizado un pelin los microcodigos y los que van destinados a

-Celeron los 2000 bytes son diferentes para todo los microcodigos.
-Pentium Pro los 1136 bytes son basura, puedes modificarlos y el microcodigo
entrara igual, la parte final es igual para todos los microcodigos
-Pentium II y III los ultioms 1056 bytes son basura. Puedes modificarlos y el
microcodigo entrara igual, la parte final es igual para todos los microcodigos

Los nuevos drivers e instrucciones de como meterlos lo podeis encontrar en:

http://microcodes.sourceforge.net

Ademas he modificado en controlador, o sea que podeis enviar el microcodigo que
deseis, no el que intel os manda.
Si quereis envia pura mierda, para probar, usando mi controlador ejecutad:

dd if=/dev/urandom of=/dev/cpu/microcode bs=2048 count=1
Si teneis el driver de Tigran Aviazan, aparecera un
"No microcode found!"

Sino aparecera algo asi como "microcode updates" pero el microcodigo sera el
mismo que el anterior, es decir, que el driver lo ha pasado pero el chip no ha
tragado.


5- TODO

Analisis criptografico de los microcodigos, ataque de fuerza bruta (tratar de
meter un numero elevado de microcodigos "forjados"

Dormir

Bueno, esto ha sido un rollo importante. Cualquier duda, queja o interes a

nomellames@hotmail.com

Encriptado con mi llave si la informacion es importante. Por favor, no me
encripteis chorradas. Mejor, no me envias mails con chorradas.
A proposito, mi proximo articulo sera sobre wardribing y sera mas divertido....

La clave PGP esta en el apartado 0x0E llaves PGP.

*EOF*

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT