Elio Bastias | Consultoria en Dirección de Proyectos
Elevación de privilegios en el kernel Linux y un exploit interesante
- Details
- Hits: 25
El pasado día 17 de enero, Linus Torvalds hizo un commit para corregir una elevación de privilegios en el kernel Linux 2.6 (CVE-2012-0056). El fallo fue descubierto por Jüri Aedla y según comenta Torvalds en el propio parche, se debe a una incorrecta comprobación de privilegios al abrir el '/proc/#pid#/mem' de un proceso.
Este error no pasó desapercibido a Jason A. Donenfeld que ha escrito y publicado un interesante exploit. Lo ha bautizado como 'Mempodipper'.
Donenfeld estudió en detalle el proceso de explotación. De partida se encontró con que efectivamente la comprobación de permisos era débil y además, que la protección contra escritura en el espacio de memoria del proceso fue eliminada del código del kernel. De hecho puede leerse en el comentario del commit correspondiente, que se eliminaba la restricción porque no se consideraba un peligro la escritura en /proc/#pid#/mem.
Esto hace virtualmente vulnerables a los núcleos con versión 2.6.39 o superior.
Cómo funciona
Cuando se abre /proc/#pid#/mem se usa la función 'mem_open'. Dicha función almacena el 'self_exec_id' correspondiente al proceso que solicita la apertura. Esto se hace para comprobar posteriormente si son suficientes privilegios cuando se efectúan operaciones de lectura o escritura sobre el descriptor de fichero obtenido.
static int mem_open(struct inode* inode, struct file* file)
{
file->private_data = (void*)((long)current->self_exec_id);
En el caso de la operación de escritura se hace la comprobación del 'self_exec_id' además de llamar a 'check_mem_permission'. En teoría, para escribir en /proc/#pid#/mem, o se es el mismo proceso #pid# o el proceso tiene ciertos permisos especiales relacionados con ptrace.
static ssize_t mem_write(struct file * file, const char __user *buf, size_t count, loff_t *ppos) { ... ...
Se llama a 'check_mem_permission' y si 'mm' vuelve con error no se efectúa la operación:
mm = check_mem_permission(task); copied = PTR_ERR(mm); if (IS_ERR(mm)) goto out_free;
'check_mem_permission' simplemente llama a '__check_mem_permission' y como se observa dentro de su código efectúa la comprobación "task ==current":
static struct mm_struct *__check_mem_permission(struct task_struct *task) { struct mm_struct *mm; mm = get_task_mm(task); if (!mm) return ERR_PTR(-EINVAL); if (task == current) return mm;
...
...
Si no coinciden devuelve error. Luego debe ser el mismo proceso el que escriba en su propia memoria y si queremos elevar privilegios necesitaríamos un proceso con 'suid'.
Primera aproximación al exploit
Donenfeld se figuró cómo hacer esto:
$ su "yeeeee haw I am a cowboy" Unknown id: yeeeee haw I am a cowboy
Cualquier cosa que se escriba pasa por la memoria del proceso creado por 'su' (que posee 'suid'). Parecia obvio qué hacer:
Abrimos '/proc/self/mem' y obtenemos su descriptor de archivo. Ejecutamos 'dup2' para multiplexarlo con 'stderr'. Escribimos nuestro shellcode en él y ejecutando posteriormente con exec obtendríamos root... pero no.
Esto no iba a funcionar debido a que aun queda otra restricción más:
if (file->private_data != (void *)((long)current->self_exec_id)) goto out_mm;
El 'self_exec_id' del proceso que va a ejecutar la escritura 'exec' ha de ser el mismo que abrió originalmente '/proc/#pid#/mem', recordad más arriba cuando se llama a 'mem_open'.
¿Por qué ha cambiado 'self_exec_id'?
Cuando se llama a 'exec' el 'self_exec_id', es aumentado en 1 impidiendo que esto ocurra:
void setup_new_exec(struct linux_binprm * bprm)
{
...
...
current->self_exec_id++;
Resumiendo. No podemos abrir el '/proc/#pid#/mem' de un proceso cualquiera, hacer 'dup2' con 'stderr' y luego hacer 'exec' de un proceso con 'suid' para escribir allí, ya que al hacer 'exec' no van a coincidir los 'self_exec_id'.
Donenfeld solucionó esto de manera sencilla pero ingeniosa, muy ingeniosa.
El exploit
Se hace 'fork' de un proceso y en este hijo se ejecuta 'exec' a un nuevo proceso. De este modo el 'self_exec_id', que se ha heredado del padre, ahora tiene un valor de +1 con respecto al padre.
Ahora hacemos que el padre ejecute 'exec' sobre un proceso 'suid' que va a escribir nuestro shellcode. En este momento, al ejecutar 'exec' en el padre su 'self_exec_id' acaba de aumentar a +1 coincidiendo con el del hijo.
Mientras tanto en el proceso 'exec' que ha llamado el hijo se obtiene, al abrir, el descriptor del '/proc/#parent_pid#/mem'; y es posible abrirlo porque no existe restricción en la operación de apertura. Es decir, no van a ser comprobados los privilegios del 'exec' que ha creado el hijo.
En este momento tenemos un 'exec' del padre con un proceso 'suid' dispuesto a escribir el shellcode. Un 'exec' del hijo con un descriptor del '/proc/#pid#/mem' del padre y la salida 'stderr' acoplada a ese descriptor (llamada a 'dup2') y lo más importante, tenemos los 'self_exec_id' igualados por lo tanto la restricción ha sido evadida.
Solo queda que el hijo pase el descriptor al padre y éste va a escribir el shellcode allí ya que cuando llame a 'mem_write', como hemos dicho, las comprobaciones van a ser correctas.
Pero aún queda más, averiguar "dónde" se debe escribir en memoria para poder ejecutar de manera exitosa el shellcode. Se necesita una dirección fija de memoria, algo que podría ser complicado si se usa ASLR, pero Donenfeld observó que la mayoría de binarios 'su' de las distribuciones no están compilados con 'PIE'(Position-independent executable)
Podemos observarlo si hacemos:
$ readelf -h /bin/su | grep Type
Type: EXEC (Executable file)
Como el mismo Donenfeld apunta, si el 'Type' fuera 'DYN' entonces si podría protegerse con ASLR debido a que el ejecutable permitiría ser reubicado en distintas posiciones de memoria. Al no ser el caso el desplazamiento en memoria siempre va a ser el mismo.
Buscando Donenfeld obtuvo la dirección 0x402178, correspondiente a una llamada a 'exit@plt'. Tan solo tenía que escribir en 0x402178 menos la longitud de la cadena 'Unknown id: ' y su shellcode se ejecutaría.
En definitiva, un exploit más interesante que la propia vulnerabilidad que explota y una muestra de ingenio por parte de Donenfeld al conseguir la explotación de la forma que hemos visto.
Más información:
Parche de Linus Torvalds
Commit de la eliminación de la protección de escritura
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=198214a7
* Linux Local Privilege Escalation via SUID /proc/pid/mem Write
David García This e-mail address is being protected from spambots. You need JavaScript enabled to view it.
2012 será un año clave para la implantación del cloud computing
- Details
- Hits: 37
Aunque en un principio se pensó que 2010 sería un gran año para la implantación del cloud computing, esto no llegó a ser del todo cierto ya que faltaba confianza por parte de los usuarios y empresas hacia esta nueva tecnología.

La inseguridad, la accesibilidad a los datos y los imprevistos, al igual que las dudas sobre si adoptar cloud privada o pública, han ralentizado el proceso de adopción. Además, algunos incidentes como el sufrido por Amazon y sus servicios EC3 hace más de un año no ayudaron a la implantación masiva de la nube.
En 2011, la adopción del cloud computing y el crecimiento de la confianza hacia este sistema aumentó considerablemente y un nuevo estudio cree que 2012 será un año clave, gracias al impulso que recibió el pasado año.
Para Jeffrey M. Kaplan, fundador y director general de THINKstrategies, las iniciativas de consumo surgidas en 2011 como el iCloud de Apple y la gran cartera de soluciones basadas en la tecnología de la nube por parte de grandes fabricantes como Cisco o HP han ayudado al sector. Para Kaplan, la inseguridad ha ido desapareciendo y las empresas son conscientes de que el cloud es una tecnología “que ha llegado para quedarse”.
En cuanto a las dudas sobre qué tipo de cloud computing adoptar, los expertos creen que es mejor decantarse por la nube híbrida, es decir, una mezcla de la privada y de la pública, ya que, según Kaplan, se presenta como una mezcla entre la tradicional manera de las empresas TIC de guardar sus datos y el futuro del sector.
Por su parte, Michelle Warren, presidenta de investigación y consultoría en MW, está de acuerdo con Kaplan ya que considera que la nube privada ofrece a las empresas una mayor confianza, pero también es más cara al tener que crear centros de datos personales y software de gestión y virtualización. Por otro lado, Warren destaca que otro de los aspectos que ayudarán a aumentar la implantación de la tecnología cloud es que con el tiempo se va haciendo más barata, como publica Channelinsider.com.
Por su parte, para el canal, la nube ha proporcionado una fuente de oportunidades, así como un punto de tensión entre los socios y proveedores. Según Warren, en muchos casos, es mejor para las empresas externalizar su gestión y despliegue de la nube al canal debido a la complejidad del proceso, por lo que, para una mayor implementación, dicen los analistas, los socios de canal deben modificar sus propias empresas para aprovechar mejor el nuevo mundo de la nube dando confianza a sus partners.
Fuente: www.channelbiz.es
La próxima etapa del open source
- Details
- Hits: 45
Las organizaciones ya se inclinan por las plataformas abiertas, sin timidez. Entre las razones, figura la gran cantidad de empresas que hoy dan soporte y garantizan su funcionamiento. Sepa por qué la tendencia indica ahora que llegó el momento de evolucionar hacia herramientas de código fuente abierto de mayor valor agregado.
Por Andrea Catalano at Cronista.com
Como una alternativa. Así se posiciona en la actualidad el open source (OS): una opción para que empresas, gobiernos y profesionales tengan en cuenta a la hora de implementar un proyecto, instalar un programa en particular o diseñar una nueva plataforma. Por ahora, parece haber quedado lejos aquella dicotomía que enfrentaba al software propietario con el software libre.
La posibilidad de elegir está más vigente que nunca. En este aspecto, continúa residiendo la principal fortaleza del desarrollo abierto. A diferencia de lo que sucedía siete años atrás, cuando el open source basaba su credo en el costo económico y, luego, en la seguridad, hoy, su discurso se apoya en la escalabilidad y en la posibilidad de avanzar hacia aplicaciones de mayor valor agregado.Hoy, nos encontramos en una segunda etapa del open source. Al principio, el tema pasaba por el costo. Pero, hoy, el mercado tiene una idea más acabada de lo que implica. Los costos existen y vienen del soporte y el entrenamiento. Entonces, la decisión de usar o no una plataforma abierta proviene de la ecuación costo/beneficio, detalla a IT Business, Pablo Abad, director del Centro de Seguridad Informática del Instituto Tecnológico Buenos Aires (ITBA). Para el docente, el punto a tener en cuenta es que hay cada vez más compañías que dan soporte de software libre porque el gran dilema, cuando se quería avanzar en esa dirección, era si había alguien capaz de responder al mismo nivel que lo hace una Microsoft, una SAP o una IBM cuando surge un problema.Este software nos brindaba una excelente alternativa para poner en marcha el conjunto de servicios que necesitábamos, junto con una flexibilidad para hacer interactuar diferentes tecnologías y para desarrollar los componentes no disponibles o inexistentes requeridos. Sumado a un menor costo de inversión inicial, éstos fueron los factores más importantes que nos inclinaron hacia el open source", comenta Daniel Lázaro, coordinador del área de Desarrollo de la empresa Dattatec.La determinación de avanzar hacia el diseño basado en código abierto radica en la tranquilidad de realizar cambios y revisar todas las veces que sea necesario. El negocio del open source está creciendo mucho en la Argentina, debido a la confiabilidad, seguridad y costos. Hoy, es raro que una empresa mediana o grande no posea algún servicio con software open source, indica Gustavo Gasparrini, gerente General de Nixe, una empresa que provee soluciones informáticas en ambientes Unix/Linux.Los sectores de la actividad económica, que se inclinaron por este tipo de plataforma y, cada vez más también, para desarrollar sus aplicaciones, suelen ser los del Petróleo y la Energía, las Telecomunicaciones y las Finanzas. (El open source) está muy extendido hacia el sistema operativo, los servidores de aplicaciones y soluciones de nicho. Esto sucede porque este software permite manejar el road map de los productos involucrados sin esperar a que un desarrollador le diga lo que tiene que hacer", apunta Sebastián Biagini, gerente General de Red Hat Argentina.Un ejemplo que refleja la tendencia es el avance de Java, el lenguaje de programación y la primera plataforma informática creada por Sun Microsystems en 1995 y liberada en open source en enero de 2007. Esta tecnología no sólo ayuda a modularizar el software sino también a mejorar el desempeño. En el sector público, Java se convirtió en un estándar.Mientras, en el sector privado, las industrias mencionadas optan por arquitecturas basadas en plataformas abiertas por su flexibilidad y la posibilidad de controlar el diseño del código, aseguran las fuentes consultadas. Se busca cada vez más los estándares abiertos. Trabajamos para masificar el uso de esta tecnología. Hoy, los clientes son mucho más conocedores de las soluciones disponibiles y tienen más interés en que esos desarrollos se adapten a sus requerimientos, destaca Christian Castello, responsable de soluciones de Oracle Fusion Middleware.
Una comunidad
Pero, si hace unos años los bastiones del open source eran el soporte y la seguridad, hoy, esa diferenciación ya no tiene el mismo peso. Las empresas que impulsan el software propietario supieron crear comunidades de desarrolladores amplias y dinámicas para responder a cualquier necesidad. Si a esto se suma que el aspecto precio tampoco hace la diferencia -porque no se pagará por la licencia pero si por el trabajo hora hombre-, ¿por qué entonces inclinarse por una plataforma abierta?El secreto es la forma de de-sarrollo, cómo está escrito, para mejorarlo. Hoy, aplicaciones de misión crítica, como las que permite el funcionamiento de la Bolsa de Nueva York, están basadas en open source y nadie cuestiona su seguridad, asevera Biagini. En cuanto al soporte, indica que su garantía ya no está atada a contratos eternos, sino a convenios que pueden establecerse por hora, por días, sin depender de estructuras rígidas que generan costos altos y pocas chances de obtener un control severo cuando se produce una contingencia.El software de código fuente abierto se consolidó liderando gran parte de la infraestructura, con sistemas como servidores web, DNS, firewalls, proxies, entre otros, que se consideran standards del mercado. Se está viendo que el software open source ha subido un escalón, hacia aplicativos con mayor valor agregado para el usuario final. Ya encontramos software con un alto grado de madurez en sistemas de correo y colaboración, centrales telefónicas IP, monitoreo, por citar algunos", agrega Gasparrini.Como se mencionó, el conocimiento general es otro aspecto que motiva la adopción. El cliente analiza si es equiparable a los recursos existentes, si es compatible con lo que tiene, si se adecúa a su necesidad. Si no logra encontrar respuestas afirmativas en estos puntos, va a adquirir tecnología bajo la manera tradicional, sostiene Castello.Por su parte, Gasparrini alerta que la mayoría de los proyectos open source se desarrollan bajo normas que cumplen con estándares de calidad y normas de desarrollo. Porque, según el ejecutivo, no se debe pensar que por ser abierta una plataforma de estas características puede ser modificada por cualquier profesional. Existen controles, funciones y jerarquías dentro de la comunidad que mantiene el mismo concepto con el que fue generado el proyecto.Lo único permanente es el cambio. Sin embargo, hay momentos donde las implementaciones tecnológicas requieren de cierta quietud, de cierto momento de tranquilidad prolongado. Biagini advierte que muchas veces se decide por el open source por la posibilidad de no depender de los cambios de versiones, que a veces son muy agresivos. Hay propuestas tecnológicas basadas en estándares abiertos que llegan a garantizar siete años para sumar aplicaciones y tecnología, sin estar pensando en un cambio de versión.
Áreas de oportunidad
Gasparrini remarca que se percibe que los proyectos sólidos están creciendo en funcionalidad y eso los transforma en líderes del mercado. Esto tiene ventajas y desventajas ya que, por un lado, se aúnan esfuerzos de la comunidad sobre aplicativos centralizados; pero, a la vez, se convierten en casi monopólicos, ya que resultaría muy dificil llegar a desarrollar un proyecto con la misma funcionalidad y el grado de madurez, alcanzado por estos líderes.También se observa a grandes empresas con política de software propietario, adquirir compañías que desarrollan software open source. Si bien este comportamiento genera cierta inquietud entre los usuarios de la comunidad; por otro lado, demuestra la calidad y el crecimiento del software comunitario, considera el directivo de Nixe.El avance del software libre se advierte no sólo en que más organizaciones lo adoptan, sino en las posibilidades de uso que habilita. El open source evoluciona y toma preponderancia en clientes del sector público, de infraestructura de tecnología informática (como virtualización y base de datos, las capas más bajas y básica de una plataforma) y el sistema operativo, manifesta Castello.En ese marco, el ejecutivo detecta las áreas de oportunidad donde el código abierto tiene más chance de posicionarse, más allá de los servidores web, en donde este aspecto se ha transformado prácticamente en un commodity. Hay una evolución muy madura en servidores Apache y en Webs basadas en áreas de base de datos, que se ajustan muy bien a esa tecnología, amplia.Sin señalar un área en particular, Lázaro, de Dattatec, considera que, pese a las voces que no quieren poner foco en los costos, allí radica la oportunidad y el beneficio del open source. Un análisis de costo total de propiedad indicaría, en la mayoría de las empresas, que, usando software abierto, los indicadores para el conjunto de costos directos e indirectos y su relación con los beneficios, son mejores. Digamos, entonces, que un proyecto que usa esta tecnología es más barato si se considera no sólo el costo de la compra sino aspectos del uso y mantenimiento a largo plazo, teniendo en cuenta que ya es sabido que estos proyectos presentan, por lo general, un bajo costo de inversión inicial, ejemplifica.
Por las pymes
Cuando el costo entra en juego, las que escuchan con atención son las pequeñas y medianas empresas que, necesitadas de incorporación tecnológica, a veces no logran actualizarse por un tema de presupuesto. El OS es ideal para las pyme porque, en principio, no debe gastar en licencia por uso, que tiene mucho peso en la ecuación de este tipo de firmas. A esto se suma la posibilidad de llevar esta tecnología a la nube que, por ahora, es incipiente y hay que ver cómo evoluciona. Si el comportamiento sigue tal como se ha desempeñado hasta ahora, el código abierto tendrá un rol importante en el cloud computing, con desarrollo de software y aplicaciones, subrayó Biagini.Abad, del ITBA, señala que el foco continuará puesto un tiempo más en las plataformas abiertas para servidores, porque realizar cambios en todo un parque de computadoras resulta más complicado de implementar. Cuando se decide ir a una plataforma abierta se elige ir hacia el área de servidores. Impulsar un cambio a nivel de los empleados que, tal vez, ya están acostumbrados a utilizar determinado software de oficina implica otros tiempos y otros costos. Y ese punto aún es altamente considerado en las organizaciones, alerta el académico.
Para el gerente de Red Hat, justamente el objetivo de máxima pasa por allí: por dejar de cambiar la computadora cada cinco años y tener un comportamiento más cercano a la renovación del televisor, cada 10 años. La evolución de la PC no debe pasar por si tal programa es o no compatible con algo o no. Ésta es una fase de la computación masiva a resolver: sacar la problemática del software del medio para que la computación se pueda utilizar realmente como un servicio, concluye.

El software libre es, ante todo, una forma ética de entender el software o los programas de ordenador. Eso incluye tanto la fabricación de los programas como su distribución y su utilización.
Asterisk, nos permite la construcción a costos razonables una solución de comunicaciones unificadas basadas en IP. Estas soluciones pueden sustituir a las actuales centrales telefónicas en prácticamente todos los entornos imaginables: desde las pequeñas oficinas a los grandes entornos corporativos.

