¿Es posible que un usuario sin privilegios modifique / inyecte en el proceso de otro usuario (raíz)?

5

Aunque no soy ningún tipo de especialista en kernel y no programo en lenguajes como C/C++ y, por lo tanto, no tengo una comprensión profunda de los conceptos críticos de gestión de procesos a nivel de sistema operativo Tengo sentimientos que procesa / demonios / escuchas de socket que escribo en lenguajes como PHP y JavaScript (Node) , a pesar de ser bastante simple, puede ser utilizado por un programa malicioso, no necesariamente root privileged .

Por lo tanto, deseo saber si es posible para un usuario sin privilegios modificar / inyectar en el proceso de otro usuario (raíz), y, de ser así, ¿cuál sería el punto de entrada / vector para esto ?

(estupidez obvia como establecer el binario que ejecuta la línea argv[1] o STDIN no está dentro del alcance de esta pregunta).

Estoy haciendo esta pregunta porque quiero ampliar mi conocimiento sobre el tema: el daño causado por, digamos, un shell web que se introdujo en el directorio de escritura de apache / www-data y logró inyectar en el proceso de propiedad de la raíz sería, Por definición, fatal para la seguridad.

    
pregunta Miloš Đakonović 26.03.2017 - 13:59
fuente

2 respuestas

6

Esto está lejos de ser una tarea simple gracias a las técnicas de protección de memoria .

En los viejos tiempos de MS-DOS, Windows 9x y sistemas de computación doméstica equivalentes, la memoria se compartía por igual entre todos los procesos en ejecución. En tales condiciones, su sensación es correcta: cualquier proceso de usuario puede acceder y modificar la memoria de otros procesos, Incluso el kernel del sistema operativo no tiene ningún medio para protegerse completamente.

Pero esta es una vieja historia ahora. Como herencia de las computadoras centrales (grandes unidades de aspecto de nevera voluminosas utilizadas para tareas altamente sensibles y paralelas), sistemas operativos para computadoras domésticas y Las arquitecturas de procesadores recibieron técnicas de protección de memoria reales.

En la base de esta técnica hay un mapa que permite hacer coincidir un segmento de memoria con su proceso de propiedad. Gracias a esto, ya no se permite que un proceso acceda a nada fuera de su propia memoria. Si un proceso intenta romper esta regla (la mayoría de las veces como resultado de un error), el sistema operativo lo mata sin piedad (esto se teme falla de segmentación , o "segfault" para los íntimos).

¿Esto significa que la amenaza que estás describiendo nunca podrá volver a ocurrir? En seguridad, nunca diga "nunca" : todo sistema tan seguro como pueda parecer tiene su defecto:

  • Todo el sistema está controlado por el kernel del sistema operativo, por lo que una falla en el kernel puede llevar a pasar por alto esta seguridad y obtener acceso a la memoria completa como en los viejos tiempos. Un ejemplo en Linux podría ser la llamada al sistema ptrace , diseñada para permitir rastrear (depurar) un proceso. Se encuentran Vulnerabilidades permitiendo de vez en cuando que un proceso sin privilegios abusen de esta función para lograr tal habilidad.
  • En el otro lado de la cadena, es posible que también desee omitir el sistema operativo por completo y atacar directamente el almacenamiento físico de RAM. El ataque más conocido en esta categoría es el Hammeril : se ha encontrado que en muchos módulos de RAM el hecho de cambiar rápida y repetidamente el valor almacenado en una ubicación puede, debido a alguna debilidad electrónica, afectar y posiblemente cambiar un valor almacenado en una ubicación cercana.

Donde su pesadilla puede hacerse realidad con respecto a su lenguaje de scripting "bastante simple" es que hay, por ejemplo, un Implementación de JavaScript del ataque Row Hammer . Así que definitivamente sí, es posible que un programa de JavaScript sin privilegios inyecte algo de código en un proceso raíz. Sin embargo, esto no es una cosa simple, y a medida que se descubren nuevas formas de hacer esto, se desarrollan nuevas técnicas de protección: la historia sin fin de la seguridad de TI;)!

    
respondido por el WhiteWinterWolf 26.03.2017 - 15:24
fuente
2

Sí, pero depende del sistema operativo. Una forma de hacer esto se conoce como un ataque Desbordamiento de búfer . Estos ataques son el resultado de vulnerabilidades en el nivel de Kernel, por lo que son relativamente poco frecuentes.

Hay un video completo sobre el tema en Computerphile: enlace

    
respondido por el Kris Molinari 27.03.2017 - 04:19
fuente

Lea otras preguntas en las etiquetas