Introducción a AMSI
Compartir
¡Muy buenas a todos! Hoy vamos a sumergirnos en el mundo del AMSI. Seguro que has oído hablar de él, pero ¿sabes realmente cómo funcionan? Bueno, ¡no te preocupes! Estamos aquí para explicarte todo lo que necesitas saber de una manera sencilla y amigable.
Imagina que estás escribiendo código y quieres que se ejecute en tu equipo. Los lenguajes interpretados, en lugar de compilar el código a código máquina antes de ejecutarlo, estos lenguajes utilizan un traductor especial llamado intérprete. Este intérprete se encarga de traducir y ejecutar las instrucciones, línea por línea, a medida que las encuentre.
Con los lenguajes interpretados, no solo puedes tener tus instrucciones en un archivo en tu disco duro, sino que también tienes la opción de pasar las instrucciones directamente al intérprete. Esto significa que el contenido no necesita tocar el disco duro en ningún momento.
Ahora, hablemos de algo importante: la diferencia entre el malware en el disco y en la memoria RAM. Para los antivirus, analizar el disco duro es relativamente sencillo. Muchos antivirus leen el disco a medida que el usuario navega por las carpetas, lo que les permite realizar un análisis eficiente. Si detectan una firma asociada a un malware, saltará una notificación y el archivo malicioso será puesto en cuarentena. Sin embargo, la detección de malware que ya está inyectado en la memoria RAM es mucho más compleja por dos razones:
- La memoria RAM es muy cambiante, lo que convierte en algo muy complejo de analizar.
- Una vez un proceso está ya en RAM, esas instrucciones están en ejecución, y en caso de ser un malware, podría haber realizado ya las acciones maliciosas, haberse migrado de proceso y borrado el rastro principal, etc.
Ahora que hemos aclarado eso, déjame presentarte a nuestro protagonista de hoy: el AMSI (Antimalware Scan Interface). El AMSI nace como respuesta a la difícil tarea de analizar la memoria RAM y la necesidad de examinar las ejecuciones antes de que ocurran. Microsoft la desarrolló en forma de API, de tal manera que las soluciones de seguridad puedan llamar a las funciones implementadas.
¿Qué significa esto en términos más sencillos? Básicamente, proporciona una forma de capturar comandos en tiempo de ejecución, como los de PowerShell, JScript, VB/VBA y .NET. Una vez capturados, los enviará al antivirus, para que este lo analice antes de ejecutarlos. Si el antivirus determina que el comando es malicioso, el AMSI notificará a la aplicación y evitará su ejecución.
A pesar de que no todos AV/EDR utilizan AMSI como medida de protección, cada vez son más lo que la incluyen, por lo que es fundamental entender cómo funciona. Una vez sabemos el por qué existe AMSI y cuál es su cometido, es hora de entender exactamente cómo es el flujo normal de su funcionamiento.
La diferencia entre un programa y un proceso es que el programa son instrucciones para un cometido específico, y un proceso son las mismas instrucciones que tiene el programa, pero añadiéndole zonas de memoria reservadas para variables y otras necesidades.
En Windows, se utilizan las DLL (Dynamic Link Libraries) para extender la funcionalidad de un programa. Cuando un programa se carga en RAM en forma de proceso, y carga una DLL, las funcionalidades se integran directamente dentro de la zona virtual del proceso. Por ejemplo, en cuando se ejecuta PowerShell, DLLs como ntdll, kernel32 y AMSI forman parte de la memoria del proceso.
Pongamos un ejemplo. Tenemos un proceso PowerShell, desde el cual se va a tratar de lanzar comandos, y en el equipo está instalado y activado Windows Defender. Vamos a explicar el flujo de comunicación en cuanto a AMSI se refiere.
Sabemos que AMSI es una librería dinámica que se carga en procesos como PowerShell, que está pensada para que actúe como intermediario entre el propio proceso y el AV/EDR.
En el momento que se introduce un comando, PowerShell, mediante el uso de funciones de la API AMSI, se comunicará con el proceso Windows Defender para enviar el contenido del comando. Windows defender lo analizará y enviará en forma de respuesta si lo que se está ejecutando es malicioso o no.
La comunicación entre el proceso que usa AMSI y Windows Defender se realiza mediante RPC. RPC es una forma que tiene Windows para comunicar varios procesos (pudiendo ser procesos que se encuentran en diferentes equipos). Básicamente, es una implementación estándar que permite comunicación por red entre procesos con la arquitectura cliente-servidor.
En resumen, AMSI como tal no es una medida de seguridad (porque no es quien analiza si hay malware o no), es un estándar mediante el cual los procesos como PowerShell envían datos al AV/EDR (mediante RPC), de tal forma que se pueda determinar si ejecutar un comando sería perjudicial para el equipo. En base a lo que devuelva la medida de seguridad en cuestión, PowerShell lo ejecutará o no.
Y por hoy ¡ya está bien!, continuaremos con AMSI en futuras entregas, dejando las RPC entre tus neuronas para que no sufran inundaciones.
Juan Gabriel Ruiz, Senior Security Analyst at Zerolynx y Justo Martín, Security Analyst at Zerolynx.