[escepticos] Stuxnet

Borja Marcos BORJAMAR en SARENET.ES
Mie Oct 6 15:48:57 WEST 2010


On 6 Oct 2010, at 16:25, Adria Comos wrote:

> 
> ¿Disculpa? ¿Qué crees que hace falta en Unix/Linux para que un proceso que pertenece al usuario X pase a ser del superusuario? Pues cambiar un valor en la tabla. Si estás usando un sistema de seguridad más complejo, basado por ejemplo en políticas MAC, ¿qué crees que son las etiquetas de confidencialidad/integridad? Pues lo mismo, un par de numerillos en una tabla.
> 
> [Adria]
> 
> Creo que sí, que estas mezclando cosas, debido a la nomenclatura "usuario".  
> 
> Hablando de los sistemas que conozco -Windows, Unix, Linux- (de otros no se, pero me extrañaría que no fuese así), una cosa son los "permisos del usuario" (escritura, lectura, ejecución, acceso a dispositivos, etc...) de un usuario/superusuario a nivel de S.O, y otra los privilegios de los procesos a nivel de CPU.  Son dos mundos totalmente diferentes e independientes

Pero ¡si es lo que estoy diciendo! ¿De dónde viene la mezcla? Pues porque para que un proceso de usuario pueda "salirse del tiesto" y, por ejemplo, cambiar su identificador de usuario en la tabla de procesos, una posible vía es que el procesador se lo permita. Y una posible vía para ello sería que un microcódigo malicioso (insertado, por ejemplo, en la fábrica) "reconozca" determinada secuencia de instrucciones, o algo tan tonto como determinada instrucción ilegal, y proporcione ese permiso al proceso.

A ver si se entiende ahora... Microcódigo malicioso permite que un proceso modifique sus credenciales de usuario en la tabla de procesos, violando la protección de memoria. 

> Al final es cierto que todo son tablas, pero la diferencia es que de la que hablo está protegida por hardware (la CPU. No el S.O., no, la CPU!), y eso es lo que la hace, si no hay un fallo imperdonable en el núcleo del S.O., inexpugnable totalmente.  La tabla de procesos de que hablo es la GDT y la LDT, que se encuentra en memoria en segmentos privilegiados y lugar desconocido -y cambiante- ...y que sólo

No, eso son (en terminología Intel) las tablas que se utilizan para gestionar la memoria virtual. La tabla donde está lo que se conoce en los libros de texto de "sistemas operativos" como PCB (Bloque de control de proceso). O sea, esto: http://en.wikipedia.org/wiki/Process_control_block

Y estoy usando terminología abstracta deliberadamente.

>  accede el sistema operativo de forma totalmente exclusiva.  Ni usuario, ni superusuario pueden cambiar nada de esta tabla, porque se lo impide la CPU (ni Windows ni Linux tienen nada que decir aquí más allá de haber implementado correctamente un protocolo más que trillado).

Estoy hablando de la tabla donde el sistema operativo pone cosas como "este proceso pertenece al usuario pepito, arrancó tal día, lleva ejecutándose no se cuánto tiempo de CPU y bla, bla". O sea, la tabla de procesos, no de memoria virtual. 

> Si se pudiera modificar esta tabla sería por un bug gigantesco o error intencionado de los programadores del S.O, acompañado de un chivatazo de algún programador del sistema descontento (o bien un fallo no menos escandaloso en la CPU).   No tiene nada que ver con ser superusuario.  De hecho, es 

Es de lo que estoy hablando, de sabotaje deliberado en el microcódigo, por decirlo de alguna manera.

> más que posible que este bug hipotético fuese perfectamente explotable seas superusuario o no.  Y el error sería imperdonable primero porque la parte de un sistema operativo que se ejecuta a nivel máximo de privilegio suele ser pequeña y muy acotada (y por tanto, fácil de proteger), y segundo porque es algo que está resuelto y blindado desde hace más de tres décadas.  

O no, depende del sistema en cuestión.

> Si fueras superusuario (legalmente o por trampas), seguirías siendo un proceso de nivel de privilegio bajo (3 en Intel) para la CPU.  Si aún así consiguieras ejecutarte (por alguna negra técnica y un escandaloso error en el S.O.) en nivel 0, lo único que conseguirías es tener toda la CPU disponible 

La CPU no te puede hacer superusuario. Son niveles de abstracción muy diferentes. Lo que sí puede hacer es permitirte manipular la tabla de PCBs del sistema operativo, lo que entre otras cosas puede hacer que te hagas superusuario. ¿Qué objeto crees que han tenido algunos ataques contra, por ejemplo, el kernel de Linux? Pues eso, manipular estructuras de datos del sistema.

> para tí...que tampoco es mucho dado a que es como estaban el 99% de los ordenadores personales -y no tan personales- antes del fin del siglo pasado y tampoco se terminó el mundo.  A partir de allí, podrías hacer muchas cosas, pero en lo que se refiere a nivel de acceso archivos o demás posiblemente nada que no hubieras podido hacer sin reventar la seguridad del procesador.  Porque la seguridad de las tablas de usuarios y el acceso a ciertos archivos del sistema está por otros lados.

Por eso necesitas el primer empujón del procesador. De ahí que esté teorizando sobre la utilidad de un microcódigo malicioso como primer elemento de una "puerta trasera".

> Además, la implementación de estas tripas del sistema no forma parte de la especificación de nada.   Cada cual la implementa como quiere, y puede perfectamente cambiar entre versiones porque es algo total y absolutamente interno.  Por ello es inviable establecer ninguna técnica de ataque perdurable más allá de una versión (o ni eso).

La implementación de las tripas de ese tipo en cualquier Unix es algo trivial de conseguir, documentadísimo y parametrizable además. Todos contienen una tabla con la lista de símbolos que te permite leer los PCBs, las tablas de descriptores de archivos, conexiones de red, etc, etc.

Mira las páginas de manual de kvm(3) o sysctl(3) en FreeBSD, por poner un ejemplo. Es muy fácil obtener las direcciones de memoria donde están esas tablas. Quizás en sistemas no Unix es más complicado, no lo he mirado.  En los Unix es habitual tener acceso a una tabla de símbolos, etc.

Sobre versiones y demás, ¿qué crees exactamente que hacen los miles de "exploits" que se emplean? Pues eso, atacar determinada versión con determinada configuración. Algunos son muy específicos, otros lo son menos.

Pero en fin, que estoy describiendo un escenario teórico. Desde luego, posible es. :)







Borja.



Más información sobre la lista de distribución Escepticos