Para responder a esto, vale la pena describir cómo funciona el código ejecutable en un sistema operativo, y luego podemos explicar cómo se puede insertar malware en ese ejecutable.
La mayoría de los sistemas operativos modernos tienen un concepto de un ” cargador ” ejecutable , que toma un paquete binario (un archivo ejecutable) de instrucciones compiladas de la computadora y “ejecuta” el código en una CPU a la que tiene acceso el sistema operativo. Como simplificación general , el cargador desempaqueta un archivo ejecutable válido, carga las instrucciones adjuntas en la memoria direccionable y el sistema operativo alimenta esas instrucciones a la CPU para que las ejecute. Luego, la CPU ejecuta esas instrucciones secuencialmente hasta que el programa señala que está hecho. Un concepto rápido e importante aquí es que una instrucción de CPU puede indicar “saltar” a otra parte de la memoria y continuar ejecutándose. (más útil cuando el programa no cabe en la memoria disponible, y el sistema operativo necesita agrupar las instrucciones en algunos bolsillos diferentes de memoria disponible).
También es relevante el formato de un archivo ejecutable. Si toma la estructura de archivo ejecutable portátil de Windows como ejemplo, básicamente hay un conjunto de encabezados que describen las características del código para el cargador, y seguido de un conjunto de datos binarios que representan las instrucciones que componen el programa / aplicación.
- ¿Cuál es la diferencia entre las pruebas de vulnerabilidad y las pruebas de penetración?
- Cómo eliminar el virus nicesearches
- ¿Cuál es un método garantizado para saber si un archivo PDF está libre de malware o para verlo de manera segura con gran confianza?
- ¿Qué pasos puede tomar un estudiante de maestría para solicitar un trabajo de seguridad?
- ¿Podemos obtener la contraseña de JSESSIONID?
Para el código interpretado, el concepto es similar: un bloque de código se encapsula en un formato de archivo que analiza un intérprete de software, pasa instrucciones a otra capa de software que envía instrucciones de la máquina a la CPU como se describió anteriormente. Las “macros” y los scripts son buenos ejemplos de esta manifestación.
Ok, simplificaciones brutas en la mano, ahora podemos preguntar ” ¿cómo se oculta el malware dentro de un ejecutable”?
Se pueden usar algunos métodos generales:
- Lo más básico es simplemente agregar instrucciones más válidas (maliciosas) al final del ejecutable y modificar las instrucciones de apertura para que la CPU ejecute primero el código malicioso. Para que parezca que el programa está bien, el código malicioso, una vez completado, devuelve el control (saltos) al comienzo de las instrucciones originales y el programa se ejecuta como se esperaba.
- Existen muchas variaciones del n. ° 1, ya que es sospechoso que un programa normal salte al final de las instrucciones y luego regrese al principio. Por lo tanto, en la práctica, el código malicioso podría insertarse en cualquier parte del archivo ejecutable y activarse más adelante . Por ejemplo, una subrutina que un actor malintencionado sabe que eventualmente se ejecutará podría ser el desencadenante, ejecutando el código malicioso antes de finalizar la tarea esperada.
- Es posible que el autor del código malintencionado no quiera tener el código malicioso incrustado en el ejecutable. En cambio, incrustan código que simplemente descarga un ejecutable malicioso y luego lo ejecuta . (Érase una vez, esto se llamaría un Caballo de Troya). Esto puede ser deseable para que el autor pueda modificar su código, o potencialmente eliminar diferentes cargas útiles dependiendo del sistema operativo que lo solicite.
Hay otras técnicas más avanzadas que ciertamente he omitido, pero todas se basan en estos principios.