13.07.2015 Views

SEGURIDAD EN UNIX Y REDES

SEGURIDAD EN UNIX Y REDES

SEGURIDAD EN UNIX Y REDES

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capítulo 9Seguridad del núcleo9.1 IntroducciónEl núcleo o kernel de un sistema Unix es la parte más importante del mismo, hasta tal punto que entérminos puristas se considera al núcleo como el sistema operativo en sí. Pero incluso si no lo consideramosasí, y contemplamos al sistema operativo como el conjunto formado por el núcleo y unaserie de herramientas (editor, compilador, enlazador,shell. . . ), es innegable que el kernel es la partedel sistema más importante, y con diferencia: mientras que las aplicaciones operan en el espacio deusuario, el núcleo siempre trabaja en el modo privilegiado del procesador (RING 0). Esto implicaque no se le impone ninguna restricción a la hora de ejecutarse: utiliza todas las instrucciones delprocesador, direcciona toda la memoria, accede directamente al hardware (más concretamente, alos manejadores de dispositivos), etc. De esta forma, un error en la programación, o incluso en laconfiguración del núcleo puede ser fatal para nuestro sistema.Por desgracia muchos administradores piensan que un intruso nunca va a actuar a un nivel tanbajo para comprometer al sistema. Si bien es cierto que en redes habituales la inmensa mayoríade atacantes no poseen los conocimientos necesarios para utilizar el kernel del sistema operativo enbeneficio propio, cualquier pirata con el suficiente nivel de experiencia puede conseguir privilegiosde root y aprovecharlos para modificar el núcleo o configurarlo a su gusto. Y es justamente este tipode ataques uno de los más difíciles de detectar: cualquier administrador tiende a confiar ciegamenteen lo que el sistema operativo le dice, de forma que si ejecuta la ordenanita:~# uptime3:46am up 9 days, 2:22, 6 users, load average: 1.15, 1.05, 1.07anita:~#automáticamente va a asumir que su sistema ha permanecido más de nueve días sin reiniciarse;esto puede ser cierto o no serlo, e independientemente de la veracidad del resultado de esta ordenalguien puede haber accedido a nuestro kernel y haber comprometido su seguridad. Por ejemplo,si ha modificado completamente el núcleo, puede haber reprogramado la llamada sysinfo() paraque devuelva un resultado erróneo, de forma que el administrador nunca se percate que la máquinaha sido reiniciada para cargar el kernel modificado; incluso en los Unices que soportan la inserciónde módulos en el núcleo (como Linux, Solaris o FreeBSD) el atacante puede haber utilizado estafacilidad para modificar el kernel sin necesidad de reiniciar el equipo; excelentes lecturas sobre estetipo de ataques son [Pla99], [Pra99b] o [Pra99a].Evidentemente, para cualquier intruso el ataque a un núcleo es mucho más fácil en clones de Unixcuyo código fuente esté disponible, como Linux, Minix o algunos BSD, pero el ataque es posible encualquier sistema ([Pla99] lo demuestra sobre Solaris). El hecho de la completa disponibilidad delcódigo fuente de un sistema operativo (ahora no hablamos de aplicaciones, nos referimos al sistemaoperativo propiamente dicho) suele despertar controversias entre la comunidad científica dedicada141

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!