¿Porque windows permite que un proceso escriba en la memoria de otro?
Pues porque esto le da al SO una flexibilidad impresionante, aunque como todo en la vida puede ser usado con buenos fines pero tambien con malos fines como es el caso del malware. Pero si hay muchos "buenos usos" de la injeccion de codigo por parte de los desarrolladores y te pongo algunos ejemplos:
1- Los programas antivirus a menudo inyectan código en los procesos. Pueden usarlo para monitorear el tráfico de la red, bloquear contenido web peligroso, o usarlo en tecnicas de heuristica, por ejemplo.
2- Muchas aplicaciones de terceros pueden usar la inyeccion de codigo para agregar funcionalidad al propio sistema o a otras aplicaciones de terceros (aplicaciones de temas visuales, shortkeys, plugins, etc)
3- Los drivers graficos de NVIDIA inyectan DLLs en varios procesos para realizar tareas graficas
4- etc.....
La inyeccion DLL nunca va a ser 100% segura, es un metodo no muy limpio de lograr diferentes objetivos en el sistema, pero sin embargo ahi esta como una parte normal del SO, constantemente sucediendo sin que te des cuenta.
¿Que requisitos se deben cumplir para que esto pueda llevarse a cabo, es decir, privilegios de sistema, etc..?
La apertura de otro proceso se somete a restricciones. Desde Vista, existen algunas protecciones junto con Microsoft UAC. La protección principal para la memoria de proceso es el Control de integridad obligatorio (MIC). MIC es un método de protección para controlar el acceso a objetos en función de su "nivel de integridad". Hay 4 niveles de integridad:
Nivel bajo para el proceso que está restringido para acceder a la mayoría del sistema (por ejemplo, Internet Explorer)
Nivel medio es el valor predeterminado para cualquier proceso iniciado por usuarios sin privilegios y también usuarios de administrador si UAC está habilitado.
Alto nivel para procesos en ejecución con privilegios de administrador.
Los usuarios del SISTEMA ejecutan el nivel del sistema, generalmente el nivel de los servicios y procesos del sistema que requieren la mayor protección.
Para nuestra preocupación, eso significa que el proceso del inyector solo podrá inyectarse en un proceso que se ejecuta con un nivel de integridad inferior o igual.
Por ejemplo, si UAC está activado, incluso si la cuenta de usuario es administrador, el proceso se ejecutará en el nivel de integridad "Medio" (a menos que se ejecute específicamente como administrador).
fuente:
http://blog.sevagas.com/?PE-injection-explained